【Apple WWDC 2016】WWDC 初日 Keynote、State of Union、Design Award と Realm WWDC Livestreamed Swift Panel 参加レポート

こんにちは。はてなブックマークのiOSアプリ開発チームで働いている id:niwatako です。

6/13から6/17にかけて、アメリカ・サンフランシスコではAppleの開発者向け年次カンファレンスであるWorldwide Developers Conferenceが開催されています。

私はそれに参加するためにサンフランシスコへやって来ました。現地から、WWDC初日に参加した様子をレポートいたします。

はじめに

アメリカでは先日オーランドで痛ましい事件がありました。

半旗を掲げたWWDC会場や、冒頭で決して例年のように "Good morning" とは言わなかったティム・クック氏の様子、そして参加者への黙祷の呼びかけに、Appleの犠牲者への強い哀悼と追悼の意を感じました。

f:id:niwatako:20160614202014j:plain

テクノロジーが人類の多様性や相互理解の促進に貢献できることを切に願います。

犠牲者の冥福を心からお祈りするとともに、ご遺族や関係者の方々に心よりお見舞い申し上げます。

WWDC 2016

基調講演 (Keynote) の様子

f:id:niwatako:20160614202006j:plain

27回目のWWDCとなる今回は、チケットの抽選に申し込みをした人の数も、スカラーシップで招待された学生の最年少者の年齢(9歳!)も、記録を更新したのではないでしょうか。74カ国から参加者が集まり、国数も最多記録です。WWDCは毎年多くの、そして多様な開発者が参加するようになっています。

今回のWWDCは例年と異なり、WWDCに先駆けて一部ジャーナリストがAppleへのインタビューを許され、App Storeへの検索広告の導入やサブスクリプションの解放など、アプリ開発者にとって影響のある新制度について事前に発表がありました。日本では林信行さんがフィル・シラー氏への独占インタビューを公開されています。

この異例の事前発表の理由は、今回のWWDCではあまりにも多く発表がありすぎるため、デベロッパーやメディア向けに新機能や新制度の概要をまとめて話すWWDC初日午前中の基調講演(Keynote)では、すべてを発表しきることが出来ないから、というものでした。

実際に、基調講演はwatchOS、tvOS、OS X、iOSの4つを柱として発表があり盛りだくさんの内容に思われました。

watchOSを紹介したケヴィン・リンチ氏からtvOSを紹介するエディー・キュー氏、そしてOS XとiOSを紹介するクレイグ・フェデリギ氏まで、紹介者が次のOSの紹介者を舞台に招き交代する形で進行していきました。

例年、ティム・クック氏が担当者を舞台に呼んで詳細を説明させ、終わったら軽くまとめを話してから次のOSの話に移りまた担当者を呼ぶというような形式でしたが、沢山のアップデートを紹介するために進行の仕方を工夫したのではないかと思います。

watchOS - アプリの起動が高速化、快適にアプリを利用可能に
  • アプリの起動が高速に
  • Glance が廃止され、Dockが導入される
  • スワイプアップでControll Centerを表示
  • 文字入力の改善
    • メッセージへの返信候補サジェスチョンや、指でなぞる文字入力が可能に
  • Watch Faceの追加と、Watch Faceの切り替えがスワイプで可能に
  • エマージェンシーコール機能
    • 各国各地の緊急連絡先に位置情報と共にSOSを送信
    • 送信後はApple Watchの画面はメディカルIDを表示する
  • アクティビティアプリが車いすの活動に対応
  • スタンド 機能のように取り組む通知し、効果を測定する、深呼吸のサポート機能
  • アプリ開発のための新機能
    • SpriteKitとSceneKitが利用可能に
    • デジタルクラウンやタッチイベントの習得が可能に
    • スピーカー出力が利用可能に
    • ビデオのインライン再生が可能に
    • GameCenterが利用可能に
    • CloudKitが利用可能に
    • Background update
      • Watchアプリやコンプリケーションの情報を最新にしておける
    • ジャイロスコープにアクセス可能に

