CodeSign error: code signing is required for product type ‘Application’ in SDK ‘iOS 6.0’ にハマる


自作アプリをアップデート修正している最中、いつものように実機書き出ししようとしたら、突然「CodeSign error: code signing is required for product type ‘Application’ in SDK ‘iOS 6.0’ 」というエラーが出て書き出しできなくなりました。

「焦らず先ずはググる」のポリシーでそのままググったところ、以下のサイトで参考になる情報がありました。
もとまか日記:開発向け(仮)
寺子屋サルでき

でも、自分の事態を正確に把握せず、ネットにある情報に頼りきって解決しようとして2日間ほどハマることになりました。
結論から言うと、Code Signingの設定の「考え方」が分かっていないだけでした。

単純に、TARGETS>Build Settings>Code SigningのReleaseで、アプリ申請時のRelease用のDistributionプロビジョニングプロファイルを指定するだけで解決しました。
アプリを申請した以降は、そうしないとダメなようです。
結局、直接の原因はアップデート申請前にad-hoc書き出しで最後の確認をしようとして、Code Signingを全部ad-hocのプロビジョニングプロファイルにしたことだと思います。

しかし、理解をしないで安易な解決を求めた私は、ネットの情報を見ながら「ふむふむ、プロビジョニングプロファイルの作り直しか、証明書の作り直しで何とかなるのか」と見当違いの方向へと動くことで2日間を無駄にしました。orz
もちろん、プロビジョニングプロファイルを作り直しても、今度は以下のように違うエラーが出てきました。

「CodeSign error: Provisioning Profile ‘XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX’ can’t be found」
ドツボスパイラルの始まりです。w
2日もの間、Code Signingのところを作り直したプロビジョニングプロファイルで組み合わせを変えたり、OrganizerでプロビジョニングプロファイルをRefreshしたりの繰り返しが続きました。
ただ、参考にしたサイトではArchiveした時にエラーと書かれているのに対し、私の場合はArchiveできるし、シミュレーターでも書き出しが出来るところに何かひっかかっているものがありました。

が、ひょんなことで解決の(というか勘違いだったことに気付く)糸口が見つかりました。
Admobを6.2.1へ変えた時のブログを書いていた時、そのテスト用に作ったプロジェクトは難なく実機書き出しができました。
「ちょっと待てよ。ってことは、Xcode全体が悪いんじゃなくて、自作アプリのプロジェクトだけが悪いんじゃ・・・」
Admob6.2.1のテスト用プロジェクトと自作アプリのプロジェクトのCode Signingの設定を見比べて、2つの違いが「リリースしたかしなかったか」しか無いことに気付きました。
で、Code SigningのReleaseをリリース用のプロビジョニングプロファイルに変えたら、あっさりと実機書き出しできたと言う訳です。
自作アプリはまだ「とけいであそぶ」1つしか持っていないので、これだけで解決しようとしていたのが、気付くのが遅れた原因の1つになりました。
あとはタイミングも悪かったのですが、アップデートをしようとしていた一環で、iTunes connectのContracts tax and bankingの規約変更にAgreeしていたのも「Xcodeに対して何かをした」の勘違いに繋がっていました。

でも、証明書の作り方がすぐに思い出せなかったので、面倒で後回しになっていたのはせめてもの救いでした。証明書まで作り直したりしてたら、きっともっとドツボにハマっていたことでしょう。w

まだまだ、慣れが少ないので、もっとリリースの回数を増やさないと(つまりアプリをたくさん作らないと)と反省した次第です。