Xcode 4.1 ビルド 4B110f を使用して、iOS アプリをアップロードできるようにしようとしています。Product|Archive ステップをエラーなしで通過し、何かに署名する許可を 2 回求めます。しかし、オーガナイザーからアーカイブの検証を試みると、失敗します:
### Codesigning '/Users/uqrchern/Library/MobileDevice/Provisioning Profiles/70D2381D-3733-4F5D-88B2-4729572C2864.mobileprovision' with 'iPhone Distribution: Ron Chernich'
+ /usr/bin/codesign --force --preserve-metadata --sign iPhone Distribution: Ron Chernich --resource-rules=/var/folders/ul/ula1AHKnGpqQ9ftDnUL-l++++TM/-Tmp-/rybczU3EBd/Payload/ABRA-D.app/ResourceRules.plist --entitlements /var/folders/ul/ula1AHKnGpqQ9ftDnUL-l++++TM/-Tmp-/rybczU3EBd/entitlements_plistrZ1Vwko6 /var/folders/ul/ula1AHKnGpqQ9ftDnUL-l++++TM/-Tmp-/rybczU3EBd/Payload/ABRA-D.app
Program /usr/bin/codesign returned 1 : [/var/folders/ul/ula1AHKnGpqQ9ftDnUL-l++++TM/-Tmp-/rybczU3EBd/Payload/ABRA-D.app: replacing existing signature
/var/folders/ul/ula1AHKnGpqQ9ftDnUL-l++++TM/-Tmp-/rybczU3EBd/Payload/ABRA-D.app: object file format invalid or unsuitable
]
error: codesign failed with error 1
私はすべての同様の問題と解決策を見てきました (そのうちのいくつかはまったく意味をなさないか、ツールの非常に古いバージョンに適用されます)。どれもわずかな違いをもたらしていません。
また、アーカイブを生成するコード署名ステップと同様に、検証が「運用」証明書を使用していることを 3 回確認しました。上記の出力を schell スクリプトに変換したので、すべての証明書を手動で試すことができました。毎回同じ結果になりました。
署名されている .app ファイルは本当に不適切なのでしょうか?
ちなみに、コードサインにはバージョン フラグはありませんが、マニュアル ページの日付は 2006 年 6 月 1 日です。バイナリ ファイルの日付は 2010 年 11 月 20 日です。
更新(翌日):
問題をさらに調査すると、コードサインには次の環境変数セットが必要であるというあいまいな参照が見つかりました。
CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
失敗した Validate の実行からの出力を使用して、失敗した codesign --force ステップと viola! の直前にこの var をエクスポートするシェル スクリプトを作成しました。コードサインは機能します。
しかし、これはコードをアップロードする準備にはあまり役立ちません。オーガナイザーの検証ボタンで実行されるスクリプトにこれを含める方法はありますか??
少し後で、解決策です!:
理論の下では、オーガナイザーの検証中に実行されるすべてのコマンドを生成するスクリプトがどこかにあります...実行、grepとfindで掘り下げました。スクリプトは実際に存在し、その名前は次のとおりです。
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication
これは単なる Perl であり、修正は必要な環境変数を連想配列 %ENV の最初、たとえば 72 行目に追加することです。
$ENV{CODESIGN_ALLOCATE} = '/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate';
これで問題は完全に解決します。 証明書の削除、クリーンなビルド、Xcodeのシャットダウンと再起動などを組み合わせて修正したと考えているWeb上の他のすべてのポスターがどこから来たのかわかりません。この修正は迷信よりも科学に有利であり、Xcode 4.1 Build 4B110f とそれに関連する PackageApplication スクリプトの下で機能し、Snow Leopard 10.6.8 と Perl 5.10.0 で動作することを静かに主張します。