升级到 xcode 9 后,cordova 应用程序无法构建,错误 70,需要配置文件 [英] After upgrading to xcode 9, cordova app won't build, error 70, requires provisioning profile

查看:25
本文介绍了升级到 xcode 9 后,cordova 应用程序无法构建,错误 70,需要配置文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Yesterday we upgraded from xcode 8.3.2 to version 9. And now our enterprise distribution apache cordova ios app refuses to build.

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

(对于这个问题,我用应用名称"替换了应用名称)

(I replaced the apps name with "App Name" for this question)

我已验证所有证书和配置文件均在 xcode 中设置.并设置了 build.json.我不是一个真正的 Mac 人,我对接下来要做什么感到困惑.

I have verified that all the certs and provisioning profiles are set in xcode. And the build.json is set. I'm not really a Mac guy and I'm stumped on what to do next.

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

-Edit, Downgrading xcode to 8.3.3 fixed the problem. Not an ideal solution but not much I can do.

推荐答案

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

If you specify your provisioning profile explicitly, like me. Like this in your 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 = Production/Development 仅当您使用推送通知时才需要

Please Note iCloudContainerEnvironment = Production/Development is only required if you use push notifications

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

You need to explicitly set manual signing and provide the provisioning keys in your ExportOptions.plist that is generated by Cordova. Unfortunately Cordova is not currently generating all of the required keys.

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

Here is what it needs to look like, at least for me:

<?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 看起来像:

The file Cordova generates @ cordova/app/platforms/ios/exportOptions.plist looks like:

<?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 所需的重要部分.

notice it is missing the important bits that Xcode 9 requires.

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

I generated the correct file by archiving the build manually, then exporting it which also creates the exportOptions.plist that I now use as reference.

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

After digging deeper, I found that this cannot be fixed after running "Cordova add platform iOS", because it is generated during the build phase dynamically. I decided to fork the Cordova-ios repo and submit a pull request. You may use my fork directly, or wait until the pull request is merged.

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

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

拉取请求中的使用说明

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

See example below, please note that the provisioning profile can be the name or UUID of the profile. Name is preferred for maintenence, as UUID changes each time to regenerate the profile.

{
"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 存储库的本地计算机上的路径.

I plan to manually patch until the/a fix is merged into the next Cordova release. You will have to regenerate your iOS platform after the patch via "Cordova platform rm iOS" and then "Cordova platform add ~/forks/cordova-ios". ~/forks/cordova-ios my local path, use the path on your local machine where you downloaded the forked Cordova-ios repo.

更新

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

cordova-ios 4.5.2 has been officially released! Upgrade by running the following commands: "cordova platform rm ios", and then "cordova platform add ios@4.5.2"

干杯!

这篇关于升级到 xcode 9 后,cordova 应用程序无法构建,错误 70,需要配置文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