使用没有代码设计的 xcodebuild 构建 iOS 应用程序
Posted
技术标签:
【中文标题】使用没有代码设计的 xcodebuild 构建 iOS 应用程序【英文标题】:Building iOS applications using xcodebuild without codesign 【发布时间】:2012-06-17 13:08:06 【问题描述】:我们正在为另一家公司开发应用程序。他们持有签名密钥,不愿与我们分享。
应该可以将构建和签名分开,但是如何在xcodebuild的命令行中指定呢?
【问题讨论】:
这是您要找的吗? cydia.saurik.com/codesign.html 更改设置后,检查应用程序包是否已签名的方法如下:codesign -dv /Applications/AppName.app
【参考方案1】:
为了跳过代码签名,您可以从控制台执行手动构建,如下所示:
xcodebuild clean build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
此外,使用-configuration
、-target
和-sdk
参数来定义您的构建设置。
请参阅this Stack Overflow answer 以获得有关如何在 Xcode 中禁用代码签名的详细说明。
【讨论】:
谢谢。还没有测试它,但它是有道理的。 这可行,但问题是无法生成codesign --entitlements ... --resource-rules ...
命令所需的权利和资源规则文件。如果您打算使用 iCloud,这一点尤其重要。自己生成这些文件并非易事。另请参阅***.com/questions/9280130/…。
你可能还想要CODE_SIGN_ENTITLEMENTS=""
不起作用,接收 /usr/bin/codesign --force --sign ... 可能是由于配置类型
在添加 CODE_SIGNING_ALLOWED="NO" 之前,我无法使用 Xcode 9.3。请参阅下面 Ben Flynn 的回答。【参考方案2】:
为了完全防止使用 Xcode 7 进行代码签名,我使用了以下所有选项:
CODE_SIGN_IDENTITY=""
CODE_SIGNING_REQUIRED="NO"
CODE_SIGN_ENTITLEMENTS=""
CODE_SIGNING_ALLOWED="NO"
最后一个选项,CODE_SIGNING_ALLOWED="NO"
似乎可以解决问题。
【讨论】:
只是想做同样的事情。感谢分享。 注意:即使我使用所需的权利文件运行 codesign,我也无法添加权利(应用程序组)来为没有它们构建的存档工作。 请注意,我不会为存档构建执行此 hack。当我在模拟器的调试中运行/测试我的应用程序时,我只想不遇到代码设计。存档操作通常需要协同设计,您可能根本不应该禁用它。 有了你的线路我现在得到:required code signature missing for
我的动态框架,所以我不确定现在是否可以在没有代码设计的情况下运行应用程序。
@BenFlynn。哦,快,为具有多个扩展程序、应用程序组和钥匙串权利的应用程序解决了这个问题。创建未签名的存档,然后为每个预期的 IPA(QA、Prod、外部客户端)运行'code sign --entitlements "some file" -f -s "Dist Cert" myApp.xcarchive/Products/Applications/MyApp.app。然后根据需要导出 IPA。我将要求我的客户执行此步骤,因为他们拥有 Dist Cert,但应用程序组和钥匙串仍然使用这种方法,因为在创建 ipa 时签名的未签名存档没有授予应用程序组,即使它是嵌入的.mobileprov【参考方案3】:
不幸的是,如果没有代码签名,很难在发布模式下构建您的应用。你会从构建系统中得到错误,例如:
CodeSign error: code signing is required for product type 'Application' in SDK
'ios 5.1'
在这种情况下,您应该将目标配置为在发布模式下使用您的开发人员/团队通配符 (*) 签名身份。该应用程序将在您构建它时使用它进行签名,您可以将其发送给您的客户,以便他们可以辞职。这是我们大多数外包开发人员所做的。
然后,您可以通过删除应用程序中的各种文件(例如 _CodeSignature
)并使用 codesign
工具从应用程序二进制文件中删除信息来删除代码签名信息。但我不确定这有多容易。不过,这并不是必需的。配置文件或签名信息中没有任何敏感信息。
【讨论】:
那么这将是构建 .ipa 以发送给使用 Citrix/Zenprise 将应用程序部署给员工的客户的过程吗?你能在这里评论我的帖子吗?:***.com/questions/16089918/…【参考方案4】:在项目导航器中,选择您的项目并打开项目的“构建设置”部分(而不是任何特定目标)。
在“代码签名”下,找到“代码签名身份”,对于调试和发布模式,将“任何 iOS SDK”设置为“不进行代码签名”。
【讨论】:
以上是关于使用没有代码设计的 xcodebuild 构建 iOS 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
使用无人值守的 xcodebuild 管理钥匙串以协同设计 macOS / iOS 应用程序