SlideShare a Scribd company logo
1 of 20
Download to read offline
CARTHAGE+MVVM
YURU-HUWA LT 2015-12-11
KHANEDA@JUMBOS5
CARTHAGE
CARTHAGE
なんなのか?
▸ cocoapodsに変わる新しいiOSのパッケージ管理ツール
▸ 分散型依存性管理フレームワークとも言われている
CARTHAGE
COCOAPODSとのちがいは?
▸ そもそもの哲学から違う
carthage
$ pod install$ carthage update
+ +
WORKSPACEは
LIBを管理するる
PROJは
LIBを管理しない
Podspec
CARTHAGE
COCOAPODSとのちがいは?
▸ 哲学から違いからうまれるちがい
carthage
分散型 集約型
‣ iOS8からのみ

Dynamic Frameworkを使うため
‣ Dynamic Frameworkなのでビルドが早い

余計なビルドがない
‣ 変にprojファイルをいじらないので健全
‣ Podspec fileが必要
‣ workspaceがごちゃごちゃしている
‣ でもworkspaceはライブラリが管理しやすい
‣ まだメジャー
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
CARTHAGE
LET’S CARTHAGE!!! BUT …
▸ リポジトリ上のコードがdynamic Framework用の

schemeを用意していないといけない
▸ Carthage に対応しているライブラリは Xcode の Shared
Build Scheme を設定しており, この Scheme でビルドする
と Framework が出力されるように設定されています.
https://github.com/SwiftBond/Bond
CARTHAGE
結論
▸ projが綺麗なまま
▸ ビルドも早く
▸ 簡単に使える
▸ 対応していないライブラリにはPull Requestを!
MVVM
MVVM
なんじゃそれ
▸ まぁなんとなく

Model

View

ViewModel



だというのはわかる。

知りたいのは

▸ 何が便利?
▸ どう使えばいいの?
*関係のないKeynoteの

デフォルトの画像
MVVM - なにが便利?
各クラスが公開インスタンス変数を管理することによって、

画面状態の管理を安全に行うアーキテクチャです
ロジック同士のリレーション MVCが準拠される環境でのMVVM
http://rarcher.azurewebsites.net/Post/PostContent/25
MVVM - なにを使おう
流行りは・・・
‣ SwiftBond/Bond 

https://github.com/SwiftBond/Bond

⭐️ 1,891
‣ ReactKit/ReactKit

https://github.com/ReactKit/ReactKit

⭐️ 1,017
‣ ReactiveCocoa/ReactiveCocoa

https://github.com/ReactiveCocoa/ReactiveCocoa

⭐️ 11,600
MVVM - どれがいいのか
‣ SwiftBond/Bond

Libraries for the Swiftbyyohei sugigami 

http://sssslide.com/speakerdeck.com/susieyy/libraries-for-the-
swift
‣ ReactKit/ReactKit

SwiftTask(Promise拡張)でリアクティブプログラミング

http://qiita.com/inamiy/items/d68cdb528b482ee0d8c1
‣ ReactiveCocoa/ReactiveCocoa

ReactiveCocoaをかじってみた

http://qiita.com/paming/items/9ac189ab0fe5b25fe722
それぞれ特徴が違うが関連の定義付け易さで選べばいいと思う
MVVM - 関連の定義付け易さ
‣ ReactKit/ReactKit

SwiftTask(Promise拡張)でリアクティブプログラミング

http://qiita.com/inamiy/items/d68cdb528b482ee0d8c1
‣ streamとか<~が気に食わない・・・
‣ KVOを利用している
var textFieldStream: Stream<String?>?
self.textFieldStream = self.textField.textChangedStream()
(self.textLabel, ”text”)<~ self.textFieldStream
MVVM - 関連の定義付け易さ
‣ ReactiveCocoa/ReactiveCocoa

ReactiveCocoaをかじってみた

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/
MVVM - 関連の定義付け易さ
‣ SwiftBond/Bond

Libraries 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
MVVM - なにが便利?
SWIFTBONDで始めるMVVM
▸ https://github.com/SwiftBond/Bond
import 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でするべき処理が明確になる
MVVM - なにが便利?
DEMO
▸ APIを叩いて結果をTableViewで表示する
▸ 作ろうと思ったらいい感じのがあった

https://github.com/SwiftBond/Bond-Demo-App
ListViewController
ListViewModel
ListCellViewModel
ListCellView
ListCellViewModel
ListCellViewModel
UITableView
ListCellView
ListCellView
bind
MVVM - なにが便利?
説明
ListViewController
ListViewModel
ListCellViewModel
ListCellView
ListCellViewModel
ListCellViewModel
UITableView
ListCellView
ListCellView
bind
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
}
まとめ
CARTHAGE, MVVM
▸ どっちも便利
▸ carthage
▸ ビルド時間の短縮
▸ 綺麗なprojファイル
▸ MVVM
▸ Bindで振る舞いを切り分ける

More Related Content

Similar to Carthage+mvvm

Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)
Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)
Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)オラクルエンジニア通信
 
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法Kazuto Kusama
 
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTeruo Kawasaki
 
Asakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for HadoopAsakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for HadoopTakashi Kambayashi
 
Gcpug tokyo february 2016
Gcpug tokyo february 2016Gcpug tokyo february 2016
Gcpug tokyo february 2016Makoto Uehara
 
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜Yuji Nojima
 