watchOSでアプリが高速に起動するようになることは、Apple Watchで本格的にアプリを利用することがいよいよ可能になったと言えそうです。

Apple Watchのアプリ開発条件はかなり制限された仕組みから段階的に変化してきました。最初は制約が多くデバイスの力がほとんど生かせない状態、次に実現可能なことが増えたものの、まだ起動には時間がかかり過ぎて起動より前にスリープに入ったりすることがあり、なかなか使い物にならない状態。それが今回ついに、シームレスにアプリを起動して目的を達成できるようになるのではないか、と期待させられるデモの様子でした。

tvOS - 少しずつ不便さの改善や障害の解消が進む
  • 様々な動画プラットフォームやゲーム、アプリが追加される(一部日本は非対応)
  • Single Sign Onでアプリごとにパスワードを入れる必要がなくなる
  • ダークモードの追加(画面が黒基調に)で部屋のコーディネートや時間に合わせた画面にできる
  • iPhoneでインストールしたアプリにtvOS版があれば自動でインストールされる
  • PhotoKit、CloudKit、HomeKitにアクセス可能に

Apple TVへの対応がスタンダードにはなっていない中で、iPhoneでインストールしたアプリがApple TVにも自動的にインストールされることで、アプリを発見して起動してもらえる機会が増えそうです。

この後、iOSにはSiriのサードパーティー開放がアナウンスされましたが、tvOSにはSiriのサードパーティ開放はまだ来ないのでしょうか。Apple TVで個々のアプリを起動したり文字を入力したりするのは手間なので、特定のアプリへの命令をSiriで出来るようになったら大分と使いやすくなりそうです。

tvOSでHomeKitが利用できるようになることで、リビングに据え置かれた小さなコンピューターとして、スマートホームの中心的なデバイスになっていく進化を遂げるかどうか、楽しみです。

- OS X あらため、 macOS
  • 名称をmacOSに変更
  • 新しいバージョンの名前は Sierra(シエラ)
  • Continuity
    • Apple WatchをつけていればMacをAutoUnlockできる
    • iCloudにディスクトップも保存可能に。iPhoneからも閲覧可能
    • クリップボードがiOS端末と同期
  • Siriを提供
    • メッセージの送信、ファイル検索などが可能に。
  • ディスクの最適化
    • 使用頻度に応じてクラウドへの保存なども利用し大幅にディスクを圧縮
  • Apple Pay
    • Safariで利用可能に。指紋認証はiPhoneで行う。
    • 対応国にスイス、フランス、香港が追加
  • Picture in Picture
    • フルスクリーン上でも、動画を再生
  • タブ機能が標準で利用可能になる。デベロッパは特別な対応不要。

macOSのAutoUnlockはユーザーとして個人的にとても便利そうです。指紋認証を搭載したMacの新機種が発表されるのではないかという事前予測もあり(実際には新しいハードウェアの発表は一つもなかった)、ログインパスワード入力の手間が省けることを期待していましたが、AutoUnlockがあればそもそも指紋認証など無くてもログインパスワード入力の手間が省けます。

