【勉強会メモ】Mobile Act OSAKA #8
- 日時:2019/02/15(金) 18:40 〜 21:30
- 場所:Osaka Innovation Hub (大阪イノベーションハブ)
いつもお世話になっているフェンリルさんのMobile Actです。懇親会でのビールのこだわりが最高です。
How I develop Sketch Native Plugin
griffin_stewie さん
遅刻して聞けなかったので資料のみです。
ReactorKitでテストしやすくする
usami-k さん
- RxSwift
- Flux
- 軽量なフレームワーク
Testabilityに注目
- Viewの責務
- UI操作→ActionとしてReactorに渡す
- Reactorの責務
- Action→処理を行いStateを生成する
- Viewの責務
- State→UIに表示する
View
- ActonとStateをバインディング
Reactorの処理
mutate()
- Actionを受け取ってMutationを返す
- 具体的な処理を行うObservableを生成
- 実際に処理を行うかどうかの判断などはReactor
- Viewがシンプルになる
reduce()
- Mutaitonと前のStateを受け取ってStateを返す
- View側では前の状態を考慮しなくて良い
Viewの単体テストを考える
「オブジェクトの責務を果たしているか」をテスト
- UI操作⇒Action
- State⇒UI表示
Actionのテスト
- コードでUI操作を発生
- ReactorにActionオブジェクトを渡されたことを確認
- Reactorのスタブを用意
- ReactorKitで用意されている
Stateのテスト
- やはりReactorのスタブ
Viewのテストまとめ
- Viewが責務を果たしている
- Viewの実装としてはバインディングがちゃんとできている
- Testability向上でシンプルになった結果単純すぎてテスト不要ではというレベル
Reactorの単体テスト
- そのオブジェクトの責務を果たしているか
- コードでActionを発生させてStateをテスト
- Reactorの中でWebAPI実行
- データベースアクセスなどがあると単体テストしにくい
- Serviceとして外に切り出してスタブ化
まとめ
- ReactorKitでViewとReactorの責務を分離
- ViewやReactorのテストが可能
学生スタートアップがマイクロビューコントローラーを導入してみた話
nade さん
背景
- iOS開発2名、デザイナ1名
- とにかくスピード感がほしい
- 非同期作業
- スクラップ&ビルド
数日後⇒大規模なリファクタリング
- UIを追加しづらくなる
- 勉強&教育コスト
Fat View Contorllerの闇に落ちていく
→巨人の方の上に乗る
MicroViewController
UIパーツそれぞれをViewControllerで作ってしまう
ViewControllerに3つのプロトコル
- init
- update
- delegate
ContainerViewで実装
- ライフサイクル・画面遷移コードが分割
- レイアウト時間が短縮
- クロスアーキテクチャで実装可能
恩恵
- 開発速度:体感3倍
- 1ViewControllerのコード:500くらいまで
- パフォーマンス向上
iOS/Androidでドキュメントスキャナーを作ってみた
itok さん
PDFカメラ
- カメラで書類を撮影
- 撮影した写真から切り抜く範囲を調整
- 必要があれば回転
- 1〜3ページ分繰り返して最後に画質を指定してPDFとして書き出す
技術要素
- 矩形認識
- 矩形切り抜き
- PDF書き出し
矩形認識
- カメラプレビュー表示
- リアルタイムで認識された矩形を重ねて表示
- 検出された矩形の中で一番大きなものを採用
- 撮影ボタン→画像
- AVKit framework
- Vision framework
矩形切り抜き
- ユーザー操作で切り抜き部分を調整
- 切り抜き+台形補正
- CoreImage framework
PDF書き出し
- 指定された画質で書き出す
- A4orレターサイズに収まる感じのサイズに調整
- 北米はレターサイズ
- それ以外はA4
- UIGraphicsBeginPDFContextToFile
- UIGraphicsBeginPDFPageWi
雑感
Material Themingを使ってみよう
Kazuki Watanabe さん
- Googleのデザインシステム
- クロスプラットフォーム向け
Material Theming
- Material Designをカスタマイズしてアプリの個性や世界観を出す
- 属性(Color,Shape,Typography)を決めることでプロジェクトのテーマが作れる
Color
- プライマリとセカンダリ
Shape
- 角を切ったり丸めたりした形
Typography
- H1,H2,H3,H4...
Color Themingの適用
<color>
Shape Themingの適用
- Small Components
- Medium COmponents
- Large Components
Typography Themingの適用
- フォントの適用
最後に
Managed App Configuration について 〜MDMでiOSアプリ設定の配信〜
oishi さん
- Managed App Configuration
- MDM(Mobile Device Management)
クラウド型サービス
- 設定を流せる
- アプリを消しても入れ直す
- アプリの中の設定は配信できなかった
App Storeのアプリやインハウスアプリを登録
暗号化されないのでパスワードなどは設定しないように
イテレーションとRustで見るSwiftの所有権
hokuron さん
Ownership Manifest
- 所有権に関する提案や考察
- 実装の優先順位
- 今後仕様が変わることもある
イテレーションにおける所有権
不変イテレーション
可変イテレーション
- イテレーションの中で要素を変更可能
- 要素の取り出しにコピー不要
- Arrayの場合排他アクセスが発生
- Arrayにアクセスができない
- NSArrayなどの参照型Arrayには適用されない
Rustにおける共有参照・可変参照
- 共有参照
- 共有参照としての借用が終わるまで可変操作(借用)ができない
- 参照中にもとの値が変更されないことを保証
- 安全
- 可変参照
- 可変参照としての借用が終わるまで別の借用ができない
- 変更中の値が使われないことの保証
- 安全
消費イテレーション
for in
→いつものイテレーション- non-copyable型から要素の所有権を得る
- Sequence protocol
- 破壊的な消費をしながらのイテレーション
- 1度目とそれ以降が同じになるとは限らない
Rustにおける消費イテレーション
- 未初期化状態となりコンパイルが通らない
まとめ
不変イテレーション
- 変数を
shared
で宣言 nonmutaiting
な操作- 可変操作ができない
- Rustは安全
可変イテレーション
inout
で宣言- ループ中でコレクションにアクセスできない
- Rustは安全
消費イテレーション
- 変数をownedで宣言
- Rustは安全
まとめ
- Rustは安全