Jenkins+Xcode

1.前言

对于app的开发来说,app要换个环境或者做了某个新功能,都要给测试人员打一个包。人少还好说,一旦人多设备也多了,打包所花的时间也随之增加了。所以需要持续集成(Mac OS)来解决这种问题,本次的自动打包是基于Jenkins的Xcode插件实现的。

2.安装

官网下载,按照步骤安装即可。

3.初始化

3.1初始化密码

安装完成后,浏览器会自动打开http://localhost:8080,如果没有,可以手动打开。还是打不开就需要安装JDK环境。

打开后会发现需要初始密码,根据提示的路径/Users/Shared/Jenkins/Home/secrets/initialAdminPassword找到initialAdminPassword文件打开复制密码。

注意:secrets文件是有权限的,需要自己修改文件的读写权限,才能进去。


3.2设置账号密码

安装完推荐的插件后,需要设置Jenkins的登录账号跟密码。信息一定要填全并且正确。

3.4安装插件

我们可以到系统管理->管理插件->可选插件找到自己需要的插件进行安装,比如我用到的Xcode integration插件,选择下面的直接安装。

3.5创建项目

准备步骤弄好了,就可以创建一个项目了。

4.项目配置

4.1Genneral

  • 项目名称
    • 设置项目名称
  • 描述
    • 对应的描述提示
  • 丢弃旧的构建
    • 对所有构建的处理,里面有保持构建的天数以及保持构建的最大个数

4.2源码管理

我使用的是SVN(Git是第二个选项),所以需要配置SVN后,Jenkins才能拿到服务器的代码。SVN用到的插件是Subversion Plug-in。

  • Repository URL
    • 服务器对应项目的地址
  • Credentials
    • 服务器对应项目的账号密码,如果没有则需要点击右边的Add进行添加。

4.3构建触发器

  • Build periodically
    • 每天定时构建的的时间设置
  • Poll SCM
    • 每天轮询代码时间间隔

4.4构建环境

4.4.1安装插件

iOS的打包都需要证书和描述文件的,然后Jenkins里的Keychains and Provisioning Profiles Management插件就能配置证书跟描述文件。

4.4.2配置插件

安装后我们到系统管理的下面找到它,并查看需要配置的选项,一般操作是点击选择文件Upload就可以了。

Keychains

先说这里需要使用的文件在/Users/用户名/Library/keychains中的login.keychainlogin.keychain-db其中一个,因为在旧的系统当中只有.keychain文件,而在新的系统变成.keychain-db文件。然后.keychain直接复制一份到桌面然后选择上传即可,而.keychain-db需要先去除后面的-db,就可以用了。

  • Password
    • 电脑的开机密码
  • Identities
    • 这个是签名的id,手动添加,可到系统钥匙串查看。

Provisioning Profiles

上传对应的描述文件即可,比如开发的描述文件、发布的描述文件等。然后我们需要到到系统的描述文件目录(~/Library/MobileDevice/Provisioning Profiles)把文件拷出来放到桌面。

  • Provisioning Profiles Directory Path
    • 这个是Jenkins保存描述文件安装后对应描述文件的目录(并不是描述文件本身)
  • Filename
    • 自动识别
  • UUID
    • 自动识别

最后

刚才已经叫提示大家把.keychain与.mobileprovision文件拷到桌面了,这时需要把这两种文件放到Jenkins对应的目录下。这样做的原因是因为Jenkins有时并不能复制到自己的目录下,这是为了确保Jenkins拿到的都是最新的证书与描述文件。

  • keychain
    • /Users/Shared/Jenkins/Library/Keychains
  • mobileprovision
    • /Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles
  • 如果后面的文件夹没有可以自己创建
4.4.3XcodeBuilder配置

我们需要到系统管理->系统设置->找到Xcode Builder,同样需要设定keychain的配置信息,这就成了全局的keychain使用。

4.4.4使用插件

