从命令行无法构建XCode项目,但可以通过XCode构建。

28

我在XCode中创建了一个简单的基于导航的iPhone应用程序。该应用程序可以在XCode下构建和运行,但我无法通过命令行构建它。

从终端执行以下命令:

xcodebuild -project George.xcodeproj -alltargets -parallelizeTargets -configuration Debug build

但是我遇到了这个错误:
=== BUILD NATIVE TARGET George OF PROJECT George WITH CONFIGURATION Debug ===
Check dependencies
[BEROR]Code Sign error: The identity 'iPhone Developer' doesn't match any valid certificate/private key pair in the default keychain

** BUILD FAILED **


The following build commands failed:
    Check dependencies
(1 failure)

我尝试处理它的方式有问题吗?


如果您在为iOS设备构建时在Xcode中遇到相同的错误,请问? - Saran
如果你使用 Debug 配置构建,是否在 Xcode 中遇到了相同的错误? - Owen Hartnett
7个回答

28

除了解锁钥匙链之外,您还可以指定代码签名标识(或在目标中设置)。开发证书的形式为“iPhone Developer:Company Inc”,分发证书的形式为“iPhone Distribution:Company Inc”。

xcodebuild -project George.xcodeproj -alltargets -parallelizeTargets -configuration Debug build CODE_SIGN_IDENTITY='iPhone Developer: Company Inc' 

这对我有用,但我还删除了仍然在钥匙串中挂起的任何过期证书。 - Pellet

6

你可以从命令行构建一个针对模拟器的构建版本,避免签名问题。

这个方法解决了我的签名问题:

xcodebuild -sdk iphonesimulator

来源: xcodebuild Code Sign错误:找不到匹配的codesigning身份:

如果命令行构建仅用于在持续集成设置中对源代码进行合理性检查,那么这尤其有用。


4
很可能您的钥匙串被锁定了。在执行脚本之前尝试解锁它,您可以从命令行解锁它(在构建之前右键单击): security unlock -p 您的密钥链密码 ~/Library/Keychains/login.keychain 注意,我正在使用“登录”钥匙串,您的情况可能不同。
此外,如果这没有帮助,请尝试删除所有其他参数,只留下像这样的东西: xcodebuild -configuration Debug 并在此之前清理 xcodebuild -configuration Debug clean

为了保险起见,我还做了以下操作:钥匙串/<钥匙串名称,例如登录>/<我的证书>/获取信息/信任/在代码签名时,始终信任。 - AnneTheAgile

3

我正在使用深圳工具,它也显示了这个错误。

结果发现,当我插入iPad但它没有在配置文件中时就会出现这种情况。通过向深圳工具传递--verbose参数,它会显示:

Check dependencies
Code Sign error: No matching provisioning profiles found: None of the valid     provisioning profiles include the devices:
XXXX’s iPad
CodeSign error: code signing is required for product type 'Application' in SDK 'iOS 8.3'

拔掉设备后,一切正常...


1
我遇到了一个类似但不完全与原帖相同的归档错误:
** ARCHIVE FAILED **


The following build commands failed:
    Check dependencies
(1 failure)

这实际上是一个缺少应用程序服务的问题(在我的情况下,是HealthKit服务/权限),我已经在开发App ID中启用了它,但没有在生产App ID中启用。
您可以在苹果会员中心启用服务:https://developer.apple.com/account/ios/identifiers/bundle/bundleList.action

1

根据脚本的目的,仅关闭脚本中的代码签名可能已足够。您可以通过设置CODE_SIGN_IDENTITY=''来实现此操作。

xcodebuild -project George.xcodeproj -alltargets -parallelizeTargets -configuration Debug build CODE_SIGN_IDENTITY='' 

显然,如果您正在尝试从脚本进行最终构建,则这是不好的,但如果您只是尝试进行持续集成的测试构建(例如从Jenkins),以确保没有人破坏任何东西,那么这可能是可以接受的。


0

可以通过在 XCode 中将 "iOS Distribution" 改为 "iOS Development" 来解决此问题。虽然看起来不应该可行,但出于某种原因确实可以。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接