aratana Tech blog

ECテクノロジーで 世界をもっと楽しく もっと笑顔に

iOSDC 2018 に参加してきました

f:id:koogawa:20180902022046p:plain

こんにちは!先日 iOSDC 2018 という iOS のカンファレンスに参加してきましたのでさっそく内容をレポートしたいと思います。

iOSDC とは

iOSDC は、iOSアプリなどiOS周辺技術に関わるエンジニアが、技術的なノウハウを共有するためのイベントです。

iosdc.jp

トークのテーマは必ずしもiOS関連の話である必要はありません。iOSエンジニアが聞いて面白ければ何でもアリです!

会場ではスポンサーブースがたくさん出展されていました。

f:id:koogawa:20180902022031p:plain

ノベルティもたくさん頂きました。

f:id:koogawa:20180902022137p:plain


目次

Swiftの生みの親によるasync/await for Swiftを徹底解説し、新しい非同期処理の手法を理解する(yimajoさん)

speakerdeck.com

内容

@IBAction func buttonDidClick(sender: AnyObject) {
    beginAsync { 
        let image = await processImage()
        imageView.image = image
    } 
}
  • 上記のような書き方が Swift でもできるようになる(かも)
    • beginAsync でコルーチンを開始
    • await でコルーチンを中断
    • await した非同期処理が完了すればコルーチンは再開される
  • コルーチンとは
    • 途中で中断したり再開したりできる関数
    • 非同期処理を同期的に記述することができる
    • コードの見通しが良くなる
    • Kotlin は言語レベルでコルーチンを採用
  • Future でパラレル実行が可能になる
    • 例:Future { await loadWebResource("dataprofile.txt") }
  • Hydra というライブラリがすでに async/await をサポートしている
  • どのスレッドで実行されるのか?
    • スレッドは await した関数を処理したキューに依存する

感想

Swift Ver. 5 から async/await が使えるようになるかも、という噂は以前から知っていたので、このトークはとても気になっていました。async/await の基本的な使い方から Future を利用した応用例、そしてコルーチンの解説まで、とても勉強になる内容でした。クロージャーでネストが深くなってしまうことはよくあるので、このプロポーザルが現実のものとなったらぜひ使ってみたいと思います。 また、ハッシュタグのツイートが即座にスライドに流れる仕組みも斬新でした。

iOSエンジニアが知るべきProgressive Web Apps開発のエッセンス(laisoさん)

内容

  • PWA(Progressive Web Apps)とは?
    • WebアプリのUXを向上するムーブメント(運動)の通称
    • Google Chrome開発者によって提唱された
  • PWA の何が騒がれていたのか?
    • 2017年末 iOSSafari に Service Worker が実装される
    • 各メディアで「iOS で PWA サポート開始」と騒がれる
    • ブログなどで「ネイティブアプリの時代が終わった」と書かれる
  • PWA on iOS の実際   Service Worker が使えるようになった   WebClip(ホーム画面に追加)が Web Manifest に対応した  * 実はこれだけ!
  • 何が問題?
    • 拡大解釈された話題が先行してしまった
    • 正確な情報で訂正されなかった
    • iOSとウェブブラウザ技術への曖昧な理解
  • iOSのPWAは不完全
    • Androidのものとはまったく別物
  • 「PWAがネイティブアプリを置き換える」というストーリーは本質的ではない
    • ネイティブアプリと比較するのではなく
    • 従来のWebアプリと比較するべき
  • laisoさん的予想と願望
    • AppleはOSの独自機能をWeb標準に寄せたい
    • Web利用者をiOS/Safariに取り込みたい
    • Service Workers実装はその足掛かり

感想

PWA については以前から興味があったため、こちらも注目していたトークのひとつでした。PWA はネイティブアプリと比較されることが多いのですが、そもそも PWA は今ある Web アプリが進化したものなので、これらを比較することはおかしい、というレイソーさんの意見には私も納得でした。PWA の評価に対して感じていた違和感の理由がわかった気がしました。

Live coding: ReactorKit で作る実践 iOS App(Wantedly 永田さん、久保出さん)

内容

ランチタイムの30分でTwitterクライアントアプリを作るという面白い企画でした。

感想

ペアプロのような形式を取り、基本的にドライバー役(手を動かす側)がコードを書いていくのですが、詰まることなくスラスラと機能を実装していく姿はとても お見事でした。そして、30分後には見事にTwitterクライアントが完成しておりました! ※後に裏話を聞いたところ、事前に大きい会議室にこもり、めちゃくちゃ練習されたそうです。

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

内容

