在 Cordova 构建期间找不到团队 ID 的代码签名错误 ios

Code Sign Error not finding team ID during Cordova build ios

通读了之前所有关于代码签名错误的 post 之后,我已经走到了死胡同。在使用 ios 平台(版本 3.8.0)构建一个 cordova 项目(版本 4.3.0)并使用 Bamboo 服务器进行持续集成时。我无法让我的应用程序为发布的 iOS 应用程序签名。这是我的构建任务的顺序:

  1. 解锁钥匙串(我确保我的 iPhone 开发人员和分发证书有效且未过期。我还确保没有弹出的权限 windows Bamboo 服务器,例如请求解锁钥匙串的权限。)
  2. cordova platform remove ios(清理目录并重新开始)
  3. 为 ios
  4. 添加插件
  5. cordova平台添加ios
  6. cordova build ios --release --device(为最终上传到应用商店的设备构建发布版本)
  7. xc运行 嵌入 mobileprovision

然后在 运行上面的 #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 服务器是 运行ning Xcode 6.1.1 在 OS X 10.9.4 上构建版本 6A2008a。然后我单击了 xcode 的首选项 > 帐户 > 用户 > 签名身份和配置文件屏幕的刷新。

我正在使用 Xcode 6.2,在 OS X 10.9.4 mac book pro 上为我的本地 machine 构建版本 6C131e,我仍然得到同样的错误。然而,一件奇怪的事情是,在我本地的 machine 上,我有时 运行 cordova build ios --device 没有 --release 标志,我能够在我的 platforms/ios/build/device 文件夹已为调试签名,但这在远程 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 可以很好地处理这个 post 和脚本:Xcode fails with "Code Signing" Error

我试过在构建后添加延迟,但在我尝试这个之前我已经失败了构建步骤:Failed to generate release build of cordova ios app

我试图考虑删除 auto-complete/manage 方案功能,但不确定这是否只是另一个容易掉入的兔子洞:xcodebuild says does not contain scheme

我试过在这里查看源代码:https://github.com/apache/cordova-ios/blob/master/bin/templates/scripts/cordova/lib/build.js 但我没有看到任何明显的东西可以确认或测试...

两个问题:

  1. 为什么teamID有"null"?我如何查看它正在检查的位置?

  2. 我还缺少什么?我还能检查什么?具体在cordova build ios script?

  3. 的源码中

TL;DR

  1. 为什么 teamID 有一个 "null"?我怎样才能检查它在哪里 正在检查?

很可能 iPhone 分发的钥匙串设置不正确。检查并确保您拥有带有嵌套密钥的证书。

  1. 我还缺少什么?我还能检查什么?具体在 cordova 构建 ios 脚本的来源?

如果您使用命令行工具,请确保设置了正确的标志和选项。否则,尝试不同的包装器工具,如 Fastlane ruby gem.

长版

我们使用围绕 Apple 开发者控制台和代码签名的包装器工具解决了这个问题,并确保 p12 文件(证书+密钥)文件设置正确。

  1. 安装 KrauseFx 的 Fastlane gem: https://github.com/KrauseFx/fastlane
  2. 将 iPhone 分发 p12 文件从我们的 Bamboo 构建服务器的 Keychain Access 导出到本地计算机(以便更轻松地进行故障排除)。 p12 文件基本上包含一个带有嵌套密钥图标的证书,正如上面评论中提到的 Rich Tolley 所必需的。
  3. 双击 p12 文件将其安装到 "login" 钥匙串中。确保您可以看到嵌套的证书密钥结构。
  4. 打开 Xcode>首选项并确保将 iOS 分发添加为签名身份的一部分(显示 iOS 开发和 iOS 分发)
  5. 通过重新开始(没有平台或插件或使用 cordova platform rm ios 等)来清理您的 cordova/project 目录。然后添加插件,然后添加平台。
  6. 我们运行cordova build ios --device --release,这构建了我们"Abczy.app".
  7. 移动到正确的 cordova 平台目录,因为相对路径可能无法正常工作:~/.../platforms/ios/build/device(检查 .app 文件是否存在)
  8. 运行 此命令将 .app 转换为 .ipaxcrun -sdk iphoneos PackageApplication -v Abczyx.app -o /Users/myname/Desktop (我已将生成的 .ipa 移动到我的桌面上以使其更易于操作)。
  9. 转到包含您的 .ipa 的文件夹,并确保您在同一目录中包含来自 apple developer 的 mobileprovision 文件。
  10. 运行: sigh resign ./Abczyx.ipa -p "Abczyx-dist.mobileprovision"。复制并粘贴您将使用的 cert/key 的名称,然后它将使用分发 mobileprovision 对应用程序进行签名。如果您使用开发人员 mobileprovision,它会出现致命错误,但该应用程序仍会被签名。
  11. 或者,您可以输入:sigh resign ./Abczyx.ipa -i "iPhone Developer: Joey Jojobuttafucco (123FTR12PAC)" -p "Abczyx-dist.mobileprovision"