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

43,392 views

Published on

0 Comments
44 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
43,392
On SlideShare
0
From Embeds
0
Number of Embeds
22,933
Actions
Shares
0
Downloads
101
Comments
0
Likes
44
Embeds 0
No embeds

No notes for slide

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

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

×