iOSアプリ申請までの道のり

みなさんこんばんは。

以前iOSアプリ開発にまつわる記事を書きましたが、開発も進みまして
ついにリリースすることになりアプリ申請をすることに成功しました!
しかし、その道のりは険しかったですorz
今回のそのアプリ申請完了までの流れとハマったことについて紹介したいと思います。
きっと次回もまた同じことでハマりそうなのでメモる

申請までのざっとした流れは以下の通りです。

(0.証明書の発行)
1.新規アプリの登録
2.アプリの詳細情報設定
3.xcodeからアップロード
4.ステータスの確認

本来、証明書の発行は実機テストをする際に必要になるものなので自分はすでに不要の手順なのですが、諸事情により証明書の発行をすることから始まりました。

0.証明書の発行

自分は昨年ディベロッパー登録したアカウントを持っており実機テストなどを行っていたのですが、申請直前にリリース用のアカウントを利用することになり証明書を発行し直しました。
まず「キーチェーンアクセス」を起動。その後、
1.メニューバーからキーチェーンアクセス->証明書アシスタント->認証局に証明書を要求をクリック。
2.「メールアドレス」はアカウントのアドレスを入力。「通称」は分かりやすい名前を入力
3.要求の処理は「ディスクに保存」と「鍵ペア情報を指定」にチェック
4.「CertificateSigningRequest.certSigningRequest」というファイルを保存
5.鍵ペア情報は何も変更しない

◯iOS Dev Center
最近iOS Dev Centerがリニューアルされたようなので画像付きで説明したいと思います。
TOPページより「Certificates, Identifiers & Profiles」をクリック
f:id:omega999:20130629011858p:plain
iOS Appsの赤枠にあるいずれかのリンクをクリック
f:id:omega999:20130629012909p:plain
↓こんなページになります。ここから「Certificates」「Identifiers」「Provisioning Profiles」を選択することになります。
f:id:omega999:20130629014418p:plain
まずは証明書。「Certificates」をクリック。
右上に「+」マークがあるのでクリック。新しく証明書を追加するという意味です。
次の画面では、アプリリリースをする場合は「App Store and Ad Hoc」にチェック
f:id:omega999:20130629013506p:plain
次の画面では何もせず(説明だけの何もすることない画面だから)continue。
次の画面ではキーチェーンアクセスで発行した「CertificateSigningRequest.certSigningRequest」を選択しgenerate。
これで出来上がるのでdownloadして実行。キーチェーンアクセスに保存されます。

次はAppIDsを作成します。
「Identifiers」をクリック。右上の「+」マークをクリックし新しいAppIDを作成。
次の画面の「App ID Description」には分かりやすい名前を付けます。
「App ID Prefix」は変更しないでOKです。
「App ID Suffix」は「Explicit App ID」を選択し、BundleIDを入力してください。
これは、xcodeで申請するアプリのプロジェクトに記述してある「Bundle Identifier」と同じものを入力してください。
その下にもチェック項目がありますが何も変更しないでcontinueしてかまいません。
f:id:omega999:20130629015542p:plain
次の画面でsubmitを押してAppIDを作成完了です。

次は「Provisioning Profiles」をクリック。これまでと同じく右上の「+」マークをクリックし新しいProvisioning Profilesを作成。
次の画面で「App Store」にチェックしてcontinue
f:id:omega999:20130629020150p:plain
ここでは先ほど作成したApp IDを選択しcontinue
f:id:omega999:20130629020334p:plain
次の画面ではDistributionの証明書を選択します。上記で作成したやつが選択できればOKです。
f:id:omega999:20130629021135p:plain
これでprovisioning profileが出来上がります。download画面になるのでダウンロードし実行。
実行するとxcodeのOrganizerに登録されます。
ちなみに、この状態で実機インストールを行うとエラーが起こるのでAdHoc用も作成します。
provisioning profileの最初の画面で「Ad Hoc」を選択肢あとはApp Storeと同様です。
f:id:omega999:20130629021727p:plain
ダウンロードしたら実行してOrganizerに登録しましょう。
これで証明書はOKです。

1.新規アプリの登録

