A Life Less Ordinary

Webエンジニアのポエム

(やっと)昔作ったiPhoneアプリを、iPhone5に対応させる

iPhone5を電撃購入してからはや2週間。
最速で手に入れて優越感に浸りながら、よーしiPhone5用のアプリを作ってみようかなうひひと息巻いてましたが、自宅のSnowLeopardではiPhone5用としてアプリをビルドできない、という憂き目に遭ってました。

やっとできる環境が整ったので、備忘録として書き留めます。
特に目新しいことはないです。



iPhone5用にビルドするということは


流し聞きしてた情報によると、ビルドターゲットをiOS6にすれば勝手にiPhone5用にビルドされるとかなんとかだったので、そのままビルドしてみたら上下に黒帯の通常ビルドでした。
Issue領域に警告されている
「Missing "Default-568h@2x.png" launch image」
をクリックすれば、勝手に「Default-568h@2x.png」が追加されiPhone5用に最適化、つまりRetina4対応してくれます。




main.mで落ちる


話が前後しますが、ビルドの際にmain.mでエラーになり、アプリが起動しない事態になっていました。
エラーの箇所は

int retVal = UIApplicationMain(argc, argv, nil, nil);

で、
Program received signal SIGABRT
のエラー。
「前のプロジェクトをそのままビルドすると何か問題あるのか?」
と色々調べてみたら、


iPhone シミュレータ実行後、main.m で落ちる
http://neo-shocker.com/blog/2012/01/run-iphone-simulator-main-m-break.html


と、そのまんまの事象があったので、記事通りに試してみましたが解決せず。


で、結局のところ原因は、一部のxibファイルが読み込まれてなかったという初歩的な問題でした。。。




UITabBarのボタンが押せない


ビルドも無事終わり、実機に転送してみると、画面の上下に帯がないアプリが立ち上がりました。
しかし、アプリはUITabBarを使用しているのですが、そのタブボタンがなぜか押せない。他のボタンは押せます。

何か、UITabBarの領域にマスクが覆っているような感覚。

いろいろ調べてみると、InterfaceBuilderの右メニュー部分に、
Simulated Metrics -> Size
という項目があり、その中に
「Retina 4 Full Screen」
という選択肢が。
そこで、関係するxibファイルを全て、「Retina 4 Full Screen」に選択し直して起動すると、無事にタブボタンが押せるようになりました。



この状態で、非Retina4端末で起動させるとどうなるんだろう。



カスタム用のUIButtonが使えない


立ち上げて気づいたんですが、ボタンを充てていた部分にボタンが表示されず、ラベル名のみになってました。
一応、押すと反応しますが、見た目がちょっとおかしいことになっています。

該当部分は
[UIButton buttonWithType:111]
という、UIButtonの中でも特殊なボタンを使っていたのですが、これ、使えなくなったみたいです。

UIButton の隠し API / 24/7 twenty-four seven
http://d.hatena.ne.jp/KishikawaKatsumi/20100507/1273198706

ただし、ボタンの体はなしてます。
これはiOS6からじゃなくて、5.1かららしいです。