基礎から学ぶ SwiftUI iOS 16 及び Xcode 14 対応

本資料について

「基礎から学ぶ SwiftUI」で解説しているサンプルコードや内容について、iOS 16とXcode 14に対応するための補足情報をまとめました。

動作確認環境

以下の環境で動作確認を行いました。

CHAPTER 01

P.18, iOSアプリのプロジェクトを作成する, 手順(3)

Xcode 14には「Organization Name」はありません。

P.19, SwiftUIアプリのファイル構成

Xcode 14ではXcode 12で追加された「Life Cycle」オプションが無く、SwiftUI Appライフサイクルを使ったプロジェクトが生成されます。SwiftUI Appでは以下のファイルは使用しないため生成されなくなりました。

P.20, プレビューの表示

Xcode 14では少し待つとプレビューが初期状態でも表示されると思います。直前の操作によりプレビューが更新されない状態になっているときは、「Preview paused」というメッセージと更新ボタンが表示されます。

P.21, 冒頭の2行

Xcode 14ではプレビューが更新されない状態になっているときに「Resume」ボタンは表示されなくなりました。代わりに「Preview paused」メッセージの横の更新ボタンをクリックしてください。

また、プロジェクト作成時に生成されるコードの内容が変わり、ラベルの他にアイコンが表示されます。ラベルの部分はXcode 12の頃と同様に Text ビューなので同様の操作が可能です。または、本書のコードと同じコードに書き換えてから進めて頂いても問題ありません。

P.21, Column

Xcode 14ではメニュー構成が変更されました。「Show Editor Only」を選択するとコードのみになります。「Canvas」メニューアイテムを選択する度にプレビューエリアの表示状態が切り替わります。

コードエリアの右上のボタンをクリックしたときに表示されるポップアップメニューの構成も同様の構成に変更されています。

P.22, アトリビュートインスペクタで文字列を編集する, 手順(1)

Xcode 14では初期状態がライブプレビューになっています。プレビューエリアの左下に表示される四角囲みの矢印アイコンのボタン(ツールチップで「Selectable」と表示される)をクリックし、選択可能状態に切り替えてから操作してください。

P.28, 文末

Xcode 14では情報ボタンは表示されません。聴診器のようなアイコンのボタンが表示されます。このボタンは「Diagnostics」ボタンです。Xcode 12では本書のスクリーンキャプチャのようにプレビューエリアの右上に表示されていましたが、Xcode 14ではアイコン表示に変わり、表示位置もメッセージの右隣に移動されました。

P.29, 2行目

Xcode 14では「Show Issue Navigator」は「Issues」にタイトルが変わっています。

CHAPTER 02

P.47, Column

SF Symbolsの説明とダウンロードページが公開されています。

https://developer.apple.com/sf-symbols/

P.55, 1行目から4行目

Xcode 14ではこの問題は発生しません。また、iOS 16のPickerは別階層のビューに遷移する動作ではなく、フォームが表示されているビュー上で項目がポップアップ表示される動作となっています。

P.63, 手順(2)

Xcode 14では編集状態になりません。ExtractedViewを選択し、コマンドキーを押しながらクリックし、「Rename」を選択してください。

P.67, 手順(1)

Xcode 14ではInfo.plistファイルは作成されなくなっています。ContentView.swiftなど別のファイルでも構いません。

P.67, 手順(3)

Xcode 14ではBase.lprojフォルダは自動的には作られなくなりました。保存先選択ダイアログでContentView.swiftと同じフォルダにBase.lprojフォルダを作成してください。

P.72, 「日本語で表示する」の冒頭の文章

Xcode 14のライブプレビューではローカライズ文字列が読み込まれないことがあります。読み込まれないときはローカライズ文字列の確認はXcode Previewアプリを使い、デバイス上でプレビューを表示してください。または、iOSシミュレータ上でアプリを実行してください。

P.86, 手順(2)

Xcode 14では「New Color Set」は「Color Set」にタイトルが変わっています。

P.90, 最後の4行の文章

Xcode 14ではプレビュー内に表示された「Content View」というボタンをクリックしてグループ内のプレビューを切り替えます。サンプルコードのように2つContentViewを配置した場合は、「Content View」ボタンが2つ表示されます。

また、プレビューエリアの左下にある「Variants」ボタンをクリックし、「Color Scheme Variants」を選択すると、ライトモードとダークモードのプレビューが同時に表示されます。

CHAPTER 03

P.121, SceneDelegate.swift

Xcode 14ではSwiftUI AppライフサイクルなのでSceneDelegate.swiftはありません。ファイル名の末尾が「App.swift」になっているアプリのメインコードの中でContentViewをインスタンス化しています。ここをSceneDelegate.swiftContentView_Previewsと同様にContentView()の引数にuserAccount: UserAccount()を追加してください。

P.126-P.127, SceneDelegate.swift

Xcode 14ではSwiftUI AppライフサイクルなのでSceneDelegate.swiftはありません。アプリのメインコードのContentViewをインスタンス化しているところを、P.127のSceneDelegate.swift内でContentViewをインスタンス化するところと同様に、.environmentObject(AppData())を追加してください。

CHAPTER 04

特に無し

CHAPTER 05

特に無し

CHAPTER 06

特に無し

CHAPTER 07

P.280, SceneDelegate.swift

Xcode 14ではSwiftUI AppライフサイクルなのでSceneDelegate.swiftはありません。アプリのメインコードのContentViewをインスタンス化しているところをP.281のようにContentView(mapOption: MapOption())に変更してください。

CHAPTER 08

P.306, 音声コントロールへの対応

iOS 16では音声コントロールが日本語に対応しています。しかし、本書のサンプルは日本語にローカライズされていません。そのため、日本語の状態では反応しづらいようです。反応しない場合には、音声コントロールの言語を英語に変更して試してください。

P.309, ラベルの設定, 最後の行

iOS 16では「cloud sun rain fill」でも反応しませんでした。

以上