WWDC Quick Look 💓 By SwiftGGTeam
What's new in Xcode 15

What's new in Xcode 15

元の動画を見る

ハイライト

Xcode 15 は、小規模なインストール パッケージ (シミュレーターはオンデマンドでダウンロード)、コンテキストを認識したインテリジェントなコード補完、アセット カタログ Swift シンボル、文字列カタログのローカリゼーション、ライブ ドキュメント プレビュー、ブックマーク ナビゲーター、改善されたソース管理コミット エディター、45% 高速化されたテスト ナビゲーター、インタラクティブな UI テスト再生、OSLog 構造化ログ コンソール、TestFlight による簡素化された内部配布により、コーディングから配布までの開発ワークフローをより効率的にします。

主な内容

よりスマートなコード補完

SwiftUI を書くとき、VStack に修飾子を追加しようとすると Xcode は padding を提案します。Text に修飾子を追加しようとすると font を提案します。Xcode は、コードのコンテキストと一般的なパターンを分析したうえで、これらの提案を行います。

01:52

新しいファイルを作成すると、Xcode はファイル名に基づいてタイプ名を提案します。関数を呼び出すときに、右矢印キーを押してすべてのデフォルト パラメーターの順列と組み合わせを展開し、必要なバージョンを選択します。すでに使用されている修飾子は、繰り返しの提案を避けるために降格されます。

03:28

アセット カタログの Swift 表記

以前は、画像や色の参照に文字列が使用されており、スペルミスは実行時まで発見されませんでした。Xcode 15 は、アセット カタログ内の各リソースの Swift シンボルを自動的に生成し、コード内で直接参照し、名前変更時にビルド エラーを報告し、コード補完を修正します。

03:50

String Catalog のローカリゼーションの一元管理

[編集] > [文字列カタログに変換] を使用して、.stringsそして.stringsdict統合された文字列カタログへのファイルの移行。すべての翻訳は 1 つのエディターに集中し、各言語の進行状況が左側に表示され、新しく追加または削除された文字列は構築中に自動的に検出されます。

04:34

リアルタイムのドキュメント プレビュー

[エディター] > [アシスタント] > [ドキュメント プレビュー] を選択すると、ドキュメント コメントを作成するときにリアルタイム プレビューが表示されます。コード例とスクリーンショットのリファレンスをサポートしているため、作成中に最終的な効果を確認できます。

06:18

Swift マクロの統合

Xcode 15 はマクロの開発とデバッグを完全にサポートしています。クイック アクション (Command + Shift + A) を使用すると、マクロを展開して生成されたコードを表示したり、マクロ コードにブレークポイントを設定したり、段階的にデバッグしたりできます。新しいマクロ パッケージにはサンプル テンプレートが付属しています。

07:37

新しいプレビュー API

#Previewマクロは元のマクロを置き換えますPreviewProviderプロトコル。構文はより単純で、複数の名前付きプレビューをサポートし、UIKit と AppKit の UIViewController/NSViewController プレビューをサポートし、ウィジェット プレビューのタイムライン ナビゲーションをサポートします。

08:50

ブックマークナビゲーター

Xcode 15 では、コードの場所をマークしたり、クエリ結果を検索したり、グループ化と並べ替えをサポートしたりできる新しいブックマーク ナビゲーターが追加されています。ブックマークは To Do リストとして機能し、マークすると削除できます。

10:13

ソース管理の改善

新しい変更ナビゲーターとコミット エディターでは、すべての変更がスクロール ビューで表示されます。送信エディターでコードを直接変更でき、変更はすぐに反映されます。行ごとのステージング/ステージング解除をサポートし、ファイルにはステージングされた変更とステージングされていない変更の両方を含めることができます。

12:30

テストの改善

テスト ナビゲーターは Swift で書き直され、実行とレポートが 45% 高速になりました。テスト レポートは、潜在的に関連する失敗した時間のかかるテストを特定するためのインサイト パターン分析を提供します。UI テストの失敗を対話型の Automation Explorer で再生して、UI 階層を調べることができます。

15:07

OSLog コンソール

Xcode 15 コンソールは OSLog を完全にサポートし、サブシステム、カテゴリ、重大度レベルによるフィルタリングをサポートします。ログ エントリは背景色を使用して重大度レベルを区別し、メタデータはデフォルトで非表示になります。クリックして展開します。ログ エントリから、それを生成したコード行へのジャンプをサポートします。

17:34

配布を簡素化する

Xcode Cloud は、コードとともに管理される TestFlight テスト命令をサポートし、Mac アプリケーションの自動公証をサポートします。Xcode 15 には一般的な配布方法と推奨設定が組み込まれており、TestFlight 内部テスト ビルドはチームのみに表示されます。デスクトップ通知により、ビルドのステータスが通知されます。

