LoginSignup
24
9

More than 1 year has passed since last update.

Platforms State of the Union WWDC2022をまとめてみたら大量のアップデートがあってすごいことになっていた件について

Last updated at Posted at 2022-06-07

こんにちは。virapture株式会社でCEOしながらラグナロク株式会社でもCKOとして働いているもぐめっとです。

mogmet
先月宮古島へ行ってみたのですが、梅雨でずっと雨でした。5月に南の島はお勧めしません。

本日はWWDC2022で発表されたplatforms state of the unionをまとめてみました。
みなさんkeynoteに目が行きがちですが、開発者はこちらに目を通してから各セッションに臨んでみるといい目印になります。

下記の三本で情報をお届けします!

    1. AppleのPlatformの現状と今後の方向性
    1. アプリをAppleのプラットフォームのシステム体験と統合する方法
    1. 新しいAPI

1. AppleのPlatformの現状と今後の方向性

Xcode Cloud

Xcode Cloudが今日から使えるようになりました!
image.png

2023年末までは月々25時間のサブスクリプションが無料で使えます。(その後は月々14.99$と思われる)

image.png

Swift

並行性(async await)が導入されて扱いやすくなりましたが、今年は平行性をもたらす新たなパッケージとして、非同期アルゴリズムが追加されました。

例えば、2つの非同期シーケンスを圧縮してくれる実装ができます。
image.png

もちろんネットワーク障害などtry catchもできます。
image.png

時間ユニットを表すクロックタイプを備えており、時間ベースのものもサポートしています。
image.png

アクターをつかえばスレッドセーフに並行して実行できるのでデータを分離できます。
image.png

アクター間のコミュニケーションはasync/awaitを使うと効率的にできます。
今回のアップデートで分散アクターを追加しました。
分散アクターは複数のプロセスやデバイス間で通信ができます。

distributedというキーワードがリモートでアクセスされるメソッドとマークで、異なるデバイスで通信ができます。
image.png

文字列

たとえばコーのコードをパースする方法について、実装すると大変ですが...
image.png

正規表現をアップデートしていい感じに取れるようになりました!!
image.png
Unicodeのサポートも最大限活用できます!

シンタックスもハイライトされてちゃんと使えてるかもわかります。
image.png

playgroundではマッチした内容も表示してくれます。
image.png

正規表現が複雑になると難しくなるので正規表現ビルダーを追加しました!
正規表現を選択してConvertすると。。。
image.png

より読みやすく変換されました!
image.png

16進数を読み取るようなクラスを使用することも可能。
image.png

Generics

Genericsは汎用的に作れるようになるため便利だが、細かいことをやろうとすると大量のコードを書かないといけない。

image.png

someキーワードを追加したのでこれを使うとより簡単に表せるようになりました!

image.png

anyキーワードを使うとどんな型のコレクションでも保持できる型を表現できます。
image.png

Swift Package Manager

Package PluginによってXcodeを拡張しビルドを強化できるようになりました!
チェックアウトしてすぐ自動でDLされビルドされます。

プラグインはサンドボックス環境で動作します。
image.png

例えばSwiftLint、SwiftFormatなどや自動生成に使えます。

オンデマンドで使うコマンドプラグインとプロジェクトのビルド時に使えるビルドプラグインの2種類あります。

例えばインポートを文字列の長さ順にフォーマットするSwiftFormatの例。
image.png

修正されたファイルを見つけてフォーマットしてくれます。

手動で実行する場合はファイルを選んで実行が可能
image.png

ソースコードの生成やGit連携、エラーと警告の表示なども出来ます。

もちろん、プラグインを他の人に共有も可能です!

その他のパワーアップ

  • リンク時間が最大二倍高速
  • 非同期タスクの優先性を確実にしてアプリの効率性と反応良さを維持している。
  • swiftで書かれたアプリは動的リンカーにおける改良のおかげでiOS16にて起動時間が劇的に早くなります!

他にも盛り沢山あります。

image.png

SwiftUI

ナビゲーション

新しいナビゲーションAPIはナビゲーションスタイルが表現しやすくなった。
image.png

簡単に選択範囲保存や復元、ナビゲーションスタックの内容を置換したりすることができます。
アプリケーションの起動状態の設定や、サイズクラス感の繊維の管理や、ディープリンクへの対応などに役に立ちます。

Custom Layout API

複数の行と列にわたって配置された一連のビューのレイアウトを容易にする APIを追加しました!

image.png

例えばビューを新聞記事のように配置しスペースが必要になった時に次の列に折り返されるフローレイアウトを作成ができます。
image.png

