2012年02月21日

iOS Developer Program、証明書ファイルに泣く

 iPhoneアプリを作成するにはXcodeが不可欠だが、Xcodeはいつもキーチェーンアクセスにお伺いを立てている。そのためキーチェーンに拒否されるとXcodeはアプリを作成できない。これは実機インストールもそうだし、配布配信用のアプリも同じだ。キーチェーンでは証明書の認証を行っているのだ。

  iOS Developer Programに申請してまず最初にすることに、証明書ファイルを要求するということがある。iOS Provisioning PortalのCertificatesにMacintoshの証明書要求ファイルを読み込ませる必要がある。そして証明書を作成しダウンロードしてキーチェーンに読み込ませるのである。

 証明書要求ファイルはMacintoshのキーチェーンで作成する。読み込ませる証明書要求ファイルは一言でいうと

公開鍵

である。キーチェーンでは証明書アシスタントで[認証局に証明書を要求]する。認証局とはAppleのiOS Provisioning PortalのCertificatesのことで、Certificatesに公開鍵を送って証明書を発行してもらうわけである。公開鍵を送らないと証明書は発行してもらえない。Appleは読み込んだ公開鍵で証明書を暗号化するわけである。

 秘密鍵はもちろんキーチェーンで作成される。AppleのCertificatesからダウンロードしたファイルは公開鍵で暗号化されているので、キーチェーン内の秘密鍵でなければ証明書ファイルは開くことができない。これで秘密鍵を持ったMacintoshでなければ、証明書は復号化されないので、他の環境ではアプリは作成できないことになる。

 アプリを作成するとき、実機インストール用ではDeveloper用の証明書が必要となり、配布販売用ではDistribution用の証明書が必要になる。Xcodeはアプリをビルドするときこれらの証明書を参照することになる。普通「キーチェーンを使用して署名しようしています」というアラートで[常に許可]を選んでいると、アラートが現れないのでキーチェーンにアクセスしていることを忘れてしまうが、ここでは二つの証明書にアクセスしていることがわかる。

120221-01.gif

 問題はこの証明書である。もちろん期限がある。基本的には最初に作成してから1年が限度である。iOS Developer Programを更新すると先にダウンロードした証明書ファイルは削除して新しいファイルをインストールすることになる。

 厄介なのは、キーチェーンアクセスは古きも新しきも証明書を丸呑みしてしまうことにある。期限が切れた証明書は勝手に削除してくれるわけではなく、そのまま残ってしまうわけである。手動で削除するしかない。期限の切れた古い証明書はキーチェーンを開けば赤いバッテンが付いているのでまだ扱いやすい。

 困るのは誤ってダウンロードしてしまった同じ名前の証明書ファイルである。ファイル名が同じだと更新して置き換えてくれるのかというと、キーチェーンはそんなことはしないのである。作成日が異なると別の証明書ファイルとして、二重にも三重にもインストールするのである。ファイル名がたまたま同じでも中味の異なる証明書は存在するかもしれないからだろう。

 なぜ困るのかというと、同名の証明書ファイルがあると、Xcodeはアプリを作成しないのである。期限の切れた古い証明書ファイルがある場合は削除すればいいが、期限の切れていないiPhone DeveloperやiPhone Distributionの同名の証明書ファイルがあっても、アプリは作成されない。Xcodeは同名の証明書が複数あるとエラーを返すのである。この仕様は想定外であって、気がつかないことはあるだろう。複数あっても新しい方を参照しろよと言いたくなる。その場合は有効期限内であっても古い方を削除するしかない。

 さらに困ったことがある。それはキーチェーンでの証明書ファイルの削除そのものである。削除は簡単だが、たまに削除したはずの証明書ファイルが残ってしまうことがあるようである。原因はよくわからないが、削除したつもりが削除されていないことがあるのである。つまりキーチェーン上で削除したファイルは実際には削除されていないので、Xcodeでビルドできないわけである。

 これについてはどうやら確実に削除されるまで、何度も繰り返すしかないらしい。時間をおいて再起動すると、削除されたファイルがまた出てくることがあるようだ。確実に削除されたかどうかは、Xcodeでアプリが作成できるかどうかで判断するしかない。ビルドができていれば、証明書ファイルは適正になっているはずである。ビルドできていなければ、キーチェーンを再チェックである。

 ビルドして「CodeSign error」というアラートが表示されたときはキーチェーンアクセスを疑おう。証明書ファイルが有効期限内のものであり、必要なもの1つだけになっていることを確認したい。それをしなければ、証明書ファイルに泣くことになる。証明書ファイルの扱いを誤れば、Xcodeでのビルドはいつまでたってもできないのである。


◆SakuttoBook(サクッとブック)でiPhoneアプリを作る方法
http://bit.ly/mhgjCG


◆SakuttoPubliパーソナル:iPhoneブックアプリ開発・申請代行はお任せ下
さい。
http://bit.ly/swjdFW

 


タグ:iPhoneアプリ
posted by @jink0222 at 19:30 | Comment(0) | TrackBack(0) | SakuttoBook日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。