18:51

##詳細

コンテキスト認識型のコード補完

struct PlantSummaryRow: View {
    var plant: Plant
    var body: some View {
        VStack {
            ComposedPlant(plant: plant)
                .padding(4)
                .padding(.bottom, -20)
                .clipShape(.circle)
                .background(.fill.tertiary, in: .circle)
                .padding(.horizontal, 10)

            VStack {
                Text(plant.speciesName)
            }
        }
    }
}

01:52

キーポイント:

  • 新しいファイルを作成するとき、Xcode はファイル名に基づいて型名を提案します (例:PlantSummaryRow.swift提案PlantSummaryRow
  • VStack に修飾子を追加するときは、このビューでよく使われる padding が最初に表示されます。
  • Text に修飾子を追加するときは、font が優先して表示されます。
  • 使用されている修飾子(追加されたものなど)font) 繰り返しの提案を避けるために降格されます
  • ペアごとの属性のスマートな関連付け: 入力latitudeその後、次の提案は次のとおりです。longitude

関数のデフォルトパラメータの拡張

// 右矢印キーを押して、すべてのパラメータ組み合わせを展開
.frame(/* 展開後に複数のオプションを表示 */)
// .frame(width:)
// .frame(height:)
// .frame(minWidth:idealWidth:maxWidth:minHeight:idealHeight:maxHeight:alignment:)

02:32

キーポイント:

  • 関数を呼び出すときに、右矢印キーを押して、すべてのデフォルト パラメータの順列と組み合わせを展開します。
  • 必要なバージョンを選択し、不要なパラメータを手動で削除することを避けます
  • 特に次のような SwiftUI モディファイアに便利ですframepadding待って

アセット カタログの Swift シンボル

// 以前: 文字列参照で、型安全ではない
Image("MyCustomImage")

// Xcode 15: Swift シンボル参照
Image(.myCustomImage) // コード補完が利用でき、名前変更時はビルドエラーになります

03:50

キーポイント:

  • カラーおよび画像アセットの Swift シンボルを自動的に生成
  • コード内の直接参照、コード補完と型チェックをお楽しみください
  • アセットの名前を変更した後、ビルド中にエラーが発生しましたが、コード補完によってすぐに修正されました。
  • 実行時に「画像が見つかりません」という問題を完全に解消

文字列カタログの移行

// 移行前: 分散した .strings ファイル
// Localizable.strings
// "welcome_title" = "Welcome";

// 移行後: String Catalog で一元管理
// ビルド時にソースコードから文字列を自動抽出
// 左サイドバーに各言語の翻訳進捗を表示
// 追加/削除された文字列を自動的にマーク

04:34

キーポイント:

  • [編集] > [文字列カタログに変換] をクリックすると移行が開始されます
  • すべてのストーリーボード、.strings、.stringsdict ファイルを自動的に収集します
  • ビルド時にソースコードから文字列を自動的に抽出し、同期を保ちます
  • 新しく追加された文字列にはバッジが表示されるので、翻訳の進捗状況が一目でわかります

ドキュメントのコメントとリアルタイムのプレビュー

/// Create the bird icon view.
///
/// The bird icon view is a tailored version of the ``ComposedBird`` view.
///
/// Use this initializer to display an image of a given bird.
///
///

```swift
/// var bird: Bird
///
/// var body: some View {
///     HStack {
///         BirdIcon(bird: bird)
///             .frame(width: 60, height: 60)
///         Text(bird.speciesName)
///     }
/// }
///

```
///
/// ![A screenshot of a view containing a bird icon with the bird's species name below it.](birdIcon)

06:18

