iOSDC 2018 day2 参加メモ

iOSDC 2018の2日目参加メモです。

iPhone が数秒おきにクラッシュするんだけど!

  • iPhoneが再起動する
  • 12月2日から突然発症
  • 一部アプリの通知をオフにすると解消
  • Zaimサーバ側、Xcodeにエラーなし
  • 原因判明
  • LocalNotificationをコメントアウトしたら発生しなくなった
  • LocalNotificationなしバージョンを作る
  • ユーザを救いたい。が、アプリ削除、通知オフは避けたい
  • 13月は対象外のエラーメッセージが出ていることがわかる
  • AppleからiOS11.2がリリースされて解消する
  • iOS11.2へのアップデートにはアンインストールor通知オフにしなければならず残念
  • 解消後、Blog, Twitter等で一般ユーザ、技術者向けに情報発信
  • 対象iOS: 11.0.x 11.1.x
  • なぜZaimが対象になったか?
  • 日本がJSTで12月2日になるのが速い
  • 多くのユーザが使っている

まとめ

  • Blog, Twitter等の調査
  • デモコードを可能な限り作って、テストする
  • 英語で騒ぐ
  • 修正版を申請して、広報する

詳解Fastfile

Fastlane活用事例

  • コードレビュー
  • リリースフロー管理
  • サブミット
  • リリースビルド(CIのみ)。slack bot と 定期実行。
  • 社内向けビルド自動化。Enterpriseライセンス
  • メトリクスの監視。ビルド時間、CIのコードカバレッジ

Fastfileの基本

  • ありがちなこと。なんでもfastfileに書きがち
  • 基本的にはRubyで、便利な独自機能もある
  • private_lane。内部からしか呼べないlane
  • private_lane と def は違う
  • returnではなくnextを使う
  • importを使って巨大なFastfileを分割できる
  • # vim: syntax=ruby と1行目に書くとシンタックスハイライトがつく
  • 公式ドキュメントのAdvancedに詳しく書かれている

読みやすいFastfile

  • Fastfileへの記述量を減らしていく
  • Fastfileはコードを書く場所ではない
  • 多くの変数定義をFastfileに書かない。環境変数を使う
  • 設定とロジックを分離する
  • 引数に渡すのではなく設定ファイルGymfileなどに書く
  • Actionを分離する
  • プロジェクトごとにActionを定義できる
  • new_actionコマンド
  • Action分離のメリット
    • パラメータのバリデーションがしやすいConfigItem
    • テストが書きやすいrspec
    • ConfigItemのtype:Arrayはカンマ区切りの文字列がくるとArrayに変換してくれる
  • コードサイン
  • 複雑になりがち
  • コードサインはXcodeで設定するといいがXcodeは不安定なので微妙かも

デバッグ技術

Depth in Depth

  • Depth:深度、奥行き
  • 写真をボケさせるのに使われている
  • その他にも背景を飛ばしたり、3Dスキャンしたり、できる
  • zozosuiteも使っている(っぽい)

深度の種類とセンサ

  • 視差:Disparity
  • 左右の見え方の違い
  • 7/8 Plus, X の背面カメラ
  • DepthはDisparityから計算できる
  • Time??? todo あとで修正
  • 光 Ture Depth??? todo あとで修正
  • iPhoneXの前面カメラ

実装

  • どの方法でも最終的にはAVDepthDataで取得
  • depthDataMap 深度マップのピクセルデータ
  • 方法1:写真から、ImageIO利用
  • 方法2:カメラからリアルタイム、AVFoundationを利用
  • 方法:ARキットから、captureDepthDataというプロパティ
  • 方法に優劣はない。用途によって選ぶ

背景合成について

  • CIBlendWIthMaskを使うだけ
  • CIFilterはMetalのパイプラインで実行されるので速い
  • 深度なので背景が???でうまくいかない
  • 顔認識して深度マップを2値化する
  • ギザギザもある。スムージングで対策
  • 深度が取れないところがある。holesという。RGBで保管
  • isFilteringEnabled便利なプロパティ
  • PortraitMatteがある
  • セグメンテーション特化したマスクを取得できる
  • 利用条件有り
  • 静止画のみ
  • 人が写っていないといけない

ARKit Maniacs

発表資料

QRコード読み取り?楽勝ですよ😙」=>「AVFoundationを信じたおれがバカだった😇」

発表資料

  • 今回の例ではQRコードが8つあった
  • 調べてみる
  • QRコードの連結機能なことを知る
  • 最大16個に分割可能
  • JISの規格を確認
  • 複数のモードがあることも知る
  • AVFoundationでは無理、、、ではなくなった
  • iOS11のCIQRCodeDescriptorで可能
  • ただし、デコードは自前。モード毎に実装する必要がある

Synchronized iPhones!

発表資料

やりたいこと

  • リフレッシュレートに合わせて同じ画面を表示する
  • 誤差は16.66msec以内に抑える
  • リフレッシュレートにあわせた描画にはCADisplayLinkを使う

時刻同期

  • iOSはどのように時刻を合わせているか
  • インターネット上の時刻サーバ(NTP)、GPS、携帯電話回線(NITZ)の3つ
  • どれが優先されているかは公表されていない
  • NTPとNITZはUTCGPSGPS TIME
  • JST, UTC, TAIとGPS TIMEについて

バイス同期

  • 時刻同期では実現できないことが判明Bluetoothを使うことに
  • 平均して20-40msecの遅延が発生した
  • 通信の遅延を消去する事を考える
  • 通信時間の削除
  • 通信時間は距離に依存する
  • PeripheralとCentralが相互に誤差を送り合って補正することで遅延を収束させられた
  • 通信障害が発生
  • 接続可能なCentral数は仕様上の制限はないが制限がある
  • 2階層から複数階層にしたが安定性に課題あり

UIViewとUITextInputで作る縦書きのTextView

発表資料

UITextInputの機能の紹介もあり有用