Cordova构建iOS时,Code Sign错误找不到团队ID

3

在阅读了有关代码签名错误的所有先前帖子后,我已经陷入了困境。当使用Bamboo服务器进行持续集成时,构建cordova项目(版本4.3.0),ios平台(版本3.8.0)并试图签署iOS应用程序以发布时,我无法签署我的应用程序。这是我的构建任务顺序:

  1. 解锁钥匙串(我确保我的iPhone开发人员和分发证书有效且未过期。我还确保没有权限窗口弹出在Bamboo服务器上,例如要求解锁钥匙串的权限。)
  2. cordova platform remove ios(清除目录并重新开始)
  3. 添加ios插件
  4. cordova platform add ios
  5. cordova build ios --release --device(为设备构建发布版本,最终上传到应用商店)
  6. xcrun嵌入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服务器正在运行Xcode 6.1.1 Build版本6A2008a,操作系统为OS X 10.9.4。我单击了xcode的"首选项">"帐户">"用户">"签名标识和配置文件"屏幕中的刷新按钮。
我在我的本地机器上使用Xcode 6.2,Build版本为6C131e,操作系统为OS X 10.9.4的MacBook Pro,仍然遇到相同的错误。然而,其中一个奇怪的事情是,在我的本地机器上,有时会运行cordova build ios --device而没有--release标志,并且我能够在我的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。
我验证了配置文件的最新版本,并且没有其他人在我的repo上工作。
我验证了我的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,但我没有看到任何明显的东西可以确认或测试...
两个问题:
1.为什么团队ID是"null"?我如何检查它正在检查的位置?
2.还有什么我错过了?还有什么我可以检查?具体来说,在cordova build ios脚本的源代码中?

你确定已经在构建机上配对了私钥和证书吗?也就是说,如果你打开钥匙串访问并找到该证书,则会看到一个揭示三角形,单击后会显示密钥。 - Rich Tolley
我把证书和密钥放在不同的地方,让我试着合并一下。我也认为这可能是个问题,但之前我已经构建过应用程序而不需要这样做。 - jojo
你一定需要找到它们的配对方式——有一些方法不使用钥匙串(例如Grade)。如果你正在使用钥匙串,我发现最简单的方法是从原始创建配对的机器上的钥匙串访问中导出一个p12文件。 - Rich Tolley
密钥证书配对仍然无法正常工作,但是从竹子服务器上的Keychain Access导出p12文件到我们的本地机器,并使用它与xcrun和Fastlane gem(sigh gem)一起使用成功了! - jojo
1个回答

5

简短版本

  1. 为什么teamID是“null”?我如何检查它检查的位置?

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

  1. 我还缺少什么?我还能检查什么?特别是在cordova构建ios脚本的源代码中?

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

详细版本

我们使用苹果开发人员控制台和代码签名的包装工具来解决了问题,并确保正确设置了p12文件(证书+密钥)文件。

  1. 安装KrauseFx的Fastlane gem: https://github.com/KrauseFx/fastlane
  2. 从我们的Bamboo构建服务器中导出iPhone分发p12文件到本地计算机(以便更容易进行故障排除)。 p12文件基本上包括一个带有嵌套密钥图标的证书,正如Rich Tolley在评论中提到的那样,这是必需的。
  3. 双击p12文件将其安装在“登录”钥匙串中。 确保您可以看到嵌套的证书密钥结构。
  4. 打开Xcode>首选项,并确保iOS Distribution已添加为签名标识的一部分(显示了iOS Development和iOS Distribution)
  5. 通过重新开始(没有平台或插件或使用cordova platform rm ios等)清理您的cordova /项目目录。然后添加插件,再添加平台。
  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的文件夹,并确保在同一目录中包含了来自苹果开发者的mobileprovision文件。
  10. 运行: sigh resign ./Abczyx.ipa -p "Abczyx-dist.mobileprovision"。复制并粘贴您将使用的证书/密钥的名称,然后它将使用分发mobileprovision签署应用程序。 如果您使用开发人员mobileprovision,它将遇到致命错误,但仍将签名应用程序。
  11. 或者,您可以键入:sigh resign ./Abczyx.ipa -i "iPhone Developer: Joey Jojobuttafucco (123FTR12PAC)" -p "Abczyx-dist.mobileprovision"

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