iOS(iPhone/iPad)アプリケーション公開申請までの流れ(Xcode4)

iOS(iPhone/iPad)アプリケーション公開申請までの流れをなるべく分かりやすく確認できるように工夫して書きました。

application1.xcodeprojというプロジェクトで開発を進めたということで話を進めています。プロジェクト名が違う場合は置き換えてください。
プロジェクト名は非常に重要なので初めての方はapplication1.xcodeprojというテストプロジェクトを作ったほうが無難です。

1.Xcode4をダウンロード(最新版でベータ版だと申請できないので注意)

App storeでも買えます。
http://developer.apple.com/xcode/

2.iOS Developer Program 購入(年間参加費 \10,800)

http://developer.apple.com/jp/programs/ios/

3.Appleからアクティベーションのメールを受け取りアクティベーションを行う

アクティベーションがうまくいかないときはメールをAppleに送る。英語だと早く返事が来るらしい。

4.Member Centerにログインする

http://developer.apple.com/membercenter/


5.デバイスの登録

https://developer.apple.com/ios/manage/devices/index.action
手持ちのiPhoneiPadを登録します。Device IDはXcodeのオーガナイザー。

iPhone/iPadを差した状態で、Xcodeの上部メニューからWindow→Organizerで開ける。
左メニューDevicesから自分のiPhone/iPadを選択。IdentiferのIDをコピー(40文字のアルファベット)
https://developer.apple.com/ios/manage/devices/index.action
を開き右上のAdd Devicesを選択。

【Device Name】:iPhone3GSなど分かりやすい名前で
【Device ID】:先ほどの40文字のアルファベットを


6.証明書作成(開発用、公開用)

開発用・公開用の2つの証明書を作ります。

開発用の作り方は

アプリケーション→ユーティリティ→キーチェーンアクセス
上部メーニューからキーチェーンアクセス→証明書アシスタント→認証局に証明書を要求
Member Centerにログインするときのメールと自分の名前(日本語でも英語でもいい)
CAのメールアドレスには何も入れない。ディスクに保存にチェックを入れて続けるをクリック。

dev-CertificateSigningRequest.certSigningRequest 

として保存。

公開用の作り方は(開発用と同じ)

アプリケーション→ユーティリティ→キーチェーンアクセス
上部メーニューからキーチェーンアクセス→証明書アシスタント→認証局に証明書を要求
Member Centerにログインするときのメールと自分の名前(日本語でも英語でもいい)
CAのメールアドレスには何も入れない。ディスクに保存にチェックを入れて続けるをクリック。

dist-CertificateSigningRequest.certSigningRequest

として保存。

http://developer.apple.com/ios/manage/certificates/team/index.action
Certificateのメニューを開き、Developmentのタブを開きます。
もし、証明書があったら削除します。Requestのボタンを押して
dev-CertificateSigningRequest.certSigningRequestファイルをアップします。
アップしたあとにページを更新するとdownloadのボタンが現れるので証明書をダウンロードします。
証明書の名前はdeveloper_identity.cerとなっています。保存します。

同じように公開用の証明書も同じように作ります。
こちらの説明はDevelopと同じなので割愛します。
証明書の名前はdistribution_identity.cerとなっています。保存します。

この時点で

dev-CertificateSigningRequest.certSigningRequest
dist-CertificateSigningRequest.certSigningRequest
developer_identity.cer
distribution_identity.cer

の4ファイルが有ります。もしファイルが足りない場合は説明を読み直してください。

7.APP IDの登録

http://developer.apple.com/ios/manage/bundles/index.action

APP IDは一度作ったら消せないので注意です。ゴミがたまっていきます。このゴミも含めてApp storeのアプリの数じゃないのかなと思っています。


【Description】:自分がわかるようにするためのラベル(application1.xcodeprojの場合はapplication1)
【Bundle Seed ID】:Generate New
【Bundle Identifier】:アプリケーションそれぞれのID

Bundle Identifierは非常に重要でXcodeのBundle Identiferと関連づきます。
これを理解しないと公開申請ができませんので十分に理解してください。

詳細はいろんなサイトで説明がなされていますので手っ取り早く説明します。
開発しているアプリケーションがapplication1.xcodeprojとして例を説明してます。