iOS - iOS 10に10の新機能が発表
  1. ロックスクリーン、通知の再デザイン
    • 端末を持ち上げるだけでスクリーンがOnに(Apple Watchの感覚)
    • プレビュー、メッセージ送信などリッチな通知をExtensionとして作成できる
    • コントロールセンターがページングし、ミュージックコントロール、Homeコントロールが可能に
    • ホームスクリーンを右にスワイプするとTodayExtensionのWidgetが並んでいる。
  2. Siriのデベロッパーへの開放
    • Siriにサードパーティのアプリを指定して命令が可能に(YouTubeなどから検索が可能)
    • Messaging、Ride booking、Photo search、Workout、VoIP、Car Play で利用可能
  3. キーボードでより高速な文書入力をサポートするQuick type
    • 文脈から判断してユーザーが入力する文字を予測して入力候補を出す
    • メッセージで相手の発言を解析して入力内容をサジェスト
      • 「今どこ?」という発言を受信したら、現在位置情報をサジェスト
      • 複数に渡る発言の文脈から予定の決定を読み取りカレンダーをサジェスト
  4. Photoアプリの新機能
    • ローカルでディープラーニングを利用して場所、テーマ、人、被写体などで写真を整理
    • ハイライトムービーの自動作成
  5. Mapの新機能とデベロッパーへの開放
    • カレンダーから位置情報付きの予定を表示
    • ナビゲーション
      • 交通ルールがある箇所では自然に拡大表示し細かく案内
      • ルート中にあるお店を検索することが可能
    • Extensionによってホテル予約やUberを呼ぶ機能を搭載可能
  6. Musicの新機能や新デザイン
  7. Newsアプリの新機能や新デザイン
    • 日本非対応
  8. HomeKitの新機能、Homeアプリの登場
    • 新しい家電カテゴリが追加
    • Homeアプリが登場
      • Siriに "Good morning" と言うと朝電源を入れたい家電に電源が入る
      • Control Centerを横スワイプでHomeKitのコントロールセンターでスイッチをコントロール
    • Apple TVにリモートからアクセス、Apple TVを介して家電をコントロール出来る
    • watchOSにもHomeKitはビルトイン
  9. Phoneアプリの新機能とデベロッパーへの開放
    • 電話主の推測が電話帳だけではなく他のアプリも一緒に検索
  10. Messageアプリの新機能とデベロッパーへの開放
    • ウェブサイトのURLが送信されるとサムネイルを読み込む、RichLink表示
    • 絵文字だけの場合大きさが3倍に
    • 画面が震えたり、指でなぞるとモザイクが消えて文字が読めエフェクトメッセージが登場
    • スタンプ機能が登場、スタンプを送信するだけでなく、画像やスタンプにスタンプを重ねられる。
    • 受信したメッセージへのいいね!などのリアクションを付けることが出来る
    • デジタルタッチによる手書きメッセージの送信が可能
    • メッセージアプリの中でメンバーが一緒に出前のオーダーを作成するなどのExtensionが作成可能に

怒涛のように新機能が発表されたiOSは、電話としてのiPhoneの根幹的な機能の部分にデベロッパーが手を入れられるようになったことは大きな変化だと感じました。

たとえばiPhoneでSkypeを電話の代わりに使おうと考えても、iPhoneの連絡先から直接Skypeで電話をかけることはできなかったり、通話の着信も通知で知らせるような形式になったり、利用者としても開発者としても困った部分でしたが、連絡先アプリとの連携も電話の着信も、かなり自然な形で機能の提供が可能になりそうです。

完全ローカルでディープラーニングを使った顔認識や写っている物体の識別(デモでは馬を識別していた)するのもすごいですね。Appleは顔認識による写真の分類などはGoogleやFacebookなどと比べて遅れを取っているように思われましたが、完全ローカルでセキュリティとプライバシーをしっかり確保して実現する方法を編み出した上で、満を持して投入した形でしょうか。

その他ここまでで発表しきれなかった多くの新機能
  • ノートアプリのコラボレーション機能で友達と一緒に編集が可能に
  • Macのメールアプリでメールを会話形式で表示することが可能に
  • Live Photoの編集が可能に
  • iPad Safariでの 画面分割表示が可能に
  • プライバシーについて
    • 発表したすべての機能は End to End で暗号化されAppleのサーバーは内容を把握しない
    • インテリジェンス機能はデバイス上で行いAppleはサーバーにデータを持たない
  • プログラミング教育をサポートする取り組み
    • 無料でiPad向けにSwiftコードを実行できるSwift Playgroundsの登場
    • コードを書くのに特化したキーボードを表示

Platforms State of the Union

