今日Xcode 6.1にアップグレードしたばかりで、次のことを推測します。TestFlightデスクトップアプリを使用してビルドを送信するのに問題があります。アプリがIPAの構築を開始しているときに表示されるエラーは次のとおりです。
エラー:/ usr/bin/codesign --force --preserve-metadata = identifier、entitlements、resource-rules --sign 854059d45eed724593debef577a562e1ba96ab55 --resource-rules =/tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist/tmp /QYFSJIvu7W/Payload/XX.appはエラー1で失敗しました。出力:警告:オプション "resource-rules"での--preserve-metadataの使用(Mac OS X> = 10.10で非推奨)!警告:--resource-rulesはMac OS X> = 10.10で廃止されました! /tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist:リソースを読み取れません
「サポート記事」には何が起こっているのか分かりません。
Xcrunまたは同様のツールを使用するJenkinsのようなCI環境でも同じことが起こるため、TestFlightの問題ではないようです。
このアプリは数か月間更新されていなかったので、すぐにこれを修正する更新を期待するべきではないことを知っています。以前は私とクライアントにとって非常にうまく機能していたので、他の何かのためにそれを放棄することもあまり望んでいません。
このエラーが何であるかについてのアイデア、およびそれを修正する方法は大歓迎です。
私が知っていたらなぜそれが機能するが、 ここに修正がある それは私のために働いた:
修正が見つかりました!
プロジェクトをクリックします>ターゲット>ターゲットを選択>ビルド設定>
Code Signing Resource Rules Path
そして追加:
$(SDKROOT)/ResourceRules.plist
PackageApplicationsの次のパッチで修正されました。10.10で非推奨になったと言うため、resource-rulesを削除しました。
Testflightビルドはそれなしで動作します。 Appstoreもビルドします。
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
% diff PackageApplication PackageApplicationFixed
155,157c155,156
< my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules",
< "--sign", $opt{sign},
< "--resource-rules=$destApp/ResourceRules.plist");
---
> my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements",
> "--sign", $opt{sign});
Xcode 7のリリース以降、Tim Gostonyによる answer は機能しなくなりました。リソースルールが存在する場合、App Storeの送信プロセスは失敗します。解決策は、コード署名リソースルールパスをクリアし、xcrunをxcodebuildツールに置き換えることです。
xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file]
アドホック配布ipaファイルをエクスポートするための最も単純なOptions.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>iCloudContainerEnvironment</key>
<string>Production</string>
<key>teamID</key>
<string>[YOUR TEAM ID]</string>
<key>method</key>
<string>ad-hoc</string>
</dict>
</plist>
このplistファイルには、ビットコード、アプリの間引きなどに関する他のオプションがあります。そのため、xcodebuildツールはiOS 9以降のipaファイルをエクスポートするための適切なツールだと思います。
オプションplistの詳細は、xcodebuild -helpコマンドで利用できます。
TestFlightサポートにメールを送信し、次の応答を受け取りました。
私たちのチームは現在、TestFlight Desktopアプリでこの問題を調査しています。それまでの間、Xcodeを使用してIPAファイルを作成し、デスクトップアプリまたはTestFlight Webサイトを使用してアップロードしてください。
推奨される回避策は機能しました。
Yosemite w/XCode 6.4では、SDKROOTパッチを使用してもコード署名が失敗します。次の記事では、これを回避するためにXCodeスクリプトにパッチを適用する方法について説明します。これはXCodeにパッチを当てているため、バージョン固有ですが、問題は修正されています。
http://www.jayway.com/2015/05/21/fixing-your-ios-build-scripts
Alistraの answer は機能しますが、自分のものではないスクリプトは変更したくありません(将来のXcodeリリースでこのファイルが変更され、修正が失われる可能性があります)。
diff PackageApplication PackageApplicationFixed 155,157c155,156 <- my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules", <- "--sign", $opt{sign}, <- "--resource-rules=$destApp/ResourceRules.plist"); --- -> my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements", -> "--sign", $opt{sign});
answer Vladimir Grigorovのアーカイブは、次のものを使用するアーカイブがある場合に最適です。
xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file]
私の場合、ビルド後にアプリケーションを変更し、バンドルIDと署名証明書を変更する必要があるため、アーカイブはありません。
私が見つけた解決策は、codesign
を使用する前に自分でPackageApplication
を呼び出し、PackageApplication
に署名しないように依頼することです。このような :
replace :
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "<app_path>" -o "<ipa_path>" --sign "<provisioning_profile.certificateSubject>" --embed "<provisioning_profile.path>"
by :
/bin/cp -rpfv "<provisioning_profile.path>" "<app_path>/embedded.mobileprovision"
/usr/bin/codesign -v -vvvv -f -s "<provisioning_profile.certificateSubject>" --entitlements="<entitlement_path>" "<app_path>"
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "<app_path>" -o "<ipa_path>"
cp
で署名するために.mobileprovision
ファイルを埋め込むことを忘れないでください。
another answer で指定されているように、署名する配布証明書を指定しないだけで、正しくパッケージ化することもできます。 TestFlightは、これを行うためにアプリを更新する必要があります。