時計の文字盤の数字のように円形にビューを描く放射状レイアウトも作れます。

image.png

メインのビューの上にスライドするようなハーフシートも表現しやすくなりました。
image.png

共有シートにも対応したのでShare Extensionを使いやすくなりました。

image.png

UIKitからSwiftUIへ段階的に移行しやすくするようにしました。
例えばカスタムセルが描けるようになりました。
image.png

※UIKitとSwiftUIの話についてはこのセッションで詳しく語られそうです。

Swift Charts

SwiftUIをもとに作られた高度なカスタマイズが可能な図表作成フレームワークが追加されました!
image.png

こんな感じでかけます。

image.png

いろんなタイプの図表が作れます。
image.png

swiftUIに対応しているのでアニメーション表現もしやすいです。
Jun-07-2022 15-04-09.gif

SwiftUIとXcodeとの連携

新しいTableViewも含めたXcodeのプレビュー画面
image.png

棒グラフはこんな感じでできます。

source view
image.png image.png

線グラフ

source view
image.png image.png

新しいプレビューでは異なるデバイスやテーマによる違いを見やすくなりました。
image.png

例えばライトモードとダークモードの比較
image.png

向きの比較などが可能
image.png

ViewThatFits

ViewThatFitsを使うといい感じに要素を並べてくれます。

source view
image.png image.png

NavigationSplitView

ipadなどで縦と横の要素が別々であるときにNavigationSplitViewを使うといい感じに表現してくれます。
image.png

Sidebarの内容に合わせてNavigationStackがその内容を変更してくれる

サイドバー選択前 選択後
image.png image.png

MacOSの対応はSupported Destinationsから追加します。これだけでMacOS対応完了!

image.png

macOS用にメニューバーの追加もできます。

source view
image.png image.png

アプリをAppleのプラットフォームのシステム体験と統合する方法

ロック画面

新しくロック画面に情報が表示できるようになったが、WidgetKitを使って同じデザインをロック画面に統合できます。

Circular

小さい画像やゲージチャートや少ない文字を表示できます。
image.png

Rectangular

今後の天気予報のような情報を表示できるキャンバスを提供します。
image.png

Inline

少ない文字とSF Symbolで情報を伝えます。

image.png

watchOS9からはコンプリケーションもWidgetKitを利用するようになったので同じコードでロック画面、AppleWatchどちらも表現できます。

実装例

最初にどんな形をサポートするかを宣言します。

image.png
(ちなみにwatchOSではsystemSmallは使えないため別条件で分岐されています。)

ゲージチャートを使って現在の注文数を表示するCircularウィゼットの例

source view
image.png image.png

Rectangularウィゼットの例

source view
image.png image.png

Live Activities

Live Activitiesはロック画面でリアルタイムで状態表示できる機能です。
image.png
image.png
image.png

これもWidgetKitを使って実装しますが、Live Activityのプレゼンテーションと状態をリアルタイムで更新する必要があります。

共同作業

新しく追加されたMessages Collaboration APIを使うことで共同作業ができるようになります。

image.png

やり方は2つあります。

一つは共有シートから始める方法。
image.png

もう一つはドラッグ&ドロップで始める方法。
image.png

共同制作ポップオーバーですぐにメッセージや通話に戻れたりもできます。
image.png

Messages Collaboration APIを使うことでメッセージやFaceTimeの構造に組み込まれるようになります。

App Intents

今まではショートカットは手動で登録しないといけなかったが、App Intentsがショートカットと連携することで、何も設定することなくSiriと共にショートカットが使えるようになりました。
image.png

例えばHeySiri, ルンバでキッチンを掃除して!というだけ。
image.png

IntentDefinitionファイル内の変換ボタンを押すだけでApp Intentに対応できます。
image.png

XcodeがApp Intentsのソースコードを生成するので、空欄の所にIntentをリンクコードで入れておきましょう。

App Intentsで表示するコンテンツ
image.png

App Shortcutsを使えるように定義しておきます。Siriの呼び出すフレーズもここに定義します。
(フレーズには変数としてアプリケーション名を含めないといけません。)
image.png

使う人がなんて呼べばいいかわかるようにSiriTipViewを定義しておきます。

source view
image.png image.png

SiriTipViewを追加するととSiriのShortcutsにも現れるようになります。
image.png|

パラメータ値に対応するバリエーションも表示されます。
image.png

実際実行するとこんな感じ。
image.png

認証テクノロジー

Passkeysを使うと認証フローを効率化してセキュリティ問題に対処できるようになった。
image.png

