「yidev 第16回勉強会」に参加してきました

2014年9月27日(土)に開催されましたYokohama iPhone Developers 勉強会 第16回に参加してきました。

iOS界隈で著名な方々が集まる非常にハイレベルな勉強会でした。

Getting started with Handoff

2tchの中の人、『iOS SDK Hacks』の著者である@sonsonさんによる発表。

  • Handoffでできること
    • ネイティブアプリからOS XSafariを起動
    • OS XSafariからネイティブアプリを起動
    • ネイティブアプリ同士でhandoff可能
    • アプリが死んでるときでも自動起動
  • 必要要件
  • UserInfoの中にオブジェクトを入れて、投げる
  • NSUserActivityのインスタンスがスコープを外れると落ちる
  • Streamを使えば大容量のファイルを通信可能

Custom Keyboard について

特殊文字の中の人である@haranicleさんによる発表

  • Custom KeyboardはiOS8から導入されたApp Extensionの一つ
    • システムキーボードの代わりに使用できる
  • 機能
    • NextKeyboardは絶対必要
      • 他のキーボードに移れなくなるため
    • ガイドラインではシステムキーボードみたいにしろって書かれている
    • ホストアプリがカスタムキーボードの使用を拒否していたら使えない
  • UIInputViewControllerを使って実装していく
    • 毎回initから呼ばれるので、initからviewDidAppearまでを出来る限り軽くすべき
    • ボタンの表示はNextKeyboardボタンだけでも早く表示する
    • StoryboardはUIInputViewControllerには使えない
  • ハマりどころ
    • シミュレータでキーボードが出ないときはToggleSoftwareKeyboardで出す
    • コードでAutoLayout設定するのが大変
  • その他
    • viewDidAppear以降のタイミングならキーボードの高さを買えられる
    • Info.plistからネットワークへの接続や位置情報収集の設定が可能
      • In-App Purchaseも設定可能

UIテストの決定版

@kitasukeによる発表

  • UIテストツールの決定版などない
  • UIテストの目的
    • 思わぬところで起こるUI関連の不具合を防ぐ
  • あまり変わらないなところをUIテストすべき
  • UI操作はほとんどできる
    • カメラロールから写真選択ができなかった
  • Accessibilityを使っているツール
    • 対応する箇所を埋めていく
  • XCTestを継承しているのでほぼ一緒
  • 全画面遷移のスクリーンショットを保存可能
    • しかし画像をいちいち見てられない
    • ImageMagickのmontageコマンドを使えばタイル状にできる
    • ImageMagickcompositeコマンドを使えば画像のdiffが取れる
  • Travis CIでそのテストも可能
  • UIテストの利点・欠点
    • 良い点:運用コストが下がる
    • 悪い点:UI実装者とテストケース実装者が異なる

スクショから始まるデバッグについて

@dealforestさんによる発表。

  • シミュレーションでのデバッグは容易だが、AppStoreからインストールされたアプリでのデバッグが非常に困難
    • アプリを配布した後は、print debugやbreak pointがほぼ不可能
    • 情報が少なくてもバグが再現できればよい
  • できることはあるにはある
    • Crash Reportの収集
      • Clashlitics、Bugsnagなど
      • クラッシュしないとでてこない
    • NSError、NSExceptionの収集
    • スクショをとって共有
    • その他
      • Helpshiftとかでユーザからの問い合わせ
      • レビューを見る、エゴサーチ
  • ユーザからこんなバグがあったとスクショが送られてきたとする
    • スクショからバグを推測するのがたいへん
    • デバッグに必要な情報が欲しい
    • 画像としてそういう情報を出力すればいいじゃない
  • DFTDebugScreenshotを作った
  • 考えられる応用
    • AutoLayoutでConstraintsで出力できる
    • UIWebViewでjsの情報を出力できる
  • 今後
    • UIViewControllerのdebugObjectをいつでも取得できるようなinterfaceを追加するつもり
    • colorizeして画像にするつもり
    • AccessTokenやcokieを出力したとき用に暗号化

SpriteKit ゲームを Swift で書いてみる

『Xcode5完全攻略』著者である@studioshinによる発表。

  • WWDC行ってきた
    • Swift登場した
    • 忙しくて手が回せていなかったがキャッチアップした
  • 著書に収録しているObjective-Cで書いたシューティングゲームSwiftで書き直した
  • ほとんど1対1で書いていける
    • アクションもほぼ対でかける
  • asを書くキャストが慣れない
  • !、?のオプショナルが必須になり、そこでエラーがよくでる
    • オプショナル大変

ドメイン駆動開発 入門編

cocominapさんによる発表。

  • ドメインは現実世界寄りの考え方
    • Todo管理アプリがあったとして、タスク記録やスケジュール管理がドメイン
    • Taskなどのクラスがドメインで、Networkのようなクラスは非ドメイン
  • お客様から開発者全てを含めてチーム
    • チームの真ん中にドメインを持ってくる
    • チーム全体が共通の言語・ドキュメントを使う
  • メリットは行き違いや混乱を防ぐことができる
  • 最適な概念を見つけていく
    • 最初から完璧はない
  • モデルと実装を結びつける
  • 以下、質疑など
    • ドメイン駆動開発は何百人月を要するような巨大なソフトウェア開発を対象としている
      • スマホアプリ開発では誤解が生まれにくい
    • ドワンゴPHPでぐちゃぐちゃだったソフトウェアをDDDを用いてScalaで書き直した
    • すごくいい本 -> 『エリック・エヴァンスドメイン駆動設計』