キーポイント:

  • Markdown 構文を使用してドキュメントのコメントを記述します
  • ComposedBird 関連する型へのシンボリックリンクを作成する
  • ```swift のコードブロックで使用例を表示します
  • ![説明](imageName) でドキュメントカタログ内の画像を参照します
  • Editor > Assistant > Documentation Preview で結果をリアルタイムに確認します

Xcode で Swift Macros を使用する

// CaseDetection マクロ: 列挙型の isXxx 属性を自動的に生成します
@CaseDetection
enum Element {
    case one
    case two
}

var element: Element = .one
if element.isOne {
    // Handle interesting case
}

08:07

// マクロの実装例
public struct CaseDetectionMacro: MemberMacro {
    public static func expansion<
        Declaration: DeclGroupSyntax, Context: MacroExpansionContext
    >(
        of node: AttributeSyntax,
        providingMembersOf declaration: Declaration,
        in context: Context
    ) throws -> [DeclSyntax] {
        declaration.memberBlock.members
            .compactMap { $0.decl.as(EnumCaseDeclSyntax.self) }
            .map { $0.elements.first!.identifier }
            .map { ($0, $0.initialUppercased) }
            .map { original, uppercased in
                """
                var is\(raw: uppercased): Bool {
                    if case .\(raw: original) = self {
                        return true
                    }
                    return false
                }
                """
            }
    }
}

07:37

キーポイント:

  • Quick Actions(Command-Shift-A)でマクロを展開し、生成されたコードを確認できます
  • マクロが生成したコードにブレークポイントを設定してデバッグできます
  • 新規マクロパッケージにはテンプレートとサンプルが付属します
  • マクロが生成するのは通常の Swift コードなので、手書きコードと同じようにデバッグできます

新しい Preview API

// SwiftUI プレビュー
#Preview {
    AppDetailColumn(screen: .account)
        .backyardBirdsDataContainer()
}

#Preview("Placeholder View") {
    AppDetailColumn()
        .backyardBirdsDataContainer()
}

// UIKitのプレビュー
#Preview {
    let controller = DetailedMapViewController()
    controller.mapView.camera = MKMapCamera(
        lookingAtCenter: CLLocation(latitude: 37.335_690, longitude: -122.013_330).coordinate,
        fromDistance: 0,
        pitch: 0,
        heading: 0
    )
    return controller
}

08:50

キーポイント:

  • #Preview マクロが PreviewProvider プロトコルを置き換えます
  • 名前付きプレビューに対応し、異なるシーンを区別しやすくなります
  • UIKit と AppKit の ViewController プレビューに対応します
  • Widget プレビューはタイムラインナビゲーションに対応し、異なる時点の状態を確認できます

OSLog 構造化ログ

import OSLog

let logger = Logger(subsystem: "BackyardBirdsData", category: "Account")

func login(password: String) -> Error? {
    var error: Error? = nil
    logger.info("Logging in user '\(username)'...")

    // ...

    if let error {
        logger.error("User '\(username)' failed to log in. Error: \(error)")
    } else {
        loggedIn = true
        logger.notice("User '\(username)' logged in successfully.")
    }
    return error
}

17:34

キーポイント:

  • Loggerサブシステムおよびカテゴリごとにログを整理する
  • サポート.debug.info.notice.errorレベル
  • Xcode コンソールは背景色を使用して重大度レベルを区別します
  • サブシステム、カテゴリ、レベルによるフィルタリングをサポート
  • ログ エントリをクリックすると、それを生成したコード行にジャンプします

重要ポイント

1.アセット カタログを Swift シンボル リファレンスに移行

すべてのアイテムを検索Image("string")そしてColor("string")使用法はシンボル参照に置き換えられます。これにより、コード補完を楽しみながらランタイム リソースが不足するリスクが排除されます。エントリ ポイントはプロジェクトをビルドすることです。Xcode 15 は自動的にシンボルを生成し、文字列参照を 1 つずつ置き換えます。

2.散在するローカリゼーション ファイルを文字列カタログに置き換えます

[編集] > [文字列カタログに変換] を使用して、プロジェクトを統合ローカリゼーション管理システムに移行します。後から追加された文字列も自動的に抽出され、翻訳の進捗状況が一目でわかります。エントリ ポイントは、Xcode メニューの [編集] > [文字列カタログに変換] です。

3.すべての PreviewProvider を #Preview に置き換えます

新しいプロジェクトに直接使用する#Previewマクロ、古いプロジェクトは徐々に置き換えられます。コードはより簡潔になり、より多くのプレビュー シーン (UIKit、AppKit、ウィジェット タイムライン) をサポートします。入り口は、struct Xxx_Previews: PreviewProviderに変更します#Preview { ... }

4. print と NSLog を OSLog に置き換えます

プロジェクトで紹介されたimport OSLog、使用Logger代わりのprintそしてNSLog。構造化ログはフィルタリング、ジャンプ、重大度レベルの区別をサポートしており、デバッグ効率が大幅に向上します。エントリはモジュールレベルで定義されますLoggerログ呼び出しを継続的に徐々に置き換えます。

5.ブックマークナビゲータを使用して開発タスクを管理

開発プロセス中に、右クリック > [ブックマーク] を選択して、確認する必要がある場所をマークします。コード行をマークしたり、クエリ結果を検索したり、グループ化と完了マークをサポートしたりできます。エントリ ポイントは、コード行または検索結果を右クリックして [ブックマーク] を選択することです。

関連セッション

コメント

GitHub Issues · utterances