在阅读了之前所有关于代码签名错误的帖子后,我已经走到了死胡同。在使用 ios 平台(版本 3.8.0)构建 cordova 项目(版本 4.3.0)并使用 Bamboo 服务器进行持续集成时。我无法让我的应用程序为发布的 iOS 应用程序签名。这是我的构建任务的顺序:
- 解锁钥匙串(keychain)(我已确保我的 iPhone 开发人员和分发证书有效且未过期。我还确保没有在 Bamboo 服务器上弹出的权限窗口,例如请求解锁钥匙串(keychain)的权限.)
- cordova platform remove ios(清理目录并重新开始)
- 添加 ios 插件
- cordova 平台添加 ios
- cordova build ios --release --device(为最终上传到应用商店的设备构建发布版本)
- xcrun 嵌入移动设备
然后我在运行上面的 #5 任务时遇到此错误:
=== BUILD TARGET Abczyx OF PROJECT Abczyx WITH CONFIGURATION Release ===
Check dependencies
Code Sign error: No code signing identities found: No valid signing identities (i.e. certificate and private key pair) matching the team ID “(null)” were found.
CodeSign error: code signing is required for product type 'Application' in SDK 'iOS 8.1'
The following build commands failed:
Check dependencies
(1 failure)
Error code 65 for command: xcodebuild with args: -xcconfig,/usr/local/Bamboo/Abczyx/platforms/ios/cordova/build-debug.xcconfig,-project,Abczyx.xcodeproj,ARCHS=armv7 armv7s arm64,-target,Abczyx,-configuration,Release,-sdk,iphoneos,build,VALID_ARCHS=armv7 armv7s arm64,CONFIGURATION_BUILD_DIR=/usr/local/Bamboo/Abczyx/platforms/ios/build/device,SHARED_PRECOMPS_DIR=/usr/local/Bamboo/Abczyx/platforms/ios/build/sharedpch
ERROR building one of the platforms: Error: /usr/local/Bamboo/Abczyx/platforms/ios/cordova/build: Command failed with exit code 2
这是我的build-release.xcconfig
:
#include "build.xcconfig"
CODE_SIGN_IDENTITY = iPhone Distribution
CODE_SIGN_IDENTITY[sdk=iphoneos*] = iPhone Distribution
#include "build-extras.xcconfig"
这是我的build.xcconfig
:
// Type of signing identity used for codesigning, resolves to first match of given type.
// "iPhone Developer": Development builds (default, local only; iOS Development certificate) or "iPhone Distribution": Distribution builds (Adhoc/In-House/AppStore; iOS Distribution certificate)
CODE_SIGN_IDENTITY = iPhone Developer
CODE_SIGN_IDENTITY[sdk=iphoneos*] = iPhone Developer
// (CB-7872) Solution for XCode 6.1 signing errors related to resource envelope format deprecation
CODE_SIGN_RESOURCE_RULES_PATH = $(SDKROOT)/ResourceRules.plist
Bamboo 服务器在 OS X 10.9.4 上运行 Xcode 6.1.1 构建版本 6A2008a。我点击了 xcode 的首选项 > 帐户 > 用户 > 签名身份和配置文件屏幕的刷新。
我在 OS X 10.9.4 mac book pro 上为我的本地机器使用 Xcode 6.2,构建版本 6C131e,我仍然遇到同样的错误。然而,一件奇怪的事情是,在我的本地机器上,我有时会在没有 --release
标志的情况下运行 cordova build ios --device
并且我能够构建我的 platforms/ios/build/device 文件夹中的一个 .ipa 已签名用于调试,但这在远程 Bamboo 服务器上不起作用(尽管它在很多天前工作过一次)。
我在这里研究了 Cordova iOS v.3.8.0 的发行说明,发现除了 CB-7872 CODE_SIGN_RESOURCE_RULES_PATH = $(SDKROOT)/ResourceRules.plist
之外没有任何帮助,它已经被固定:https://github.com/apache/cordova-ios/blob/master/RELEASENOTES.md
我已验证 Bamboo 服务器包含它正在检查的 sdk iphoneos8.1。
我已确认配置文件条款是最新的,并且没有其他人处理过我的代码库。
我已验证我的 CODE_SIGN_IDENTITY 适合这篇文章和脚本:Xcode fails with "Code Signing" Error
我已经尝试在构建后添加延迟,但我在尝试这个之前已经失败了构建步骤:Failed to generate release build of cordova ios app
我尝试过考虑删除自动完成/管理方案功能,但不确定这是否只是另一个容易掉入的兔子洞:xcodebuild says does not contain scheme
我试过在这里查看源代码:https://github.com/apache/cordova-ios/blob/master/bin/templates/scripts/cordova/lib/build.js但是我没有看到任何明显的东西可以确认或测试...
两个问题:
为什么 teamID 为“null”?我如何检查它正在检查的位置?
我还缺少什么?我还能检查什么?具体在cordova build ios脚本的源码里?
最佳答案
长话短说
- 为什么 teamID 为“null”?我怎样才能检查它在哪里 检查?
很可能是不正确的 iPhone 分发钥匙串(keychain)设置。检查并确保您拥有带有嵌套 key 的证书。
- 我还缺少什么?我还能检查什么?具体在 cordova 构建 ios 脚本的来源?
如果您使用命令行工具,请确保设置了正确的标志和选项。否则,请尝试不同的包装器工具,例如 FaSTLane ruby gem。
长版
我们使用围绕 Apple 开发者控制台和代码签名的包装器工具解决了这个问题,并确保 p12 文件(证书+ key )文件设置正确。
- 安装 KrauseFx 的 FaSTLane gem:https://github.com/KrauseFx/fastlane
- 将 iPhone 分发 p12 文件从 Keychain Access 从我们的 Bamboo 构建服务器导出到本地计算机(以便更轻松地进行故障排除)。 p12 文件基本上包括一个带有嵌套 key 图标的证书,正如 Rich Tolley 在上面的评论中提到的那样,这是必需的。
- 双击 p12 文件将其安装到“登录”钥匙串(keychain)中。确保您可以看到嵌套的证书 key 结构。
- 打开 Xcode>Preferences 并确保将 iOS Distribution 添加为签名身份的一部分(同时显示 iOS Development 和 iOS Distribution)
- 通过重新开始(无平台或插件或使用
cordova platform rm ios
等)清理您的 cordova/project 目录。然后添加插件,然后添加平台。 - 我们运行了
cordova build ios --device --release
,它构建了我们的“Abczy.app”。 - 移动到正确的 cordova 平台目录,因为相对路径可能无法正常工作:~/.../platforms/ios/build/device(检查
.app
文件是否存在)< - 运行此命令将
.app
转换为.ipa
:xcrun -sdk iphoneos PackageApplication -v Abczyx.app -o/Users/myname/Desktop
(我已将生成的.ipa
移到我的桌面上以使其更易于操作)。 - 转到包含您的
.ipa
的文件夹,并确保您在同一目录中包含 apple developer 的 mobileprovision 文件。 - 运行:
叹息辞职 ./Abczyx.ipa -p "Abczyx-dist.mobileprovision"
。复制并粘贴您将使用的证书/ key 的名称,然后它将使用分发 mobileprovision 对应用程序进行签名。如果您使用开发人员 mobileprovision,它会出现 fatal error ,但无论如何都会对应用进行签名。 - 或者,您可以输入:
sigh resign ./Abczyx.ipa -i "iPhone Developer: Joey Jojobuttafucco (123FTR12PAC)"-p "Abczyx-dist.mobileprovision"
关于ios - 在 Cordova 构建 ios 期间找不到团队 ID 的代码签名错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29809410/