【问题标题】:After upgrading to xcode 9, cordova app won't build, error 70, requires provisioning profile升级到 xcode 9 后,cordova 应用程序无法构建,错误 70,需要配置文件
【发布时间】:2018-03-02 20:04:27
【问题描述】:

昨天我们从 xcode 8.3.2 升级到版本 9。现在我们的企业发行版 apache cordova ios 应用程序拒绝构建。

2017-09-21 07:37:16.787 xcodebuild[70400:217569] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path '/var/folders/wj/yj3cfvh954gbc_btlhcrcx7nk7t4dj/T/App Name_2017-09-21_07-37-16.786.xcdistributionlogs'.
2017-09-21 07:37:16.938 xcodebuild[70400:217569] [MT] IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7ff756bbdf70>: Error Domain=IDEDistributionSigningAssetStepErrorDomain Code=0 "Locating signing assets failed." UserInfo={NSLocalizedDescription=Locating signing assets failed., IDEDistributionSigningAssetStepUnderlyingErrors=(
    "Error Domain=IDEProvisioningErrorDomain Code=9 \"\"App Name.app\" requires a provisioning profile.\" UserInfo={NSLocalizedDescription=\"App Name.app\" requires a provisioning profile., NSLocalizedRecoverySuggestion=Add a profile to the \"provisioningProfiles\" dictionary in your Export Options property list.}"
)}
error: exportArchive: "App Name.app" requires a provisioning profile.

Error Domain=IDEProvisioningErrorDomain Code=9 ""App Name.app" requires a provisioning profile." UserInfo={NSLocalizedDescription="App Name.app" requires a provisioning profile., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}

** EXPORT FAILED **

Error: Error code 70 for command: xcodebuild with args: -exportArchive,-archivePath,App Name.xcarchive,-exportOptionsPlist,/Users/Shared/Workspace/github/AppName/platforms/ios/exportOptions.plist,-exportPath,/Users/Shared/Workspace/github/AppName/platforms/ios/build/device

(对于这个问题,我将应用名称替换为“应用名称”)

我已验证所有证书和配置文件均已在 xcode 中设置。并设置了 build.json。我不是真正的 Mac 用户,我不知道下一步该做什么。

-编辑,将 xcode 降级到 8.3.3 解决了这个问题。不是一个理想的解决方案,但我无能为力。

【问题讨论】:

  • 我总是手动签名。到目前为止,没有什么能让我遇到麻烦。
  • 这是怎么做的?
  • 没什么特别的。在添加平台之后,在构建之前,打开 xcode 并启用 'Automatically manage signing' 上的复选框。然后如果没有问题,继续构建 ios。
  • 我实际上可以在 xcode 中构建没有问题。我认为这是一个科尔多瓦错误。 Xcode 似乎不想给我一个 ipa,所以在他们修复它之前我无法绕过cordova。
  • -编辑,将 xcode 降级到 8.3.3 解决了这个问题。这不是一个理想的解决方案,但我无能为力。这部分应该作为答案发布,而不是作为问题的编辑。

标签: ios xcode cordova


【解决方案1】:

如果您像我一样明确指定您的配置文件。在你的 Cordova build.json 中像这样:

"ios": {
    "debug": {
        "codeSignIdentitiy": "iPhone Developer",
        "developmentTeam":"MYTEAMID",
        "packageType": "developer",
        "iCloudContainerEnvironment": "Development"
    },
    "release": {
        "codeSignIdentitiy": "iPhone Distribution",
        "developmentTeam":"MYTEAMID",
        "provisioningProfile": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
        "packageType": "ad-hoc",
        "iCloudContainerEnvironment": "Production"
    }
}

请注意 iCloudContainerEnvironment = 仅当您使用推送通知时才需要生产/开发

您需要在 Cordova 生成的 ExportOptions.plist 中明确设置手动签名并提供配置密钥。不幸的是,Cordova 目前并未生成所有必需的密钥。

这就是它需要的样子,至少对我来说是这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>compileBitcode</key>
  <false/>
  <key>method</key>
  <string>ad-hoc</string>
  <key>iCloudContainerEnvironment</key >
  <string>Production</string>
  <key>provisioningProfiles</key>
  <dict>
    <key>my.bundle.idenifier</key>
    <string>My Provisioning Profile Name</string>
  </dict>
  <key>signingCertificate</key>
  <string>iPhone Distribution</string>
  <key>signingStyle</key>
  <string>manual</string>
  <key>stripSwiftSymbols</key>
  <true/>
  <key>teamID</key>
  <string>YOURTEAMID</string>
  <key>thinning</key>
  <string>&lt;none&gt;</string>
