上回在群里问了一下,国内开始做苹果婊的应用厂商应该还是比较少的,既然天坑摆我面前,我就先踩为敬了。
最近移动团队在苹果婊平台开发了产品,但由于苹果婊 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 相关部分。
负责替换键值,标签 #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,最熟悉的” 陌生人”