こんにちは。iOS開発Gの塙です。 本日でWWDCは3日目です。早いですね。イベントも中盤まで差し掛かり、デベロッパーの血と汗の結晶である技術情報がウェブ上にチラホラ出て来ていますね。感謝の気持ちを忘れずに根こそぎ吸い上げていきましょう。前日の記事はこちらです。
「What’s New in WatchOS4」と「What’s New in Foundation」のセッションがあったのでwatchOS4とSwift4について書きたいと思います。が、その前に今回も会場の様子をお伝えしたいと思います。
WWDCは期間中食事を無料で提供してくれます。今日のお昼ごはんはサラダです。野菜はいいぞ。味については触れませんが、日本って本当に食に恵まれているんだなあと思いました。味については触れませんよ。
もちろんドリンクも無料です。お財布が寂しい私は毎日歓喜してます。コーヒーは(おそらく)スターバックスでとっても美味しいです。一体何リットルのコーヒーがこの会場に運ばれているのでしょうか。なんとなく恐怖です。
物販もやっています。WWDC限定の商品があるので毎年1,2日目には品薄状態になってしまいます。iOSエンジニアはここのTシャツをドヤ顔で着るのがスマートだと思います。
毎年近場で行われているAltConfというApple製品のデベロッパーカンファレンスがあります。私は去年このイベントをメインで参加していました。なぜなら無料だからです。受付の方、お茶目ですね。
AltConfはスポンサーの企業が会場内にブースを作り、グッズや製品を置いて客寄せしています。このTシャツはもちろん無料です。寝巻きに最適です。
本日はUser Interface Design Labという予約制のラボ(相談に乗ってくれるブース)に行って来ました。近年では毎朝7時に当日の予約が開始されるのですが、1~2分で満席になるというとても貴重なラボなのです。WWDCに行く場合はぜひチャレンジしたほうがいいと思います。
なんとなくWWDCに行った時のイメージが湧きましたか?湧きましたね。ということでwatchOS4とSwift4(一部)を紹介したいと思います。
watchOS4
Core ML
iOSと同様に機械学習モデルを扱えるようになるフレームワークが追加されました。 watchOSは近年スポーツや健康管理の機能強化をしているので、そのデータと機械学習を組み合わせて面白いことができそうですね。
SiriKit
こちらもiOSと同様にSiriKitのIntent Domain(できること)に「List nad Notes」が追加されました。サードパーティ製アプリのメモやタスクをSiriから登録できます。
また下記のIntent Domainに追加された機能もiOSと同じですね。
- Ride Booking : キャンセルとフィードバック機能
- Payments : 送金とアカウント検索機能
HomeKit
こちらもまたまたiOSと同様に下記のトリガーが追加されました。
HMSignificantTimeEvent
: 日の出/日没時間HMCalendarEvent
: 特定の日時HMDurationEvent
: タイムインターバル(繰り返し時間)HMCharacteristicThresholdRangeEvent
: 接続されたデバイスの出力する値の範囲(温度や明度など)HMPresenceEvent
: ユーザーの有無
Apple Pay
こちらもまたまたまたiOSと同様に支払い情報と認証エラーをハンドリングできるようになりました。
ここまで読んでいてがっかりされている方が多いと思います。私もアプリのストリーミングでセッションを聞いていて、途中でそっとスリープボタンを押そうとしてしまいました。ただ、次のアップデートは夢があると思います。
Core Bluetooth
ついにwatchOSにCore Bluetoothが追加されました。Apple Watchから様々な機器を操作できるようになりますね。ただし下記の制限があります。
- セントラル(見つけに行くデバイス)のみ可能
- ペリフェラル(見つけて貰うデバイス)は2台まで
- 接続インターバルの時間は フォアグラウンド : 30ms / バックグラウンド : 120ms
- バックグラウンドでは接続のみ可能(スキャンはできない)
- ペリフェラル側はアプリが停止したら接続解除される
Swift4
様々なアップデートがある中で、私のまわりで最もザワついた項目であるCodable
のみ取り上げたいと思います。
Codable
Swiftのstructやenumを簡単にシリアライズ/デシリアライズできるようになりました。
struct Person: Codable { enum Child: String, Codable { case son, daughter } let name: String let age: Int let children: [Child] } let person = Person(name: "Foo", age: 10, children: [.son, .daughter]) let data = try? JSONEncoder().encode(person)
デコードもできます。JSONデータを外部ライブラリを使用してパースしなくて済みますね。
let person = try? JSONDecoder().decode(Person.self, from: data)
少し詳しくQiitaに投稿したのでご確認いただければと思います。 qiita.com
では残り2日間楽しみながらたくさん学んでいきたいと思います。アディオス。
宿泊先のホテルです。ちょっとカッコつけてみました。