ハイライト
WWDC 2022 でのプラットフォーム一般教書では、Xcode Cloud オンライン、Swift 5.7 構文と同時実行拡張機能、SwiftUI の新しいナビゲーションとレイアウト、WidgetKit ロック画面機能、App Intents、Passkeys、Metal 3、WeatherKit、VisionKit がプラットフォームのロードマップにまとめられました。
主要内容
チームが 2022 年に Apple プラットフォーム アプリをアップグレードする場合、問題は単に「今年はどの API が登場するのか?」ということではありません。本当の問題は、複数のレベルで同時に変更が加えられることによって発生します。コードは保守しやすくする必要があり、インターフェイスはより多くのデバイスをカバーする必要があり、システムの入口はホーム画面からロック画面、Siri、スポットライト、メッセージにまで拡大され、グラフィックスやマップなどの基礎的な機能も進化しています。
この一般教書演説の目的は、これらの変化を同じ構図に戻すことです。 Susan Prescott 氏は、その日 Xcode Cloud が利用可能になったことを最初に発表し、TestFlight、App Store Connect、主流の Git ソース コード ホスティング、および REST API が統合されていると説明しました。続いて講演は、Swift、SwiftUI、システムインテグレーション、セキュリティ、グラフィックス、地図、天気、視覚認識から始まりました。
開発者が取得できるのは、連結できる一連のパスです。 Swift と SwiftUI は日々の開発コストを削減します。 WidgetKit、ライブ アクティビティ、アプリ インテント、およびメッセージ コラボレーション API は、システム表面に機能をもたらします。パスキー、Metal 3、WeatherKit、VisionKit はそれぞれ、ログイン、グラフィックス パフォーマンス、気象データ、視覚認識などのより具体的な問題を処理します。
ツールチェーンから始める摩擦の低減
Xcode Cloud の位置付けは簡単です。継続的な統合と配信を Xcode に組み込み、クラウドでホストします。すべての Apple プラットフォームをサポートし、TestFlight および App Store Connect に接続し、REST API を通じてチームの既存のプロセスに接続することもできます。完全な CI/CD インフラストラクチャを持たない小規模チームにとって、これはコードの送信からテスト配布までのパスが短縮されることを意味します。
Swift Playgrounds 4 も同じツールチェーン ストーリーに配置されます。すでにアプリを構築して App Store に直接送信でき、SwiftUI もサポートしています。プロトタイピング、学習、提出は、軽量の閉ループを形成します。
Swift と SwiftUI が引き続きメインラインになります
Josh Shaffer は、Apple プラットフォームの次世代の組み合わせを Swift、SwiftUI、および Xcode Preview として特定しました。 Swift 5.7 は、非同期アルゴリズム、分散アクター、正規表現、someそしてany一般的な書き込みと Swift パッケージのプラグイン。 SwiftUI は、ナビゲーション、レイアウト、共有シート、UIKit コレクション ビュー セル ホスティングおよびその他の機能を追加します。
フード トラックの例は、いくつかの段落にわたって使用されています。まず、Swift Charts を使用してドーナツの販売データを表示し、次にViewThatFits水平および垂直の画面レイアウトを処理し、新しいナビゲーションの分割ビューを使用し、NavigationStackiPad ナビゲーションを作成し、最後に同じ SwiftUI コード セットを使用してアプリを Mac に導入し、メニュー バーを追加します。
システムの入り口が増え、アプリケーションの機能がさらに見つけやすくなるはずです。
iOS 16 のロック画面は WidgetKit の価値を拡張します。 3 つのロック画面ウィジェット ファミリ、円形、長方形、インラインは、Apple Watch のコンプリケーションのデザイン言語を iPhone にもたらします。 watchOS 9 の複雑さも WidgetKit によって駆動されます。同じウィジェット コードでロック画面とウォッチフェイスをカバーできます。
アプリ インテントは、別のエントリ ポイントの問題に対処します。以前は、Siri またはショートカットに機能を表示するには、ユーザーが手動でショートカットを追加する必要がありました。 iOS 16 では、アプリ インテントとアプリ ショートカットが組み合わされているため、ユーザーは最初に設定しなくても、Siri、ショートカット、スポットライトを使用してアプリの機能を見つけることができます。
基礎となるフレームワークにより、より重いシーンの実装が可能になります
Metal 3 はゲームとプロ仕様のグラフィックスに重点を置いています。リソースの高速読み込みにより、Metal IO を介したストレージから GPU への読み込みオーバーヘッドが削減されます。オフライン シェーダ コンパイルでは、GPU シェーダ バイナリをプロジェクト構築フェーズに入れて生成します。 Mesh Shading API は、ジオメトリ生成をより最適化されたレンダリング パイプラインに組み込みます。 MetalFX アップスケーリングでは、低解像度のレンダリングを使用して、一時的なアンチエイリアシングとアップスケーリングを実行します。
WeatherKit、MapKit、および VisionKit は、システム レベルのサービスがアプリケーションに公開されるという別の方向性を示しています。 WeatherKit はネイティブの Swift API と REST API を提供します。 MapKit の 3D City Experience、カメラ制御、リアルな標高により、アプリケーションはより正確な位置を表現できます。 VisionKit の Live Text API と Data Scanner API は、写真、一時停止したビデオ フレーム、ライブ カメラからのテキスト、QR コード、バーコードをアプリケーション プロセスに取り込みます。
詳細
Swift 5.7: 同時実行性、正規表現、ジェネリック、およびプラグイン (05:49)
まずパラグラフを並行性に戻します。 Apple によると、Swift Concurrency はリリース初年度に 40,000 以上のアプリに採用され、現在では過去 3 年間にリリースされたオペレーティング システムにも導入できるようになりました。非同期アルゴリズムの配置zip、throttleこのタイプのシーケンス アルゴリズムは、非同期シーケンスにもたらされます。分散アクターは、プロセス、デバイス、または Swift on Server バックエンド間のアクター分離モデルを拡張します。
// transcript 中明确提到的 Swift 入口
async/await
for
try/catch
zip
throttle
distributed actor
キーポイント:
async/await非同期シーケンス コードの直線的な読み取りを維持します。for通常のシーケンスの記述方法を継続し、非同期シーケンスで使用されます。try/catchネットワーク ストリーミング データの障害の処理。zipは、非同期シーケンス用に Async Algorithms によって提供される組み合わせアルゴリズムの例です。throttle新しいクロック タイプに基づいて構築され、シーケンスの更新頻度が遅くなります。distributed actorリモートからアクセスできるアクターとメソッドをマークします。
正規表現段落は文字列解析の問題を解決します。スピーチのフード トラックの注文は、文字列にパッケージ化されたデータです。新しい正規表現リテラルは Swift コンパイラーでチェックでき、一致する結果がプレイグラウンドに表示されます。正規表現ビルダーは複雑なパターンを Swift コードに変換し、使用することもできます。.hexDigitこのタイプの CharacterClass は意図を表現します。
// transcript 中明确提到的 Regex 入口
regex literal
regex builder
.hexDigit
first match
キーポイント:
regex literal規則性を言語レベルの構文にし、強調表示とコンパイラ チェックをサポートします。regex builder複雑な正規表現を Swift コードに記述すると、変更が容易になります。.hexDigitCharacterClass を使用して 16 進文字を表現します。first matchデモでの注文文字列から結果を抽出する操作です。
一般的な構文も簡素化されました。some「ある曲のコレクション」というパラメータを表現できる;any「さまざまなコレクションタイプに対応できる」値を表現できます。たとえば、プレイリスト配列には、曲セットと曲配列の両方が含まれます。
some
any
キーポイント:
some汎用関数シグネチャの定型コードを削減するためにパラメーターの位置で使用されます。anyより動的な存在値を保存するために使用されます。
Swift Package プラグインは、ビルド プロセスを Swift パッケージに拡張します。コマンド プラグインはオンデマンドで実行でき、ビルド プラグインはプロジェクトのビルド時に実行できます。これらはコマンド ラインまたは Xcode から呼び出すことができ、サンドボックス内のアクセス許可も要求します。フード トラックの例では、コマンド プラグインが SwiftFormat ソート インポートを呼び出し、別の SwiftLint ベースのビルド プラグインが不足しているドキュメントの場所を要求し、ビルド プラグインが Xcode Cloud に移動します。
// transcript 中明确提到的插件形态
command plugin
build plugin
SwiftFormat
SwiftLint
Xcode Cloud
キーポイント:
- コマンド プラグインは、フォーマット、生成、検査などのオンデマンド アクションに適しています。
- ビルド プラグインは、ビルドごとに実行する必要があるルールに適しています。
- SwiftFormat と SwiftLint は、講演で説明されている実際のプラグインの使用法です。
- Xcode Cloud はビルド プラグインを実行して、ローカル ルールとクラウド ルールの一貫性を保ちます。
SwiftUI、Swift Charts、およびクロスプラットフォーム インターフェイス (18:36)
SwiftUI の 2022 年のアップデートは、ナビゲーション状態、複雑なレイアウト、漸進的な導入という 3 つの問題点を中心に展開されています。新しいナビゲーション API は、選択の保存と復元、ナビゲーション スタック全体の置き換え、起動状態、サイズ クラスの変更、ディープ リンクへの適応をサポートします。グリッド API は複数の行と列を配置する役割を果たし、カスタム レイアウト API はカスタム レイアウト ロジックを再利用できます。
// transcript 中明确提到的 SwiftUI 入口
new navigation API
Grid API
custom layout API
half sheets
Share Sheets
Transferable
UICollectionView
キーポイント:
- 新しいナビゲーション API を使用して、アプリケーションに最適なナビゲーション スタイルを表現します。
- グリッド API は複数行および複数列の配置を処理します。
- カスタム レイアウト API により、フロー レイアウトや放射状レイアウトなどのレイアウト ロジックを再利用できます。
- ハーフシートは、メインビューの上からスライドして現れるセカンダリビューを提供します。
- Share Sheets は Transferable 経由でタイプセーフなデータ転送を取得します。
- UIKit のコレクション ビュー セルは SwiftUI ビューをホストでき、スワイプ アクションとセルの背景をサポートします。
Swift Charts は、この講演の新しいフレームワークです。 SwiftUI に基づいて構築されており、宣言構文を使用して折れ線グラフ、棒グラフ、ヒート マップ、ストリーム グラフなどのグラフを作成し、カスタマイズ可能な VoiceOver エクスペリエンスが付属しています。フード トラックの例では、開発者はいくつかのモディファイアを使用して、色の変更、バーの位置の変更、注釈の追加、曲線の滑らかさ、およびプレビューでの直接操作を行います。
// transcript 中明确提到的 Swift Charts 能力
Swift Charts
line chart
bar chart
heat map
stream graph
annotation
catmullRom
キーポイント:
- Swift Charts と SwiftUI は同様の宣言式を使用します。
- 折れ線グラフと棒グラフは、デモで直接使用されるグラフの種類です。
- ヒート マップとストリーム グラフは、フレームワークでサポートされているより複雑なグラフ タイプです。
- 注釈はチャート上のメモをマークするために使用されます。
- catmullRom は、デモの曲線に対して選択された補間戦略です。
WidgetKit、ライブ アクティビティおよびシステム サーフェス (31:28)
ロック画面ウィジェットは、Apple Watch コンプリケーションのデザイン言語を再利用しています。円形では、小さな画像、ゲージ、または少量のテキストが表示されます。長方形はより大きな情報キャンバスを提供します。インラインでは、少量のテキストと SF シンボルを使用して iPhone の時計の上に配置します。 watchOS 9 のコンプリケーションも WidgetKit によって駆動されるため、同じコードで iPhone のロック画面情報と Apple Watch のダイヤル情報を生成できます。
// transcript 中明确提到的 WidgetKit family 与修饰入口
Circular
Rectangular
Inline
Supported Families
Gauge
VStack
widgetAccentable
rendering mode
environment property
キーポイント:
- 回覧は、進行状況、アイコン、または短いテキストに適しています。
- 長方形は、天気予報や注文の進捗状況など、より詳細な情報を表示するのに適しています。
- インラインは非常に短いテキストや SF シンボルに適しています。
- サポートされるファミリは、ウィジェットによってサポートされるファミリを宣言します。
- ゲージは、注文の進行状況を表示するキッチン トラックのコンポーネントです。
widgetAccentableロック画面上のテキストと記号をシステムの色合いに合わせて調整します。- レンダリング モードと環境プロパティは、文字盤のフルカラー レンダリングなどの状況を区別するために使用されます。
ライブ アクティビティはリアルタイム イベントを処理します。スコア、タクシーの進行状況、フィットネスの進行状況などのアクティビティをロック画面に直接表示し、WidgetKit を使用して作成できます。通常のウィジェットとの違いは、プレゼンテーションと状態がリアルタイムで更新され、SwiftUI は状態の変化の間でアニメーション化することもできることです。プレゼンテーションでは、iOS 16 への今後のアップデートでライブ アクティビティが利用可能になることも述べられています。
WidgetKit
Live Activities
SwiftUI animation
state updates
キーポイント:
- WidgetKit は、ライブ アクティビティを作成するためのエントリ ポイントです。
- ユーザーがフォローしているリアルタイムのアクティビティのライブ アクティビティ。
- SwiftUI アニメーションは、状態間の視覚的な遷移をサポートします。
- 状態の更新により、ユーザーは最新の情報を一目で確認できます。
Messages Collaboration API は、既存のコラボレーション機能を Messages と FaceTime にもたらします。ユーザーがリンクを共有すると、アプリケーションはリンクを共同リンクとしてマークでき、システムは必要な識別子を提供し、受信者はリンクをクリックするとすぐにアクセスできるようになります。ユーザーは、共有シートまたはドラッグ アンド ドロップからコラボレーションを開始でき、コンテンツ更新通知をメッセージ セッションに送り返すこともできます。
// transcript 中明确提到的协作入口
Messages Collaboration API
Share Sheet
drag & drop
collaboration popover
キーポイント:
- メッセージ コラボレーション API は、アプリケーション内のコラボレーション ロジックを置き換えるのではなく、会話エントリを接続します。
- シェアシートは、コラボレーションの入り口をユーザーに馴染みのある場所に配置します。
- ドラッグ アンド ドロップは、コラボレーション コンテンツのメッセージへのドラッグをサポートします。
- コラボレーション ポップオーバーにより、ユーザーはアプリからメッセージや FaceTime の会話に戻ることができます。
アプリのインテントとパスキー: 発見可能性とログインのセキュリティ (38:59)
アプリ インテントは、Siri、ショートカット、スポットライトにアプリの機能をもたらします。スピーチのフード トラックは、「今日または今週最も売れているドーナツを表示する」ことを公開したかったため、App Intents と SwiftUI をインポートし、次のように定義しました。AppIntent時間範囲の列挙型増分の構造体AppEnum、成し遂げるperform、次にアプリのショートカットフレーズを定義します。
import AppIntents
import SwiftUI
AppIntent
AppEnum
perform
App Shortcut phrase
Siri tip
キーポイント:
import AppIntentsそしてimport SwiftUIデモで新しい Swift ファイルを作成した後の最初のステップです。AppIntentユーザーがアプリケーション内で実行できることを表します。AppEnumパラメータ値に、今日や今週など、人間が判読できる名前を付けます。performインテントを実行し、SwiftUI チャート ビュー、ダイアログ、または出力値を返します。- アプリのショートカット フレーズにはアプリ名の変数が含まれている必要があり、パラメーターを含めることもできます。
- Siri ヒントはアプリケーション インターフェイスに配置され、ユーザーが何を言うべきかを把握できるようにします。
Passkeys は、フィッシング、再利用、サーバー漏洩というパスワードに関する 3 つの主要な問題を解決します。パスキーを作成するとき、デバイスは特定の Web サイトまたはアプリ用に一意のキーを生成し、Face ID または Touch ID で保護します。サーバーは公開キーのみを保存します。ユーザーは自分の iPhone で QR コードをスキャンして、友人の PC 上の同じフード トラック Web サイトにログインすることもできます。
// transcript 中明确提到的 passkey 集成步骤
store public keys
issue authentication challenges
create a new passkey
sign in with it
WebAuthn
キーポイント:
- バックエンドは公開キーを保存する必要があります。
- バックエンドは認証チャレンジを発行する必要があります。
- アプリと Web サイトは、パスキーを作成するためのアクセスを提供する必要があります。
- ログイン プロセスはパスキー サインインをサポートする必要があります。
- WebAuthn は、パスキーのベースとなるオープン標準です。
Metal 3、WeatherKit、VisionKit: より多くのシーン向けのシステム機能 (52:29)
Metal 3 は、ゲームの読み込みとレンダリングのボトルネックを軽減することに重点を置いています。 Metal IO により、高速 SSD からユニファイド メモリ、GPU までのリソースのパスがより安定します。オフライン シェーダー コンパイルでは、ビルド フェーズ中に GPU シェーダー バイナリが生成され、ランタイム コンパイルが削減されます。メッシュ シェーディング API はオブジェクト シェーダーを使用してメッシュの数を決定し、メッシュ シェーダーがジオメトリを生成します。 MetalFX アップスケーリングでは、低解像度のレンダリングを使用して、一時的なアンチエイリアシングとアップスケーリングを実行します。
// transcript 中明确提到的 Metal 3 入口
Metal IO API
offline shader compilation
Mesh Shading API
Object shader
Mesh shader
MetalFX upscaling
temporal antialiasing
キーポイント:
- リソースを高速にロードするための Metal IO API。
- オフライン シェーダー コンパイルにより、シェーダー バイナリの生成がビルド時間まで進みます。
- メッシュ シェーディング API は、ジオメトリ生成結果をデバイス メモリにラップして戻すことを回避します。
- オブジェクト シェーダは、生成するメッシュの数を決定します。
- メッシュ シェーダは実際のジオメトリを生成し、それをラスタライザに送信します。
- MetalFX アップスケーリングは、最初に低解像度でレンダリングし、次にターゲット解像度にアップスケーリングします。
WeatherKit はネイティブの Swift API と REST API を提供します。フード トラックの例では、アプリケーションはまず Xcode に WeatherKit 機能を追加し、次に Swift Concurrency を通じてそれを呼び出します。WeatherServiceのweather(for:)、場所を入力し、状態、処方箋、雲量を考慮して、駐車場所として日当たりの良い場所を推奨します。 Apple はまた、開発者プログラムのメンバーシップには月あたり 500,000 回の参加が含まれると述べましたweather(for:location) API calls。
WeatherService
weather(for:)
location
condition
precipitation
cloud cover
weather(for:location)
キーポイント:
- WeatherService は、デモで天気をリクエストするためのサービス エントリです。
weather(for:)位置情報を受信します。- 状態、処方箋、雲量は、フードトラックが駐車ポイントを決定するために使用するデータです。
weather(for:location)は、Apple が使用説明書に記載している API 呼び出し名です。
VisionKit は Live Text API と Data Scanner API を提供します。 Live Text API は、画像および一時停止されたビデオ フレーム内のテキストと QR コードを分析し、迅速なアクションを提供します。データ スキャナ API はリアルタイムのカメラ入力を分析し、QR コード、バーコード、倉庫ピッキング、流通、POS シナリオに適しています。デモでは、フード トラックが追加しますImageInteraction、カスタム インセットを通じてボタンの位置を調整します。注文プロセス中に、テキスト、QR コード、またはバーコードを検索するために DataScanner がインスタンス化されます。
ImageInteraction
Live Text API
Data Scanner API
DataScanner
text
QR codes
barcodes
custom insets
button configuration
キーポイント:
- ImageInteraction は、Live Text ボタンとクイック アクションを画像ビューに追加します。
- カスタム インセットは、アプリケーション内の既存のボタンを避けるために使用されます。
- ボタン設定は、アプリケーション UI に一致するようにボタンのスタイルを調整します。
- ライブカメラ入力用の DataScanner。
- テキスト、QR コード、およびバーコードは、DataScanner がデモで検索するコンテンツ タイプです。
重要ポイント
-
CI/CD を Xcode クラウドに接続
-
内容: iOS、iPadOS、macOS、watchOS プロジェクトのコミットから TestFlight までの自動ビルド プロセスを構築します。
-
実行する価値がある理由: この講演では、Xcode Cloud が利用可能であり、TestFlight、App Store Connect、Git プロバイダー、および REST API を接続できることを示します。
-
開始方法: まず既存の Git リポジトリを Xcode Cloud に接続し、次に REST API を使用してチームの既存の通知またはリリース プロセスに接続します。
-
高頻度ステータスをロック画面ウィジェットと Apple Watch コンプリケーションに追加
-
内容: 注文の進捗状況、フィットネスの目標、在庫アラート、カウントダウンのスケジュールを円形、長方形、またはインラインのウィジェットに追加します。
-
実行する価値がある理由: WidgetKit は iOS 16 のロック画面と watchOS 9 のコンプリケーションで同じモデルを再利用しており、プラットフォームの違いはシステムによって処理されます。
-
開始方法: ゲージ、VStack、システム フォント、および
widgetAccentableロック画面とウォッチフェイスに適応します。 -
アプリ内アクションを Siri と Spotlight に公開
-
やるべきこと: 「今週の販売傾向を表示する」、「コップ一杯の水を記録する」、「ポモドーロを開始する」などのアクションを Siri から直接呼び出せるようにし、Spotlight 検索にも表示します。
-
価値がある理由: アプリ インテントとアプリ ショートカットを使用すると、ユーザーは最初に手動でショートカットを構成しなくても、アプリの機能を見つけることができます。
-
開始方法: AppIntent を使用してアクションを記述し、AppEnum を使用してパラメータを記述し、perform を追加してから、Siri チップをインターフェイスに追加します。
-
アカウント システムのパスキーの移行を計画する
-
対処方法: 既存のユーザー名とパスワードのログインの隣に、パスキーの登録とログインを追加します。
-
実行する価値がある理由: パスキーは公開キー暗号化を使用し、サーバーは公開キーのみを保存するため、パスワードの再利用、フィッシング、漏洩のリスクを軽減できます。
-
開始方法: バックエンドは最初に公開キーの保存と認証チャレンジの発行をサポートし、次にクライアントがパスキーを作成してパスキーでサインインするための入り口を提供します。
-
WeatherKit と VisionKit によるオフライン プロセスの改善
-
やるべきこと: 配布、検査、旅行、アクティビティのアプリに、気象に関する意思決定、画像テキスト抽出、QR コード スキャンを追加します。
-
価値がある理由: WeatherKit は Swift API と REST API を提供します。 VisionKit の Live Text API と Data Scanner API は、システムレベルの識別機能をカスタム プロセスに組み込むことができます。
-
開始方法: まず、WeatherKit 機能を気象シーンに追加し、WeatherService を呼び出します。画像シーンに ImageInteraction を追加します。 DataScanner を使用して、リアルタイム コード スキャン シーンでテキスト、QR コード、またはバーコードを処理します。
関連セッション
- SwiftUI の新機能 — この概要で説明されている新しいナビゲーション、レイアウト、共有シート、およびクロスプラットフォームの SwiftUI 機能について詳しく説明します。
- アプリ インテントの詳細 — AppIntent、AppEnum、アプリ ショートカット、Siri フレーズ、および Spotlight 検出メカニズムの拡張を継続します。
- Discover Metal 3 - Metal IO、オフライン シェーダー コンパイル、メッシュ シェーディング API、および MetalFX アップスケーリングの詳細な紹介。
- WeatherKit について — WeatherKit の Swift API、REST API、使用量クォータ、およびプライバシー モデルに焦点を当てます。
コメント
GitHub Issues · utterances