Passkeysでアカウントを設定するとき、パスワードを作る必要はありません。
image.png

ユーザ名を入力して、Passkeysを自分のiCloudキーチェーンに保存される。
image.png

これだけで全てのAppleデバイスにPasskeysが安全に同期される
image.png

サインアウトしてもすぐにサインインしなおせます。

image.png

QRを使ったサインインもできます。

QRを読み取って FaceIdでサインイン
image.png image.png

safariの場合はより簡単にサインインできます。
image.png

Passkeysは公開鍵暗号に基づいているのでサーバーから認証情報が漏れることはございません!!
image.png

サーバは認証情報の代わりに公開鍵だけを保存する。

パスワードと違ってパスキーを入力したりコピーはできないため、Passkeysによりフィッシングサイトは撲滅できます!

実装方法は公開鍵をサーバに保管し、認証用のチャレンジを送れるようにした後、アプリやサイトでユーザにパスキーを使ってサインインするようにするだけ!

image.png

もちろんパスワードとの共存も可能です。

3. 新しいAPI

UITextViewに検索や置換のAPIが追加。

image.png

ナビゲーションバー、ツールバー、文書メニューもアップグレードされます。

iPad用にDriverKitが使えるようになったので、Macでも使っていた外部ハードウェアに接続されたUSBやオーディオデバイス、PCIデバイスなどが使えるようになった。
image.png

watchOS9のCallKitフレームワークにはVoiceOver IP Background Modeが含まれるようになったので、AppleWatchから直接音声通話を行うことができるようになりました。
image.png

Bluetooth接続された医療機器はより強力な持続性とデータ通信を得られ、緊急性の高い状態が検知された時にタイムリーに警告できるようになりました。
image.png

tvOS16は近くにあるAppleTVやiPhone, iPad, AppleWatchのアプリ間で繋がりのある体験を作れるようになりました。
例えばワークアウトにAPpleWatchのモーションデータを使うことやターン制ゲームのカスタムコントローラとしてiPhone/iPadを使うことができる。
image.png

また、tvOSはデバイス検出と接続を管理してくれるので、アプリを他のデバイスで実行している必要もないです。
image.png

アプリがなければ直接DLするように自動的に促されます。
image.png

SKAdnetworkを改善してプライバシーを侵害することなくデータを活用できるようになりました。
image.png

ScanKitとRoomPlanというAPIでARとLiDARスキャンを使って家具を自動的に認識するようになった
image.png

昨年、集中モードを導入したが、今年、通知を管理する方法としてFocusフィルタを導入した。
FocusフィルタはApp Intents上にあり、現在の集中モードに応じて、アプリのコンテンツを調整できます。
image.png

例えば仕事中は仕事のアカウントだけを表示するFocusフィルタを設定できる。

Metal

Metal3が今年登場します。
今まで以上に高いフレームレート、没入感のあるグラフィックスのレンダリングなど、新次元の演算性能を可能にする新機能を備えています。

機械学習フレームワークのPyTorchでは、パフォーマンスが劇的に向上した。

ゲームロードに関して、最新のゲームは高画質のアセットを提供することで、リッチなゲーム体験を実現している。
しかし、GPUに素早く読み込むのは難しい。

よくある手法としては低画質バージョンを読み込み描画することになる。
image.png

Metal3ではMetal iO APIで高速リソース読み込みを実現した。
image.png

全てのAppleシリコン搭載Macの高速SSDストレージが最大限のスループットを実現するように十分なリクエストをキューに保持します。

これによりロード体験が向上しました。
image.png

シェーダーのコンパイルに関して、オフラインでのコンパイルを活用することで、GPUシェーダーバイナリをプロジェクトのビルド時に生成できるようになりました。
image.png

これにより読み込み時間の圧縮とレンダリングのパフォーマンスが上がりました。

image.png

ジオメトリのメッシュを生成する方法に関して、Mesh Shading APIを使うことで、最適化されたジオメトリ処理パイプラインを単一のレンダーパスで、正確に制御できるようになります。
image.png

Objectシェーダーで生成するメッシュの数が決まり、Meshシェーダーで実際にジオメトリが生成され、ラスタライザーに直接送られます。
こうすることで、デバイスのメモリに送る必要がなくなり、パフォーマンスが向上します。
image.png

MetalFX Upscalingを使うことで1フレームあたりのレンダリング時間の短縮に役立ちます。

image.png

