iOS持续集成 - 2877206/docs GitHub Wiki

1.搭建环境

1.1 虚拟机

1.2 XCode

1.3 Jenkins

1.4 Git

2.安装证书

2.1 导出开发者账号

2.2 导入

3.编译项目

3.1 从Git更新源码

3.2 编译,使用模拟器运行应用

4.jenkins的配置

4.1 添加插件

4.2 添加Credentials

4.3 创建Job

4.4 配置Job

4.5 运行Job

4.6 查看结果

5.问题

5.1 git访问权限

5.2 sign失败

5.3 找不到lib

5.4 找不到scheme

  • 查看scheme:

xcodebuild -list

如果使用pods,使用这个命令:

xcodebuild -workspace ettNextGen.xcworkspace -list

输出:
`Information about workspace "ettNextGen":

 Schemes:   
    AFNetworking   
    Pods-ettNextGen`
  • 配置jenkins:

配置scheme

6. 生成ipa

6.1 Apple Deveploper账号添加测试设备号

6.2 创建Ad-Hoc Provisioning profiles

  • 选择 Provisioning profiles
  • 点击 添加
  • 选择 Ad Hoc
  • 选择 App ID
  • 选择 certificates
  • 选择 测试设备
  • 命名并生成,点击 Gernerate
  • 点击 下载
  • 下载到本地,双击安装到XCode。 生成Provisioning Profiles

6.3 使用XCode生成IPA安装包

  • 创建Ad-hoc Configuration:复制Release。如图,选择Project;Info;Configurations。点击加号,复制Release,命名Ad-hoc。Based On Configuration选择_none_。 添加Ad-hoc Configration

  • 使用ad-hoc provisioning profile。 项目,Target,Build Settings,Code Signing,Provisioning Profile,选择新建的ad-hoc profile。

  • Code Signing

项目,Build Settings,Code Signing,Code Signing Identity,adhoc选择Distribution。

项目,Target,Build Settings,Code Signing,Code Signing Identity,adhoc选择Distribution。

  • 添加 Ad-hoc Scheme:如图,选择 Manage Scheme,点击加号添加Scheme,命名Ad-hoc;选择Ad-hoc Scheme,设备选择iOS,注意不要使用模拟器; 添加Scheme

  • 选择Edit Scheme,Archive Build Configuration使用Ad-hoc。

  • 点击Product, Archive,点击Export,选择Ad Hoc Deployment。

  • 问题:ld: library not found for -lAFNetworking

解决:

You have to go to the Project, "Info" tab, "Configurations" section, select the new configuration you just created, and set "Pods.release" of all targets to "None" first. After that, you can run pod install safely.

6.4 Jenkins生成IPA安装包

  • 项目名称 jenkins配置1

  • 配置SCM jenkins配置2

  • 定时Build jenkins配置3

  • XCode配置1 jenkins配置4

  • XCode配置2 jenkins配置5

  • ipa文件名(1.595):appname_${BUILD_ID}_${BUILD_NUMBER}

输出:appname_20150911155025_45

  • ipa文件名(1.629,需安装插件Zentimestamp plugin):appname_${BUILD_ID}_${BUILD_NUMBER}

并如图设置:Manage Jenkins,Global properties: jenkins配置5

输出:appname_20150911155025_45

7. 上传Nexus

  • jenkins配置执行shell,将ipa上传到Nexus,并更新Nexus 索引。 直接上传:

tar -C ipa所在绝对路径 -zcvf ipa所在绝对路径/***.tar.gz ipa

curl -v -u jenkins用户名:jenkins密码 --upload-file _path_***.tar.gz http://nexus domain/.../appname.tar.gz jenkins配置6

修改文件名增加日期、构建ID、git commit id:

env

_jen_time=$(date +%m%d%H%M)

_git_commit=${GIT_COMMIT:0:7}

tar -C /Users/user/Documents/Developer/jenkins-dist/appname/ipa -zcvf /Users/user/Documents/Developer/jenkins-dist/appname/ipa/appname.tar.gz *.ipa *.zip

curl -v -u jenkinsusername:jenkinspassword --upload-file /Users/appname/Documents/Developer/jenkins-dist/appname/ipa/appname.tar.gz http://ip/nexus/.../appname/version/appname-$_jen_time-$BUILD_NUMBER-$_git_commit.tar.gz

8. 下载并安装ipa

8.1 Nexus

  • 登录Nexus下载压缩包,解压。
  • 使用iTunes安装

打开iTunes,连接测试设备。

双击ipa,选择安装,同步。

8.2 TestFlight

  • 内部测试

    iTunes_用户与角色_管理:中点击加号添加用户,输入姓名、Apple ID,设置为Technical角色,发送iTunes Connect用户邀请。激活账号后,可_设为内部测试人员_。

    回到_我的应用_,添加新应用或创建新版本;进入新添加的版本,设置内部测试人员;使用XCode或Application Loader上传IPA;iTunes Connect打开新版本_TestFlight Beta Testing_。

    测试机从App Store安装TestFlight;接收到测试邀请邮件后,测试机打开邮件点击测试按钮Open in TestFlight;从TestFlight安装应用并测试。

    上传新的测试版本时,注意升级Build号。否则App Store报错:redundant binary upload

  • 外部测试

  • 使用条件

iOS8以上版本。

不提供上传API,暂时无法集成到CI中。只能使用XCode或Application Loader上传。

不再支持Enterprise (in-house) distribution builds。

对外部测试用户,需发送测试邀请,测试版有30天有效期。

8.3 自建应用