• Like
既存アプリのiOS 7対応 | iOS 7エンジニア勉強会
Upcoming SlideShare
Loading in...5
×

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

  • 38,257 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
38,257
On Slideshare
0
From Embeds
0
Number of Embeds
15

Actions

Shares
Downloads
98
Comments
0
Likes
43

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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