gpt4 book ai didi

ios - 如何在不同的机器上构建和签署 iOS 应用程序?

转载 作者:可可西里 更新时间:2023-11-01 04:37:20 24 4
gpt4 key购买 nike

我们有一个 iOS 应用程序,它是使用 Jenkins 运行的一系列 Bash 脚本构建的。按照今天的情况,我们使用以下命令构建 xcarchive:

xcodebuild archive -workspace "..." -scheme "..." -configuration "Release" -archivePath "..."

这会构建应用程序并使用在使用 xcconfig 设置的配置文件中指定的证书对其进行签名。完成后,我们将使用以下方法将其转换为 IPA:

xcodebuild -archivePath "..." -exportArchive -exportOptionsPlist "${export_options_plist}" -exportPath "..."

此 IPA 然后可以上传到 Hockey 或应用程序商店,具体取决于我们使用的 xcconfig(我们交换它们以创建不同的构建)。

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

  1. 创建一个未签名的 xcarchive
  2. 将 xcarchive 传输到签名机
  3. 将 xcarchive 转换为签名的 IPA

虽然现在可以忽略第 2 步,所以我们只关注第 1 步和第 3 步。

创建未签名的 xcarchive 可以通过将参数 CODE_SIGN_IDENTITY=""CODE_SIGNING_REQUIRED=NO 添加到 archive 命令来完成。

不过,签署 IPA 要棘手得多。我们假设我们可以再次创建 IPA 并使用 codesign 命令对 IPA 中的二进制文件进行签名。但这有几个问题。首先是我们为应用程序准备的 .entitlements 文件没有得到遵守。我们必须将其作为标志传递给签名命令。然后我们意识到我们必须更正 .entitlements 文件中的所有变量,因为 Xcode 不再用正确的值替换它们。然后我们意识到我们必须为我们拥有的每个扩展执行此操作。

我们终于让这一切正常工作,使用正确的权利,替换变量并且一切都已签名,但是当我尝试将新签名的 IPA 上传到 Hockey 时,它拒绝了它。错误消息也没有帮助。

我们将旧系统的构建与新​​系统进行了差异化,每个二进制文件都不同。我们不确定这是一个代码设计问题,还是仅仅是时间戳的变化,但确实有变化。此外,我们发现我的扩展都缺少 archived-expanded-entitlements.xcent 文件,而且可能还有更多问题。

看来我们的处理方式肯定是错误的。我们显然不应该为了在不同的机器上签名而重新做所有事情,那么我们哪里出错了?我们应该如何在一台机器上构建并在另一台机器上签名?

附言我们当前的工具直接使用 xcodebuild,但我们在构建过程的其他部分支持 faSTLane,因此我们很乐意在需要时使用它。

更新:我们对此有一个“解决方案”,即使用开发证书对发布版本进行签名,然后使用分发证书对它们进行签名。这解决了权利被填充等所有问题,但仍然需要每个二进制文件被辞职和权利合并等,所以我很好奇是否有更好的解决方案。

最佳答案

请按照以下步骤创建未签名的 xcarchive

  1. 设置“代码签名身份”=“不要代码签名”

• 选择目标 (‘’) -> build设置并找到“签名”部分。

设置“代码签名身份”=“不进行代码签名”

enter image description here

  1. 设置 Bundle Identifier = ‘’

Set Version = 1.0//你需要发送的

Set Build = 5//你需要发送

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

enter image description here

  1. 打开终端并转到项目根文件夹。然后运行以下命令。

xcodebuild -workspace <ProjectName>.xcworkspace -scheme <ProjectName> -configuration Release clean archive -archivePath buildArchive/<ProjectName>.xcarchive CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO

  1. 成功完成后,它将创建一个新的“buildArchive”文件夹,并在其中创建一个“.xcarchive”文件。

您可以压缩“.xcarchive”文件并将 xcarchive 传输到签名机。

关于ios - 如何在不同的机器上构建和签署 iOS 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44372139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com