目標フレーム時間に収まるように同じ複雑なシーンをより低い解像度でレンダリングしてから、MetalFX Frameworkで一時的なアンチエイリアスとアップスケーリングを実行して目標解像度にすることができるようになります。
image.png

(もぐめっと的にはMetalの話は難しくて理解が追いつかない。)

MapKit

配布ターゲットをiOS16にするだけで3Dの都市体験を提供できるようになりました。
image.png

カメラの中心座標の距離を600mに設定して、どこまでズームインするかを選べます。
image.png

ピッチと方角を調整し、3D空間内でカメラを傾けることもできます。
image.png

デフォルト標高は平坦ですが、elevationStyleにrealisticを設定すると、3D標高を含められる。
image.png

MapKitのDirections APIから注釈や経路ソースを加えるときはMapKitが自動的に標高を管理して注釈や経路を3D地形上に配置して調整します。

image

スローパンを加えてカメラの向きに動きをつけるとマップ表示がいい感じになります。

Jun-07-2022 19-14-13

dark modeにも対応
image

Look Around

ストリートレベルで世界を探索できる機能を追加しました。(いわゆるGoogleStreatView)
image

高解像度の3D写真とスムーズなアニメーションでストリートを進むことができます。

Jun-07-2022 19-18-25

ViewControllerででMapItemを指定すればマップのすぐ下にLookAroundプレビューを加えられます。
image

ユーザがタップすればフルスクリーンのLook Aroundビューを表示することも選べます。

image

Apple Maps Server APIs

RESTfulで4つの関数をサポートしました!
image

  • Geocode:経度緯度を住所に変換
  • Reverse Geocode:住所を経度緯度に変換
  • Search:検索
  • Estimated Time of Arrival:到着予定時間

Apple Weather

機械学習と予測アルゴリズムを組み合わせた高解像度気象モデルを使った気温と降水量予報などの天気予報を取得できるようになりました。

image

過去のデータも含めて、10日分の一時間ごとと1日ごとの天気予報を提供します。
世界の一部では破天の通知と分単位の降水量も提供されます。
image

たくさんの天候データを取得できます。
image

取得するときはWeatherKitを使います。
image

実装はこんな感じで、晴れた場所を提案する実装ができます。

source view
image image

Apple Developer Programメンバーシップに月々50万回のAPI呼び出しが含まれています。
image

さらに必要な方は追加で課金すればもっと使えるようになります。
image

テキスト認識表示

VisionKitを拡張して2つのAPIを追加しました。

一つはLive Text APIで画像コンテンツを解析する機能が可能になりました。
写真や一時停止したビデオの中のテキストやQRコードを使えるようになります。
image

さらに関連するデータをタップするだけでコピーや翻訳などのアクションを起こせる。
image

2つ目のAPIはData Scanner APIで、ライブカメラ映像を解析する機能が可能になりました。
テキストとバーコードの読み取りが劇的にシンプルになります。
image

日本語含めて9ヶ国語サポートされます!!やったぜ!!
image

Live Text APIの実装とデモはこんな感じ。

source view
image image

住所の場合はクイックアクションを使えます。
image

DataScannerを実装してQRコードをスキャンする実装をしてみます。
カメラを起動してQRをスキャン開始する場合はこんな実装。
image

スキャンが成功した場合の実装はDataScannerViewControllerDelegateを実装することで可能になります。
image

QRを読み取るカメラはこんな感じで動きます。
image

まとめ

怒涛の量の紹介でしたが、さらっとまとめると、、、

  • XcodeCloudが使えます!
  • swiftとswiftUIでAppleのプラットフォームに対応することがさらに簡単になりました!
  • ロック画面ウィゼットとライブアクティビティがロック画面に表示できます!
  • メッセージでの共同作業が簡単にできるようになりました!
  • App IntentsはアプリケーションをSiriと連携させます!
  • WeatherKitやMapKit、LiveTextやMetalなど既存のAPIにも大幅アップデートしました!

もぐめっと的にはLive Activityにアプリの可能性を感じたので、これ使ってリアルタイム鬼ごっことかしたいなとか思ったりしました。

最後に、ワンナイト人狼オンラインというゲームを作ってます!よかったら遊んでね!

他にもCameconOffcha、問い合わせ対応が簡単にできるCSmartといったサービスも作ってるのでよかったら使ってね!

また、チームビルディングや技術顧問、Firebaseの設計やアドバイスといったお話も受け付けてますので御用の方は弊社までお問い合わせください。

ラグナロクでもエンジニアやデザイナーのメンバーを募集しています!!楽しくぶち上げたい人はぜひお話ししましょう!!

24
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
9