iOS de KANPAI !【WWDC 2019 報告会】に参加してきたまとめ
WWDCの内容を共有するiOS de KANPAI !【WWDC 2019 報告会】がDeNAで開催されたのでその時のまとめメモです。
※βでの情報になりますので、実際のリリース版ではもしかすると挙動が変わっている可能性もあります。ご了承ください。
※NDAにひっかかりそうな内容は削ったりしていますが、もし不適切な内容がまだ残っているようでしたらご指摘いただけると幸いです。
テスト、Xcode について
Yusuke Hosonuma様
Xcode11の機能
- ミニマップ
- 右側にエディタの全容が表示されるように
- Markdownの表示、差分表示、キーワードの表示が映る
- フォーカスするとメソッド名なども表示される
- cmdキー押しながらだと一覧表示される
- 不要であればもちろん非表示もできます
- エディタ分割
- アシスタントエディタの位置が若干変更された
- SwiftUIのキャンパスをやるにはCatalinaにする必要あり
- エディタ追加ができるようになった
- optionキーを押しながらだと分割する方向が縦に変わる
- Shift+Option+ファイル選択で好きな位置に表示
- インラインの差分表示
- 差分のShow Changeを押すと差分前が表示されるようになった
- リファクタリング強化
- ドキュメンテーション生成で、Cmt+Clickでドキュメンテーションの変更もされるようになった
- 変更履歴
- 右側のサイドバーのアイコンをクリックすることで変更履歴がみれるように
- そこの履歴の右クリックからgit操作もできます
- Stash Changesもできる
デバッグ・テスト
- 端末状態の設定
- 通信状態と発熱状態がDeviceWindowsから設定できるようになった
- TestPlans
- テスト実行の設定をまとめる機能
- ターゲットやロケール、サニタイズチェックなどができる
- xcodebuild test -testPlanで指定できる
- 端末の指定などもできる
- 導入は、既存のスキーム編集のTestペインで、Convert to use Test Plansというボタンから導入できる
- 設定は、ファイルを選択するとTestタブとconfigurationタブに分かれるが、Configurationタブでテストをどういう条件で実行するかを指定できる
- Shared Settingsというのが共通の設定になる
- 個別の設定として言語別にやったりなどができる
- 実行はTestナビゲータを右クリックして、Runのところからtestの設定を選んで実行ができる
- XCTUnwrap
- XCTAssertNotNil + アンラップなAPI
- let s = try XCTUnwrap(string) みたいなことができるようになった
ソーシャルライブサービスから見たWWDC19
映像
- 今年もOpenGLESがdeprecatedと念押しされた
- 今までシミュレータでMetalは動かなかかったが、シミュレータ対応しました!
- MTLGPUFamilyApple2相当のGPUとして実行される
- GPUアクセラレーションが効くようになった
- これらのおかげでmapkitやsafariなどのスクロールパフォーマンスも向上している模様
- MTLGPUFamilyApple2
- Apple A8 GPU相当の機能が使える
- Metal3からより抽象的なfamily表現になった
- Metal on Simulatorの注意点
- TextureStorageを使う時シミュレータのときは共有メモリのStoroageModeをprivateにする必要がある
- メモリを共有したい場合は自前でコピーする必要があり
- デバイスの温度上昇がとれるようになった
- GPU/CPUを酷使するアプリは熱問題に悩まされていたが、NotificationCenter経由で取得可能になった
- ProcessInfo.ThermalStateを見て状態を変える
ARKit3
- People Occlusion
- 人が前か奥行きをつけて3Dオブジェクトを人が遮れるようになった
- ただしA12から使える(XS/iPadPro以降)
- 人以外の者は手前にはおけない
- OcculusionMaterial
- RealityKitのコンポーネント
- MLとかVisionで輪郭取れば人以外の奥行きもとれるかもしれない
- Motion Capture
- 二次元及び3次元のキャプチャができるようになった
- ARCoachingOverlayView
- iPhoneをどうやって動かせばよいか教えるためのビューが追加された
- RealityKit
- レンダリングがすごい!
- 動いてる3Dモデルの下に影をつける
- 背景はぶれてるのにモデルがくっきりする問題が解消
- 震度ブラー、ノイズなどの機能が実装
Sign In with Apple などについて
Overview
- ログインすると名前やメールアドレスなどが編集できる
- メールアドレスは自分のものか、ランダムのメールアドレス化を提供することができる
- もう一度ログインすると既に使われているとちゃんと言われます
- アプリごとにランダムなemailアドレスを作られるのでプライバシーが守られます
- サファリで同じサービスを使っていたらkeychainから読み取って使ってないですか?と聞かれます
- アカウントがrevokeされた時など、NSNotificationCenterから通知をみておくといい
- 開発者に嬉しいポイント
- アプリをインストールしたiOSユーザなら100%持っているAppleIDをログインに使える
- 本人へ確実に届くメールアドレスが手に入る
- クロスプラットフォームに対応しているのでjsやAndroidでも使える
- ユーザに嬉しいポイント
- TouchID/FaceIDだけでログインできる
- ランダム生成メールアドレスが使える
- 必要以上に個人情報が収集されない
- ガイドラインをみると、サードパーティー製のログインを使っているアプリにはAppleのログインもいれないと行けない
- HIGにボタンのサイズや位置については一番上になどは書かれていないが、目立つ位置に表示してくださいと記載されている
- 同じサイズでおく
- スクロールしないと見えない位置においてはいけない
- コントラストを保つなどしてみやすくしないといけない
触ってみてわかったこと
- 2FAが未設定だった場合、アラートがでてきて設定アプリに飛ばされるので離脱しそう
- FaceId/TouchId使ってなくてもパスコードでOK
- 設定>AppleID>パスワードとセキュリティにAppleIDを使用中のAppという項目が出てきてアプリ一覧が見れる
- 転送などもON/OFFできる
- 使用中止をして削除もできる
- Web上のセキュリティーのページでも確認はできます
- Apple Relay Serviceは送信元を登録する必要があって、Certificates, Identifieres & Profilesのページからドメインや特定のメールアドレスから送れるように登録できる
よくわからないこと
- 2回目以降は名前やメールアドレスは取得できない?→1回目で確実に保存しておこう
- 設定から消せばステータスはnotFoundになるが、revokeのステータスの取得方法は不明
- 転送メールが届かない
- JSとREST API
- サンプル作ってる人はちらほら
- ドキュメント上ではBETAマークついてない?
- メールアドレスがとれないのかどうか
DarkMode や SF デザインまわりについて🍰
- iOS Dark Mode
- 目に優しい
- 写真や動画などのコンテンツが強調される
- 設定画面から画面表示と明るさ設定できます
- Materials
- 背景のコンテンツカラーをそらすことなくヒントを与えるために重ねて表示するようなものに使う
- アラートや、コンテキストメニューに使うのかな?
- マテリアルに文字を重ねる場合、背景が淡い場合文字は消えるので、Vibrant Colorを使うといい
- Contextual Menus
- 3Dタッチで表示していたコンテキストメニューがすべてのiOSデバイスに対応
- 写真にも入る
- Modal Presentation
- 動きが変わって重なりが表現されるようになった
- 画面が大きいiPhoneなどでスワイプダウンでとじられるようになって便利に
- アクセシビリティ都合で閉じる・完了ボタンの表示は引き続き必須
- Serifの追加
- iOS13からNew York(明朝体)が追加された
SF Symbols
- シンボルの共通セットが提供開始されるようになった
- システムフォントとバランスがとられている
- ウェイトやスケール違いもある
- SF Symbols.appというのがmacアプリで提供されている
- デザインツールにコピペできたりする
- ベースラインが一個一個のsymbolに設定されていてテキストも表示しやすい
- SVGエクスポートするとSketch.appなどで編集が可能
- storyboardからはimage viewのnameのところからsymbolの名前をいれると設定できたりする
- ボタンのコントロールもイメージのところに設定できる
- しかし、フォントサイズを変えるときに、ボタンの中にImageViewがあるとボタンのフォントサイズを大きくしてもシンボルが大きくならなかった
- 配色
- SF SymbolにTintColorを指定可能
- system colorを使うと、Light Mode/Dark Modeに対応するカラーセットになって便利
- テキストラベルにも使える
- 色
- システムカラーにはLight/DarkModeにそれぞれに調整された色がある
- 赤を選んでも4種類の色がある
- SketchのAssetが提供されている
- アクセシビリティ設定
- iOS13だと、設定→アクセシビリティと辿れるようになった
- プロダクトのブランドカラーとどう折り合いをつけるか
- UIに関してはその色に近ければシステムカラーに寄せてしまえば後々のバージョンアップでも対応が楽かも
UI Design Labの体験
- 実際に画面を見せて意見をもらった
- ホーム画面に記事が並んでいて、右上にカテゴリボタンがあって、カテゴリができて、カテゴリを選ぶとそのカテゴリの記事が出てくるというUIについて、タップ数が多いという指摘をもらった
- Appleのマップに関してに見える地図に関して、フィルタリングしてあげている
- ホーム画面+タブバーのUIについては、タブバーが不透明だとスクロールするときにコンテンツが有るのかどうかわからないので半透明にしておくといい
Machine Learning の新機能✨
じんむ様
CreateML
- MLモデルをSwiftで作ることができる
- Image/Text/Tabularを使えることができていたが加えて、Activity/Soundなどを使えるように
- CreateML Appができました!
- ドラッグ&ドロップで自分専用のモデルができます
- 画像分類の例
- 4種類で合計120枚の画像をラーニングさせて、実際にテストしてみた結果95%の制度のモデルができた
- 幅広いMLモデルを作る例
- サイコロ眼をディテクト
- ギターや車などの音を聞き分けできる
- テキストでは文章の過剰、スパム、トピックの分類ができる
- 表敬式では山を高評価にした人に次に登る山をリコメンド
- AppleWatchのセンサーを使って、どの行動をしているかを分類
- MLxARを組み合わせて、ApplePencilで手書き文字識別して、ARスゴロクと組み合わせて得点計算に盛り込める
Domain API
- 学習済みのAPIを使える
- VisionFrameworkImage
- 人がどこに着目するかを学習
- 全景と光景を学習
- 画像から重要なオブジェクトを抽出できるようになった
- 画像の類似度を抽出
- face landmarksの改善
- 人間を矩形で検知
- 犬や猫の検知ができる
- トラッキング制度の改善
- VisionFramework Text
- 写真撮影だけで文字起こしができるようになった
- 文字起こしでは速さと正確さのトレードオフが大事
- リアルタイムのときは速さを重視してパラメータ設定する
- しかし、英語のみ対応
- Natural Language
- 文章の感情解析
- どれくらい負の感情か、生の感情化を数値ができるようになった
- 音声認識ではおんデバイスで音声認識が使えるようになったが、日本語はまだ未対応
- 音声認識では、発話速度、一時停止、声の特徴を返してくれる
- Jitter(迷いのある声)/Shimme(艶のある声)
CoreML3
- 柔軟性は100以上のニューラルネットワーク対応
- 配布モデルもたくさん
- オンデバイスでMLModelをアップデートできるようになった
- 汎用できなモデルでは厳しいときは、既存のモデルをアップデートできる
- オンデバイスだとプライバシーでサーバもいらないので素晴らしい
Turi Create
- モデルを作るのに画像が沢山必要だが、クソコラをつくる要領で一枚の画像で物体を検知できるようになった
SwiftUI / Combine について
SwiftUI
- Apple PlatformのGUIアプリのフレームワーク
- 宣言型の構文
- 開発時にHotReloadできる
- UIKitもサポート
- データとUIの状態の一致も可能
- 双方向のデータバインディングっぽいこともできる
- Cmd+Option+Pでresumeが走る
- 画面上でpreviewもできる
- Function Builderを使うと、カンマ無しで指定できるようになる
- ViewBuilderというのを内部で使っているが明示的にViewBuilderを使ってみても使えます
- FunctionBuilderでifがつかえるが、unwrapしようとするとコンパイルできない。純粋にifのtrue/falseしか使えない
ラボで聞いたこと
- PreviewでViewHierarchyを見る方法はない
- Previewは位置や要素の中身をみて差分だけ更新している
- collectionViewは使えないが将来的なサポートは考えている
Combine
- 時系列に沿った処理に特化したフレームワーク
- RxSwiftに似ているが新しく勉強は必要
- PublisherとSubscriberが主役
現時点での解決策でのハマったポイント
- NotificationCenter.default.publisherなど無いと言われた
- Publisherは自分で用意する必要があった
- JSONDecoderでDecodeできない
- TopLevelDecoderを自分で宣言する必要がある
- Justがない
- Publishersのnamespaceの下に生えている
- FutureもPublishersの下にある
MacPro
- スペックはすごい
- 全部盛りは550万しそう
@mogmetの所感
ARKitやML周りなどより使いやすく進化してきたので、それらを使ったアプリが簡単に作れるようになってきました。
ゆとり世代の私としては嬉しい限りです!
ML使って例えばあなたのゴリラの似てる率はこれくらいですとか、あなたの顔は動物の何に似てますとか、そういうアプリ作れそうですね。