ごんれのラボ

iOS、Android、Adobe系ソフトの自動化スクリプトのことを書き連ねています。

iOSDC 2018 2日目に参加してきた

概要

iOSDC2日目に参加したので、そのまとめ。
参加したセッションまとめと、感想を記しておく。

セッションまとめと感想

登壇者が話したことと感想とが混じっているので、雰囲気で察してくれることを祈る

詳解Fastfile by ぎぎにゃん

  • 資料
  • fastfileの詳細について話すよ
  • fastlineの活用事例
    • コードレビュー
      • Danger用に自社で作ったスペルチェックツール、いいな
    • サブミット
      • CIでリリースビルドしてサブミット
      • SlackBOTからサブミット
      • 定期的にmasterをビルドしてサブミット
        • 強いな
    • 社内向けビルド
      • エンタープライズライセンスでビルドして配信サービスで社内配布
      • PRごとに配布
      • 社内向け配信サービスは16時から話すよ
    • メトリクス収集
  • ありがちなこと
    • なんでもfastfileに書きがち
  • メンテしやすい最高のfastfileの書き方
    • Fastfile
      • 基本的にはRuby
  • import
    • 複数のfastfileを読み込んで実行できる
  • GitHubでシンタックスハイライト
    • 一行目に #vim: syntax=ruby って書くといいよ
  • 公式のAdvanced Featureを読む
  • いろいろ書きやすいがゆえに肥大化する
  • 最高のFastfileとは
    • 書かない
    • コードを書くところではないので、書くものを減らす
  • コツ
    • 値を書きすぎない
      • 環境変数を利用する
    • 設定とロジックを分離する
      • ~fileを利用する
        • Gymfileなど
    • Actionを分離する
      • テンプレートを作るコマンド bundle exrc fastlane new_action があるので、それを利用して作成するとよい
      • パラメータのバリデーションがしやすい
        • 型チェック
      • テストが書きやすい(RSpec)
  • コードサイン
    • AutomaticはCIでこけやすい。理由はわからない
      • よく聞く話だー
    • matchはGitで管理しているプロファイルをいい感じに取得する…らしい
    • 正しい世界観はXcodeのコンフィグレーションを使うのがよいのではないか
      • Xcode9からAutomaticとManualが同居できるようになった
  • 最高の設定
  • fastlaneあるある
    • 手元での確認がだるい
  • デバッガを使う
    • Rubyのデバッガ
      • pry
    • .envrc
    • envchain
    • direnv

Depth in Depth

  • 資料
  • Depth
    • 深度
  • 深度の用途:背景を飛ばす
    • フリマ系アプリで出品時に背景を飛ばすなどの用途がある
  • 深度の用途:3Dスキャン
  • 深度の用途:その他
    • ZOZOスーツの「30センチ後ろにさがってください」などの検知に使っていそう
  • 深度は発想次第で写真以外にも用途がいろいろある!
  • Disparity(視差)
    • 人間の左右の目で見えるものが違う
    • iPhone7以降の背面カメラで利用
  • DepthはDisparityから計算できる
    • Depthの逆数=正規化されたDisparity
  • Time of Flight
    • iPhoneXの前面カメラ
  • iOSで取得する方法
    • AVDepthData
      • 深度を表すクラス
      • どの方法で取得しても最終的にこれが得られる
      • iOS11以上
      • var depthDataMap: CVPixcelData
    • 用途別にわけると3種類
      • 撮影済の写真
      • カメラからリアルタイムに取得
        • AVCaptureDevice
      • ARKitから取得
        • ARFrameにプロパティがある
  • 方法に優劣はなく、用途に応じたものを使う
  • 背景合成の手法
    • マスク画像を基準に、オリジナル画像と背景画像をブレンドする
    • CIBlendWithMask
  • 顔の深度をしきい値に、深度マップを2値化する
  • PotraitMatte
  • どういうケースで、なにができてなにができないのか把握しづらい

5000行のUITableViewを差分更新する

  • 資料
  • UITableViewで差分更新、パフォーマンスの話
  • UITableViewで差分更新する
    • 特徴
      • 行数がたくさんあっても早い
    • 更新方法
      • 全部更新
        • アニメーションなしだが、簡単に使える
      • 差分更新
  • 差分更新をどう実現するか
    • 差分のIndexPathを正確に指定するだけ
    • diffを使おう
  • diffとpatch applyをしている
  • 差分更新はここがいい
    • きれいでわかりやすいアニメーション
  • 既存アプリ+差分更新
    • 来週からでもいれてみたらいい
      • あかんやつw
    • 実際にやってみた
  • 差分更新いれてみた
    • reloadData()を置き換えていく
    • 遅すぎた。Filterが遅すぎる
    • reloadData()のほうがマシでは?
  • パフォーマンス解析するのにInstruments
    • Timer Profiler
  • Timer Profilerでわかること
    • アプリ実行中のCPU負荷の時系列のグラフ
  • differを使って調査
  • 調査した結果、diffに時間がかなりかかっていた
    • firebaseの指標値内に収めたい
  • diffのあとはpatchのパフォーマンス改善
    • 削除に時間がかかる
      • reloadData()に戻すという方法もある
  • diffの行数だけ計算させて、行数が少なければそのままライブラリ、多ければreloadData()を使うという方法をとった
    • 差分更新と多数行削除の共存
  • banjun/GigDiffer というコンセプト実装ライブラリを作った

Synchronized iPhones!

  • 資料
    • まだない
  • Syncしてやりたいこと
    • iOS端末のリフレッシュレートにあわせる
      • 最も早いリフレッシュレートは60fps
    • CADisplayLinkを使えば、リフレッシュレートにあわせて描画できる
  • iOSデバイスの時刻をあわせる
    • NTP、GPS、NITZ

LT

メモ取る時間がない感じなので、諦めた。
全般的にルーキーという感じがまったくしなくて、とても良かった。

下記のLT資料は、あとで読みたい。
Appleのアニメーションはなぜ美しいか考える

まとめ

デザインやアニメーションについての言及があるセッションがあって、音系のセッションもあって、実り多いカンファレンスだ。