Categories: 勉強会

#WWDC18JP【DMM meetup】Apple WWDC 2018 報告会 をまとめてみた!

【DMM meetup】Apple WWDC 2018 報告会に参加してきたのでその書きなぐりまとめです。

※大体の情報はappleのサイトやwebから見れる情報になると思っていますが、部分的に隠したほうがいい情報等ありましたらご指摘いただけると幸いです。

WWDC18 cherry-pick Xcode10 beta

Source Controlr Workflow in Xcode

  • ローカルリポジトリとリモートリポジトリで差分をエディタ上で見れるようになった
    • 行数の出ている左側に青い線がでて、変更した箇所がみれるようになった
    • 競合した箇所は赤で表示される。(しかしPreferencesのSource Controleのinclude upstream changesでチェックしないと表示されない)
    • 青いとこをおすと更新情報がみれたり、赤いところはどうやって競合を解決できるかなどがみれる
    • discard changeをおすとファイルの変更の取り消しができる
      • 取り消し後、ファイルの取り消した情報もエディタでみれる
    • storyboardやxcodeprojは赤い線がでたりでなかったり挙動はまだ不明
  • Bitbucket / GitLabも使えるようになった
  • pullするときに、rebase optionをつけれるようになった。
  • ssh keyの生成とアップロードもxcode上からできるようになった。

Optimizing App Assets

  • asset catalogに、新機能が追加されたが、今回はCompiressionの紹介
  • Apple Deep Piccel Image compression
    • asset catalogにあるイメージや色を最適化した圧縮(15-20%)をしてくれる
    • 対象はasset catalogに管理されているものだけになる
  • color(iOS11~), mp4 (Data Set), iamge(1-3x or Vector)はAsset catalogで扱えば恩恵を受けられる

Hello, Mojave

  • 単にUIKitを乗っける話ではない
    • FrontBoardServices(ios8を分離して作られたシステムアプリ)をmacOSに搭載している
  • UIKitSystem.app、UIKitHostApp.xpcなどを使っている
    • UIKitSystemを直接たたくと、iosmacというアプリでうごくといわれる
    • PrivateFrameworksにFrontBoardがあるので、macosにのるようなFrontBoardを作ってきているのがわかる
  • iOSMac
    • ユーザに違いを悟らせないことを念頭に置いている。macアプリと同じようにリサイズなどができる
    • UIKitSystemと関連サービスはオンデマンドに起動されてる
    • UIKitHostAppがホーム画面の代わりをこなす
    • GPU支援のない環境では起動できない制限がある
  • 自分のアプリを動かす
    • private entitlementが必要
    • SIP, AMFIを無効にしたうえで、iOS Simulator向けにビルドしてパッチなどする
    • FrontBoardSystemが制御してUIAlertControllerもいい感じにラップしてMacぽく表示してくれる
  • menubarまわりはソースを書かないといけないが、iPad向けに作っておけばmacにも対応ができるようになることでしょう。

※細かい内容や、実際に手元でやる手順についてはA quick look at UIKit on macOSも参照。

Siri Shortcutsを試してみた!

  • 今まではSiriKitは限られた動作(メーッセージを送る、支払いをする)しかできなかったが、アプリの任意の動作をトリガーできるようになった
  • デバイスをロックしても使える
  • 予定を操作するIntentがなかったが、連携できると、予定などを読み上げさせることが出来る
  • NSUserActivity: 実装工数は低め。アプリを起動して任意の動作を実行する
  • INIntent: 実装工数は高いが、Siriで動作を完結できる
  • demo
    • Today Events機能を使った状態で、Register SiriからSiriにフェーズを追加できる。
      • “今日の予定” というとOS全体に影響しそうだが、登録すると、OSのものより自分のフェーズのほうが優先される
    • NSUserActivityを使うと、アプリが起動される
    • Intentを使うと、「今日の予定はX件です」のようなSiriのなかでリストを表示することができる
  • source
    • NSUserActivityを使ってよばれると、AppdelegateのNrestoreUserActivityStateで必要な画面を起動する。
    • Intentを使ってSiriで完結する場合はIntents.intentDifinitionというファイルを作成し、定義しておく必要がある
      • 上記ファイルを作成するとXxxIntentクラスが自動的に作られて登録できるようになる。
      • IntentsExtenstionと、IntentUIというのを作る必要がある。
  • spotlightのSiriからの提案にも表示できる
  • Watch FaceにSiriが表示できて、そのWatchFaceもカスタマイズ表示できる
  • 現状「明日の10時からミーティングの予定を作って」のようにIntentにパラメータをもたせることはできない
  • troubleshooting
    • 実機じゃないと使えない
    • Intentsを使うとスキーマからクエリ設定できる

