2013年9月19日木曜日

iOS6からiOS7への対応

社内で書き残していた内容をブログに書き写した内容となります。個人アプリをiOS7に対応させた時に書き残した内容なので掲載画像がアレですが気にしないでください。

①アイコンの追加対応

iPhoneで1種類、iPadで2種類増加されました。iPhoneが1種類しか必要ないのは対応バージョンに非Retinaが無いためです。
iPhone(120x120)
・Icon-60@2x.png

iPad(76x76/152x152)
・Icon-76.png
・Icon-76@2x.png

②storyboardで作成した箇所のレイアウトが崩れる対応方法

Xcode4.6以前で開発していたプロジェクトをXcode5で起動し、初めてstoryboardを開いた時にstoryboardで作成した全レイアウトを自動調整してくれる。もしくは警告にそれっぽいメッセージがあるのでクリックすると自動修正されます。それでも未だグチャグチャな場合は他に原因があり。

③UINavigationBarとStatusBarをUIViewに上被せで表示させたくない場合の対応方法

以下はUIViewControllerクラス等を継承したクラス上で使う想定のコード。もしTabBarだけは元の状態にしたいなら UIRectEdgeBottom を使う。
self.edgesForExtendedLayout = UIRectEdgeNone;

④StatusBarとUINavigationBar上の文字とが被る

StatusBarの上にUINavigationBarが被さる事が原因だが③の方法で解決しない。発生する原因はUINavigationController上にUINavigationBarが追加されていないからUIViewController側がUINavigationBarを一つのControllerと見なして自動調整してくれないからなので、対応方法は以下のようにUINavigationController側でStatusBarとTopBarを使うよう定義すれば良い。

⑤UIAlertViewがaddSubView出来なくなった問題への対応方法

TSAlertViewなどのUIViewを継承したカスタムAlertViewで代用。クラス名を置き換えるだけで対応出来るが、ダイアログの見た目はiOS6以前のものとなる。もしくはUIAlertView風に見せるのではなくUIViewControllerをモーダル表示する。
https://github.com/mindbrix/TSAlertView

⑥UI部品の背景色が変更されない問題への対応方法

色設定の仕様が以下のように変わりました。今まで背景色を変更するのに使っていたメソッドが文字色変更用となり、背景色を変えるメソッドが新たに追加されています。
// UI部品の文字色変更
setTintColor

// UI部品の背景色変更
setBackgroundColor
以下は具体的な背景色を変更する例。UISearchBarなどの特殊なUIに関してはメソッド名が違う点と色濃く表示される点に注意が必要、少し薄くするのがベターかもしれません。
UIColor color = [UIColor redColor];
// before
[self.navigationController.navigationBar setTintColor:color];
[self.navigationController.toolbar setTintColor:color];
[searchBar setTintColor:color];

// after1
[self.navigationController.navigationBar setBackgroundColor:color];
[self.navigationController.toolbar setBackgroundColor:color];
[searchBar setBarTintColor:color];

// after2(差分だけ)
[searchBar setBarTintColor:[color colorWithAlphaComponent:0.2f]];


⑦UI部品の一括色変更する対応方法

Window#対象メソッド で変更可能です。ただし、Window#setBackgroundColor で変更されるUIはUINavigationBarのみっぽく、UIToolBarなどは変更できませんでした。iOS7からデフォルト色が白から青に変更されているため注意が必要です。
// AppDelegateクラス上
UIColor color = [UIColor redColor];

[self.window setTintColor:color];
[self.window setBackgroundColor:color];


⑧ホーム上のアプリ名の省略されない最大文字数変更

iOS7からフォントが変更されたのに伴い、ホーム上のアプリ名の文字サイズが若干変わったようです。今までは半角13文字まで省略されずに表示されていましたが、iOS7では半角12文字までに変わっていました。
iOS6:半角MAX13文字
         :全角MAX6文字
iOS7:半角MAX12文字
         :全角MAX6文字

余談

この対応を入れたアプリを一週間以上前に申請したのですが未だにIn Reviewにすらステータスが変わらないので、今対応して申請してもしばらく待たされそうです。