2017年12月2日。朝起きたら「Zaim のせいでiPhoneがクラッシュする」と Twitter 上で騒がれていた

  • 6:24 ー トレンドになっていることに気が付き Slack で共有
  • 6:38 ー Slackチャンネルを作成し関係者を追加
  • 6:48 ー 原因不明ながら手元で再現
    • 通知をオフにすると解消
    • 通知を受けない設定だったらクラッシュしない
    • Zaimサーバ側にエラーはなし
    • Xcode にもエラーは出ない
    • Zaimが悪者になってる感
  • 7:40 ー 原因判明
    • Notification には2種類ある
      • Push Notification
      • Local Notification ←これが原因だった
  • 7:51 ー 再現しない版アプリが手元で作られる
    • アプリを削除するか通知をオフにすることで解消できるが、運営側としては当然やってほしくない
    • Zaim上の設定変更で回避できることがわかった
    • Twitterで情報共有
    • ユーザーへの連絡準備
  • 8:02 ー アプリのアップデートで解消するのは無理と判明
  • 10:40 ー まだ発動していない人のためのアップデートを特急申請
  • 13:30 ー いったん調査などを終了
  • 17:40 ー 問題が修正された iOS 11.2 がリリースされる
  • 技術的原因
    • OS が再起動していたわけではなく、SpringBoard と呼ばれるホーム画面などを管理している内部のアプリケーションがクラッシュを繰り返していた
    • iOS 11.0, iOS 11.1 では UNCalendarNotificationTrigger クラスの動作に問題があった
    • 12月2日に nextTriggerDate(次の通知予約をするためのメソッド)を実行すると無限ループに陥る
    • macOS High Sierra で発生しているエラー「 Month 13 is out of bounds」に関連しているのではないか?
      • つまり、12月の次の月が13月と認識されるバグだったのでは?
      • 13月、14月、15月…という無限ループに陥るという予測
  • まずい状態になったらやること
    • Blog, Twitter などを調査
    • 再現するコード作る
    • 英語で騒ぐ
    • 早急に修正版を申請して、広報する
  • 結論
    • Zaimは悪くない
    • iOS 11.0 , 11.1 が原因

感想

朝6時台に状況を察知してからの動きがとにかく早いと感じました。最初の30分でクラッシュを再現させるところまで実施できたのは本当にすごいと思います。そして、こういった状況ではユーザーへの状況周知や、技術者への情報共有が今後の評価にも繋がるんだなぁと感じました。実際、この騒動のあと、私自身 Zaim さんに対する印象がとても良くなったのを覚えています。

Charles でネットワークデバッギング(Kazumasa Kumamotoさん)

内容

  • ただしく通信をデバッグできれば平和になる
    • 曖昧な問い合わせがなくなるので無用な争いが起こらない
  • 主な機能
    • リクエスト/レスポンスの内容を表示
    • リクエスト/レスポンスの内容を書き換え
    • SSL/HTTPS 対応
    • Throttle
      • 3G回線をシミュレーション
    • Map Remote
      • 特定のHost, Path, Query に対応するリクエストを、別のHost, Path, Query に転送
  • iOS App もある(1,080円)
  • 使い方と使い所
    • Case 1. 原因調査
      • リクエストとレスポンスを確認して解決
      • サーバーの返却値が表示されてない!と言われた
      • リクエスト(ヘッダ、パラメータ)がきちんと送れているか確認
    • Case 2. 動作確認
      • リクエストとレスポンスを書き換えて解決
      • レスポンスの形式が想定と合っているか
      • レスポンスを書き換えることもできる
        • Map Local - レスポンス/リクエストを差し替えたい
        • Break Points / Edit Response - レスポンスを何度も差し替えたい or タイムアウトが設定されている
        • Rewrite - 自分で書き換えるルールを設定したい

感想

この発表は「Charlesを使ったことがない人向け」との事でしたが、普段から Charles を愛用している私にとっても新たな発見がたくさんありました。例えば、通信の中身を見るだけでなく、リクエスト/レスポンスを編集できることは初めて知りました。さっそく明日から活用してみたいと思います。

まとめ

どのトークも本当に興味深く、勉強になるものばかりでした。人気のトークはすぐに満室になるため、早めに席を確保しないと立ち見すらできなくなる状況でした。

通常、こういったカンファレンスは前の方の席がガラガラになりがちなんですが、iOSDCの場合は最前列から席が埋まっていくのがとても印象的でした。また、質疑応答も活発に行われ、時には熱いディスカッションに発展することもありました。

気になるトークがあれば後日資料や動画などが公開されると思いますのでぜひチェックしてみてください。発表者の皆様やスタッフの皆様には心から感謝しております。来年も iOSDC が開催されることを楽しみにしております!