[WWDC 2021] Platforms State of the Union メモ

[WWDC 2021] Platforms State of the Union のメモを残しておきますので、皆様の参考になれば幸いです。

[Platforms State of the Union (ASL) - WWDC 2021 - Videos - Apple Developer](https://developer.apple.com/videos/play/wwdc2021/112/)

夏ぐらいまで日本語訳はないかと思っていたが、これには日本語訳があったので助かった。

# Xcode Cloud

## 開発の全ての工程をXcodeに統合
CIと配信サービスがXcode自体に組み込まれ、クラウドでホストされる。
Appleのクラウドインフラストラクチャを利用して、ビルドやテストさらに配信用のコード署名を省きます。
TestFlightやAppStoreConnectなどのAppleのサービスやあらゆる主要なGitベースのソースコントロールプロバイダと連携。
REST API を備え、開発プロセスの他の段階とも連携する。
そして高度なセキュリティを備え皆さんとプロジェクトを守ります。
Xcode Cloudがビルドを終えると、Xcodeに結果が表示される。

## Xcode Cloud で開発を始めるのに必要なステップは４つだけ
1. 製品の選択
1. ワークフローの確認
1. ソースコードへのアクセス許可
1. AppStoreConnectとの連携

## SwiftUIサンプルアプリのFrutaでデモ

### セットアップ
1. Xcode Cloud は自動的にプロジェクトの製品とプラットフォームを検知
1. Nextを選択したら、提案されたワークフローを検討
1. デフォルトのアクションは変更の全てを構築（ビルド？）する
1. 最後にCompleteをクリックして、クラウド上で初めてのビルドを始める
1. ビルドが終わったら、ReportNavigatorで結果を見ることができる

このようにCIとアプリケーションの配信を1分でセットアップでき、全て Xcode の中で完結します。

### ビルド結果の確認

Report Navigator の中の Cloud タブの下で、各ワークフローで進行中のビルドがブランチか PulRequest でグループ化されます。

個々のビルドを選択するとその概要が表示される。
どのXcodeとMacOSのバージョンが使われたかも確認可能。
ソースの確認やリビルドの実行も可能。

### ワークフローのカスタマイズ
iOSのテストを全ての新たな PullRequest で実行するワークフローをセットアップするデモ。

1. XcodeCloudのプロダクトメニューに戻り、Manage WorkFlows を選択
1. Plus をクリックして、新たなものを追加
1. ワークフローに”PullRequest"と名前をつける
1. メインブランチを対象とするすべてのPullRequestで実行されるように、開始条件を編集
1. テストアクションを追加し、プロジェクトから既存のiOSテストプランを選択
1. XcodeCloudが使うシミュレータを提案してくれるので、クリック二つだけでワークフロー用にiPhone, iPadの組み合わせが選ばれる

さらにビルドが成功か失敗かの通知を受け取れるように、通知のポストアクションにSlackチャンネルを追加。

### できることはもっとあります
カスタムビルドのスクリプトを実行したり、Xcode Cloud の Webhook やAPIを利用して他のシステムと連携できます。
Xcodeのワークフロー管理やビルドレポートはWeb上の AppStoreConnect でも利用可能。


## 各開発サイクルにどう役立つか

### Test
Xcode Cloud があればコードのテストが、さらに徹底的により一貫して、もっと効率的に行えます。
複数のテストプラン、プラットフォーム、デバイス、OSバージョンですべて並行して実行可能。

#### Frutaでのデモ
Fruta はライトモードとダークモードや縦横に対応。さらに２言語にローカライズ。

テストコードの中でXCテストAPIを採用。
自動的に各テストを各バリエーションで実行します。

Xcode Cloud のテストカバレッジでは、iOS15が動作する推奨iPadシミュレータで各構成につき１回ずつスクリーンショットが撮れている。
編集オプションメニューから新たなGallery Viewを有効にすると、テストのスクリーンショットが全バリエーションで表示される。

信頼性が低いテストケース
ソースコードから Test Gem をクリックして、”Run Test Repeatedly”を選択。
テストを１００回実行。以前は自分で何度もテストを行う必要があった。

Xcodeはこのテストが非常に信頼性が低いと示しています。
他のメンバーが見られるように Xcode で信頼性に関するメッセージを含めます。
ソース修正をしたら、プロダクトメニューから選べる”Test Again”を活用する。
まだ信頼性が低いので、今後修正するべくリマインダー機能が使える。

### Integrate
PullRequest のフィードバックをXcodeで確認できる。
Xcode から PullRequest を作成可能。

新しいソースコントロールの変更タブから、ローカルで修正したすべてのファイルと PullRequest と組み込まれている変更が表示される。
PullRequest を選ぶと、すべてのアクティビティと進行中の会話の全体を外観することができる。

ソースコード上で PullRequest のコメントがエディタに表示される。
Xcode から PullRequest のコメントに返信できる。

ローカルのDiffの確認にインライン表示ができるようになる。
履歴内のブランチとローカルの変更を比較することができる。


### Deliver
Xcode Cloud なら簡単にアプリをチームとベータ版テスタに渡すことができる。
Code Signing in the Cloud を使えば、証明書やプロファイルを最新の状態にしておく必要がなくなる。

Xcode Cloud のワークフローにポストアクションを加えることで、TestFlightを通してすべてのAppleプラットフォームへベータ版が自動的に配信される。
新しい TestFlight For Mac を搭載したMacOSも含む。

### Refine
Xcode上から AppStoreConnect と同じ診断とフィードバックにアクセスできる。
TestFlightアプリで起きたクラッシュログとフィードバックは数分で Organizer へ届けられる。

Organizer からシンボリケートされたクラッシュログが確認可能。
テスターに詳しい症状を聞くため、Organizer から直接テスターに連絡することもできる。
Xcode 上でクリックひとつでクラッシュ箇所を開け、PullRequest も確認可能。

Xcode Cloud はプライバシーとセキュリティに配慮して作られました。

データはソースやアクセストークンサインインキーやビルドアーティファクトを含めて安全に管理される。
アップルはサービスを運用するにあたって最小限のデータだけ使用する。（何を使うのかはよくわからない）

## 料金
Xcode Cloud は当初無料の限定ベータ版として入手可能。
価格や発売日の詳細はこの秋にお知らせします。（おっと、無料ではないのか！）

登録のステータスを確認するには、Xcode13 か AppStoreConnect の Xcode Cloud タブから確認できます。

---
# Swift
## async/await
新しい非同期処理の記述方法 async と await が使えるようになった。

## Structured Concurrency
async/await を使って構造化された並列コードの記載ができるようになる。
これまでの完了ハンドラを使わないので、ソースを読みやすくなる。

## Actor
相互排他的なアクセスのみを提供することで自身の状態をを守れるようになる。
DispatchQueue はActorから着想を得ている。
Actorの同期は自動で管理される。

## @MainActor
これまではメインスレッドで実行する処理は DispatchQueue.main.async を使っていたが、
今後は自動でメインスレッドで実行させるには、メソッドに @MainActor を宣言することになる。
呼び出し元では await をつけるだけ。

Apple的には completionHandler の時代は終わったようだ。

---
# SwiftUI
いくつかのアップル純正アプリではSwiftUIで全面的に作り直した。
## Fruta を改良するデモ
いつもの Fruta アプリを使って、色々新機能を追加するデモ

## 新しいマテリアルのサポート
コンテンツの背後に新しいマテリアルスタイルを適用することで、読みやすさを自動で維持する。
コンテンツは背景のマテリアルにあわせて、テキストの色などを動的に変更する。

---
# Swift Playground 4
SwiftUIにも対応。
AppStoreに直接提出することも可能。
今年後半に利用可能。

---
# AR RealityKit 2
## Object Capture
Object Capture を使うことにより、3Dモデルを数分で作れるようになった。
iPhoneで対象物の２D画像を撮影して、MacのObject Capture API で3Dモデルにする。
AR Quick Look用のUSDZファイルも生成できて、メッセージ、メール、Safariなどで閲覧可能。

---
# Metal
* Selectice Shager Debugger
* Texture Converter Tool
* Metal Debugger Timeline View

---
# Focus
これらのツールはユーザの気が散るのを防ぎ、没頭できるよう手助けします。
まずは通知への全く新しいアプローチ。

## Interruption Level API
通知の緊急度を４つの中断レベルから選べるようになった。
* Passive
* Active
* Time Sensitive
* Critical

## 通知にアバター
コミュニケーションアプリでは通知にアバターがアイコンに重なるようになる。

## 通知要約
ユーザが選んだ時に通知がまとめて提供される。
選択したアプリのPassive, Active通知をまとめる。
各ユーザーに合わせて自動でパーソナライズされる。

## おやすみモード
通知を受け取るアプリと人物を選べる。

## Focus Status API
集中モードではステータスを共有できる。
アプリが集中モードのステータスを求めることも可能。
コミュニケーションアプリでは新しい UserNotificationAPI を使う。
新しい Focus Status API でユーザの集中モードもアプリに反映する。
（ビデオでは詳細が分からなかったが、サーバにも影響があるのかな？）

---
# スクリーンタイムAPI
新たなペアレンタルコントロール機能が追加。

---
# Widget
## iPad対応
iPadのホーム画面にも対応して、iPad用に特大サイズが追加。
ウィジェットを取り入れたデフォルトのホーム画面レイアウトを用意。
## スマートスタック
TimelineEntryRelevance API を元にした、最もよく使うアプリを集めたスマートスタック

## Widget Suggestion
スタックにないウィジェットでもおすすめ表示する。
Intents API を使ったドネートも可能。

---
# Share Play
Group Activities フレームを使い、体験をシェアする。
FaceTimeを使った体験の共有。
FaceTimeはグループを作成して、アプリはアクティビティを提供する。
グループ内でユーザがアクティビティを始めると Share Play がグループをアプリに導く。

## Apple TV アプリのデモ
Apple TVアプリ内の再生ボタンを押すと Shared Playback かローカル再生か選べる。
FaceTimeアプリではアプリのビデオ体験に合った再生を始められる。

## ホワイトボードアプリのデモ
共有キャンバスを開き、全員で同じキャンバスに描いたものがリアルタイムで共有される。

以上。

---

ここには App Store 周りの情報がなかったので、別途調べないとな。