使用xcodebuild构建iOS应用程序而不使用代码设计

使用xcodebuild构建iOS应用程序而不使用代码设计,ios,xcode,build,codesign,Ios,Xcode,Build,Codesign,我们正在为另一家公司开发应用程序。他们持有签名密钥,不愿与我们共享 应该可以将生成和签名分开,但如何在xcodebuild的命令行上指定它?不幸的是,如果没有代码签名,在发布模式下生成应用程序可能很困难。您将从生成系统中获得如下错误: CodeSign错误:SDK中的产品类型“应用程序”需要代码签名 “iOS 5.1” 在这种情况下,您应该将目标配置为在发布模式下使用开发人员/团队通配符(*)签名标识。当你构建应用程序时,该应用程序将与之签署,你可以将其发送给你的客户,以便他们可以放弃该应用程

我们正在为另一家公司开发应用程序。他们持有签名密钥,不愿与我们共享


应该可以将生成和签名分开,但如何在xcodebuild的命令行上指定它?

不幸的是,如果没有代码签名,在发布模式下生成应用程序可能很困难。您将从生成系统中获得如下错误:

CodeSign错误:SDK中的产品类型“应用程序”需要代码签名
“iOS 5.1”
在这种情况下,您应该将目标配置为在发布模式下使用开发人员/团队通配符(*)签名标识。当你构建应用程序时,该应用程序将与之签署,你可以将其发送给你的客户,以便他们可以放弃该应用程序。这就是我们大多数外包开发人员所做的


然后,您可以通过删除应用程序中的各种文件(如
\u codesign
)并使用
codesign
工具从应用程序二进制文件中删除信息来删除代码签名信息。但我不确定这有多容易。但这并不是真正必要的。设置配置文件或签名信息中没有任何敏感信息。

要跳过代码签名,您可以从控制台执行如下手动生成:

xcodebuild clean build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
此外,使用
-configuration
-target
-sdk
参数来定义生成设置


请参阅,以获取有关如何禁用Xcode内部代码签名的详细说明。

在项目导航器中,选择项目并打开项目的“构建设置”部分(而不是任何特定目标)


在“代码签名”下,找到“代码签名标识”,对于调试和发布模式,将“任意iOS SDK”设置为“不进行代码签名”。

为了完全防止使用Xcode 7进行代码签名,我使用了以下所有选项:

CODE_SIGN_IDENTITY=""
CODE_SIGNING_REQUIRED="NO"
CODE_SIGN_ENTITLEMENTS=""
CODE_SIGNING_ALLOWED="NO"

最后一个选项,
code\u SIGNING\u ALLOWED=“NO”
似乎起到了作用。

这就是你想要的吗?更改设置后,以下是检查应用程序包是否已签名的方法:
codesign-dv/Applications/AppName.app
谢谢。虽然还没有测试过,但还是有意义的。这是可行的,但问题是不可能生成
codesign--authorigents…所需的授权和ResourceRules文件--资源规则…
命令。如果您打算使用iCloud,这一点尤为重要。自己生成这些文件并不是件小事。另请参见。您可能还希望
code\u-SIGN\u-rights=“
不起作用,接收/usr/bin/code-SIGN--force--SIGN。。。可能是由于配置类型在添加代码\u SIGNING\u ALLOWED=“NO”之前,Xcode 9.3对我不起作用。请参见下面Ben Flynn的答案。那么这就是构建.ipa的过程,以便发送给使用Citrix/Zenprise向其员工部署应用程序的客户?你能评论我在这里的帖子吗?:我也想这么做。感谢分享。注意:即使我使用所需的权限文件运行codesign,我也无法在没有权限的情况下为构建的存档添加权限(应用程序组)。请注意,我不会对构建的存档进行此攻击。我只想在模拟器的调试中运行/测试我的应用程序时不要遇到代码签名。存档操作通常需要代码签名。您可能根本不应该禁用它。将您的行放置到位后,我现在得到:我的动态框架缺少所需的代码签名,因此我不确定现在是否可以在不使用代码签名的情况下运行应用。@BenFlynn。哦,snap,为具有多个扩展、应用程序组和密钥链权限的应用程序找到了这一点。创建未签名的存档,然后针对每个预期的IPA(QA、Prod、外部客户机),运行“代码签名”--授权“某些文件”-f-s“Dist Cert”myApp.xcarchive/Products/Applications/myApp.app。然后根据需要导出IPA。我将要求我的客户执行此步骤,因为他们有Dist证书,但应用程序组和密钥链仍然使用此方法,因为在ipa创建时签名的未签名存档文件不会授予应用程序组,即使它位于embedded.mobileprov中