前记
上回在群里问了一下,国内开始做苹果婊的应用厂商应该还是比较少的,既然天坑摆我面前,我就先踩为敬了。
工作原理
最近移动团队在苹果婊平台开发了产品,但由于苹果婊app加入,需要签名的target从一个变成三个,而且三个target还各自需要不一样的签名,xcodebuild提供的-target已经不适用了。
普通iOS app构建,PROVISIONING_PROFILE和CODE_SIGN_IDENTITY都可以通过flag传参给编译器,替代从project.pbxproj中读取的-target或-scheme对应的Build configuration的值。但apple watch app工程的target从一个变成三个,通过flag只能处理一个target,另外两个target配置若有问题会导致构建失败。
此脚本的解决方案是,提前在project.pbxproj中准备好正确的Build configuration参数,即构建前通过脚本替换掉project.pbxproj中签名相关的键值,构建时即可直接使用project.pbxproj中正确的签名配置。
脚本分析
整个脚本分三部分。
初始化
主要负责初始化资源,包括初始化构建所需要的变量值,更新对应证书,清理环境等工作。例如标签为#init, #clean, #ENV 相关部分。
更新project.pbxproj
负责替换键值,标签#replace XCConfigurationList部分。
需要替换三个键值,分别为①PROVISIONING_PROFILE, ②CODE_SIGN_IDENTITY, ③CODE_SIGN_IDENTITY[sdk=iphoneos*],替换目标位对应的Build configuration配置的键值。
构建
使用默认配置构建就可以了。
如何使用
配置项都写死在脚本里,脚本通过接收一个参数决定使用什么配置项构建。
./AppleWatchBuildScript dev
不喜欢写死的也可以自己改成动态获取或者读外部数据,不过我认为没什么必要。
参考资料
watchkit-command-line-builds
kkbox-ios-jenkins
project.pbxproj,最熟悉的”陌生人”