こんにちは!先日 iOSDC 2018 という iOS のカンファレンスに参加してきましたのでさっそく内容をレポートしたいと思います。
iOSDC とは
iOSDC は、iOSアプリなどiOS周辺技術に関わるエンジニアが、技術的なノウハウを共有するためのイベントです。
トークのテーマは必ずしもiOS関連の話である必要はありません。iOSエンジニアが聞いて面白ければ何でもアリです!
会場ではスポンサーブースがたくさん出展されていました。
ノベルティもたくさん頂きました。
目次
- iOSDC とは
- 目次
- Swiftの生みの親によるasync/await for Swiftを徹底解説し、新しい非同期処理の手法を理解する(yimajoさん)
- iOSエンジニアが知るべきProgressive Web Apps開発のエッセンス(laisoさん)
- Live coding: ReactorKit で作る実践 iOS App(Wantedly 永田さん、久保出さん)
- iPhone が数秒おきにクラッシュするんだけど!(waturaさん)
- Charles でネットワークデバッギング(Kazumasa Kumamotoさん)
- まとめ
Swiftの生みの親によるasync/await for Swiftを徹底解説し、新しい非同期処理の手法を理解する(yimajoさん)
内容
@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 の何が騒がれていたのか?
- PWA on iOS の実際 Service Worker が使えるようになった WebClip(ホーム画面に追加)が Web Manifest に対応した * 実はこれだけ!
- 何が問題?
- 拡大解釈された話題が先行してしまった
- 正確な情報で訂正されなかった
- iOSとウェブブラウザ技術への曖昧な理解
- iOSのPWAは不完全
- Androidのものとはまったく別物
- 「PWAがネイティブアプリを置き換える」というストーリーは本質的ではない
- ネイティブアプリと比較するのではなく
- 従来のWebアプリと比較するべき
- laisoさん的予想と願望
感想
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 ←これが原因だった
- Notification には2種類ある
- 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さん)
内容
感想
この発表は「Charlesを使ったことがない人向け」との事でしたが、普段から Charles を愛用している私にとっても新たな発見がたくさんありました。例えば、通信の中身を見るだけでなく、リクエスト/レスポンスを編集できることは初めて知りました。さっそく明日から活用してみたいと思います。
まとめ
どのトークも本当に興味深く、勉強になるものばかりでした。人気のトークはすぐに満室になるため、早めに席を確保しないと立ち見すらできなくなる状況でした。
通常、こういったカンファレンスは前の方の席がガラガラになりがちなんですが、iOSDCの場合は最前列から席が埋まっていくのがとても印象的でした。また、質疑応答も活発に行われ、時には熱いディスカッションに発展することもありました。
気になるトークがあれば後日資料や動画などが公開されると思いますのでぜひチェックしてみてください。発表者の皆様やスタッフの皆様には心から感謝しております。来年も iOSDC が開催されることを楽しみにしております!