radioc@?

レディオキャットハテナ

【勉強会メモ】Mobile Act OSAKA #8

mobileact.connpass.com

  • 日時:2019/02/15(金) 18:40 〜 21:30
  • 場所:Osaka Innovation Hub (大阪イノベーションハブ)

いつもお世話になっているフェンリルさんのMobile Actです。懇親会でのビールのこだわりが最高です。

How I develop Sketch Native Plugin

griffin_stewie さん

speakerdeck.com

遅刻して聞けなかったので資料のみです。

ReactorKitでテストしやすくする

usami-k さん

speakerdeck.com

github.com

Testabilityに注目

  • Viewの責務
    • UI操作→ActionとしてReactorに渡す
  • Reactorの責務
    • Action→処理を行いStateを生成する
  • Viewの責務
    • State→UIに表示する

View

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 さん

speakerdeck.com

背景

  • iOS開発2名、デザイナ1名
  • とにかくスピード感がほしい
  • 非同期作業
  • スクラップ&ビルド

数日後⇒大規模なリファクタリング

  • UIを追加しづらくなる
  • 勉強&教育コスト

Fat View Contorllerの闇に落ちていく

→巨人の方の上に乗る

MicroViewController

github.com

UIパーツそれぞれをViewControllerで作ってしまう

ViewControllerに3つのプロトコル

ContainerViewで実装

  • ライフサイクル・画面遷移コードが分割
  • レイアウト時間が短縮
  • クロスアーキテクチャで実装可能

恩恵

  • 開発速度:体感3倍
  • 1ViewControllerのコード:500くらいまで
  • パフォーマンス向上

iOS/Androidでドキュメントスキャナーを作ってみた

itok さん

speakerdeck.com

PDFカメラ

  • カメラで書類を撮影
  • 撮影した写真から切り抜く範囲を調整
  • 必要があれば回転
  • 1〜3ページ分繰り返して最後に画質を指定してPDFとして書き出す

技術要素

  • 矩形認識
  • 矩形切り抜き
  • PDF書き出し

矩形認識

  • カメラプレビュー表示
  • リアルタイムで認識された矩形を重ねて表示
  • 検出された矩形の中で一番大きなものを採用
  • 撮影ボタン→画像

Android

iOS

  • AVKit framework
  • Vision framework

矩形切り抜き

  • ユーザー操作で切り抜き部分を調整
  • 切り抜き+台形補正

Android

iOS

  • CoreImage framework

PDF書き出し

  • 指定された画質で書き出す
  • A4orレターサイズに収まる感じのサイズに調整
    • 北米はレターサイズ
    • それ以外はA4

Android

  • Apache PDFBox
  • 標準のPDF APIは画像の圧縮が効かなかった

iOS

  • UIGraphicsBeginPDFContextToFile
  • UIGraphicsBeginPDFPageWi

雑感

  • 矩形認識はiOSVisionが圧倒的に楽で早い
  • カメラの向き変換が相変わらず面倒
  • カメラプレビュー、撮影画像、UI間の座標変換も相変わらず面倒

Material Themingを使ってみよう

Kazuki Watanabe さん

speakerdeck.com

Material Designとは

Material Theming

  • Material Designをカスタマイズしてアプリの個性や世界観を出す
  • 属性(Color,Shape,Typography)を決めることでプロジェクトのテーマが作れる

Color

Shape

  • 角を切ったり丸めたりした形

Typography

  • H1,H2,H3,H4...

Material Design

Color Themingの適用

  • <color>

Shape Themingの適用

  • Small Components
  • Medium COmponents
  • Large Components

Typography Themingの適用

  • フォントの適用

最後に

  • 表現できる幅が広がった
  • AndroidだけでなくiOS、Flutter、Webでも利用できる
  • たくさんのUI Componentsが利用できる

Managed App Configuration について 〜MDMiOSアプリ設定の配信〜

oishi さん

  • Managed App Configuration
  • MDM(Mobile Device Management)

クラウド型サービス

  • 設定を流せる
  • アプリを消しても入れ直す
  • アプリの中の設定は配信できなかった

App Storeのアプリやインハウスアプリを登録

暗号化されないのでパスワードなどは設定しないように

イテレーションとRustで見るSwiftの所有権

hokuron さん

speakerdeck.com

Ownership Manifest

  • 所有権に関する提案や考察
  • 実装の優先順位
  • 今後仕様が変わることもある

イテレーションにおける所有権

  1. 不変イテレーション
  2. 可変イテレーション
  3. 消費イテレーション

不変イテレーション

  • イテレーションの中で要素を変更しない
  • 要素の取り出しにコピーが発生しない
  • Arrayなど内部にストレージを持つ型はイテレーションの中でArrayそのものを変更できない

可変イテレーション

  • イテレーションの中で要素を変更可能
  • 要素の取り出しにコピー不要
  • Arrayの場合排他アクセスが発生
  • Arrayにアクセスができない
  • NSArrayなどの参照型Arrayには適用されない

Rustにおける共有参照・可変参照

  • 共有参照
    • 共有参照としての借用が終わるまで可変操作(借用)ができない
    • 参照中にもとの値が変更されないことを保証
    • 安全
  • 可変参照
    • 可変参照としての借用が終わるまで別の借用ができない
    • 変更中の値が使われないことの保証
    • 安全

消費イテレーション

  • for in →いつものイテレーション
  • non-copyable型から要素の所有権を得る
  • Sequence protocol
    • 破壊的な消費をしながらのイテレーション
    • 1度目とそれ以降が同じになるとは限らない

Rustにおける消費イテレーション

まとめ

不変イテレーション

  • 変数を shared で宣言
  • nonmutaiting な操作
  • 可変操作ができない
  • Rustは安全

可変イテレーション

  • inout で宣言
  • ループ中でコレクションにアクセスできない
  • Rustは安全

消費イテレーション

  • 変数をownedで宣言
  • Rustは安全

まとめ

  • Rustは安全