SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
マルチタスキングを考慮した
iPadアプリ開発
NOV/18,2015 安達 彰典
自己紹介 : 安達彰典@adachi_c
• 趣味
・作ってるゲーム(C++) ・qMapEditor(objc)
(マップ・エディタ)
・qMapBuilder(Go)
(自動地形生成)
スライドの目的
• iOS9対応iPadアプリを作るにあたって苦労した
点、工夫すると良さそうな点を共有
目次
1.AppCode
2.開発フロー
3.Carthage
4.iPad開発の特徴
5.ワイヤーフレーム
6.その他考慮ポイント
7.モデル/ビューの完全な分離
8.描画関連デリゲート順番
9.Swiftについて
10.まとめ
iOS9とAppCode
• 使いたい
• 11月3日までAppCode3.2だった
• Xcode7に対応していない
• JetBrainsに金払いながらもXcodeを使ってる期間
iPadアプリ開発/最初の分岐
• iOS7に対応するのか?
• マルチタスキングに関係ないが苦難の道
• 主にSwiftライブラリ/8以上対応が多い
• ユニバーサルバイナリか?
• マルチタスキングに関係ないが苦難の道
iPadアプリ開発の特徴
• Split view
• iOS9の新機能
• Compact(SizeClass)とRegular(SizeClass)の2パターンの画面設
計が必要
• 回転
• LandscapeとPortraitも、traitCollectionから引っ張ってこれる
が、iOS7以前ではtraitCollectionがない
• 結局書き分ける
ワイヤーフレーム
• QAしやすいように作ることが全て
• 作り手も使い手も理解しやすいものを作る
• 状態遷移を明確化し、アプリ全体のルールとする
• 状態/イベント/アクション
その他考慮ポイント1
• 開発メンバーが2人以上ならこの辺を統一しておく
と良いかもしれない
その他考慮ポイント
• あとからのgrepを考慮
• 具象に対する呼び方、用語の統一
• クロージャかデリゲートか
• 迷ったらデリゲート
• 大事なやつはアクセサを作る
その他考慮ポイント
• assert
• スキあらばあらゆる箇所に入れる
• 状態数
• とにかく状態を減らす
• クロージャ
• ヒープ渡しでなく、スタック渡しするようにする
• デリゲートのほうが一本の線で表せてオブジェクト指向崩さない
その他考慮ポイント
• シングルトン
• 実質的なグローバル変数、追加時は厳格に協議
• オブジェクト指向を壊す
その他考慮ポイント
• NSNotification
• 逃げの設計
• オブジェクト指向を壊す
• メモリリーク+postNotificationで死はよくある話
その他考慮ポイント
• 値渡しか参照渡しか
• 値渡しを使う
• モデルはstructでいいかな感
• パフォーマンスが落ちるところだけ参照渡しに
モデル/ビューの完全な分離
• あちこちからビューの更新、モデルの更新というこ
とを避けたい
モデル/ビューの完全な分離
• メインループを意識する
• 1.ユーザアクション以外のイベント->モデル操作
• 2.ユーザアクション->モデル操作
• 3.モデル操作された分のビュー操作
• 1ループで
• モデル操作フェーズ
• ビュー操作フェーズ
• をわかりやすくする。
モデル/ビューの完全な分離
• ビューとモデルの不整合をなくすとは
• すなわち、状態の把握、同期
• レンダリング時にいつ何が呼ばれるかを整理
• その中でsplit時、rotate時の呼びだされ順を知る
描画関連デリゲート順
• 前提
• storyboardで基本の骨組みを作る
• 個々のビューはxibをロードする
• 状態が多いので、なるべくコード量を減らしたい
• 状態の数が多いほど不整合発生する
描画関連デリゲート順
• ビューの操作
• updateViewConstraints,
• updateConstraints
• layoutSubview
• からの操作に限定
• アニメーションなどもlayoutConstraintsのみ使う
描画関連デリゲート順
• 注意ポイント
• User Interaction/rotate/splitがどこに入るか?
• アニメーションをどうやるのか?
• タップハンドラなどから実行
• extensionしまくるのも手
• ヘルパを用意、これもgrepしやすいと良い
描画関連デリゲート順
• 何を使っていくか
• StoryBoard, Xibに定義していればコードを記述しな
くても良い
• 記述する場面(いずれもレアケース)
• xibをロードしないviewの生成、貼り付け、剥がし
• 回転やsplitしたあとで、状態がかわるとき
描画関連デリゲート順
• UIViewController
• 1.viewWillLayoutSubviews(ビューが再レイアウトされるときに呼ば
れる)
• 使わない
• 2.viewDidLayoutSubviews
• 使わない
• 3.updateViewConstraints(Constraintsが変更されるときに呼ばれる)
• 使わない
描画関連デリゲート順
• UIView
• 1.layoutSubviews(NeedsLayoutが有効時)
• 使う
• やること
• removeFromSuperview
• addSubview
• addConstraints
• 2.updateConstraints(NeedsUpdatedConstraintsが有効時)
• 使わない
描画関連デリゲート順
• 回転
• iOS7
• 1.willRotateToInterfaceOrientation
• 2.didRotateFromInterfaceOrientation
• 使う
• やること:
• C/Rの状態変更後のビュー調整
描画関連デリゲート順
• 回転
• iOS8,9
• viewWillTransitionToSize
• traitCollectionWillChange
• traitCollectionDidChange
• 使う
• やること:
• C/Rの状態変更後のビュー調整
描画関連デリゲート順
• Split View
• 0.デバイダーをつまんだ
• 1.applicationWillResignActive
• 2.デバイダーを動かす
• 3.各境界に達したときにlayoutSubviewが呼ばれる
• 4.デバイダーを離す
• 5.SizeClassが変わっていればdidChangeTraitCollectionが呼ばれる
• didChangeTraitCollectionで状態変化調整しておけば基本的になにもしなくて良い
結果こうなる
• TopViewController一強時代
• デリゲート経由での通知を使う
• Notificationやシングルトンをやめる
• よく使うところはオンメモリ(記事/リストのビューはキャッシュ)
• アニメーションはヘルパ
• コード的にはextensionを作りまくる
• Split View「そのもの」については対応しなくて良い
Swiftも使った所感
• enum無双
• varが定義でき、それぞれのcaseに機能もてる
• エンドポイントのURLかえすやつとか
• extention無双
• 可読性アップのためにとにかく分ける
• ジェネリクス
• 共通処理をまとめられる
• APIアクセスのコードなどで使ってます
• CommonRequestやCommonResponseを継承したものをFetcher<Res>などとしてわたして、クラス
毎のパースが動作
まとめ
• マルチタスキングとか使いたい、iOS9/Swift開発したいときは
deployment target iOS8以上がオススメ
• とにかく状態が多いのでQAしやすいように状態を整理するの
がオススメ
• コードでビューを制御しようとするといっぱいかかないとダ
メなのでxibやstoryboardに書くのがオススメ
• Swift使いたい人は、とにかくenumを伸ばしていくのオススメ

