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

标签 ios iphone xcode cordova provisioning-profile

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

  1. 解锁钥匙串(keychain)(我已确保我的 iPhone 开发人员和分发证书有效且未过期。我还确保没有在 Bamboo 服务器上弹出的权限窗口,例如请求解锁钥匙串(keychain)的权限.)
  2. cordova platform remove ios(清理目录并重新开始)
  3. 添加 ios 插件
  4. cordova 平台添加 ios
  5. cordova build ios --release --device(为最终上传到应用商店的设备构建发布版本)
  6. 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但是我没有看到任何明显的东西可以确认或测试...

两个问题:

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

  2. 我还缺少什么?我还能检查什么?具体在cordova build ios脚本的源码里?

最佳答案

长话短说

  1. 为什么 teamID 为“null”?我怎样才能检查它在哪里 检查?

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

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

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

长版

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

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

相关文章:

ios - 具有默认操作的可滑动表格 View 单元格

iOS CPU_FATAL 0% 在后台

ios - 无法在 ios8 的文档目录中复制可写 plist 文件

iphone - iPhone 上的 OpenAL 音调生成

iphone - iOS-包含其他应用的应用

iphone - 访问错误 - iPhone Xcode 4

ios - 如何在使用 deleteRowsAtIndexPaths 删除行时删除节标题

ios - 无法同时满足约束 - Swift

IOS 模拟器意外退出 Xcode 10.1

iphone - 更改 UIScrollView 上的页面