次に申請するアプリの情報を登録します。「iTunes Connect」にアクセスします。(https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa)
右側にある「Manage Your Apps」をクリック
f:id:omega999:20130629022339p:plain
新しくアプリ情報を登録するので左上の「Add New App」をクリック
f:id:omega999:20130714233205p:plain
次の画面でSelect App Typeを聞かれるのでiOS Appを選択
更に次の画面では4つの項目を問われます。「Default Language」「App Name」「SKU Number」「Bundle ID」です。
Default Languageは日本語に、App Nameはストアに表示される名前になるので決めた物を、SKU Numberは任意入力らしいのですがユニークなものを入力(日付を入力しました)、Bundle IDは登録されているのを選択(たしか後から変更できたと思います。俺は間違えて変更したかやり直したか忘れましたが...)します。入力したらcontinue
次の画面ではリリース日とアプリの価格を設定します。このとき上に入力したアプリ名が表示されているので確認してください。ここは任意で希望日と希望価格を入力です。
f:id:omega999:20130715000810p:plain
次はアプリの詳細情報の登録になります

2.アプリの詳細情報設定

アプリ詳細情報の設定画面になります。
ページの上の方では、アプリのバージョン、コピーライト、カテゴリ情報を入力します。
f:id:omega999:20130802212957p:plain
次に、年齢宣言の項目を設定します。これは参考にさせていただいたページに詳しく紹介されていたのでそちらをご覧ください。(参考ページについては後述します。)
f:id:omega999:20130802231442p:plain
次はアプリの紹介文、ストアからの検索キーワード、サポートURLを入力します。任意項目としてマーケティングやプライバシーポリシーに関するURLがあれば入力します。
f:id:omega999:20130802232635p:plain
次はスクリーンショットの登録です。必須なのはアイコンとなる画像、3.5インチ用画像、4インチ用画像、ipad用画像の4種類です。
f:id:omega999:20130802234305p:plain
すべて入力したら「save」をクリック
すると、設定内容確認画面に遷移するので、確認して間違いがあれば「Edit」をクリックし修正、無ければ「Done」を押して完了します。
f:id:omega999:20130803114734p:plain
これでアプリの詳細情報設定は終わりになります。

3.xcodeからアップロード

あとは最後の仕上げで、アプリのデータをアップロードします。
アップロードするにあたって、まずiTunesConnectで先ほど登録したアプリ情報からアップロード待機状態にする必要があります。
iTunesConnectにアクセスし、右側にある「Manage Your Apps」をクリック
f:id:omega999:20130629022339p:plain
アプリ選択画面から対象のアプリを選択
f:id:omega999:20130803122531p:plain
アプリ紹介画面になったら、アプリアイコンをクリックして詳細画面へ。
f:id:omega999:20130803130144p:plain
この時、詳細画面でも確認できますが、アプリの状態を確認してください。まだ一度もアップロードしない状態だと、「Prepare for Upload」となっていると思うので確認してください。アップロードしたあと、申請中やレビュー中などの状態がここに反映されていきます。
アプリ詳細画面になったら、状態の確認をし右上にある「Ready to Upload Binary」をクリック。
f:id:omega999:20130803125039p:plain
次の画面では、輸出制限に関わるような暗号を含んでいないかと問われるので大丈夫であればNoを選択し「save」をクリック。
次の画面では英語でなんたら言われますが気にせずcontinueをクリック。これでアプリ詳細画面を確認すると、状態が「Prepare for Upload」から「Ready for Upload」となりアップロード待機状態に変わります。
ここまでがiTunesConnectの作業となります。次はxcodeでのアップロード作業に移ります。
xcodeを起動中にメニューバーから「Product」→「Archive」を実行します。この時、Archiveが選択できない現象になる場合もありますが、実は、Archiveを実行する前にiPhone実機でプログラムを一度実行する必要があります。実機で実行すればArchiveを実行できるはずです。
Archiveを実行すると、下記の画像のような画面になります。過去の日付が入っているものもありますが、過去にArchiveを実行した場合にのみ表示されるので無視して構いません。もちろん今回実行した履歴として実行時刻の日付が新しく作られていると思うので、それを選択した状態で右上にある「Validate...」をクリック。
f:id:omega999:20130804235345p:plain
最初はログイン画面が表示されるので、先ほどアプリ登録しアップロード待ち状態にしたアカウントでログインします。途中、Mac App Storeを選択する画面だけはそちらを選択することを忘れずにしてください。その後は基本的に次へを押すだけだったと思います(スクショ撮り忘れました...)全てうまく行くと、Archive実行後の画面の日付横にあるステータスが、「Passes Validation」となっているはずです。この状態で「Distribute」をクリック。
f:id:omega999:20130805003033p:plain
このあともひたすた次へを押すだけだったと思います(こっちもスクショ撮り忘れました...)
これらに問題が無ければ日付横にあるステータスが「Submitted」になっていると思います。
これでxcodeからのアップロードは完了です。

