carthage+mvvm
TRANSCRIPT
![Page 1: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/1.jpg)
CARTHAGE+MVVM
YURU-HUWA LT 2015-12-11 KHANEDA@JUMBOS5
![Page 2: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/2.jpg)
CARTHAGE
![Page 3: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/3.jpg)
CARTHAGE
なんなのか?▸ cocoapodsに変わる新しいiOSのパッケージ管理ツール
▸ 分散型依存性管理フレームワークとも言われている
![Page 4: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/4.jpg)
CARTHAGE
COCOAPODSとのちがいは?
▸ そもそもの哲学から違うcarthage
$ pod install$ carthage update
+ +
WORKSPACEは LIBを管理するる
PROJは LIBを管理しない
Podspec
![Page 5: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/5.jpg)
CARTHAGE
COCOAPODSとのちがいは?
▸ 哲学から違いからうまれるちがいcarthage
分散型 集約型‣ iOS8からのみ
Dynamic Frameworkを使うため
‣ Dynamic Frameworkなのでビルドが早い余計なビルドがない
‣ 変にprojファイルをいじらないので健全
‣ Podspec fileが必要
‣ workspaceがごちゃごちゃしている
‣ でもworkspaceはライブラリが管理しやすい
‣ まだメジャー
![Page 6: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/6.jpg)
CARTHAGE
PERFORMANCE - BUILD
xcodebuild -workspace MvvmSample2.xcworkspace -scheme MvvmSample2 18.92s user 5.33s system 257% cpu 9.415 total
xcodebuild -project MvvmSample.xcodeproj -target MvvmSample 0.49s user 0.10s system 105% cpu 0.559 total
TIME COMMAND +
XCODEBUILD DEBUG
![Page 7: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/7.jpg)
CARTHAGE
LET’S CARTHAGE!!! BUT …
▸ リポジトリ上のコードがdynamic Framework用のschemeを用意していないといけない
▸ Carthage に対応しているライブラリは Xcode の Shared
Build Scheme を設定しており, この Scheme でビルドすると Framework が出力されるように設定されています.
https://github.com/SwiftBond/Bond
![Page 8: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/8.jpg)
CARTHAGE
結論▸ projが綺麗なまま
▸ ビルドも早く
▸ 簡単に使える
▸ 対応していないライブラリにはPull Requestを!
![Page 9: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/9.jpg)
MVVM
![Page 10: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/10.jpg)
MVVM
なんじゃそれ▸ まぁなんとなく
Model ViewViewModelだというのはわかる。
知りたいのは
▸ 何が便利?
▸ どう使えばいいの?*関係のないKeynoteのデフォルトの画像
![Page 11: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/11.jpg)
MVVM - なにが便利?
各クラスが公開インスタンス変数を管理することによって、 画面状態の管理を安全に行うアーキテクチャです
ロジック同士のリレーション MVCが準拠される環境でのMVVM
http://rarcher.azurewebsites.net/Post/PostContent/25
![Page 12: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/12.jpg)
MVVM - なにを使おう
流行りは・・・
‣ SwiftBond/Bond https://github.com/SwiftBond/Bond ⭐️ 1,891
‣ ReactKit/ReactKithttps://github.com/ReactKit/ReactKit⭐️ 1,017
‣ ReactiveCocoa/ReactiveCocoahttps://github.com/ReactiveCocoa/ReactiveCocoa⭐️ 11,600
![Page 13: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/13.jpg)
MVVM - どれがいいのか
‣ SwiftBond/BondLibraries for the Swiftbyyohei sugigami http://sssslide.com/speakerdeck.com/susieyy/libraries-for-the-swift
‣ ReactKit/ReactKitSwiftTask(Promise拡張)でリアクティブプログラミングhttp://qiita.com/inamiy/items/d68cdb528b482ee0d8c1
‣ ReactiveCocoa/ReactiveCocoaReactiveCocoaをかじってみたhttp://qiita.com/paming/items/9ac189ab0fe5b25fe722
それぞれ特徴が違うが関連の定義付け易さで選べばいいと思う
![Page 14: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/14.jpg)
MVVM - 関連の定義付け易さ
‣ ReactKit/ReactKitSwiftTask(Promise拡張)でリアクティブプログラミングhttp://qiita.com/inamiy/items/d68cdb528b482ee0d8c1
‣ streamとか<~が気に食わない・・・
‣KVOを利用している
var textFieldStream: Stream<String?>?
self.textFieldStream = self.textField.textChangedStream()
(self.textLabel, ”text”)<~ self.textFieldStream
![Page 15: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/15.jpg)
MVVM - 関連の定義付け易さ
‣ ReactiveCocoa/ReactiveCocoaReactiveCocoaをかじってみたhttp://qiita.com/paming/items/9ac189ab0fe5b25fe722
‣ Functional Reactive Programming
‣いろんなStreamとViewを関連付ける
self.startTimeTextField.rac_signalForControlEvents(.EditingDidBegin).toSignalProducer()
|> start(next: { _ in
self.dismissKeyboards()
})
https://blog.alltheflow.com/reactive-swift-upgrading-to-reactivecocoa-3-0/
![Page 16: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/16.jpg)
MVVM - 関連の定義付け易さ
‣ SwiftBond/BondLibraries for the Swiftbyyohei sugigami http://sssslide.com/speakerdeck.com/susieyy/libraries-for-the-swift
‣<~は廃止された、bindって書くことになった
‣KVOを綺麗に書ける感じ
textField.bnd_text.bindTo(viewModel.text)
class HomeViewModel {
var text = Observable<String?>(“")
}
http://sssslide.com/speakerdeck.com/susieyy/libraries-for-the-swift
![Page 17: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/17.jpg)
MVVM - なにが便利?
SWIFTBONDで始めるMVVM
▸ https://github.com/SwiftBond/Bondimport UIKit
class HomeViewController: UIViewController {
@IBOutlet weak var label: UILabel! @IBOutlet weak var textField: UITextField! let viewModel = HomeViewModel() override func viewDidLoad() { super.viewDidLoad() textField.bnd_text.bindTo(viewModel.text) label.bnd_text.bidirectionalBindTo(viewModel.text) }
override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
class HomeViewModel { var text = Observable<String?>("") }
Bindされることで、Modelの変更がViewに反映される。Controllerに書くべき処理、Modelでするべき処理が明確になる
![Page 18: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/18.jpg)
MVVM - なにが便利?
DEMO
▸ APIを叩いて結果をTableViewで表示する
▸ 作ろうと思ったらいい感じのがあったhttps://github.com/SwiftBond/Bond-Demo-App
ListViewController
ListViewModel
ListCellViewModel
ListCellView
ListCellViewModel
ListCellViewModel
UITableView
ListCellView
ListCellViewbind
![Page 19: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/19.jpg)
MVVM - なにが便利?
説明ListViewController
ListViewModel
ListCellViewModel
ListCellView
ListCellViewModel
ListCellViewModel
UITableView
ListCellView
ListCellViewbind
var dataSource: ObservableArray<ObservableArray<ListCellViewModel>>!
dataSource.bindTo(tableView) { (indexPath, dataSource, tableView) -> UITableViewCell in let cell = (tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as? ListCellView)! let viewModel = dataSource[indexPath.section][indexPath.row] viewModel.name.bindTo(cell.nameLabel.bnd_text).disposeIn(cell.bnd_bag) viewModel.username.bindTo(cell.ownerLabel.bnd_text).disposeIn(cell.bnd_bag) viewModel.photo.bindTo(cell.avatarImageView.bnd_image).disposeIn(cell.bnd_bag) viewModel.fetchPhotoIfNeeded() return cell }
![Page 20: Carthage+mvvm](https://reader033.vdocuments.mx/reader033/viewer/2022051822/58732ade1a28ab596c8b58a3/html5/thumbnails/20.jpg)
まとめ
CARTHAGE, MVVM
▸ どっちも便利
▸ carthage
▸ ビルド時間の短縮
▸ 綺麗なprojファイル
▸ MVVM
▸ Bindで振る舞いを切り分ける