「基礎から学ぶ SwiftUI」で解説しているサンプルコードや内容について、iOS 16とXcode 14に対応するための補足情報をまとめました。
以下の環境で動作確認を行いました。
Xcode 14には「Organization Name」はありません。
Xcode 14ではXcode 12で追加された「Life Cycle」オプションが無く、SwiftUI Appライフサイクルを使ったプロジェクトが生成されます。SwiftUI Appでは以下のファイルは使用しないため生成されなくなりました。
AppDelegate.swift
SceneDelegate.swift
Xcode 14では少し待つとプレビューが初期状態でも表示されると思います。直前の操作によりプレビューが更新されない状態になっているときは、「Preview paused」というメッセージと更新ボタンが表示されます。
Xcode 14ではプレビューが更新されない状態になっているときに「Resume」ボタンは表示されなくなりました。代わりに「Preview paused」メッセージの横の更新ボタンをクリックしてください。
また、プロジェクト作成時に生成されるコードの内容が変わり、ラベルの他にアイコンが表示されます。ラベルの部分はXcode 12の頃と同様に Text
ビューなので同様の操作が可能です。または、本書のコードと同じコードに書き換えてから進めて頂いても問題ありません。
Xcode 14ではメニュー構成が変更されました。「Show Editor Only」を選択するとコードのみになります。「Canvas」メニューアイテムを選択する度にプレビューエリアの表示状態が切り替わります。
コードエリアの右上のボタンをクリックしたときに表示されるポップアップメニューの構成も同様の構成に変更されています。
Xcode 14では初期状態がライブプレビューになっています。プレビューエリアの左下に表示される四角囲みの矢印アイコンのボタン(ツールチップで「Selectable」と表示される)をクリックし、選択可能状態に切り替えてから操作してください。
Xcode 14では情報ボタンは表示されません。聴診器のようなアイコンのボタンが表示されます。このボタンは「Diagnostics」ボタンです。Xcode 12では本書のスクリーンキャプチャのようにプレビューエリアの右上に表示されていましたが、Xcode 14ではアイコン表示に変わり、表示位置もメッセージの右隣に移動されました。
Xcode 14では「Show Issue Navigator」は「Issues」にタイトルが変わっています。
SF Symbolsの説明とダウンロードページが公開されています。
https://developer.apple.com/sf-symbols/
Xcode 14ではこの問題は発生しません。また、iOS 16のPicker
は別階層のビューに遷移する動作ではなく、フォームが表示されているビュー上で項目がポップアップ表示される動作となっています。
Xcode 14では編集状態になりません。ExtractedView
を選択し、コマンドキーを押しながらクリックし、「Rename」を選択してください。
Xcode 14ではInfo.plist
ファイルは作成されなくなっています。ContentView.swift
など別のファイルでも構いません。
Xcode 14ではBase.lproj
フォルダは自動的には作られなくなりました。保存先選択ダイアログでContentView.swift
と同じフォルダにBase.lproj
フォルダを作成してください。
Xcode 14のライブプレビューではローカライズ文字列が読み込まれないことがあります。読み込まれないときはローカライズ文字列の確認はXcode Previewアプリを使い、デバイス上でプレビューを表示してください。または、iOSシミュレータ上でアプリを実行してください。
Xcode 14では「New Color Set」は「Color Set」にタイトルが変わっています。
Xcode 14ではプレビュー内に表示された「Content View」というボタンをクリックしてグループ内のプレビューを切り替えます。サンプルコードのように2つContentView
を配置した場合は、「Content View」ボタンが2つ表示されます。
また、プレビューエリアの左下にある「Variants」ボタンをクリックし、「Color Scheme Variants」を選択すると、ライトモードとダークモードのプレビューが同時に表示されます。
Xcode 14ではSwiftUI AppライフサイクルなのでSceneDelegate.swift
はありません。ファイル名の末尾が「App.swift」になっているアプリのメインコードの中でContentView
をインスタンス化しています。ここをSceneDelegate.swift
やContentView_Previews
と同様にContentView()
の引数にuserAccount: UserAccount()
を追加してください。
Xcode 14ではSwiftUI AppライフサイクルなのでSceneDelegate.swift
はありません。アプリのメインコードのContentView
をインスタンス化しているところを、P.127のSceneDelegate.swift
内でContentView
をインスタンス化するところと同様に、.environmentObject(AppData())
を追加してください。
特に無し
特に無し
特に無し
Xcode 14ではSwiftUI AppライフサイクルなのでSceneDelegate.swift
はありません。アプリのメインコードのContentView
をインスタンス化しているところをP.281のようにContentView(mapOption: MapOption())
に変更してください。
iOS 16では音声コントロールが日本語に対応しています。しかし、本書のサンプルは日本語にローカライズされていません。そのため、日本語の状態では反応しづらいようです。反応しない場合には、音声コントロールの言語を英語に変更して試してください。
iOS 16では「cloud sun rain fill」でも反応しませんでした。
以上