基調講演で発表された内容をデベロッパー向けに掘り下げるような内容です。気になった箇所をピックアップして記載します。基調講演ほど丁寧に説明してくれないので、聞き取った内容は多少不正確な可能性があります。ご了承ください。

  • Messageアプリの中でやり取りしながら編集できるExtension
    • Extensionを使って注文オブジェクト的なものを作成する
    • Messageのグループ参加者でオブジェクトを編集する
    • オブジェクトタップするとExtensionが起動して品目・数量を編集・入力出来る
    • パズルゲームを、Message上でやり取りしながら組み立てて行ったりという用途もありそう
  • Swift 3の公開とともに、Swift 2.3も公開。
  • Xcode でカラーを文字列ではなく色のタイルで表せる
  • Xcode Extention が登場、Storeに公開する事ができる
  • Interface Builder
    • デバイス・サイズクラス毎の制約設定がやりやすく
    • 4段階でIBの画面を拡大・縮小して操作が可能に
  • Xcodeのデバッグ機能が強化
    • 参照関係のオブジェクトグラフで循環参照などを可視化
    • RunTimeのAutoLayoutの問題箇所を示してくれる
  • ネットワーク通信にプライオリティを付けて、よく使う重要な通信を優先して処理する
  • 新しいファイルシステムを macOS Sierra に導入
    • Flash/SSDへの最適化、レジリエントの強化、64bit最適化、暗号化、フルバックアップ
  • NSUserActivity によって、直前に見ていた場所へ "Siri、ここへ連れてって" と言って伝わる
  • macOSアプリはStoreから配布したものでなくてもCloudKitが利用可能になる
  • iCloud のデータを誰かと共有することができるようになる
  • Apple TVを操作するRemote.appは横向きでゲームコントローラのような持ち方が出来るようになる
  • sRGBよりも範囲の広いWide Color P3のAPIを公開し、RAWイメージにアクセスできるようになる

f:id:niwatako:20160614202049j:plain

ログのライブストリーミングというのが何を意味するのかよくわかりませんでしたが、iOS端末からWi-Fi越しにデバッグログを取得できるのだとしたら、Lightningコネクタで接続する外部アクセサリを利用した状態のデバッグが非常に楽になりそうです。

Apple Design Awards

f:id:niwatako:20160614195605j:plain


夜は Realm WWDC Livestreamed Swift Panel へ

終わった後はWWDC Livestreamed Swift Panelへ行きました。

Realm のロゴの前で記念撮影。

f:id:niwatako:20160614195536j:plain

Swiftについてのパネルディスカッションの会です。スライドもなく自由にパネラーがディスカッションしているのは、私の英語力ではなかなか聞き取るのは大変でした。。。とにかく英語をマスターしたい、いま最も学びたいのはiOS10でもSwift 3でも無く英語だ!と、聞いている最中は強く思ったのでした。

終わってからは参加者同士で交流

終わった後にパネラーや他の参加者の方々とコミュニケーションを取ることが出来ました。

