3回目のリジェクトで修正に悩む

初の自作アプリに、Appleから3回目のリジェクトをいただきました。。。

前回の再申請が9/26の3:14で、今回はIn Reviewになったのが10/4の1:21、リジェクトをもらったのが10/5の7:16でした。
再申請からIn Reviewまで約8日間かかったのは今までと同じでしたが、In Reviewからリジェクトまで30時間もかかったのが初めてでした。
なので、「今回は通ったかも?!」とかなり期待したのですが、、、

Resolution Centerを見てみると、今回も同じリジェクトの理由でした。orz
We found that your app failed to launch on iPhone running iOS 6, on both Wi-Fi and cellular networks.We encountered the issue when selecting the application on the Home screen - the app displayed a launch image then quit unexpectedly. This may be because iOS 5 uses a watchdog timer for applications; if an application takes too long to complete its initial startup, the operating system terminates the application.
悲しいことに、前回の修正も見当違いだったようです。
こうなったら、意地でもAppleのReviewチームが確認している「the app displayed a launch image then quit unexpectedly.」という状況を再現しないことには、直しようがありません。
Google先生でイロイロと調べてる時に、英語のページでAdHoc Deploymentという言葉を見つけました。AdHoc Deploymentすると、開発に使っている以外のiPhoneにアプリをインストールできるとのことです。これなら、開発環境からアプリが1度外に出るので、落ちる状況を再現できるかもしれない。そこで、AdHocでインストールできる方法をググりました。
こちらのページ(「iPadな日記」)に詳細の方法が載っていたので早速試してみました。

結構手順が多かったので集中力が必要でしたが、詳細な方法を載せていただいているおかげで何とかAdHocできました。
感謝感激です。
手順は、要約すると以下のような感じになります。
■iOS Dev CenterのProvisioning PortalでiPhoneの登録。UDIDが必要です(今回は、開発にも使ってる3Gsを使ったので登録しませんでした)。
■AdHoc用のプロビジョニングファイルの作成。
■AdHoc用のプロビジョニングファイルをダウンロードしてOrganizerへインストール。
■対象とするプロジェクトで、既存のConfigurationsをコピーしてAdHocの分を作成。

⬇1度登録した後は、以下からの作業でOK。⬇
■Schemeの追加と編集。
■SchemeとCode Sining Identityを切り替え、Product>Archive>DistributeでSave for..Ad-Hoc Deploymentしてipaを作成。
■iTunesにAdHoc用のプロビジョニングファイルとipqをドラッグ&ドロップして、アプリをインストールしたい端末で同期。

この方法で、リジェクトされたアプリを起動したところ、本当に英文の通りにlaunch画面で落ちました。orz
ただ、AdHocでインストールした手順が間違っている可能性もあります。
念のため、過去に参考本の学習で作成したサンプルプロジェクトを、AdHocでインストールしてみました(アイコンやら起動画面も適当なのを付けて)。

最初は、自作アプリと同じく起動画面で落ちました。試しに、USBケーブルを繋いで実機RUNさせてみると、OrganizerのConsoleにログが表示されることを発見。ズラズラと並ぶ英文ログの中に「Localizations」という言葉が入っていたのを見つけました。そして、プロジェクトのInfoのLocalizationsを見てみると、en(English)があるのにjapanが入ってないことに気付きました。
LocalizationsでJapanを適用したところ、学習用のサンプルアプリでAdHocからインストールして起動に成功!
ところが、同じくLocalizationsでJapanを適用しても、なぜかリジェクトされた自作アプリでは落ちました。

で、同じくUSBケーブルを繋いで実機RUNし、OrganizerのConsoleに表示されるエラーをよく見てみると、、、
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: ...with name 'xxViewController''*** First throw call stack:....
また、xxViewControllerが無いと。。。これでは、1回目のリジェクトの修正でドツボにハマった時に戻っているではありませんか!イロイロ調べてイロイロ試しましたが、AdHocのcode Siningを追加する前にすら戻らなくなってしまいました。

仕方が無いので、最終手段をとりました。新しいプロジェクトを作成し、そこへリジェクトされたプロジェクトのソースコードをコピペ、さらに素材やAdMobも追加して、アプリが正常にビルドできるように復活させました。
復活の途中で、以下のようなハマりポイントがありましたが、何とか気付いて乗り切りました。
■「Warning: Multiple build commands for output file」というエラーが出て、Supporting Filesフォルダから予め入っていて重複していた、真っ黒のDefault@2x.pngとDefault.pngを削除して解決。
■Supporting Filesフォルダの「〜-Info.plist」のBundle identifierに、プロビジョニングファイルのApp IDの「com.〜」で始まる記述を入力。

で、Ad-Hoc Deploymentをやる前の状態で、デバッグビルドは問題なく可能。
さらに、AdHocでインストールした状態でも、ちゃんと起動できました!
今度は、「…’Could not load NIB in bundle:..」がログに表示されて落ちることもありません。
まぁ、結局は何が原因だったかは分かりませんでしたが、強引な解決で結果オーライです。

今度こそリジェクト対応の修正ができたものと信じて、速攻でReleaseビルド。10/8の15:55に再申請しました。
(SchemeをAdHocじゃない方に、Code Sining IdentityのReleaseをAny iOSともにdistributionのものに切り替え)
次は何とか、せめて同じ理由のリジェクトにならないことを祈ります。
(追記:無事にリリースできました!)


<追記>——–
このタイミングで、iPhone5と第5世代iPodTouch用のスクリーンショットを用意しろとiOS dev centerからメールが来ていました。

とりあえず、上下に黒帯を入れた状態でiTunesConnectには登録しておきました。

XcodeのLaunch Images(起動画面)のRetina(4-inch)にも、iPhone5用のスロットがありましたが、とりあえずそこには入れませんでした。
結果的に審査は通り、私のアプリのiPhone5対応となりました。
</追記>——–

★★★自作iPhoneアプリをAppStoreでリリースするまでの道のり★★★