CreateMLのText Classification (Natural Language)について

connpassはイベントやIT勉強会の開催、さらに参加者の集客に便利です。コミュニティやグループの運営やイベントの検索、事前決済もできます。
connpass - エンジニアをつなぐIT勉強会支援プラットフォーム - connpass
  • Create MLでできること
    • イメージのカテゴライズ
    • 汎用的なデータの推定
    • 自然言語のカテゴライズ
    • ObjectDetectionはできません!!!

data setの準備

  • MLDataTableという表の形の構造体を準備する
    • MLDataClumn, MLDataValueで準備する
    • csvやJSONから生成できるのでそれが基本になる
  • 今回はバチェラー(恋愛リアリティの婚活サバイバル番組)に関するツイートを収集して、anti, normal, fanというラベルで分類してみた

トレーニングしてみる

  • csvをMLDataTableに渡して生成する
  • トレーニング用とテスト用のデータにわける
  • 自然言語の列と、ラベルのタグ付けの列の名前をMLTextClassifierに渡せば学習してくれる
  • Table作ったときにエラーが出たときは、MLDataValueConvertibleに準拠していない場合があるので手直しする
    • しかし、テーブルの生成にエラーがでなかったが、学習を開始すると、学習が止まってしまうバグに遭遇した
    • おそらくツイート内容の謎の文字列のせい?
    • どのツイートは原因かわからないので、泣く泣くデータを削ることに(1321→449件)
  • 学習を開始するとログなどは全く出力されず終わったという結果しか帰ってこないので、トレーニングするときに渡ってくるMLClassifierMetricsの中を出力してあげればどこで間違えて、なんの分類が弱いかなどが見える

ExportModel

  • 権限周りでこけたらplaygroundを用いて、playgroundSharedDataDirectoryに書き出されます
  • 学習済みのモデルを転移学習させてあげるので軽いサイズになるらしい

demo

  • 入力した文字列をもとにバチェラーに対して、アンチなのか、ファンなのかの判定ができる

AutoFill完全に理解した(してない)

AutoFillの復習

  • safariは既にできていて、iCloudKeychainを使えばできていた
  • iOS11から、AutoFillがアプリからも出来るようになった
  • Keychainに保存済みのパスワードをアプリで認証できる。
  • キーボード上に認証情報が表示される
  • 実現するためには、UITextContentTypeに.usernameと.passwordを設定すればOS側で認識できるようになる
    • さらに、apple-app-site-associationファイルでウェブサイトとアプリを関連付けする

AutoFillの変わったところ

  • Automatic Strong Passwords and Security Code Autofillによると、パスワードの自動入力、パスワードの自動生成、セキュリティコードの自動入力、Federated認証、新しいパスワード管理機能などを話していた
  • アプリでもパスワードを保存するかどうかきかれるようになった
  • 2段階認証でも自動入力が使える
  • パスワードの自動生成が出来る
  • 設定アプリのデザインがかわってairdropでパスワードが遅れるようになった
  • サードパーティのパスワードマネージャーもサポート
  • WKWebviewの自動入力もサポート
  • 2段階認証自動入力
    • キーボードの上にコードがでて自動で入力できるようになる
    • iPhoneだけじゃなく、macとの連携もできる
    • .oneTimeCodeというUITextContentTypeを指定して、apple-app-site-associationを置けば実装完了
    • 検証方法はツイート参照

  • キーボードの種類によっては発火しない場合もあるらしい
  • パスワードの自動生成と入力
    • システム側でセキュリティ強度の高いパスワードを作ってくれる
    • サービスごとにパスワードを考えなくてもすむ
    • パスワードのルールの設定もできる
    • UITextContentTypeに.newpasswordというUITextContentTypeを指定する
    • ルールのカスタマイズについてはテキスト型のルールをUITextInputPasswordRulesというのを使ってあげればよい
    • ルールの生成にはPassword Rule Validation Toolを使うと便利