try! Swiftに来ていた方々に聞き起こしでブログを書いていた(I'm try! Swift bloggerなどいう適当な表現で)と言ったところ、「あなたが!Twitterフォローしてるよ!」と言われて嬉しかったです。

運の良いことに彼らは日本語も話すことが出来て、私が聞き取れなかったり話せなかったりすると、相手の方が日本語で助けて下さいました。

一緒に帰るのも仲良くなるチャンス

サンフランシスコはストリートやエリアによっては日本ほど治安が良くなく、みんななるべく複数人で行動するようにしています。

参加者同士で交流していて、ホテルが近くだということが分かった者同士で一緒に歩いて帰りました。ただ挨拶したり名刺を交換したり会話をするだけよりも、ちょっと仲良くなれた気がします。


今回のWWDCには株式会社はてなからの出張として経費で参加することが出来ました。

また、はてなではSwiftを使ってiOSアプリを開発しています。今回のWWDCの基調講演のスライドの中にもSwiftで作られたアプリの一つとして、はてなブックマークアプリのアイコンが掲載されています。

そんな株式会社はてなでは "iOSアプリ開発実践コース" がある、はてなサマーインターン2016を開催します。

hatenacorp.jp

応募締め切りは2016年7月4日(月)となっています。宿泊費も出ますので、全国より奮ってご応募ください!

【Apple WWDC 2016】iOS 10のApp Transport Securityと2016年末からのATS必須化についてAppleのエンジニアに聞いてきた

Apple WWDC 2016に参加するためにサンフランシスコへ来ているid:niwatakoです。

WWDC 2016のセッション にて、App Storeに公開するアプリは今年中にATS(App Transport Security)が要求されるようになるという発表がありました。

アプリからの通信をhttps接続のみに制限するATSの有効化がApp Storeへのアプリ提出には必須になるとのことですが、はてなブックマークのようにhttpのウェブページを含む不特定多数のコンテンツの表示が必要なアプリはどこまで制限されるのでしょうか。

WWDC期間中はAppleのエンジニアに質問が出来るLabが設けられているので、ATSとiOS 10でのATS周りの仕様について質問してきました。

2016/12/22 追記

2016年末とされていたApp Transport Security必須化の延期が発表されました。延期後の日程は現時点では未定です。

Supporting App Transport Security - News and Updates - Apple Developer

2016/09/07 追記

この記事に記載の情報は現在では古くなっています。

下記フォーラムでは、新たに NSAllowsLocalNetworkingNSAllowsArbitraryLoadsInMedia というキーが追加されること、 NSURLConnection がATSの許可するTLSの最低バージョンを無視するバグが修正され、従うようになることなどが告知されています。

forums.developer.apple.com

また情報が錯綜していた「 UIWebViewNSAllowsArbitraryLoadsInWebContent の対象になるのかどうか」については、UIWebView も対象になると記載されています。そのほか、ATSに関する最新の詳細はCocoa Keysドキュメントの NSAppTransportSecurity の部分を御覧ください。

developer.apple.com

WWDCにて、2016年末にATSが必須化されることが言及される

ATS(App Transport Security)とは、iOS9とOS X 10.11から導入されたアプリとネットワーク間のセキュアな通信を保証するための機能で、安全に暗号化されたhttps通信のみを許可し、安全でないレベルのhttps通信やhttp通信を遮断します。

How iOS Security Really Works および What's New in Security というセッションで、2016年末にApp Storeに公開するアプリにはATSが必要になるということが発表されました。

セッションスライド資料 Page 100/116

App Transport Security
• Required by App Store at end of 2016
• TLS v1.2, with exceptions for alreadyencrypted bulk data like media streaming

ATSの必須化とiOS 10の登場で、何が変わるのか

ATSはこれまで、ATS自体の無効化や、ホワイトリストを作成してATSの通信遮断対象から除外するドメインを指定したり、逆に全体のATSを無効にしながら一部のドメインについてはATSの対象としたり、あるいはATSが許容する暗号水準を下げたり、といった詳細なカスタマイズが可能でした。

ATSの設定は、アプリケーションのInfo.plistにキーを追加して値を設定しますが、利用可能なキーはこちらで確認出来ます。

developer.apple.com 注意:こちらのドキュメントは開発者向けのプリリリースのドキュメントであり、iOS 10の確定された最終仕様ではありません。今後正式なiOS 10がリリースされるまでの間に変更が加えられる可能性があります。


iOS 10 では、新たに NSAllowsArbitraryLoadsInWebContent というキーが追加され、このキーの設定値を YES にすることでウェブページの読み込み(と、AVFoundationのStreaming media)に限ってはhttp通信を許可することが可能になります。

つまり、iOS 9 では不特定多数のウェブページを表示するようなアプリはATSを無効化するしかなく、それによってウェブページの表示以外のhttp通信まで許してしまっていたのに対し、iOS 10では、不特定多数のウェブコンテンツを表示しつつも、それ以外の通信は安全なhttpsへの接続のみを許可することで、セキュリティを向上させることが可能になるのです。

また、それが可能になることで、ATSを無効化しなければならないケースはかなり限定的になると考えられるため、App Storeに公開されるアプリの全体的なセキュリティ水準の向上のために、2016年中のATS必須化がアナウンスされたのだと考えられます。セキュリティが向上しただけで、アプリの開発者がきちんと対応すれば、これまでどおりhttpのウェブページにもアクセスすることができます。

条件ごとにATSの仕様を把握し、適切にATSを設定する

ATSの設定の影響を受けるのは、ネットワーク通信を行うNSURLSessionや、ウェブページを表示するUIWebView、WKWebViewなどの通信を行うクラスです(アプリケーションから独立してウェブページの表示を行う SFSafariViewController はATSの影響を受けません)。

また、iOS 10から利用可能になるATSの新しい設定キー NSAllowsArbitraryLoadsInWebContent と、従来からあるATSの無効化設定キー NSAllowsArbitraryLoads が同時に存在した場合にはどちらが有効になるかの力関係があります。

iOSのバージョン、ATSの設定、通信を行うクラスの組み合わせ毎に、ATSがどのように機能するかを一覧にまとめました。

f:id:niwatako:20160616114803j:plain

iOS 9では従来通り、NSAllowsArbitraryLoadsYES であれば、自由にhttp通信が行えます。

iOS 10では、まず NSAllowsArbitraryLoadsInWebContentYES かどうかで条件が別れます。NSAllowsArbitraryLoadsInWebContent が、設定されていないか NO である場合は、iOS9と同じ挙動になります。 YES に設定されている場合は、iOS 10では NSAllowsArbitraryLoads が無視され、WKWebViewのみがhttp通信を許されるようになります。

このとき、データ通信を行うNSURLSessionに加え、UIWebViewについてもhttp通信が許可されないのがポイントです。なるべくWKWebViewを利用して欲しいとのことでした。また、NSExceptionDomains を設定すれば、指定したドメインへのNSURLSessionやUIWebViewからのhttp通信も許可されるそうです。

ただし、Apple のエンジニアの間でも情報が錯綜している

UIWebiewにも NSAllowsArbitraryLoadsInWebContent は有効なはずだ、とAppleのウェブテクノロジーエバンジェリストがTwitterで述べているようです。

ちなみに私がLabで質問したのはセキュリティの担当者でした。

ATSはセキュリティの機能で、2016年末に必須化することが発表されたのもセキュリティがテーマのセションです。なのでセキュリティエンジニアの言っている内容がよりATSの方針・意図を知るためには適切ではないかとは思っています。

しかし、Apple内部でも見解が統一されていない可能性があり、正式リリースまでの間に変更が加えられる可能性もありますのでご注意ください。

どのように対応すべきか

少なくとも今日私が話を聞いたLabのエンジニアの話をもとに考えると、これまでhttpのウェブページを利用するために NSAllowsArbitraryLoadsYES にしていた場合は、NSAllowsArbitraryLoadsInWebContent を追加して YES を設定し、WKWebViewのみhttp通信を許可するのが良いでしょう。

UIWebViewやNSURLSessionで不特定多数のサーバーに対してhttp通信を行わざるを得ない場合は、そのまま NSAllowsArbitraryLoads のみ YES に設定していれば良さそうです(審査時に理由の説明が必要)。

UIWebViewを利用している場合、特別理由がなければWKWebViewに移行することが強く推奨されそうです。


はてなのサマーインターンに参加するiOSエンジニアを募集中

はてなではSwiftを使ってiOSアプリを開発しています。今回のWWDCの基調講演のスライドの中にもSwiftで作られたアプリの一つとして、はてなブックマークアプリのアイコンが掲載されています。

そんな株式会社はてなでは "iOSアプリ開発実践コース" がある、はてなサマーインターン2016を開催します。

hatenacorp.jp

応募締め切りは2016年7月4日(月)となっています。宿泊費は出ますので、全国より奮ってご応募ください!