Bundle Identifier例:

jp.ne.hatena.d.Kmusiclife.application1
com.yourdomainname.iphone.application1
com.yourname.ipad.application1
net.yourappname.application1

Bundle Identifierは必ずユニークなものでなければなりません。
ドメインをお持ちだったらそのドメインど逆にしたBundle Identifierが最適です。
application1というのはXcodeでのプロジェクト名を指定した方がいいです。
application1.xcodeprojという名前でアプリケーションを作成しているときは
上記のように指定したほうがいいです。本説明では(jp.ne.hatena.d.Kmusiclife.application1とします。)

000000000.jp.ne.hatena.d.Kmusiclife.application1のようなIDをAppleの方で自動生成しますが
この0000000000の値を他で使うことはほとんどありませんので今は気にしなくても大丈夫です。

超参考:
http://d.hatena.ne.jp/It_lives_vainly/20090204/1233741543

8.プロビジョニング作成(開発用、公開用)

App ID、開発者ID、デバイスIDが埋めこまれているファイルです。
基本的にアプリケーションに応じて証明書と、このプロビジョニングファイルが必要になります。

開発用プロビジョニングファイルの作成は
https://developer.apple.com/ios/manage/provisioningprofiles/index.action
よりNew Profileをクリック。


【Profile Name】:自分が分かりやすい名前(application1.xcodeprojの場合はdev application1)
【Certificates】:開発用の証明書の選択(チェックはひとつしかないはず)
【APP ID】:先のAPP ID登録で登録した内容(例どおり進めていればapplication1の選択)
【Devices】:はじめに登録したiPhone/iPadなどのデバイスを選択

Submitすると
https://developer.apple.com/ios/manage/provisioningprofiles/index.action
のページにプロビジョニングファイルがDownloadできるようになる。

上記の例などで進めていけばdev_application1.mobileprovisionというファイルになる。
そのままDownload。保存。

公開用プロビジョニングファイルの作成は
https://developer.apple.com/ios/manage/provisioningprofiles/viewDistributionProfiles.action
よりNew Profileをクリック。

【Distribution Method】:App Storeを選択
【Profile Name】:自分が分かりやすい名前(application1.xcodeprojの場合はdist application1)
【Distribution Certificate】 :すでに表示されているはず
【App ID】:先のAPP ID登録で登録した内容(例どおり進めていればapplication1の選択)
【Devices】:AdHocの場合のみ利用(AdHocは今回説明しない)

Submitすると
https://developer.apple.com/ios/manage/provisioningprofiles/index.action
のページにプロビジョニングファイルがDownloadできるようになる。
上記の例などで進めていけばdist_application1.mobileprovisionというファイルになる。
そのままDownload。保存。

この時点で手元にあるファイルは

dev-CertificateSigningRequest.certSigningRequest
dist-CertificateSigningRequest.certSigningRequest
developer_identity.cer
distribution_identity.cer
dev_application1.mobileprovision
dist_application1.mobileprovision

の6ファイルが有ります。もしファイルが足りない場合は説明を読み直してください。

9.証明書をキーチェーンアクセスに、プロビジョニングファイルをXcodeのオーガナイザに登録

developer_identity.cer
distribution_identity.cer

をそれぞれダブルクリックで。パスワードを入力する必要があるかもしれない。


dev_application1.mobileprovision
dist_application1.mobileprovision

のファイルをそれぞれダブルクリックで開きます。そうするとXcodeのオーガナイザに登録されます。

10.iTunes Connectへ登録(Bundle ID)

iTunes Connectでアプリの内容や紹介などを登録します。
https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa
を開きManage Your Applications(Aのアイコン)を選択します。
Add New Appをクリックし、新規アプリを作成します。


【App Name】:アプリの名前(XcodeのBundle display nameに揃えたほうがいい)
【SKU Number】:ユニークなIDです。先のAPP IDを入力(例にそうとjp.ne.hatena.d.Kmusiclife.application1)
【Bundle ID】:APP IDです(先の説明に沿うとapplication1)を入力

この先のiTunes Connect登録は誰でもわかります。アプリの説明文やアプリの画像をアップロードします。

