昨晩投稿した「忍者手裏剣」アップデート ~ iPhoneOS 3.0 互換性問題に書きましたが、「The binary you uploaded was invalid. The signature was invalid, or it was not signed with an Apple submission certificate.」というエラーが出て、結構長い時間ハマりました。
色々と調べた所、このメッセージが出る原因は以下のようでした。
1)ZIPアーカイブ内の不備
2)アップロードしたバイナリのCode Signが不正
1)については、icon.pngが無いとか、画像サイズが間違っているとか、ZIPファイルが壊れてる場合など、このエラーが出た人がいたようです。
2)については、Distribution用のビルド時に、Code Signがうまく行ってない場合に起きるようですが、そもそもうまく行っていない場合は、ビルド時にエラーが出ますし、XCodeの「ビルド結果」のWindowで実行ログを見れば、正しく実行できているかを確認できます。
Code SignはDeveloper Portalにある手順通りにやっていればまず間違い無く、今回もエラーは出ておらず、アプリのパッケージに関しても、今までと構成を変えていなかったため、1)が原因とも考えられず、小1時間くらいハマってしまいました。
最終的には、つい先日期限が切れて、再発行&再インストールした。Distribution用のCertificatesファイルが関係していたのですが、そろそろ期限が切れて同じような状況でハマる方も入るかもしれないので、状況と対処法をまとめておきますので、ご参考まで。
状況としては、以下の感じでした、
・配信中のアプリのアップデートで、アプリのパッケージ自体は問題なし
・「ビルド結果」を見る限り、CodeSignは出来ている。
・codesign -vvvv [アプリ名].appコマンドでSigningで来ているかを確認しても、以下のように表示されて問題無いように見える。
[アプリ名].app: valid on disk
[アプリ名].app: satisfies its Designated Requirement
・XCodeのプロジェクト設定の「コード署名ID」の「Any iPhone OS Device」の欄を見ても、再発行したCertificatesファイルを指定している。
以上のような状況で、何が悪いのかなかなか分からなかったのですが、完全に見落としていて、Certificatesファイルを再発行した場合は、Provisioning Profileも対応したものを再発行して、再インストールする必要があるだけでした。
現在のProfileの状況の確認は、Developer PortalのProvisioningのページで、「Distribution」タブを選択し、表示されたProfileの名前の横の「(Details)」リンクをクリックすることで出来ます。(対応しているApp IDとCertificatesファイルが表示される。)
Certificatesファイルが先に有効期限が切れて、Provisioning Profileの有効期限が残っていた為、このページのCertificatesの欄が空になっていました。
その為、Code Sign時にCertificatesファイルとProvisioning Profileの対応がおかしかったようで、バイナリアップロード時にエラーとなっていました。
ビルド時にエラーが出てくれれば随分と分かりやすいのですが・・・。
対処としては、以下の手順を行えばOKです。
1)現在あるDistribution用のProvisioning Profileを一旦削除し、新しいCertificatesファイルと対応するように、再度作り直してダウンロード。
2)iTunesアイコンにドラッグ&ドロップするなどしてインストール。
3)XCodeのプロジェクト設定の「コード署名ID」の「Any iPhone OS Device」欄で、新しいCertificatesファイルを選び直す。(表示される選択肢でProvisioning Profileとの対応が正しいかも要確認)
4)ビルドしてiTunes Connectへアップロード
Distribution用のCertificatesファイルと、Provisioning Profileの有効期限が異なっている開発者の皆様はご注意ください。
まとめ
Distribution用のCertificatesファイルを再発行した場合は、対応するProvisioning Profileの再発行も忘れずに!
※iPhoneアプリ開発に関する投稿を今から始めるiPhoneアプリ開発にまとめました。
とても助かりました。
貴重な経験を公開されている貴兄に敬服いたします。