4.ステータスの確認

以上でアプリ申請を行う手順は完了したので、アプリの申請状況を確認して全てが完了になります。
iTunesConnectから「Manage Your Apps」→対象アプリの詳細画面へ。
状態が「Waiting for Review」となっていることを確認してください。これで申請が完了となります。
f:id:omega999:20130805004334p:plain
あとはこの状態がレビューが終わり「Ready for Sale」となるのを待つだけです。

番外編.申請途中で行き詰まった場合

上記の手順で私は申請を完了しましたが、途中たくさんエラーが起きて大変でしたorz
申請で行き詰まった場合に気をつけるポイントとしていくつか紹介したいと思います。
1.Code Signingの変更
申請するにあたってCodeSigningを変更しておく必要があるようです。
Code Signingは、ProjectNavigatorからプロジェクトを選択し、TARGETSのBuild Settingsの中にあります。
下記の画像のように設定しました。
DebugをiPhoneDeveloperに、ReleaseをiPhoneDistributionに変更するようです。
f:id:omega999:20130805005700p:plain
2.Build Configurateの変更
こちらエラーが出る前存在すら知らなかった設定なのですが(←ぇ
シュミレーター設定の左側にあるアプリ名のボタンを押し、「Edit scheme」をクリック。
中の項目にBuild Configurateという項目があるのでこれReleaseに変更する
f:id:omega999:20130805014440p:plain
3.アプリ対応サイズ
Autolayoutを無効化できると知らずに使用していた私ですが、その理解していない機能を使っていたこともあり画面サイズが4インチ(iPhone5)で実行するとレイアウトが崩れてしまったので、無理矢理3.5インチのみの対応にしようと考えていました。
そこでとあるサイトで4インチ用の背景画像を削除すれば非対応になると紹介されていたので、記事の通りにし3.5インチのみの対応としていました。
実機テストの段階までは何も問題はありませんでしたが、アプリ申請時にエラーが出てしまいました。
実は、アプリ申請時には4インチ対応が必須となっているようです。
これに気づくのに相当かかりましたorz
みなさんはこんなミスをしないように気をつけてください。
4.Invalid Binary
アプリ申請の手順が完了しWaiting for Reviewとなって一安心しても、その後にもエラーはやってきます。私にはやってきました。
ステータスが「Invalid Binary」となっていたら不備があり再提出が必要とのことでした。これにはまりました。
解決法を検索した結果、このInvalid Binaryが起きる原因は様々あるようで全てを試して消去法でやるしかないとのことでした。
これについては参考記事に詳しく記述されていたので例として紹介させていだたきます(参考ページについては後述します。)
これ以外にも原因があるようで、warningを全て消すを私は試しましたが解決せず、結局3のアプリ対応サイズが原因だったと思います。
これについては詳細なエラーメッセージが出るわけでもなくAppleから警告があるわけでもないので自分で探すしか方法が無いようですのでみなさんも気をつけてください。

◯最後に

長々となりましたが以上でアプリ申請の道のりとして紹介したいと思います。
今回はたくさんの記事を参考にさせて頂きましたが特に参考にさせて頂いた10記事を紹介させていただきたいと思います。
ありがとうございました。
1.http://cocoapp.info/apply_to_mac_app_store/
2.http://smartphone-zine.com/dokuwiki/iphone/070_release.html
3.http://d.hatena.ne.jp/humiya_I/20120108/p1
4.http://d.hatena.ne.jp/humiya_I/20120108/p1
5.http://mushikago.com/i/?p=2779
6.http://d.hatena.ne.jp/kazukingband/20120509/1336554702
7.http://obc-fight.blogspot.jp/2013/05/A-valid-provisioning-profile-for-this-executable-was-not-found.html
8.http://qiita.com/koogawa@github/items/5e2ff5a0312cb1f657f8
9.http://teapipin.blog10.fc2.com/blog-entry-21.html
10.http://cocoapp.info/mac-app-store-review-days/

まだまだポンコツなので些細なことでも何か意見がありましたらコメントいただきたいと思います。
その他間違いもありましたらコメントお願いします。