XcodeのWarningはわけがわからないよ

少し前にあったこと。
ローカルメモより。

    • -

OS X 10.7, Xcode 4.3.3, iOS 5.1

酷い目にあった。2日間くらいはまった。
iPhoneアプリリリースに向けて、Distribution用にアーカイブ
実行したところ、Warning発生。

warning: Application failed codesign verification. The signature was invalid, contains disallowed entitlements, or it was not signed with an iPhone Distribution Certificate. (-19011)

ちなみに、警告が発生していても、そのままvalidationは通る。
しかしながら、警告メッセージを見る限り、コード署名に失敗している様子で、
どうせこのまま申請してもrejectされるのは火を見るより明かだった。

この問題に対して、証明書やProvisioning Profileを作り直してみたり、
キーチェーンアクセスの内容を見直したり、
プロジェクトの設定を何度も見直したり、いじくったりしてみたが、
すべて徒労に終わった。

しばらくGoogleで本警告メッセージを検索にかけて、色々探したところ
某スタックオーバーフローで根本的な原因と解決策を発見した。
「long path がどうちゃら、short nameにしたら直ったよ。」
みたいな書き込みを見つけたのだった。

確かに、私は今まで、深いパス階層で開発をしていた。
そこで、プロジェクトのビルドディレクトリをまるごとデスクトップにコピーして
再度ビルドしてみた。

すると、Warningは出なくなった。

しかし、Build for Archiveはうまくいくものの、
Archiveを実行すると、前と同じ警告が出てしまう。

.xcodeprojの存在するディレクトリ名を長い名前から短い名前に変更した。

すると、Warningは出なくなった。


今回のことから私が得るべき教訓は、

「プロジェクト名を長く設定するな」

ということと、

「ビルド用のディレクトリは浅い階層にしておけ」

ということであった。

逆に私がAppleに対して言いたいことは、

「適切な警告メッセージを出してくれ」

ということと、

「今時、Long Pathくらい対応しておけ」

ということだ。



この警告に対して、Long Path以外には、以下の点が正しく設定されていることを確認する。

  1. ArchiveがReleaseに設定されていること(Edit Scheme で確認)
  2. プロジェクト設定のCode SigningのReleaseのAny iOS SDKに申請用署名に設定されていること
  3. 申請用証明書の有効期限が切れていないこと
  4. 有効期限切れの古い証明書がキーチェーンに含まれていないこと