如何在不同的计算机上构建和签署iOS应用程序?

时间:2017-06-05 15:16:10

标签: ios xcode code-signing xcodebuild

我们有一个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(我们将它们交换出来以创建不同的版本)。

我们现在要确保我们的证书尽可能安全。这意味着我们希望在一台机器上执行构建,而在另一台机器上执行签名。为此,我们需要这样做:

  1. 创建无符号的xcarchive
  2. 将xcarchive传输到签名计算机
  3. 将xcarchive变为签名的IPA
  4. 现在可以忽略第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版本进行签名,然后使用分发版本对其进行重新签名。这解决了权利被填充等所有问题,但仍然要求每个二进制文件被重新签名和权利组合等等。所以我很好奇是否有更好的解决方案。

3 个答案:

答案 0 :(得分:3)

请按照步骤创建无符号的xcarchive

  1. 设置'代码签名身份'='不代码签名'
  2. •选择目标('') - >构建设置并找到“签名”部分。

    设置'代码签名身份'='不代码签名'

    enter image description here

    1. 设置捆绑标识符=''
    2. 设置版本= 1.0 //您需要发送

      设置Build = 5 //您需要发送

      删除“自动管理歌唱”标志。

      enter image description here

      1. 打开终端并转到项目根文件夹。然后运行以下命令。
      2. xcodebuild -workspace <ProjectName>.xcworkspace -scheme <ProjectName> -configuration Release clean archive -archivePath buildArchive/<ProjectName>.xcarchive CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO

        1. 成功完成后,它将创建一个新的“buildArchive”文件夹,并在其中创建一个“.xcarchive”文件。
        2. 您可以压缩'.xcarchive'文件并将xcarchive传输到签名机。

答案 1 :(得分:2)

我们与公司的其他团队一起工作了几个星期。我们所有人都得出了相同的结论,没有比使用开发证书签名更好的选择,然后用prod证书重新签署每个二进制文件。这不是一个直接的过程,但这就是我们留下的。

答案 2 :(得分:0)

这可能对你有用我认为

  1. 在构建计算机上创建未签名的IPA。

  2. 在构建计算机中安装一个脚本,将IPA传输到您的 签字机。

  3. 使用签名机上的FloatSign脚本重新签名 IPA。