Xcode 15では、iOSアプリのユーザーインターフェースをビルド中にプレビューできるようになりました。この機能を使って、アプリがユーザーにどのように表示されるかを確認する方法をご紹介します。
Xcode 15 では UIプレビューが導入され、SwiftUI で構築するときにユーザー インターフェイスがどのように見えるかを確認できるようになりました。
特に、Xcode では、#Preview
SwiftUI アプリに追加する任意のビューまたはビューのプレビューの表示方法を定義できるマクロが追加されました。
Swift および C ベースの言語では、マクロはコンパイラーに特別なことが来ることを伝え、マクロで定義されたコードをコンパイル時に特別なケースとして扱うように指示するコンパイラー ディレクティブです。
コードをコンパイルすると、コンパイラはマクロの内容に基づいて、見つかったマクロをコードに変換します。マクロを使用すると、コードブロックを一度定義しておけば、アプリ内で複数回再利用できます。
SwiftUIでは、AppKitの旧来のInterface Builderのビジュアルビューとは異なり、テキストとテキストによるビューの定義を使用してアプリを定義できます。SwiftUIとプレビューを使用することで、左側のXcodeエディタパネルにコードを入力し、右側のXcodeシミュレータでプレビューを確認できます。
SwiftUI コードを入力して変更すると、UI プレビューがリアルタイムで変化し、ビューが表示されます。
これには、コードを変更するたびにコンパイル/ビルド/実行サイクルを実行しなくても、アプリがどのようになるかを確認できるという大きな利点があります。
通常、SwiftUIでは、 Swift を使用してContentView
の を定義できます。例:
View
struct
struct ContentView: View {
var body: some View {
// ...
}
}
#Preview
その下には、デフォルトでは、Xcode がプレビュー ペインにビューを表示するために使用する ContentView を返すだけのマクロ
を定義できます。
#Preview {
ContentView()
}
#Preview
これは、Xcodeのプレビューペインにビューを表示するために指定するデフォルトのマクロです。また、#Preview
各ビューのマクロにコードを追加することで、Xcodeにおけるビューの表示方法をさらにカスタマイズすることもできます。
コードをコンパイルすると、Swift コンパイラは実際にマクロを、オプションの名前と をパラメーターとして受け取る#Preview
Swift ステートメントに展開します。
"Preview(_:body:)"
ViewBuilder
AViewBuilder
は Swift@ViewBuilder
キーワードによって定義され、Swift に対して、その後に続くのは表示する UI 要素であることを示します。
同じソース ファイルで複数のマクロを定義する場合は#Preview
、それぞれを区別するために Swift として名前を渡すことができますString
。
#Preview("Input true") {
ContentView(someInput: true)
}
SwiftUI のドキュメントには、マクロについて説明し、マクロと一緒に
#Preview
使用する方法についても説明しているページもあります。ViewBuilder
一般に、#Preview
SwiftUI ソース ファイルで定義するカスタム ビューごとに 1 つのマクロを定義する必要があります。
作成するカスタム ビューごとにマクロを使用しない場合は、ビューごとにプレビュー プロバイダー#Preview
プロトコルを提供する必要があります。これは、少し複雑なプロセスであり、追加のコードが必要になります。
プレビュー プロバイダーについては、以下の以前の記事で説明しましたので、ここでは再度説明しません。
#Preview
各ビューのコードにマクロを定義したら、 Xcode のメイン メニュー バーから
[エディター] -> [キャンバス] を選択して、Xcode プレビュー キャンバスを表示できます。
エディター メニューからキャンバスを表示します。
一般に、Swift では、アプリ内のビューは Swift クラス によって定義されます。これは、Objective-C の またはObjective-C の macOS アプリ
View
の と同義です。UIView
NSView
各 Swift にはView
、 内に 1 つ以上のサブビューを含めることができますContentView
。 はContentView
、アプリの実行時に画面に表示されるビューです。
実は、Swiftでは、aはView
クラスではなく、構造体と構造体上のプロトコルの両方として定義されています。Swiftでは、構造体はクラスよりも柔軟性が高く、クラスのような動作をさせながら、データや動作を簡単に追加できます。
はprotocol
、実装する必要がある構造体またはクラスに対して定義されたメソッドまたはプロパティのセットです。
Swift でカスタム ビューを提供するには、プロトコルに準拠する型を宣言しView
、body
ビューのコンテンツを提供するために必要な計算プロパティを実装します。
例えば:
struct MyView: View {
var body: some View {
Text("Hello, World!")
}
}
この例では、Apple クラス から継承され、テキスト「Hello, World!」を含む単一のサブビューを持つ計算プロパティ( としても) を定義することでプロトコルに準拠する という名前MyView
のカスタム構造体を定義します。
View
View
body
View
Text
Text
この構造体が実行されると、ユーザー インターフェイスに「Hello, World!」というテキストを含む
単一のビューが表示されます。
Apple はさまざまな定義済みビュー (などText
) を提供しており、これをビューで使用してbody
UI を作成できます。
Xcode プレビュー キャンバスでは、構造体内のコードを変更するとMyView
、キャンバスのビューがリアルタイムで更新され、変更内容が表示されます。
Xcodeプレビューを使うメリットは、アプリをビルドして実行しなくても、入力しながらXcodeでUIを確認できることです。これにより、開発時間を大幅に節約できます。
SwiftUI と Previews により、開発がより簡単かつ軽量になり、コードで UI を組み立てるために必要な手順の数が大幅に削減されます。
Xcode でのビューの動作の詳細については、Apple の SwiftUI ドキュメントのセクション「ビューの基礎」を参照してください。
ドキュメントとリソース
Apple は、WWDC '23 で公開した「Xcode プレビューを使用してプログラムによる UI を構築する」という 27 分間のビデオで、Xcode プレビューを使用して構築時に UI を確認する方法をまとめています。
Apple は、Xcode ドキュメントに「Xcode でアプリのインターフェースをプレビューする」というタイトルの、Xcode で開発するときに UI をプレビューする方法に関する完全なガイドを用意しています。
また、以前の記事「Xcode プレビューを使用して、作成したアプリがどのように表示されるかを確認する方法」もご覧ください。