2012年12月20日木曜日

アプリReject ! 原因:ReleaseビルドでCould not find a storyboard named...

久しぶりのAppleに申請していたアプリがRejectされた。

iOS6.0.1のiPhone5でテストしたら,起動するとこでクラッシュするとのこと。
(クラッシュログを添付してあったので見てみるが、ろくな情報無し。)

またまたご冗談を・・・と思いつつ、Xcodeからシミュレータで起動する。
問題なし。

provisioningファイルを間違えたかと思ったが、その形跡もなし。

ふと思い立ち、ビルドをリリースの設定にしてシミュレータ起動してみる。

XcodeのProduct→Edit Scheme→Run (アプリ名)→Infoタブ
Build ConfigurationをDebugからReleaseに変更

そうすると・・・
ア、落ちた。

コンソールを確認してみると、StoryBoardファイルが見つからないとか。
Could not find a storyboard named ...

またまたご冗談を・・・・・・

ネットで調べてみると、このバグはたまに起こるらしく、
一旦Storyboardファイルをプロジェクトから削除し、再度追加すると解決するらしい。
というわけで、delete→remove referenceで、ファイル自体は残しておき、
ファインダーから同ファイルをまたドラッグしてプロジェクトに追加。

今度はリリース設定でもシミュレータは落ちなかった。

デバグ設定では大丈夫で、リリース設定では発生するバグとか・・・。
アドホックテストも大丈夫だったのに・・・。

今後はiTunes Connectにアップロードする前に、
毎回リリースビルドで全部テストする必要があるのか・・・

またまたご冗談を・・・・・・・・・。

2012年12月19日水曜日

米長永世棋聖

先日、米長永世棋聖が亡くなった。

米長さんの解説はとてもおもしろく、今でもたまにyoutubeやニコニコ動画で見ている。

特に有名なのが、羽生さんの「伝説の5二銀」だ。
NHK杯で加藤一二三さん相手に羽生さんが放ったこの一手。
そこで米長さんが「おおー、やった!」と叫んだことが一番のファインプレーだった、そうご本人は語られていた。

晩年、現役を退き、将棋連盟の会長に就かれていた。
一方で昨年の調度今ごろ、ボンクラーズという将棋ソフトと対局された。
対局前数ヶ月は、感を取り戻すために詰め将棋をしたり、どうやって攻略するかを検討したりと、ご本人のホームページに書かれていた。
引退したとはいえ、プロ棋士とはこういうものかと感心させられた。

まさに将棋界の大物がいなくなった。
昔、升田幸三や大山康晴が亡くなられた時も、当時の人はこんな気分だったのだろうか。
将来、谷川浩司や羽生善治がいなくなったら、将棋界はどうなってしまうのだろう。
この方たちを超える大物が出てくるのだろうか。

2012年12月18日火曜日

iPhone開発:Game Centerのリーダーボード表示時とかにおかしなアニメーション

自作iPhoneアプリで、Game Centerのリーダーボードとか、アチーブメントのviewを表示しようとしたとき、画面を回転したときのような変な動きをするようになった。

要は、下記のようなコードを通ったとき。
GKAchievementViewController *achievements = [[GKAchievementViewController alloc] init];
if (achievements != nil)
{
    achievements.achievementDelegate = self;
    [self presentViewController: achievements animated: YES completion:nil];
}

で、animatedをNOにしても効果はないし、そういえばNavigationController下にある他のViewに遷移するときも若干おかしい気がする。

そして6時間くらい調べてやっと原因発見。

ゲーム画面のアニメーションで、開始と終了の組み合わせが合っていない箇所があったのだ。

下記コード
for (int i=0;i<5; i++) {
     // アニメーション定義開始

       [UIView beginAnimations:NULL context:nil];
       [UIView setAnimationDelegate:self];
       [UIView setAnimationDuration:0.1f + (0.05 * i)];
       [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
       ・・・
       ・・
       ・

        }
    }
// アニメーションブロック終了
[UIView commitAnimations];

要は、少しずつタイミングをずらしたアニメーションを複数実行したかったわけで、
for文でアニメーションの時間をずらしていた。

そして、なにを考えていたのか(多分コピペして途中にfor文を差し込んだせいだと思うが)アニメーション定義の終了をfor文の外に出していた。

つまり、上記だとアニメーション定義開始を5回やって、定義終了を1回しかやっていないことになる。

しかもここの処理は正常に5回アニメーションされてしまうようだ。
そして気付かないという結果に・・・。

さらにまずいことに、これはアプリ内の他のViewにまで影響してしまうらしく、
原因を探るのにさらなる時間が必要となってしまった。

ということで、以上が原因となり、Viewの切り替えのところで変なアニメーションが発生していた。
定義終了のところをfor文のなかに入れたところGameCenterのviewも正常に表示された。

アニメーション定義の開始と終了は1対1になるように気をつけましょうというお話でした。

2012年12月7日金曜日

iAdが有効にならない

iAdが有効にならない事象がありました。

先月下旬くらいから、新アプリがReady for SaleになってもiAdがTest Adsのまま

一つだけならこちらのミスかなと思ったが、続けざまに3つ連続でなる

iTunes ConnectのContact Usから質問送る(英語)

3つの内一つはバグ修正のため、アップデート申請出していて、それを見て勘違いされて、レビュー待ち状態だからだよと返答される。

返答の一番下に、日本のサポートはこちらとあったので、そっちの方が手っ取り早いかと電話してみる。

こちらでは対応できないので、上のメールに返信して対応してもらってと言われる。

また状況を説明する(英語)

返事するからちょっとまってとメールが返ってくる

翌日、何事もなかったかのように突然3つとも有効になる

さらに翌日、気付いてると思うけど、有効になってるからとメールが来る(英語)

原因は?次申請するとき気をつけることある?と送る(英語)

We appreciate your patience as we worked through a technical issue on our side.
と一行で返事来る。

結果、広告収入5日分削られた。
多分僕は怒ってもいいと思う。