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

179 Views

October 09, 13

スライド概要

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

既存アプリのiOS7対応 西 磨翁 2013年10月7日

2.

本日の事例となるアプリ

4.

iOS7対応にも特集されました

5.

ヤフオク!アプリ

6.

IOS6

7.

IOS7対応 途中

8.

IOS7対応 最終形

9.

作業は大きく分けて2つ •iOS7向けに実装方法を変更する •iOS7向けに装飾を行う アイコンの準備・変更については今回は割愛します

10.

ヤフオク!アプリについて •iPhoneが日本に登場してまもな くリリースした歴史あるアプリ •iOS4.3以降をサポート中

11.

iOS7向けに実装方法を 変更する

12.

1.OS毎に処理を分岐する

13.

+ ! ! ! ! ! ! ! ! } (BOOL)isOverThisVersion:(NSString *)version{ NSString! *currentVersion =![[UIDevice currentDevice]systemVersion]; return! (! [currentVersion ! ! ! ! compare: ! ! ! ! ! version ! ! ! ! options: ! ! ! ! ! NSNumericSearch ! ! ! ]! !=!NSOrderedAscending ! ! ); このようなメソッドを用意しておいて OS毎の分岐処理に備えましょう

14.

2.UIViewController での潜り込みに対処する

15.

画面の上部が表示されない!?

16.

iOS7では画面全体が表示領域となる

17.

NavigationBarに潜りこんでしまう

18.

NavigationBarに潜りこんでしまう

19.

対処方法 表示領域の拡張をやめさせる

20.

self.edgesForExtendedLayout = UIRectEdgeNone; ※IOS7の時のみ実行するようにしましょう また、すりガラスの表現が失われます

21.

UIViewControllerにTableView をaddSubviewした場合にも 発生します

22.

画面の上部が潜り込む・・

23.

同じように self.edgesForExtendedLayout = UIRectEdgeNone; ※IOS7の時のみ実行するようにしましょう また、すりガラスの表現が失われます

24.

3.階層構造の変更に対応する その1

25.

iOS6 iOS7 UITableViewCell UITableViewCell superview superview UITableViewCellScrollView superview UITableViewCellContent UITableViewCellContent UIButtonなどの コンポーネント superview UIButtonなどの superview コンポーネント コンポーネントからsuperview.superviewで UITableViewCellにアクセスできなくなりました。

26.

対処方法

27.

+ (UITableViewCell*)searchTableViewCell:(UIView*)view { id target = [view superview]; if (!target) { return nil; } if ([target isKindOfClass:[UITableViewCell class]]) { return target; } return [self searchTableViewCell:target]; } UITableViewCellを探索して 取得するようにする

28.

ご注意! superviewでUITableViewCellにアクセスしようと すること自体、Appleが推奨する方法ではありません。 新規にアプリを作る場合は他の方法をご検討ください。 今後動かなくなる可能性があります。 ヤフオク!アプリは開発の歴史が長く、修正の影響範囲が大 きかったため今回はこのような対応となりました。

29.

4.階層構造の変更に対応する その2

30.

iOS6 iOS7 UITableView UITableView superview superview UITableViewWrapperView superview UITableViewCell UITableViewCell UITableViewCellからsuperviewで UITableViewにアクセスできなくなりました

31.

UITableView *tableView = nil; if (iOS7なら〜) { //iOS7ではcell.superviewではUITableViewWrapperViewが返却される。 //このためUITableViewを取得するためにはcell.superview.superviewと //処理する必要がある tableView = (UITableView*)cell.superview.superview; }else{ tableView = (UITableView*)cell.superview; } UITableViewCellの例と同じように 探索してもよいし、単純な分岐でも大丈夫

32.

くどいようですが・・・ご注意! superviewでUITableViewにアクセスしようと すること自体、Appleが推奨する方法ではありません。 新規にアプリを作る場合は他の方法をご検討ください。 今後動かなくなる可能性があります。 ヤフオク!アプリは開発の歴史が長く、修正の影響範囲が大 きかったため今回はこのような対応となりました。

33.

ヤフオク!アプリでは以上まで の対応を行ってようやく動作 するようになりました。

34.

とりあえず動くレベル

35.

もっとカッコよくしたい!

37.

iOS7向けに装飾を行う

38.

5.タブ上に罫線が表示される 問題を解決する

39.

UITabBarControllerにUIButtonを addSubviewしていると発生する

40.

対処方法

41.

//ダミーのタブバー背景 [[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]]; //罫線除去 [[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];

42.

6.iOS6と同様の罫線表示 にする

43.

iOS7標準 罫線を引く

44.

//セルの罫線のインデントをなくす [UITableViewCell appearance].separatorInset = UIEdgeInsetsZero;

45.

7.「<」アイコンを変更する

46.

iOS7標準 独自アイコン

47.

//ナビゲーションバーの戻るのアイコンを変更 [UINavigationBar [UIImage [UINavigationBar [UIImage appearance].backIndicatorImage = imageNamed:@"header_allow_ios7.png"]; appearance].backIndicatorTransitionMaskImage = imageNamed:@"header_allow_ios7.png"]; iOS7より新たに追加されたメソッド

48.

8.UITableViewStyleGrouped の強制大文字に対応する

49.

iOS6 iOS7

50.

UITableViewStylePlainに変更する または tableView:viewForHeaderInSection: を実装する 他にも方法はありそうですが 上記どちらかでOK

51.

iOS7でも小文字が使える UITableViewStylePlainにしました

52.

9.accessoryはaccessoryViewに 配置する

53.

iOS7だと右づめになっていない

54.

[cell.contentView addSubview:sw]; ↓ cell.accesoryView = sw;

55.

その他のUIの色はtintColorを UIAppearanceで一括指定する ことで対応しました

56.

まとめ • iOS6がリリースされた時と比べ対応工数が格段に多 い。UI変更も含めると余裕を持った工数見積が必要。 ヤフオク!アプリの場合、iOS6の対応を行った時よりも 10倍程度の工数がかかった。 • UIAppearanceを活用して装飾に関する修正量を減らすよ うにする

57.

APPENDIX

58.

リリース後の反応について

63.

色々なご意見を頂いていますが、 IOS7対応後、 DL数はかなり増えました。 一時的ではなく現在も継続してい ます

64.

IOS7対応の参考になれば幸いです ご清聴ありがとうございました