HumanInterfaceGuidlineのAutoFill

  • すべてのログイン過程でAutoFillを推奨している
  • 可能な限り生体認証サポートを推奨
  • システムが提供している認証アイコンは使わないようにする(FaceIDやTouchIDなどのアイコン)
  • AutoFillは非常にパワフルになって対応は簡単、ユーザーの体験がよくなるのでぜひ対応しましょう

ぎりぎりでもなんとかなるWWDC & Safari 12 and Web AR

  • 飛行機チケットを撮ったのが出発2週間前、ホテルを予約したのは現地前日だった
  • 当選メールは10週間くらい前にくる
    • 会社に行きたい旨を伝えたのが3週間前
    • 保険に入るためにクレカの申込みが3週間前
    • 2週間前に、宿泊場所、ESTA、飛行機を予約した
    • AirBnBで宿泊をした
    • クレジットカードのキャッシング枠を1週間前に作って現地でドルを引き出そうとしたけど枠作るの間に合いませんでした
    • パッキングは出発4時間前
    • 換金はしなかったがクレカでなんとかなった
  • 会場への移動手段は到着後考える
    • シェアリング自転車や電動のスクーター、電動自転車みたいなのがあってそれを使って会場まで行った
  • 見るセッション選びは当日
  • 食事は都度考えた
    • 会場でご飯が出るので会場で食べれる。ただし肉が入ってる飯は2,3つ食べている人がいて、入手は困難。
  • トラブル集
    • かったはずのお土産がない→みつかった
    • 財布をなくした→会場のセキュリティの人に明日来いっていわれたが、隣のホテルのフロントに落ちていた
    • 飛行機がない→Delta Airlinesのアプリが優秀なので油断していたら、乗り逃した。しかし無料で振り替えてくれた
  • From JapanのFacebookグループがあって、リアルタイムな情報が投稿されるのでなんとかなった

Safari webkit

  • スマートフォンのシェアを見ると、49%がAppleになっている
  • iosで搭載できるOSはchromeだろうがsafariだろうが裏側はwebkitになる
  • session 234 What’s New in Safari and Webkit参照
  • オートフィルや、videoがイメージタグで埋めこれるようになったり、イメージのデコードが非同期でできるようになったり、iPadでFullscreen APIが使えたり、AppleWatchでブラウジングができるようになったりした
  • one-time-codeのautofillが最も熱い

Vdeoがイメージタグで埋め込める

  • <img src=”/dmm.mp4″> みたいなかたちで埋め込める
  • <video>タグでいいのではとおもうが、iOSのブラウザにメリットがあって、iPhoneのブラウザでも動画が自動再生されるようになる
  • アニメーションGIFの代替を想定している実装になっている
    • 解像度が高すぎる、再生時間が長すぎる動画は途中で止まる
    • どれくらいの解像度や長さかは不明
  • 音は出ない
  • 再生制御はできない
  • H.264でエンコードされたMP4限定。H.264/HEVCには非対応
  • cssのbackground-imageとしても指定可能
  • Safari11.1から実はすでに利用可能
  • パフォーマンスについてはEvolution of <img>: Gif without the GIF – Cloudinary blogにかいてある

Fullscreen API on iPad

  • 動画などのネイティブではできたが普通の状態ではできなかったがそれができるようになった
  • webkitRequestFullscreen()というのを呼び出してあげるとfullscreenになる
  • youtubeに独自動画AIなどが表示できる
  • iosのネイティブUIの部分はフルスクリーンできなかったができるようになった
  • 使えるのはiPad限定
  • web向けのアプリケーションで写真ギャラリーやプレゼンが本格的に実現できる
  • PC向けにフルスクリーンを作り込んでいたサービスは特に対応必要はなしだが、独自に作り込んでいたサービスに関しては対応が必要と思っている

Web AR

  • File usdzを使うとできる
  • xcrun usdz_converterというコマンドで作れる
  • フォトショで3Dデータ作って、書き出されたファイルをコマンドでコンバートするとできる
  • ちなみに日本語でやるとエラーになるらしい

@mogmetの所感

AutoFillに関しては実装も簡単で、UXを向上させることができるので、すぐにでも導入しないといけないなと感じました。
また、webkitやxcodeも着実に進化してきているのを感じることができました。

今後もさらなる進化と安定に期待です!

mogmet

View Comments

  • Can you be more specific about the content of your article? After reading it, I still have some doubts. Hope you can help me.

  • Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me?