try! Swift 最速レポート 2日目午後 #tryswiftconf

2016.03.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

try! swift 最速レポート 2日目午後

弊社のレポートは以下になります

こんにちは!モバイルアプリ開発部の田中孝明です。

午前の部の田宮から引き続きお送りいたします。

午前の部はこちら!

目次

モダンCore Data
SwiftコンパイラとLLDBの連携
ライブラリの開発
Protocol-Oriented Programing in Networking
ライブデザイニング
SwiftらしいTable View Controllerの使い方

モダンCore Data

発表者:Daniel Eggert さん

IMG_0122 (1)

  • /objcの著者の方です
  • 既存APIを利用してswiftコードを使ったCoreDataのアクセス方法を記述
  • サンプルなどでよくみるコードはmodel名をStringで記載しているなどコンパイラが役に立たない
  • reactiveなアプローチでコードを書くことができる
  • ChangeEvent(Update / Delete)などもカプセル化する
  • 用いる手段は以下のとおり
    • Protocolを使う
    • Protocol Extensionを使う
  • 改善の対象について
    • insertNewObjectForEntityForName
    • predicate
    • fetchRequest
    • NSValueTransformer
    • NSNotificationCenter
  • 既存のAPIのスピリットを受け継ぎつつ、protocolでwrapperすることでコードの可読性をあげる

SwiftコンパイラとLLDBの連携

発表者:Novall Khan さん

IMG_0172

  • WWDC 15 のLLDBセッションを参照して記載
  • LLDBの持っているコンパイラについて
    • Clang
      • Objective-C / C/C++向け
    • Swift Compiler
      • 本セッションはこちらにフォーカス
  • LLDB内のSwift Compiler完全に分かれたプロセスとして動作する
    • SDK(UIApplication等)にもアクセスできる
  • LLDBデバッグのコマンドについて
    • expressionコマンドを使えばthrowされるexceptionのハンドリングが出来る
    • breakpointは様々な応用が可能
      • 特定のエラーをキャッチした時にブレークさせることができる
  • Custom data formatter in swift
    • デバッグ画面でデータ構造を見やすくすることでデバッグ効率をあげる

ライブラリの開発

発表者:Jeff Hui さん

IMG_0182

  • ライブラリを公開することで多くの人たちと繋がることができる
  • より多くのdeveloperにインストールしてもらえるようにライブラリの品質を一定のレベル保たせる
    • テストで保証する
    • 様々なプラットフォームで検証する
  • テストについて
    • Travis CIがおすすめ
      • Jenkinsと統合することもできる
      • 様々なマトリクスビルドをすることもできる
      • ymlファイル一つだけでいい
  • ライブラリを提供する際は3つのパッケージマネージャに対応するべき
    • CocoaPods
      • Podfileに依存性のあるライブラリを記述
    • Certhage
      • プロジェクトにマニュアルで組み込む方はこちら
    • Swift package manager
      • Linuxでのテストをサポート
      • ただし、swift linuxはまだバージョンが安定していない
  • バージョニングについて
    • patch
      • bugfixだけが入る
    • minor
      • 新しいfeatureが追加された
      • オペレーションを変更するものではない
    • major
      • すべてが変わるもの
    • semver.orgを参考に
  • セッションでのライブラリ作成のサンプルはgithubにpushされています

Protocol-Oriented Programing in Networking

発表者:Yosuke Ishikawa さん

IMG_0196

  • APIKitの作成者の方です
  • リクエストとレスポンスの型を紐付けることでリクエストの型さえ指定すればレスポンスを安全に取得できるようにする
  • protocolのResponseTypeを定義
    • typealiasで明示しておく
  • protocolはフレキシブルなデフォルト実装が提供できる
  • 型制約付きのextensionをレスポンスをデコーダブルに準拠させる
  • PaginationViewModelをMVVMで実装する
    • UITabelViewControllerをPaginationViewModelとしてUITableViewにバインドさせる
  • Paginationは構造が変わらないのでジェネリクスなViewModelとして共通化できる
  • 参考
  • まとめ
    • protocolはネットワーキングの抽象化に最適
    • 方制約をつけると詳細な記述をすることができる
    • イベントの流れも抽象化するとよい

ライブデザイニング

発表者:Maxim Cramer さん

IMG_0222

  • Sketchを使ってAppIconを作っていく方法を実演していただきました

IMG_9636

IMG_9640

IMG_9646

IMG_9650

IMG_9661

SwiftらしいTable View Controllerの使い方

発表者:Chris Eidhof さん

IMG_0234

  • まずは一般的なSwiftでUITableViewControllerを作成
    • playgroundをつかってUITableViewControllerを作成
  • Itemに各要素
  • Histor
  • 徐々にSwiftのコードらしくクリーンにしていく
  • structとジェネリクスでtableViewConfigrationを定義する
    • tableViewConfigration
  • Configrationをstructで作ることでコピーを簡単に作ることができる
    • あらゆるところで再利用できる、テストのできるコードになる
    • 強力なテクニックなので何度も活用している

IMG_0238

まとめ

最前線のエンジニアの方々からコードベース(とくにライブコーディング)でのお話は勉強になりました。
と同時に自分への色々な宿題もでてきたので、非常に充実した1日でありました!
参加者の皆さまも非常に刺激的な1日になったのではないでしょうか!
明日も引き続き田宮と私田中でお送りいたします!