Weitere ähnliche Inhalte

Andere mochten auch

iOS 9 Overview - iOS 9 Bootcamp in Tokyo - 20150930
iOS 9 Overview - iOS 9 Bootcamp in Tokyo - 20150930iOS 9 Overview - iOS 9 Bootcamp in Tokyo - 20150930
iOS 9 Overview - iOS 9 Bootcamp in Tokyo - 20150930Ichiro Yamamoto
 
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)徹 上野山
 
TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。tak9029
 
Mix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-CMix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-CGoichi Hirakawa
 
Server Side Swift with Swag
Server Side Swift with SwagServer Side Swift with Swag
Server Side Swift with SwagJens Ravens
 
自作アプリを watchOS 2 対応した話 〜FastCheckin編〜
自作アプリを watchOS 2 対応した話 〜FastCheckin編〜自作アプリを watchOS 2 対応した話 〜FastCheckin編〜
自作アプリを watchOS 2 対応した話 〜FastCheckin編〜Kosuke Ogawa
 
Swiftでの関数型プログラミングについて考えていること
Swiftでの関数型プログラミングについて考えていることSwiftでの関数型プログラミングについて考えていること
Swiftでの関数型プログラミングについて考えていることShingo Sato
 
iOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバiOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバSyo Ikeda
 
奥行きを意識したプロダクト-iOS9で変わる体験-
奥行きを意識したプロダクト-iOS9で変わる体験-奥行きを意識したプロダクト-iOS9で変わる体験-
奥行きを意識したプロダクト-iOS9で変わる体験-正典 三橋
 
Beyond JSON with FlatBuffers
Beyond JSON with FlatBuffersBeyond JSON with FlatBuffers
Beyond JSON with FlatBuffersMaxim Zaks
 
Xcode 7 の新しいところ #cm_ios9
Xcode 7 の新しいところ #cm_ios9Xcode 7 の新しいところ #cm_ios9
Xcode 7 の新しいところ #cm_ios9Tomohiro Kumagai
 
Swift2.x を Scala からみる
Swift2.x を Scala からみるSwift2.x を Scala からみる
Swift2.x を Scala からみるYuichi Adachi
 
コードを書きやすくしてくれる Xcode の基本機能 #NSStudy #devsap
コードを書きやすくしてくれる Xcode の基本機能 #NSStudy #devsapコードを書きやすくしてくれる Xcode の基本機能 #NSStudy #devsap
コードを書きやすくしてくれる Xcode の基本機能 #NSStudy #devsapTomohiro Kumagai
 
iOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめようiOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめようToshiyuki Hirata
 
Tensor flow唐揚サーバーロボット rev1
Tensor flow唐揚サーバーロボット rev1Tensor flow唐揚サーバーロボット rev1
Tensor flow唐揚サーバーロボット rev1Yuki Nakagawa
 
賢くなる自動フィードアグリゲータの制作 9月号
賢くなる自動フィードアグリゲータの制作 9月号賢くなる自動フィードアグリゲータの制作 9月号
賢くなる自動フィードアグリゲータの制作 9月号Akio Kondo
 
iOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitiOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitShingo Hiraya
 
Goだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろうGoだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろうTakuya Ueda
 

Andere mochten auch (20)

iOS 9 Overview - iOS 9 Bootcamp in Tokyo - 20150930
iOS 9 Overview - iOS 9 Bootcamp in Tokyo - 20150930iOS 9 Overview - iOS 9 Bootcamp in Tokyo - 20150930
iOS 9 Overview - iOS 9 Bootcamp in Tokyo - 20150930
 
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
 
TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。
 
Mix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-CMix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-C
 
Server Side Swift with Swag
Server Side Swift with SwagServer Side Swift with Swag
Server Side Swift with Swag
 
自作アプリを watchOS 2 対応した話 〜FastCheckin編〜
自作アプリを watchOS 2 対応した話 〜FastCheckin編〜自作アプリを watchOS 2 対応した話 〜FastCheckin編〜
自作アプリを watchOS 2 対応した話 〜FastCheckin編〜
 
Swiftでの関数型プログラミングについて考えていること
Swiftでの関数型プログラミングについて考えていることSwiftでの関数型プログラミングについて考えていること
Swiftでの関数型プログラミングについて考えていること
 
Xcode tips
Xcode tipsXcode tips
Xcode tips
 
iOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバiOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバ
 
奥行きを意識したプロダクト-iOS9で変わる体験-
奥行きを意識したプロダクト-iOS9で変わる体験-奥行きを意識したプロダクト-iOS9で変わる体験-
奥行きを意識したプロダクト-iOS9で変わる体験-
 
shinobu.apk #1
shinobu.apk #1shinobu.apk #1
shinobu.apk #1
 
Beyond JSON with FlatBuffers
Beyond JSON with FlatBuffersBeyond JSON with FlatBuffers
Beyond JSON with FlatBuffers
 
Xcode 7 の新しいところ #cm_ios9
Xcode 7 の新しいところ #cm_ios9Xcode 7 の新しいところ #cm_ios9
Xcode 7 の新しいところ #cm_ios9
 
Swift2.x を Scala からみる
Swift2.x を Scala からみるSwift2.x を Scala からみる
Swift2.x を Scala からみる
 
コードを書きやすくしてくれる Xcode の基本機能 #NSStudy #devsap
コードを書きやすくしてくれる Xcode の基本機能 #NSStudy #devsapコードを書きやすくしてくれる Xcode の基本機能 #NSStudy #devsap
コードを書きやすくしてくれる Xcode の基本機能 #NSStudy #devsap
 
iOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめようiOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめよう
 
Tensor flow唐揚サーバーロボット rev1
Tensor flow唐揚サーバーロボット rev1Tensor flow唐揚サーバーロボット rev1
Tensor flow唐揚サーバーロボット rev1
 
賢くなる自動フィードアグリゲータの制作 9月号
賢くなる自動フィードアグリゲータの制作 9月号賢くなる自動フィードアグリゲータの制作 9月号
賢くなる自動フィードアグリゲータの制作 9月号
 
iOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitiOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKit
 
Goだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろうGoだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろう
 

Ähnlich wie iOS9/iPadとマルチタスキング

iPhoneとAndroidのアプリ開発最新潮流
iPhoneとAndroidのアプリ開発最新潮流iPhoneとAndroidのアプリ開発最新潮流
iPhoneとAndroidのアプリ開発最新潮流Rakuten Group, Inc.
 
第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会codeal
 
Androidレイアウトのスタンダードアプローチ
AndroidレイアウトのスタンダードアプローチAndroidレイアウトのスタンダードアプローチ
AndroidレイアウトのスタンダードアプローチTakao Sumitomo
 
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろうGo mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろうTakuya Ueda
 
Google mapとgps機能を使ってみた。
Google mapとgps機能を使ってみた。Google mapとgps機能を使ってみた。
Google mapとgps機能を使ってみた。Eiichi Tsuru
 
Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Yoshito Tabuchi
 
Android Develop presentation on 19 Sep 2012.
Android Develop presentation on 19 Sep 2012.Android Develop presentation on 19 Sep 2012.
Android Develop presentation on 19 Sep 2012.Kazuaki Ueda
 
