我们有一个iOS应用程序,它是使用Jenkins运行的一系列Bash脚本构建的。就像今天的情况一样,我们使用这个命令构建一个xcarchive:
xcodebuild archive -workspace "..." -scheme "..." -configuration "Release" -archivePath "..."
这将构建应用程序并使用配置文件中指定的证书对其进行签名,该配置文件是使用xcconfig设置的。完成后,我们将使用以下内容将其转换为IPA:
xcodebuild -archivePath "..." -exportArchive -exportOptionsPlist "${export_options_plist}" -exportPath "..."
然后可以将此IPA上传到Hockey或App Store,具体取决于我们使用的xcconfig(我们将它们交换出来以创建不同的版本)。
我们现在要确保我们的证书尽可能安全。这意味着我们希望在一台机器上执行构建,而在另一台机器上执行签名。为此,我们需要这样做:
现在可以忽略第2步,所以我们只关注步骤#1和#3。
创建unsigned xcarchive可以通过将参数CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
添加到archive
命令来完成。
签署IPA要困难得多。我们假设我们可以再次创建IPA并使用codesign
命令在IPA中签署二进制文件。这有几个问题。首先,我们为应用程序提供的.entitlements
文件并未得到尊重。我们必须将此作为标志传递给签名命令。然后我们意识到我们必须纠正.entitlements
文件中的所有变量,因为Xcode不再用正确的值替换它们。然后我们意识到我们必须为每个扩展做到这一点。
我们最终得到了这一切,使用正确的权利,替换变量,所有内容都已签名,但当我尝试将新签名的IPA上传到Hockey时,它拒绝了它。错误消息也没有帮助。
我们使用以前的系统与新系统区分构建,并且每个二进制文件都不同。我们不确定这是一个代码签名问题,还是只是一个时间戳更改,但有更改。此外,我们发现我的扩展程序都缺少archived-expanded-entitlements.xcent
个文件,还有更多问题。
看起来我们肯定是错误的。我们显然不应该重新做一切只是为了在不同的机器上签名,那么我们哪里出错了?我们如何在一台机器上构建并在另一台机器上签名?
P.S。我们当前的工具直接使用xcodebuild
,但我们对构建过程的其他部分支持fastlane
,因此我们很乐意在需要时使用它。
更新:我们有一个"解决方案"要使用开发证书对Release版本进行签名,然后使用分发版本对其进行重新签名。这解决了权利被填充等所有问题,但仍然要求每个二进制文件被重新签名和权利组合等等。所以我很好奇是否有更好的解决方案。
答案 0 :(得分:3)
请按照步骤创建无符号的xcarchive
•选择目标('') - >构建设置并找到“签名”部分。
•设置'代码签名身份'='不代码签名'
设置版本= 1.0 //您需要发送
设置Build = 5 //您需要发送
删除“自动管理歌唱”标志。
xcodebuild -workspace <ProjectName>.xcworkspace -scheme <ProjectName> -configuration Release clean archive -archivePath buildArchive/<ProjectName>.xcarchive CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
您可以压缩'.xcarchive'文件并将xcarchive传输到签名机。
答案 1 :(得分:2)
我们与公司的其他团队一起工作了几个星期。我们所有人都得出了相同的结论,没有比使用开发证书签名更好的选择,然后用prod证书重新签署每个二进制文件。这不是一个直接的过程,但这就是我们留下的。
答案 2 :(得分:0)
这可能对你有用我认为
在构建计算机上创建未签名的IPA。
在构建计算机中安装一个脚本,将IPA传输到您的 签字机。
使用签名机上的FloatSign脚本重新签名 IPA。