</dict>
</plist>

Cordova 生成的文件@cordova/app/platforms/ios/exportOptions.plist 看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>compileBitcode</key>
    <false/>
    <key>method</key>
    <string>development</string>
    <key>teamID</key>
    <string>MYTEAMID</string>
  </dict>
</plist>

请注意,它缺少 Xcode 9 所需的重要位。

我通过手动归档构建生成了正确的文件,然后将其导出,这也创建了我现在用作参考的 exportOptions.plist。

深入挖掘后发现,运行“Cordova add platform iOS”后无法修复,因为它是在构建阶段动态生成的。我决定分叉 Cordova-ios 存储库并提交一个拉取请求。你可以直接使用我的 fork,也可以等到 pull request 被合并。

拉取请求 https://github.com/apache/cordova-ios/pull/338/commits

分叉 https://github.com/jrryhrtn/cordova-ios

拉取请求中的使用说明

请参见下面的示例,请注意配置文件可以是配置文件的名称或 UUID。维护时首选名称,因为 UUID 每次都会更改以重新生成配置文件。

{
"ios": {
    "debug": {
        "codeSignIdentity": "iPhone Developer",
        "developmentTeam":"YOURTEAMID",
        "provisioningProfile": "provisioning profile name or UUID",
        "packageType": "development"
    },
    "release": {
        "codeSignIdentity": "iPhone Distribution",
        "developmentTeam":"YOURTEAMID",
        "provisioningProfile": "provisioning profile name or UUID",
        "packageType": "ad-hoc"
    }
}
}

我计划手动修补,直到 /a 修复合并到下一个 Cordova 版本中。您必须在补丁后通过“Cordova platform rm iOS”然后“Cordova platform add ~/forks/cordova-ios”重新生成您的 iOS 平台。 ~/forks/cordova-ios 我的本地路径,使用本地机器上下载分叉的 Cordova-ios 存储库的路径。

更新

cordova-ios 4.5.2 正式发布!通过运行以下命令进行升级:“cordova platform rm ios”,然后“cordova platform add ios@4.5.2”

干杯!

【讨论】:

  • 哇,真是个答案。非常感谢。
  • @BayssMekanique "Cordova 平台添加 ios@4.5(不确定是否已发布)或者您可以从文件中添加平台,例如:Cordova 平台添加 ~/forks/cordova-ios 如果您在本地下载
  • 您从 developer.apple.com/account 下载您的配置文件。如果您已经下载并安装了配置文件,它们位于 @~/Library/MobileDevice/Provisioning\ Profiles/。它们被命名为 .mobileprovision。如果您打开文件并搜索 UUID,您将找到它和配置文件名称。此外,名称是从 Apple 下载的文件名。
  • @JerryHorton:我刚刚更新到 cordova-ios 4.5.2 没有成功。我仍然收到“MyApp 需要具有推送通知功能的配置文件”。知道如何解决这个问题吗?
  • 嗯,对我不起作用。 cordova-ios 4.5.3 并且在以这种方式设置时它在 iOS 部分即将死去。 ..3 中是否仍需要此更改?
【解决方案2】:

虽然帮助即将到来,但您不想直接使用 Xcode(我不会评判您 ?)...这里有一个临时解决方案,对我来说效果很好:

移除 ios

cordova platform rm ios

this issue already fixed 的 dev brunch 添加 ios。 (稍后您将能够使用 ios v4.6.0 或任何最终的#)

cordova platform add https://github.com/apache/cordova-ios.git

希望对你也有帮助! ?

【讨论】:

    【解决方案3】:

    对于谁会出现以下错误

    error: exportArchive: exportOptionsPlist error for key 'iCloudContainerEnvironment': expected one of {Development, Production}, but no value was provided
    

    所有你需要这样做来创建一个构建

    ionic cordova build ios --prod --release -- --iCloudContainerEnvironment=Production
    

    更多信息:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-15
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 2020-07-01
      • 1970-01-01
      相关资源
      最近更新 更多