Metroアプリの作り方 (COD2012)
Metroアプリの作り方 (COD2012)Metroアプリの作り方 (COD2012)
Metroアプリの作り方 (COD2012)Yasuhiko Yamamoto
 
DEV-022_これから始める Xamarin ~環境構築から iOS/Android/UWP アプリのビルドまで~
DEV-022_これから始める Xamarin ~環境構築から iOS/Android/UWP アプリのビルドまで~DEV-022_これから始める Xamarin ~環境構築から iOS/Android/UWP アプリのビルドまで~
DEV-022_これから始める Xamarin ~環境構築から iOS/Android/UWP アプリのビルドまで~decode2016
 
Android Studio 2.2の紹介@Google I/O 2016東京報告会
Android Studio 2.2の紹介@Google I/O 2016東京報告会Android Studio 2.2の紹介@Google I/O 2016東京報告会
Android Studio 2.2の紹介@Google I/O 2016東京報告会mokelab
 
ネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについて
ネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについてネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについて
ネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについてKazuaki Hidaka
 
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれからCocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれからAkihiro Matsuura
 
Xcode で gulp を使うお話
Xcode で gulp を使うお話Xcode で gulp を使うお話
Xcode で gulp を使うお話Yoichiro Sakurai
 
スマートフォンの方式検討に関する基礎知識
スマートフォンの方式検討に関する基礎知識スマートフォンの方式検討に関する基礎知識
スマートフォンの方式検討に関する基礎知識Yugo Yamamoto
 
ionic - cross platform mobile app 開発
ionic - cross platform mobile app 開発ionic - cross platform mobile app 開発
ionic - cross platform mobile app 開発Seunghun Lee
 
Xcode and iTC submission topics
Xcode and iTC submission topicsXcode and iTC submission topics
Xcode and iTC submission topicsSyo Ikeda
 

Ähnlich wie iOS9/iPadとマルチタスキング (20)

iPhoneとAndroidのアプリ開発最新潮流
iPhoneとAndroidのアプリ開発最新潮流iPhoneとAndroidのアプリ開発最新潮流
iPhoneとAndroidのアプリ開発最新潮流
 
第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会
 
BlackJack
BlackJackBlackJack
BlackJack
 
Androidレイアウトのスタンダードアプローチ
AndroidレイアウトのスタンダードアプローチAndroidレイアウトのスタンダードアプローチ
Androidレイアウトのスタンダードアプローチ
 
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろうGo mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
 
Google mapとgps機能を使ってみた。
Google mapとgps機能を使ってみた。Google mapとgps機能を使ってみた。
Google mapとgps機能を使ってみた。
 
Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版
 
Android Develop presentation on 19 Sep 2012.
Android Develop presentation on 19 Sep 2012.Android Develop presentation on 19 Sep 2012.
Android Develop presentation on 19 Sep 2012.
 
Metroアプリの作り方 (COD2012)
Metroアプリの作り方 (COD2012)Metroアプリの作り方 (COD2012)
Metroアプリの作り方 (COD2012)
 
DEV-022_これから始める Xamarin ~環境構築から iOS/Android/UWP アプリのビルドまで~
DEV-022_これから始める Xamarin ~環境構築から iOS/Android/UWP アプリのビルドまで~DEV-022_これから始める Xamarin ~環境構築から iOS/Android/UWP アプリのビルドまで~
DEV-022_これから始める Xamarin ~環境構築から iOS/Android/UWP アプリのビルドまで~
 
Android Studio 2.2の紹介@Google I/O 2016東京報告会
Android Studio 2.2の紹介@Google I/O 2016東京報告会Android Studio 2.2の紹介@Google I/O 2016東京報告会
Android Studio 2.2の紹介@Google I/O 2016東京報告会
 
ネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについて
ネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについてネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについて
ネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについて
 
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれからCocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
 
HOME'Sアプリ Swift化
HOME'Sアプリ Swift化HOME'Sアプリ Swift化
HOME'Sアプリ Swift化
 
Xcode で gulp を使うお話
Xcode で gulp を使うお話Xcode で gulp を使うお話
Xcode で gulp を使うお話
 
iOS Traning #0
iOS Traning #0iOS Traning #0
iOS Traning #0
 
スマートフォンの方式検討に関する基礎知識
スマートフォンの方式検討に関する基礎知識スマートフォンの方式検討に関する基礎知識
スマートフォンの方式検討に関する基礎知識
 
ionic - cross platform mobile app 開発
ionic - cross platform mobile app 開発ionic - cross platform mobile app 開発
ionic - cross platform mobile app 開発
 
Xcode and iTC submission topics
Xcode and iTC submission topicsXcode and iTC submission topics
Xcode and iTC submission topics
 
Cocos2d platforms
Cocos2d platformsCocos2d platforms
Cocos2d platforms
 

iOS9/iPadとマルチタスキング