回到项目配置中的构建环境板块中勾选Keychains and Code Signing IdentitiesMobile Provisioning Profiles,选用的是我们刚才创建的证书与描述文件。


4.5构建

在构建中添加找到Xcode,接下配置对应信息即可。

General build settings(打包的基本设置)


  • Target
    • target的名字
  • Clean before build?
    • 每次build之前先执行clean的操作
  • Pack application, build and sign .ipa?
    • 每次build后是否需要打包ipa文件
  • Export method
    • 导出的形式是以开发、发布、企业等形式,下面有具体描述
  • .ipa filename pattern
    • ipa的命名
  • Output directory
    • ipa的导出文件

Code signing & OS X keychain options(签名的基本信息配置)

  • Development Team
    • 可以使用空的,然后指定一个Team ID。
    • 可以使用全局的,可到系统设置里面配置。
  • Unlock Keychain?
    • 可以使用空的,然后指定Jenkins的Keychain path和开机密码。
    • 可以使用全局的,可到系统设置里面配置。(4.4.3里有说明)

Advanced Xcode build options(Xcode打包的高级配置)

  • Clean test reports?
    • 清除之前的test日志。
  • Xcode Schema File
    • 需要构建的环境(一般是target名称)
  • Xcode Workspace File
    • Cooapods项目结构的.xcworkspace文件名
  • Xcode Project Directory
    • 非Cooapods项目结构的.xcodeproj目录
  • Xcode Project File
    • 非Cooapods项目结构的.xcodeproj文件名
  • Build output directory
    • build后的所有文件存放目录

4.6构建后操作

这里可以做很多功能,比如发邮件通知、将文件放到FTP、代码分析等,暂不展开来说。

5.尝试构建

最后保存好整个项目的配置,回到项目的界面,我们来试一下构建,并查看每次构建的日志,确定最终执行的结果。

6.执行结果

每次构建成功都是显示蓝色的,并且查看日志内容会找到以下内容,希望你也能看到以下内容。

1
2
3
4
5
** ARCHIVE SUCCEEDED **
····························
** EXPORT SUCCEEDED **
····························
Finished: SUCCESS

7.遇到问题

  • 问题-1
    • 系统目录在只有login.keychain-db文件
  • 解决
    • 将后缀的db去掉后上传。
  • 问题-2
    • The user name or passphrase you entered is not correct.
  • 解决
    • 找到所有设置keychain的地方,再确定每个密码都是对的。
  • 问题-3
    • file /Users/yidongshiyebu/Library/Keychains-db does not exist
  • 解决
    • Jenkins目录下没找到login.keychain-db文件,将系统的复制进去即可。
  • 问题-4
    • No global development team or local team ID was configured
  • 解决
    • 设置对的teamID
  • 问题-5
    • ‘aaa.xcworkspace’ does not exist.
  • 解决
    • 设置错了工程文件
  • 问题-6
    • the workspace named “aaa” does not contain a scheme named “aaa”. The “-list” option can be used to find the names of the schemes in the workspace.
  • 解决
    • 在Xcode中的Manage Schemes打开,把需要构建的项目把右边的Share点上
  • 问题-7
    • No profiles for ‘com.aaa.aaa’ were found: Xcode couldn’t find a provisioning profile matching ‘com.aaa.aaa’.Code signing is required for product type ‘Application’ in SDK ‘iOS 10.3’
  • 解决
    • 在项目工程中设置不自动配置证书跟描述文件
  • 问题-8
    • No iOS profile matching ‘aaa/aaaa’ found: Xcode couldn’t find a profile matching ‘aaa/aaaa’. Install the profile (by dragging and dropping it onto Xcode’s dock item) or select a different one in the General tab of the target editor.
  • 解决
    • 使用了错误的TeamID,更换即可。
  • 问题-9
    • unknown error -1=ffffffffffffffff
  • 解决
    • 重新配置一次所有的keychain,以及keyChain的密码,确保是最新和正确的。

8.预告

下次就聊聊如何用命令行的方式来执行整个打包过程。