狠狠撸

狠狠撸Share a Scribd company logo
既存アプリのiOS7対応
西?磨翁
2013年10月7日
本日の事例となるアプリ
既存アプリのiOS 7対応 | iOS 7エンジニア勉強会
颈翱厂7対応にも特集されました
ヤフオク!アプリ
IOS6
IOS7対応 途中
IOS7対応 最終形
作業は大きく分けて2つ
?iOS7向けに実装方法を変更する
?颈翱厂7向けに装饰を行う
アイコンの準備?変更については今回は割愛します
ヤフオク!アプリについて
?iPhoneが日本に登場してまもな
くリリースした歴史あるアプリ
?iOS4.3以降をサポート中
iOS7向けに実装方法を
変更する
1.翱厂毎に処理を分岐する
このようなメソッドを用意しておいて
OS毎の分岐処理に備えましょう
+ (BOOL)isOverThisVersion:(NSString *)version{
! NSString!*currentVersion =![[UIDevice currentDevice]systemVersion];
! return! (! [currentVersion
! ! ! ! ! compare:
! ! ! ! ! ! version
! ! ! ! ! options:
! ! ! ! ! ! NSNumericSearch
! ! ! ! ]! !=!NSOrderedAscending
! ! ! );
}
2.UIViewController
での潜り込みに対処する
画面の上部が表示されない!?
颈翱厂7では画面全体が表示领域となる
狈补惫颈驳补迟颈辞苍叠补谤に潜りこんでしまう
狈补惫颈驳补迟颈辞苍叠补谤に潜りこんでしまう
対処方法
表示領域の拡張をやめさせる
self.edgesForExtendedLayout =
UIRectEdgeNone;
※IOS7の時のみ実行するようにしましょう
また、すりガラスの表現が失われます
UIViewControllerにTableView
をaddSubviewした場合にも
発生します
画面の上部が潜り込む??
同じように
self.edgesForExtendedLayout =
UIRectEdgeNone;
※IOS7の時のみ実行するようにしましょう
また、すりガラスの表現が失われます
3.階層構造の変更に対応する
その1
UITableViewCell
UITableViewCellContent
UIButtonなどの
コンポーネント
UITableViewCell
UITableViewCellContent
UIButtonなどの
コンポーネント
UITableViewCellScrollView
iOS6 iOS7
コンポーネントからsuperview.superviewで
UITableViewCellにアクセスできなくなりました。
superview
superview
superview
superview
superview
対処方法
+ (UITableViewCell*)searchTableViewCell:(UIView*)view
{
id target = [view superview];
if (!target) {
return nil;
}
if ([target isKindOfClass:[UITableViewCell class]]) {
return target;
}
return [self searchTableViewCell:target];
}
UITableViewCellを探索して
取得するようにする
superviewでUITableViewCellにアクセスしようと
すること自体、Appleが推奨する方法ではありません。
新規にアプリを作る場合は他の方法をご検討ください。
今後動かなくなる可能性があります。
ヤフオク!アプリは開発の歴史が長く、修正の影響範囲が大
きかったため今回はこのような対応となりました。
ご注意!
4.階層構造の変更に対応する
その2
UITableViewCellからsuperviewで
UITableViewにアクセスできなくなりました
UITableView
UITableViewCell
UITableView
UITableViewCell
UITableViewWrapperView
iOS6 iOS7
superview
superview
superview
UITableView *tableView = nil;
if (iOS7なら~) {
//iOS7ではcell.superviewではUITableViewWrapperViewが返却される。
//このためUITableViewを取得するためにはcell.superview.superviewと
//処理する必要がある
tableView = (UITableView*)cell.superview.superview;
}else{
tableView = (UITableView*)cell.superview;
}
UITableViewCellの例と同じように
探索してもよいし、単純な分岐でも大丈夫
superviewでUITableViewにアクセスしようと
すること自体、Appleが推奨する方法ではありません。
新規にアプリを作る場合は他の方法をご検討ください。
今後動かなくなる可能性があります。
ヤフオク!アプリは開発の歴史が長く、修正の影響範囲が大
きかったため今回はこのような対応となりました。
くどいようですが???ご注意!
ヤフオク!アプリでは以上まで
の対応を行ってようやく動作
するようになりました。
とりあえず动くレベル
もっとカッコよくしたい!
既存アプリのiOS 7対応 | iOS 7エンジニア勉強会
颈翱厂7向けに装饰を行う
5.タブ上に罫線が表示される
問題を解決する
UITabBarControllerにUIButtonを
addSubviewしていると発生する
対処方法
//ダミーのタブバー背景
[[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]];
//罫線除去
[[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];
6.iOS6と同様の罫線表示
にする
iOS7標準 罫線を引く
//セルの罫線のインデントをなくす
[UITableViewCell appearance].separatorInset = UIEdgeInsetsZero;
7.「&濒迟;」アイコンを変更する
iOS7標準 独自アイコン
//ナビゲーションバーの戻るのアイコンを変更
[UINavigationBar appearance].backIndicatorImage =
[UIImage imageNamed:@"header_allow_ios7.png"];
[UINavigationBar appearance].backIndicatorTransitionMaskImage =
[UIImage imageNamed:@"header_allow_ios7.png"];
iOS7より新たに追加されたメソッド
8.UITableViewStyleGrouped
の強制大文字に対応する
iOS6 iOS7
UITableViewStylePlainに変更する
または
tableView:viewForHeaderInSection:
を実装する
他にも方法はありそうですが
上記どちらかでOK
UITableViewStylePlainにしました
iOS7でも小文字が使える
9.accessoryはaccessoryViewに
配置する
颈翱厂7だと右づめになっていない
[cell.contentView addSubview:sw];
↓
cell.accesoryView = sw;
その他のUIの色はtintColorを
UIAppearanceで一括指定する
ことで対応しました
まとめ
? iOS6がリリースされた時と比べ対応工数が格段に多
い。UI変更も含めると余裕を持った工数見積が必要。
ヤフオク!アプリの場合、iOS6の対応を行った時よりも
10倍程度の工数がかかった。
? UIAppearanceを活用して装飾に関する修正量を減らすよ
うにする
APPENDIX
リリース后の反応について
既存アプリのiOS 7対応 | iOS 7エンジニア勉強会
既存アプリのiOS 7対応 | iOS 7エンジニア勉強会
既存アプリのiOS 7対応 | iOS 7エンジニア勉強会
既存アプリのiOS 7対応 | iOS 7エンジニア勉強会
色々なご意見を頂いていますが、
IOS7対応後、
DL数はかなり増えました。
一時的ではなく現在も継続してい
ます
IOS7対応の参考になれば幸いです
ご清聴ありがとうございました

More Related Content

既存アプリのiOS 7対応 | iOS 7エンジニア勉強会