Cloud Foundryで学ぶ、PaaSのしくみ講座
Cloud Foundryで学ぶ、PaaSのしくみ講座Cloud Foundryで学ぶ、PaaSのしくみ講座
Cloud Foundryで学ぶ、PaaSのしくみ講座Kazuto Kusama
 
Tech lounge gcp_20190313
Tech lounge gcp_20190313Tech lounge gcp_20190313
Tech lounge gcp_20190313yutaka_baba
 
鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料Takashi Aoe
 
Hadoopの概念と基本的知識
Hadoopの概念と基本的知識Hadoopの概念と基本的知識
Hadoopの概念と基本的知識Ken SASAKI
 
ゾウ使いへの第一歩
ゾウ使いへの第一歩ゾウ使いへの第一歩
ゾウ使いへの第一歩Fumito Ito
 
A 2-3ゾウ使いへの第一歩 hadoop on azure 編
A 2-3ゾウ使いへの第一歩 hadoop on azure 編A 2-3ゾウ使いへの第一歩 hadoop on azure 編
A 2-3ゾウ使いへの第一歩 hadoop on azure 編GoAzure
 
Drupal business consortiam in Japan:DBCJ 20140909
Drupal business consortiam in Japan:DBCJ  20140909Drupal business consortiam in Japan:DBCJ  20140909
Drupal business consortiam in Japan:DBCJ 20140909Hidekazu Ikeda
 
Hadoop Conference Japan_2016 セッション「顧客事例から学んだ、 エンタープライズでの "マジな"Hadoop導入の勘所」
Hadoop Conference Japan_2016 セッション「顧客事例から学んだ、 エンタープライズでの "マジな"Hadoop導入の勘所」Hadoop Conference Japan_2016 セッション「顧客事例から学んだ、 エンタープライズでの "マジな"Hadoop導入の勘所」
Hadoop Conference Japan_2016 セッション「顧客事例から学んだ、 エンタープライズでの "マジな"Hadoop導入の勘所」オラクルエンジニア通信
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来Kazuto Kusama
 
内製パッケージによるHadoopデータ解析基盤の構築と運用
内製パッケージによるHadoopデータ解析基盤の構築と運用内製パッケージによるHadoopデータ解析基盤の構築と運用
内製パッケージによるHadoopデータ解析基盤の構築と運用cyberagent
 
AsakusaのドキュメントをDashで見たい
AsakusaのドキュメントをDashで見たいAsakusaのドキュメントをDashで見たい
AsakusaのドキュメントをDashで見たいTakashi Aoe
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -Yukihiko SAWANOBORI
 

Similar to Carthage+mvvm (20)

Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)
Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)
Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)
 
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
 
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoop
 
Asakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for HadoopAsakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for Hadoop
 
Gcpug tokyo february 2016
Gcpug tokyo february 2016Gcpug tokyo february 2016
Gcpug tokyo february 2016
 
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
 
Cloud Foundryで学ぶ、PaaSのしくみ講座
Cloud Foundryで学ぶ、PaaSのしくみ講座Cloud Foundryで学ぶ、PaaSのしくみ講座
Cloud Foundryで学ぶ、PaaSのしくみ講座
 
Tech lounge gcp_20190313
Tech lounge gcp_20190313Tech lounge gcp_20190313
Tech lounge gcp_20190313
 
鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料
 
Hadoopの概念と基本的知識
Hadoopの概念と基本的知識Hadoopの概念と基本的知識
Hadoopの概念と基本的知識
 
Hadoop事始め
Hadoop事始めHadoop事始め
Hadoop事始め
 
ゾウ使いへの第一歩
ゾウ使いへの第一歩ゾウ使いへの第一歩
ゾウ使いへの第一歩
 
A 2-3ゾウ使いへの第一歩 hadoop on azure 編
A 2-3ゾウ使いへの第一歩 hadoop on azure 編A 2-3ゾウ使いへの第一歩 hadoop on azure 編
A 2-3ゾウ使いへの第一歩 hadoop on azure 編
 
PSGIへの誘い
PSGIへの誘いPSGIへの誘い
PSGIへの誘い
 
Drupal business consortiam in Japan:DBCJ 20140909
Drupal business consortiam in Japan:DBCJ  20140909Drupal business consortiam in Japan:DBCJ  20140909
Drupal business consortiam in Japan:DBCJ 20140909
 
Hadoop Conference Japan_2016 セッション「顧客事例から学んだ、 エンタープライズでの "マジな"Hadoop導入の勘所」
Hadoop Conference Japan_2016 セッション「顧客事例から学んだ、 エンタープライズでの "マジな"Hadoop導入の勘所」Hadoop Conference Japan_2016 セッション「顧客事例から学んだ、 エンタープライズでの "マジな"Hadoop導入の勘所」
Hadoop Conference Japan_2016 セッション「顧客事例から学んだ、 エンタープライズでの "マジな"Hadoop導入の勘所」
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
 
内製パッケージによるHadoopデータ解析基盤の構築と運用
内製パッケージによるHadoopデータ解析基盤の構築と運用内製パッケージによるHadoopデータ解析基盤の構築と運用
内製パッケージによるHadoopデータ解析基盤の構築と運用
 
AsakusaのドキュメントをDashで見たい
AsakusaのドキュメントをDashで見たいAsakusaのドキュメントをDashで見たい
AsakusaのドキュメントをDashで見たい
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
 

Recently uploaded

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 

Recently uploaded (10)

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 

Carthage+mvvm