簡體   English   中英

升級到 xcode 9 后,cordova 應用程序無法構建,錯誤 70,需要配置文件

[英]After upgrading to xcode 9, cordova app won't build, error 70, requires provisioning profile

昨天我們從 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 修復了問題。 不是一個理想的解決方案,但我無能為力。

如果您像我一樣明確指定您的配置文件。 在你的 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 僅當您使用推送通知時才需要

您需要在 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。 Name 是維護的首選,因為 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”

干杯!

雖然幫助即將到來,但您不想直接使用 Xcode(而且我不會評判您 😉)...這里有一個臨時解決方案,對我來說效果很好:

刪除ios

cordova platform rm ios

從 dev brunch 添加 ios, 該問題已經解決 (稍后您將能夠使用 ios v4.6.0 或任何最終的 # 將是)

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

我希望它也能幫助你! 🙂

對於誰土地以下錯誤

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

更多信息:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM