ガンズターン 公式サイト

楽しいことに、まじめです。 ——ガンズターンアプリ研究所公式サイト

Appleさま、ごめんなさい……

Pocket

1. やらかしてしまいました

昨晩遅くに(おそらく米国はお昼ごろ)に「ぱずもぐ!」のiTunesConnect上のステータスが「In Review」になり、それなりにデバッグもしてたし今回は大丈夫だろうと高をくくっていたのですが、なんと今朝方、リジェクトのお知らせが届きました。

理由を読んでみると、「あなたのアプリ、バグがあってプレイできないよ」とのこと。

「そんなバナナ!?」

と思いつつ、問題解決センターの文面の下に添付されていたスクリーンショットを開くと、確かに「サーバに接続できません」の文字がでかでかと表示されている画面が……。

いやいや、待て待て!

だって実際に、今俺のiPhoneに入ってるAdHoc用のバイナリ(ほぼリリースビルドと同等)はきちんと動いてるのに……!?

2. ソースを見たら大惨事でした

……なぁんて、朝早く(7時30分くらい)から軽くパニクりながら色々と調べてみたんですが……。

一度冷静になって、改めてリリースビルドを吐き出してAdHoc経由でインストールし直してみたら、確かにAppleさんの言う通りで、本番サーバにつながらない状態になってました。

たぶん、SSL通信化した部分が悪さをしているんだろうと当たりをつけたものの、登録してあるキーペアは何度確認しても正しいものだし……

とか色々とやってみて、最終的に元のソースコードを追いかけ始めたら(というか、真っ先にソースを確認しなかった自分が憎い!)、あまりの惨状に目を疑ってしまいました。

……ない。

……ないんです。

……非同期SSL通信のために書いた何十行にもわたるコードが。影も形も。

なかったんです。

まさに、

な… 何を言っているのか わからねーと思うが
おれも 何をされたのか わからなかった…
(AA略)

てな心境。

唖然としつつも、原因は「デグレード」しか考えられないので、まずはSourceTreeでgitの状態を確認します。

3. 試しにSourceTreeいじったら直ってしまいました……(ガーン!)

……ふうむ。

問題のSSL通信の部分は「麦茶ライブラリ」の一部としてサブモジュール化して管理している部分なんですが、コミットツリーを追いかける限りでは、今操作しているブランチには問題なく「SSL通信」が含まれている様子。

……ていうか、直前のコミットがまさにその部分を追記したコミットだったので、さすがに勘違いはない。(……はず)

「何が何だかわからん!」

というわけで、試しに一つ隣のブランチ(SSL通信を書く前に使っていたブランチ)に移動して、また元のブランチに戻るという操作をしてみると、驚くべきことに消えていたコードが復活していました。

SourceTreeのGUI上の見栄えの不具合なのか、それとも単純に自分の操作ミスか(たぶんその線が濃いと思いますが)わかりませんが、これ以降はコミットツリーの見た目と今実際に自分が目にしているコードで不一致を起こすようなことは起こっていません。(今のところは)

たぶん、「ぱずもぐ!」本体のコードが格納されてるリポジトリのブランチにひも付けられたサブモジュールのコミットIDが、なんらかのタイミングで一つ前のコミットを指し示すようになってしまってたのでしょう。
(開発用に使っているDevelopブランチでは正しくひも付けられていたことも、この発見が遅れた原因の一つですね)

それがわかったら、あとは正しいサブモジュールのコミットIDが参照されていることを確認して、さらにXcode上でもソースの存在を確認。それから、通常通りビルドして、ストアへ送信して、再提出をさせてもらいました。

あ、もちろん、これ以上Appleさんのご迷惑にならないよう、事前にAdHoc用のバイナリも吐き出して、自分の端末で動作確認をしましたよ。

いやー、たった一人で、そこそこの規模のコードしか管理してないのに、こんな重大なアクシデントが発生してしまうとは……。
チームで大規模コードのビルド管理とかしてるところは、いったいどういう風に工夫して仕事してるんだろう?

やっぱり、GradleとかJenkinsとかにも真剣に取り組まなくちゃいけないのかなぁ?

……まあ、今は正直、そこを固めるよりも先にやるべきことがたくさんあるので、少し先の宿題に取っておきますね。

4. 今回の反省点

  • 今後、ストアへアップロードする際は、ビルドする前に必ず「サブモジュールの正しいコミットを参照できてるか」を確認する!
  • SourceTree上の見栄えだけで満足せずに、必ずソースコードにも目を通す!
  • 直前にAdHoc用のバイナリをビルドして、自分の端末でテストする!
    →今回は、これをしたつもりでしたが、このテストをDevelopブランチ上でやって満足してしまったことがそもそものミスでした。

以上です。
ブログに書くのも恥ずかしいような内容の記事ですが、戒めのために書き残しておきます。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

トラックバックURL: http://www.gunsturn.com/2015/07/16/puzzmog_rejected_bug/trackback/