web-dev-qa-db-ja.com

Xcode 9にアップグレードした後、cordovaアプリがビルドされない、エラー70、プロビジョニングプロファイルが必要

昨日、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にダウングレードすると問題が修正されました。理想的なソリューションではありませんが、私にできることはあまりありません。

32
Trevor

私のようにプロビジョニングプロファイルを明示的に指定した場合。 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リポジトリをフォークし、プルリクエストを送信することにしました。フォークを直接使用するか、プルリクエストがマージされるまで待つことができます。

プルリクエスト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"
    }
}
}

次のCordovaリリースに修正がマージされるまで、手動でパッチを適用する予定です。 「Cordova platform rm iOS」、「Cordova platform add〜/ forks/cordova-ios」でパッチを適用した後、iOSプラットフォームを再生成する必要があります。 〜/ forks/cordova-ios my local path、分岐したCordova-iosリポジトリをダウンロードしたローカルマシン上のパスを使用します。

更新

cordova-ios 4.5.2が正式にリリースされました!次のコマンドを実行してアップグレードします。「cordova platform rm ios」、「cordova platform add [email protected]

乾杯!

64
Jerry Horton

助けが来て、Xcodeを直接使いたくない(そして私はあなたを判断しませんか????)...ここに私のためにうまくいった一時的な解決策があります:

iOSを削除

cordova platform rm ios

この問題はすでに修正済み のdevブランチからiosを追加します。 (後でios v4.6.0または最終的な#を使用できるようになります)

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

それがあなたにも役立つことを願っています! ????

3
Pavel Kovalev