入力をすべて終えたらiTunes Connectの詳細から右上のBinary Uploadのボタンを押します。
その後にアプリの中で暗号化するアルゴリズムがあるかどうかの質問がありますのでない場合はNoを選択。
これで申請用のバイナリアップロードの準備が整いました。

11.Xcode4の設定

plistファイルを選択します。Bundle identiferの値を例に沿っていけば
Bundle identifer = jp.ne.hatena.d.Kmusiclife.${PRODUCT_NAME:identifer}
となります。ここが非常に重要です。不明の場合は(7.APP IDの登録)を再度参照してください。

Xcode4でコンパイルする際に証明書とプロビジョンファイルを介します。
Xcode4の左メニューでプロジェクト名をクリック、右画面のTargetでアプリケーションアイコンを選択。
タブのBuild settingsを選択。Code SigningでDebugとReleaseの選択を変更します。

DebugはiPhone Developerを選択します。
ReleaseはiPhone Dictributionを選択します。

DebugもiPhone Dictributionとして選択すると「A valid provisioning profile for this executable was not found.」などのエラーが出ます。

Bundle IDの理解が出来ていないととにかくエラーが出まくります。
(7.APP IDの登録)を読んでみてください。

12.Xcode4からarchiveの作成と申請提出

xcode4からはbuildではなくarchiveというコマンドでアーカイブを作成→オーガナイザからアップロード申請の流れになりました。

Xcode4→Product→Archiveを選びます。(Archiveが表示されない場合は実機テストが出来ていないからです)

Archiveが完成するとオーガナイザが開きますのでアプリを選択してvalidateをクリックしてデータにエラーがないかどうかチェックします。validateが通ればそのままSubmitで申請提出完了です。

アイコンの有無など分かりやすいエラーはいいのですがややこしいエラーは上記の説明をしっかりとくまなく実行すれば問題はないはずです(2011/06/30時点)。

とにかくこの申請提出に関してトラブル・問題が多いです。とにかくコツが要ります。

重要なポイントは2〜3です。

・bundle identiferをしっかり理解しているか。不明の場合は(7.APP IDの登録)を再度参照)
・プロビジョンファイルをしっかりと生成されているか。(8.プロビジョニング作成を再度参照)
・XCode4でBuild Releaseの際にプロビジョンファイルを読んでいない(DebugではDevelopmentのプロビジョンファイルを読ませること)

何度もプロビジョンファイルや証明書を読み直しているととにかくおかしな事になります。
証明書を作り直した場合はキーチェーンアクセスからしっかりと削除、入れ直しをしてください。
プロビジョンファイルの作り直しや読み直しもオーガナイザからしっかりと削除、入れ直しをしてください。

またiPhoneの中のプロビジョンをコントロールするのに

iPhone 構成ユーティリティ
http://support.apple.com/downloads/iPhone_Configuration_Utility_2_0_for_Mac_OS_X?viewlocale=ja_JP

が役立ちます。

プロビジョンや証明書がしっかりと読んでいない、またはbundle identiferがミスマッチの場合は
下記のようなエラーが出ます。

Errors:
・CodeSign error: code signing is required for product type 'Application' in SDK 'iOS 4.2' // 証明書を介さずにコンパイル
・The archive is invalid. /var/folders/____/app.ipa does not exist. // bundle identiferを不理解、アップは不可能です
・A valid provisioning profile for this executable was not found. // コンパイル時のDebugを確認
・bundle identifer domainname differs from reserved // iTunes Connectを確認.アプリがないよ

何が問題かというよりも全体的に問題ということが多いと思います。特にbundle identiferを理解していないと
そもそも申請提出すらできないです。一からじっくりと読みなおしてやってみましょう。

トラブルに関しては一度別にまとめようかと思います。



公開までの考え方は
iPhone/iPad, Xcode4, iTunes Connect, APP IDs, Provisioning, Certificateの6つをbundle identiferなどのIDでたくみに組み合わせていきます。


最後にいろいろなものが登場してきますがそれぞれの関係をまとめてみると

iTunes Connect⇔APP IDs⇔Provisioning⇔Certificate⇔Xcode4⇔iPhone/iPad(実機)

細かく言うとXcode4のOrganizerが混ざるくらいでしょうか。