xcodebuild archive -workspace "..." -scheme "..." -configuration "Release" -archivePath "..."
这将构建应用程序并使用配置文件中指定的证书对其进行签名,该配置文件是使用xcconfig设置的.完成后,我们将使用以下内容将其转换为IPA:
xcodebuild -archivePath "..." -exportArchive -exportOptionsPlist "${export_options_plist}" -exportPath "..."
然后可以将此IPA上传到Hockey或App Store,具体取决于我们使用的xcconfig(我们将它们交换出来以创建不同的版本).
我们现在希望确保我们的证书尽可能安全.这意味着我们希望在一台机器上执行构建,而在另一台机器上执行签名.为此,我们需要这样做:
>创建一个未签名的xcarchive
>将xcarchive传输到签名计算机
>将xcarchive转换为签名的IPA
现在可以忽略第2步,所以我们只关注步骤#1和#3.
创建无符号的xcarchive可以通过将参数CODE_SIGN_IDENTITY =“”CODE_SIGNING_required = NO添加到archive命令来完成.
签署IPA要困难得多.我们假设我们可以再次创建IPA并使用codesign命令在IPA中签署二进制文件.这有几个问题.首先是我们为应用程序提供的.entitlements文件没有得到尊重.我们必须将此作为标志传递给签名命令.然后我们意识到我们必须纠正.entitlements文件中的所有变量,因为Xcode不再用正确的值替换它们.然后我们意识到我们必须为每个扩展做到这一点.
我们最终得到了这一切,正确的权利,替换变量和所有签名,但当我尝试将新签名的IPA上传到曲棍球时,它拒绝了它.错误消息也没有帮助.
我们使用新系统对先前系统进行了构建,并且每个二进制文件都不同.我们不确定这是一个代码签名问题,还是只是一个时间戳更改,但是有变化.此外,我们发现我的扩展程序都缺少archived-expanded-entitmentments.xcent文件,还有更多问题.
看起来我们肯定是错误的.我们显然不应该只是为了在不同的机器上签名而重新做所有事情,那么我们哪里出错了?我们如何在一台机器上构建并在另一台机器上签名?
附:我们当前的工具直接使用xcodebuild,但我们支持fastlane用于构建过程的其他部分,因此我们很乐意在需要时使用它.
更新:我们有一个“解决方案”,即使用开发证书对Release版本进行签名,然后使用分发版本对其进行重新签名.这解决了权利被填充等所有问题,但仍然要求每个二进制文件被重新签名和权利组合等等所以我很好奇是否有更好的解决方案.