RSS Use Your Loaf - iOS 開発ニュース & ヒント フォロー useyourloaf.com/blogは、Michelle Rouxが書いたベーキングとフードブログです。多くのレシピ、ベーキングのヒント、そして食の冒険が含まれています。 RSS useyourloaf.com Use Your Loaf - iOS Development News & Tips useyourloaf.com
WWDC 2026 視聴ガイド WWDC 2026 は、Liquid Glass と Apple Intelligence に焦点を当て、Platforms State of the Union を出発点とします。100 を超えるセッションが自分のペースで利用できるため、すぐにすべてを学ぶ必要はありません。セッションの視聴には Apple Developer アプリまたは YouTube が推奨されており、通常は簡潔で要点を押さえています。Swift 6.4 は、品質向上と FilePath や Swift-C の相互運用性のような新機能をもたらします。SwiftUI は、必須の Liquid Glass 変更、最小限のメニューアイコン、目立つタブロール、新しいドキュメント API、並べ替え可能なコンテナを特徴とします。UIKit アプリの近代化には、リサイズ可能な環境と必須の UIScene ライフサイクルへの適応が含まれ、AppKit アプリはコントロールイベントとキーボードナビゲーションを採用すべきです。Xcode 27 は、カスタマイズ可能なツールバー、ローカライゼーションやプロトタイピングなどのタスクのためのコーディングエージェント、改善されたデバイスハブを提供します。Instruments は、Swift エグゼキューターインストゥルメントやエージェンティックアプリのデバッグのための Foundation Models インストゥルメントを含む、プロファイリングのための新しいモードを提供します。MetricKit は、アプリのパフォーマンスメトリクスを収集するための Swift ファースト API で再構築されました。開発者は Swift Testing に移行でき、Xcode のコーディングアシスタントがそのプロセスを支援します。Xcode Cloud は、ビルド、配信、自動化ワークフローを合理化します。SwiftData は、セクション化されたフェッチリクエストや Codable 型を保存する機能などのアップデートを受け取ります。デザイン原則は、目的、シンプルさ、明確な命名を強調し、直感的な検索エクスペリエンスの作成に関するガイダンスを提供します。アクセシビリティの強化には、アプリの読み上げのための VoiceOver ナビゲーションの改善と AI 生成字幕が含まれます。Apple Intelligence は Foundation Models フレームワークを拡張し、オープンソース化し、オンデバイスおよび Private Cloud Compute オプションを提供します。 WWDC 2026 Viewing Guide useyourloaf.com
iPhone 17の画面サイズ アップルが近日発表するiPhone 17シリーズは、ラインナップを簡素化し、Plusモデルを廃止して、代わりにiPhone Airを導入する。ベースモデルのiPhone 17とProモデルは、同じ6.3インチのディスプレイを搭載する。Pro Maxモデルは6.9インチのスクリーンを維持し、サイズの選択肢を明確にしている。iPhone Airは6.5インチのディスプレイを搭載し、薄型設計を重視している。ベースのiPhone 17とiPhone 17 Proの両方には、A19チップが搭載され、ProモデルにはProバージョンが搭載される。ベースのiPhone 17には、ProMotionや常時表示ディスプレイなどの機能が搭載されている。iPhone Airの薄型設計は、単一の48メガピクセルのリアカメラを搭載している。USB 3.0の転送速度は、Proモデルに限定される。文書には、画面解像度、セーフエリアのインセット、他の主要な仕様が詳細に記載されている。App Storeのスクリーンショットに関するガイドラインは、前年と同様に維持される。 iPhone 17 Screen Sizes useyourloaf.com
Swiftの文字列補間におけるデフォルト値 Swift 6.2 は、オプション値の文字列補間を強化し、以前の制限に対処しました。以前のバージョンでは、オプション値を補間すると警告が表示され、デフォルト値または String(describing:) を使用することが推奨されていました。デフォルト値を使用すると、多くの場合、任意で、場合によっては意味のない代替値が必要になります。String(describing:) は、null 値に対して "nil" を表示しますが、これは望ましくありません。Swift 6.2 では、補間内にデフォルトの文字列パラメータが導入され、これが解決されました。新しい構文では、オプションの型に関係なく、デフォルトの文字列を指定できるため、出力が改善されます。たとえば、(count, default: "not set") は、null 値をエレガントに処理します。ただし、ローカライズされた文字列との統合はまだサポートされていません。この新機能は SE-0477 で文書化されています。この改善により、文字列補間でのオプション値の処理が簡素化されました。ローカライズされた文字列に関する制限については、さらなる調査が必要です。 Swift Default Value in String Interpolations useyourloaf.com
Swift パッケージでの警告の扱いをエラーにする Swift 6.2 では、Swift パッケージ内でのコンパイラ警告に対する、よりきめ細やかな制御が可能になります。以前は、Xcode ではカスタムフラグを通じて、すべての警告をエラーとして扱うか、すべての警告を抑制するかのどちらかしかできませんでした。しかし、Swift 6.1 では、「-Werror DeprecatedDeclaration」のような特定の診断グループを警告またはエラーとして扱うオプションが導入されました。重要なのは、これらのきめ細やかな制御は、Swift 6.2 になるまで Swift パッケージではサポートされていなかったという点です。これらの新機能を利用するには、開発者は Package.swift ファイルで Swift ツールバージョンを 6.2 に更新する必要があります。Swift 6.2 は、「treatAllWarnings(as:)」や「treatWarning("group", as:)」のような新しい swiftSettings を提供します。これらの設定により、例えば「DeprecatedDeclaration」のような特定のグループを除いて、すべての警告をエラーとして扱うといった、正確な設定が可能になります。これらの警告制御設定は、パッケージが直接ビルドされる場合にのみ適用され、リモート依存関係として使用される場合は無視されることに注意してください。開発者は、パッケージ内のすべてのターゲットに対してこれらの制御を適用するために、ターゲットを反復処理し、目的の設定を swiftSettings に追加できます。この強化により、ビルド時の警告やエラーの管理において、より大きな柔軟性が得られます。 Treating Warnings As Errors In Swift Packages useyourloaf.com
スウィフト生識別子 Swift 6.2 は、raw identifier を導入し、識別子名に以前禁止されていた文字の使用を可能にしました。この機能は、SE-0451 によって実装され、識別子をバッククォートで囲むことができます。この機能の主要な適用例は、Swift テストにおいて、raw identifier を使用することで、テスト関数名の冗長を削減できます。@Test 属性の記述的な文字列と、別の慣習的な関数名を書く代わりに、raw identifier を使用することで、テスト関数名を記述的で、Test Navigator やレポートで視覚的に表現することができます。別の有用なシナリオは、数字に対応する enum ケースです。以前は、数字で始まる識別子を避けるためにプレフィックスが必要でしたが、raw identifier を使用することで、24 や 30 などの enum ケースを直接バッククォートで表現することができます。これにより、数字の enum ケースに対する人工的なプレフィックスを避けることができ、コードの明晰さと表現力が向上します。バッククォートの使用が少し煩わしいと感じるかもしれませんが、コードの明晰さと表現力に大きな改善をもたらします。 Swift Raw Identifiers useyourloaf.com
SwiftのAsyncSequenceによる状態変化の観測 Swift 6.2 では、Observable 型からの状態変更をストリームするための新しい Observations 型が導入されました。これは、シーンの検索クエリやナビゲーションパスのようなアプリケーションの状態を永続化するのに役立ちます。著者は以前、この状態を Codable クラスである SceneModel で管理していました。このクラスは、永続化のために JSON にエンコードすることができました。この SceneModel は、ルートビューの @SceneStorage を使用して保存および復元されていました。しかし、状態の保存は scenePhase を監視することに依存していましたが、シーンがバックグラウンドに入る前に終了する可能性があるため、これは信頼性が低いものでした。Swift 6.2 より前は、@Published プロパティを持つ ObservableObject により、Combine の buffer と values を使用して AsyncSequence を作成し、状態変更を保存することができました。iOS 26 と Swift 6.2 では、Observations 型が Observable 型に対して同様の AsyncSequence を提供します。これにより、SceneModel の JSON 表現のような計算プロパティを監視できます。Observations 型は、監視する値を返すクロージャを受け取ります。変更はトランザクショナルであり、観測可能なプロパティに対する複数の同期更新は、単一のシーケンス値にバッチ処理されます。更新の追跡は、観測可能なプロパティの willSet から開始され、次のサスペンションポイントで終了します。これにより、scenePhase に依存することなく、シーンモデルの状態が変更されるたびに自動的に保存できるようになります。Observations からの AsyncSequence は、サブスクライブ時に観測されたプロパティの初期値を発行します。 Swift Observations AsyncSequence for State Changes useyourloaf.com
Swiftパッケージにおける親しみやすい並行処理 Xcode 26 は Swift 6.2 で「Approachable Concurrency」を導入し、Swift Concurrency を簡素化します。このアプローチは、まずコードをメインスレッドで実行することを優先し、必要になった場合にのみバックグラウンドに処理を移動させます。これを採用するには、既存のプロジェクトは Xcode 内でビルド設定を調整する必要があります。新しいプロジェクトでは、デフォルトのアクター分離を含め、この機能が自動的に有効になります。「Approachable Concurrency」を有効にすると、InferIsolatedConformances や NonisolatedNonsendingByDefault といった今後の機能が利用可能になります。Swift Package も、swift-tools-version を更新し、ターゲット設定を構成することで、これらの機能を使用できます。Package.swift 内の新しい swiftSettings オプションでデフォルトのアクター分離を設定できます。すべての機能を有効にするには、「enableUpcomingFeature」フラグを swift settings に追加する必要があります。これらの設定を Swift Package のすべてのターゲットに適用するには、Package.swift ファイルに特定の構成を追加する必要があります。早期採用すると、CodingKey のようなプロトコルに関連するコンパイラ警告が発生する可能性があります。これらの分離に関連する問題は、将来的に解決される予定であり、回避策も用意されています。 Approachable Concurrency in Swift Packages useyourloaf.com
Xcode に Icon Composer アイコンを追加 Xcode 26 において、新しいツールである Icon Composer が Liquid Glass デザインシステムのアイコンを構築することを支援します。Icon Composer を使用するには、好みのデザインツールでアイコンの前景レイヤーをデザインし、完全に不透明な SVG レイヤーとしてエクスポートし、Icon Composer にインポートします。Icon Composer では、背景を追加し、レイヤーのサイズと位置を調整し、不透明度、色、グラデーション、シャドウ、ガラス効果を設定します。Xcode は、単一の .icon ファイルを使用して、サポートされているプラットフォームのすべてのアイコンバリアントを生成します。Xcode プロジェクトにアイコンを追加するには、.icon ファイルをプロジェクトナビゲーターサイドバーにドラッグします。追加後、Xcode から直接 Icon Composer でアイコンファイルを開き編集することができます。ターゲット設定の App アイコンセット名が、.icon 拡張子を除く Icon Composer アイコンファイル名と一致していることを確認してください。不幸にも、Icon Composer は代替アプリアイコンをサポートしていませんため、画像ファイルをアセットカタログに手動で追加する必要があります。これにより、Icon Composer の代替アプリアイコンに対する有用性が低下します。Apple は、Icon Composer とアプリアイコンデザインについて学ぶためのリソース、包括 Human Interface Guidelines と WWDC ビデオを提供しています。 Adding Icon Composer icons to Xcode useyourloaf.com
WWDC 2025 ビューガイド WWDC 2025 ビューガイドは、2つの大きなテーマである Liquid Glass デザインと Apple Intelligence を中心に、希望するセッションを計画することを助けます。今年の新しいものの要約を Platform State of the Union で始めましょう。100以上のセッションがあるため、圧倒されないでください - 学習する時間があります。Apple Developer アプリを使用してセッションを視聴し、再生、トランスクリプト、コードのコピーをサポートしています。Swift 6.2 が登場し、Swift Concurrency の採用の痛みを和らげるための更新、シングルスレッドのデフォルトとメインアクターの opt-in を含みます。他の必見のセッションには、SwiftUI、UIKit、iPadOS、AppKit、watchOS、Developer Tools が含まれます。この年の Liquid Glass デザインセッションは必見であり、テスト、SwiftData、WidgetKit、デザインに関するセッションも含まれます。デザインセッションでは、インクルーシブ・アプリ・デザイン、SF シンボル、インタラクティブ・スニペット・デザインなどのトピックをカバーします。最後に、プラットフォーム固有のセッションがあり、デザインを高めることを助けます。 WWDC 2025 Viewing Guide useyourloaf.com
TipKitとCloudKitの同期 iOS 17でAppleは、コンテキストに応じたヒントをユーザーに表示するTipKitを導入しました。これは、ヒント表示頻度と制御イベントを追跡します。iOS 18では、CloudKitを使用してTipKitの状態を同期することで、各デバイスで同じヒントを繰り返し表示することを回避できます。CloudKit同期を有効にするには、Xcodeでアプリターゲットを選択し、iCloud機能を追加してCloudKitを選択します。次に、.tipsで終わるコンテナ識別子を追加し、「バックグラウンドモード」機能で「リモート通知」を有効にします。TipKitはデフォルトではCloudKitと同期しないため、ヒントデータストアの設定時にCloudKitコンテナを有効にする必要があります。.automaticオプションを使用するか、特定の識別子を指定してCloudKitコンテナを設定できます。Core Data/SwiftDataデータベースをCloudKitと同期する際には注意が必要です。間違ったコンテナ識別子を使用する可能性があるためです。Appleは、ヒントの同期には別のコンテナを使用することを推奨しており、権利ファイルで最初にCore Data/SwiftData識別子をリストするか、永続ストアを読み込む前に明示的に設定できます。TipKitとCloudKitの同期はWWDC24で導入されました。さらに、「モダンオートレイアウト」に関する書籍がWWDC25セール期間中に割引価格で提供されています。 Syncing TipKit with CloudKit useyourloaf.com
SwiftUI のオプショナル選択付きピッカー SwiftUIのピッカーは、プロジェクトIDなどの選択にバインディングを期待します。ピッカー内のForEachループは、自動的に各アイテムにプロジェクトのIDを使用してタグを適用します。ピッカーのアイテムが選択されると、ピッカーのバインディングは選択されたアイテムのIDに設定されます。時々、ピッカーは選択なしを許可するオプショナルバインディングで動作する必要があります。これを実現するには、各ピッカー項目にオプショナル識別子を手動でタグ付けする必要があります。タグ修飾子には、タグがオプショナルであることを示すパラメータがあり、デフォルトはtrueです。「なし」オプションを含めるには、nil値をオプショナルプロジェクトIDとしてキャストしたテキストビューをピッカーに追加できます。オプショナル選択を含む完全なプロジェクトピッカーには、「なし」オプションと、各アイテムを手動でプロジェクトIDでタグ付けする機能があります。選択バインディングはオプショナルプロジェクトIDとして宣言され、ピッカーの本体にはラベルと「なし」オプションおよび手動タグ付けのForEachループを含むピッカー選択が含まれます。 SwiftUI Picker With Optional Selection useyourloaf.com
スウィフトデータの親関係の述語 このテキストは、SwiftData の述語を使用して親子関係を問い合わせる方法について説明しています。topics 配列を持つ Project モデルと、オプショナルな project プロパティを持つ Topic モデルを紹介しています。特定のプロジェクト内のトピックを問い合わせるには、述語が topic.project?.persistentModelID がプロジェクトの ID と一致するかどうかを確認します。複数のプロジェクトをまたいでトピックを問い合わせる場合、オプショナルな topic.project?.persistentModelID に直接 projects.contains を使用することはできません。提案されている解決策は、flatMap を使用してオプショナルを安全に展開し、次に包含を確認することです。代わりに、if-let 文を使用して同じ結果を得ることもできますが、より簡潔ではありません。このテキストはまた、#Predicate マクロが直接、複数のコンポーネントを持つキーパスを介してプロパティにアクセスできないことを警告しています。回避策は、キーパスの値を一時変数に割り当ててから述語で使用することです。これらのテクニックは、SwiftData で述語を使用して関連データを効率的に問い合わせるために不可欠です。 SwiftData Predicates For Parent Relationships useyourloaf.com
SwiftUIのラベルとボタンスタイルビュー修飾子 この記事では、カスタムSwiftUIのButtonとLabelスタイルの作成について説明しています。これには、コンパクトな水平サイズクラスでは垂直レイアウトに切り替わる適応型ラベルスタイルと、塗りつぶされた黄色のカプセルと等幅フォントデザインのカスタムカプセルボタンスタイルが含まれます。これらのスタイルは、.labelStyleおよび.buttonStyle修飾子を使用してビューに適用できます。しかし、LabelStyleやButtonStyleに便利な拡張機能を作成することはあまり一般的ではありません。これは、修飾子のよりコンパクトな形式を可能にします。これを達成するために、この記事では、Appleが組み込みスタイルを定義する方法と同様に、ButtonStyleとLabelStyleを拡張することを提案しています。これには、カスタムスタイルのインスタンスを返す静的プロパティまたは関数を拡張に追加することが含まれます。たとえば、カプセルボタンスタイルは、CapsuleButtonStyleインスタンスを返す静的プロパティcapsuleで拡張できます。これにより、コンパクトな形式.buttonStyle(.capsule)を使用してスタイルを適用できます。カスタムスタイルに、設定可能な色などのパラメータがある場合、パラメータを受け取り、カスタムスタイルのインスタンスを返す関数を含めるように拡張機能を変更できます。これにより、.buttonStyle(.capsule(.orange))のようにパラメータを使用してスタイルを適用できます。この記事では、便利なカスタムスタイルを作成するためにButtonStyleとLabelStyleを拡張する方法の例を示しています。 SwiftUI Label and Button Style View Modifiers useyourloaf.com
SwiftUI キーボードショートカットスコープ SwiftUIの.keyboardShortcutモディファイア(iOS 14で導入)を使うと、コントロールにキーボードショートカットを割り当てることができます。これらのショートカットは、コントロールの主要なアクションをトリガーします。このモディファイアは、デフォルトのコマンドキー以外の修飾キーもカスタマイズ可能です。具体的な例として、ボタンにショートカットを適用してビュー間を移動させる方法が挙げられます。驚くべきことに、ショートカットは、関連するコントロールが画面外にある場合でも有効なままです。この挙動は、SwiftUIがビュー階層を深さ優先でトラバースしてショートカットのターゲットを見つけることに起因します。システムは、可視性に関係なく、最初に一致するコントロールを見つけることを優先します。これにより、画面外のコントロールが依然としてショートカットに応答するという予期せぬ動作が発生する可能性があります。この問題の回避策として、ビューの状態に基づいて.disabledモディファイアを使用してコントロールを無効にすることが挙げられます。これにより、関連するコントロールが表示されている場合にのみショートカットが有効になります。Curt Clifton氏のコメントが、さらなる背景情報を提供しています。 SwiftUI Keyboard Shortcut Scope useyourloaf.com
SwiftUIのアクセシビリティにおける言語設定 SwiftUIで言語学習アプリを作成する際、テキストがデバイスのロケールとは異なる言語の場合、VoiceOverがテキストを正しく発音しないことがあります。これを修正するには、VoiceOverで使用されるアクセシビリティ言語を変更する必要があります。UIKitでは、テキストラベルのaccessibilityLanguageプロパティを設定できますが、これはSwiftUIでは利用できません。提案された解決策の一つは、accessibilitySpeechLanguage属性を持つAttributedStringを使用することですが、これは機能しません。別の解決策は、environmentモディファイアを使用して、各ビューのロケール環境を変更することです。ただし、これはTextビューのverbatimイニシャライザを使用する場合にのみ機能します。デフォルトではテキストをローカライズされた文字列キーとして扱うためです。この解決策はTextビューには有効ですが、Labelなどのビューにはより長い形式が必要です。ロケールをラベルまたは子テキストビューに適用できますが、アイコン付きのLabelを使用する場合、ロケールはButtonに適用された場合にのみ有効になります。つまり、VoiceOverは「button」を修正されたロケールで発音しますが、メインテキストは正しく発音されます。全体として、SwiftUIでVoiceOverで使用されるアクセシビリティ言語を変更するには、各ビューのロケール環境を変更することが解決策となります。 SwiftUI Accessibility Language useyourloaf.com
スウィフトUIデフォルトスクロールアンカー SwiftUIにおけるスクロールビュー内のコンテンツの垂直方向の整列を、ダイナミックタイプサイズに適応する方法について論じる記事である。最初に、画面の高さを超える可能性のあるコンテンツを収めるために、シンプルなスクロールビューが使用される。しかし、これにより、コンテンツがスクロールビューよりも小さい場合に、コンテンツが上部に整列してしまうことがあり、これは望ましくない。iOS 17では、defaultScrollAnchorモディファイアが導入されたが、スクロールビュー内に収まるコンテンツのみを中央に整列させるというニュアンスが欠けていた。iOS 18では、新しいdefaultScrollAnchorモディファイアが導入され、roleパラメータが追加された。このパラメータにより、開発者はさまざまな状況、特に.alignmentを使用してコンテナよりも小さいコンテンツを整列させるためのアンカー点をカスタマイズできるようになった。.alignmentロールのアンカーを.centerに設定することで、コンテンツは収まる場合に中央に整列し、コンテナの高さを超える場合は上部に整列する。2つのビューモディファイアのバリアントは、デフォルトを変更し、特定のロールのアンカーをオーバーライドするために一緒に使用できる。新しいモディファイアは、コンテナ相対のサイズに基づいてスクロールビューのコンテンツの整列を管理するための、より洗練されたアプローチを提供する。これにより、コンテンツの垂直方向の位置を動的に調整することで、より良いユーザーエクスペリエンスが実現される。 SwiftUI Default Scroll Anchor useyourloaf.com
Swift テスト完了ハンドラ 著者はXCTestのケースをSwift Testingに移行しようとしていますが、コンプリーションハンドラーに依存するテストコードで問題が発生しました。コードでは、コアデータストアを非同期でロードするためのカスタムNSPersistentContainerサブクラスを使用しています。XCTestでは、著者は非同期操作をテストするために期待メカニズムを使用しました。XCTestフレームワークは、期待を生成し、それを満たしたとマークし、タイムアウト内にそれが満たされるまで待つ方法を提供します。しかし、Swift Testingでは期待は使用されず、確認はコンプリーションハンドラーのテストには適していません。テストを移行するために、著者はSwiftの継続を使用して、コンプリーションハンドラーの呼び出しを非同期互換の呼び出しに変換します。このアプローチはXCTestでも使用できますが、継続メソッドの呼び出しに失敗するとテストがハングする可能性があり、継続は1回だけ呼び出される必要があります。テストはXCTestのアサーションを#expectに置き換えることで簡単にSwift Testingに移行できます。結果として得られるテストでは、Swiftの継続を使用して非同期操作をテストし、期待される結果をアサートします。 Swift Testing Completion Handlers useyourloaf.com
スタックビューをタップする SwiftUIのVStackとHStackビューは、デフォルトでその境界内にある空白スペースのタップを自動的に検出しません。この問題は、コンテナビューにジェスチャーをアタッチするときに発生します。タップは、コンテナされたビューのみで検出されます。一般的な回避策としては、空白スペースを埋めるために背景ビューを追加する方法があります。しかし、より効率的な解決策としては、contentShape修飾子を使用する方法があります。contentShape修飾子を使用すると、ジェスチャーのヒットテストに使用する形状を指定できます。外側のVStackに.contentShape(Rectangle())を適用すると、VStackの全領域がタップの対象となるため、VStackの境界内にあるどこでもタップすると、関連付けられたジェスチャーがトリガーされます。これにより、コンテナビュー内の空白スペースでジェスチャーが反応しない問題が解決され、不要な背景ビューの必要性がなくなります。contentShape修飾子を使用すると、コンテナビュー内でのジェスチャーとのやり取りをより簡潔かつ直接的に処理できます。 Tapping on Stack Views useyourloaf.com
ユーザー通知の一時的な承認 ローカルユーザーノチフィケーションの送信を許可するには、明示的なユーザーの承認が必要であり、これはdesired optionsとともにrequestAuthorizationメソッドを呼び出すことで実現できます。ただし、これによりユーザーにパーミッションプロンプトが表示されることがあり、理想的ではありません。iOS 12で導入された暫定的承認は、ユーザーに中断せずに静かに通知を配信することを許可する代替手段を提供します。暫定的承認を要求するには、承認リクエストに.provisionalオプションを追加します。当暫定的承認を使用する場合、通知センターにボタン付きで通知が配信され、ユーザーは通知を即時、静かに、あるいはスケジュールされたサマリーの一部として配信することを選択できます。暫定的承認では、アラートを表示したりアプリのアイコンにバッジを付けるための完全なパーミッションは付与されません。これには、ユーザーが通知設定を変更する必要があります。承認状態をチェックする際には、暫定的ステータスも考慮することをお勧めします。暫定的承認は、多くのアプリケーションにとって妥協の方法かもしれませんが、最終的には特定のユースケースに依存します。通知を送信する前に承認状態をチェックすることは、通知が正しく配信されることを保証するために不可欠です。 Provisional Authorization of User Notificatons useyourloaf.com
SwiftUI ボタンイメージ押下時 SwiftUIのボタンがユーザーがボタンを押している間に表示する画像を変更するには、タイトルとデフォルト状態と押された状態の2つの画像を受け入れるカスタムボタンのスタイルを作成することができます。このカスタムスタイルは、ButtonStyleプロトコルに準拠する構造体を作成することで実現できます。ButtonStyleConfigurationは、ボタンのラベル、isPressed状態、およびボタンのロールにアクセスすることができ、これらの情報を使用して表示する画像を決定することができます。makeBodyメソッドでは、ボタンの構成をチェックし、isPressed状態に基づいて正しい画像を持つラベルを返すことができます。次に、このカスタムスタイルを使用して、押されたときに異なる画像を表示するInfoButtonのような特定のタイプのボタンを構築することができます。InfoButtonは、アプリケーションでボタンが押されたときに実行するアクションを指定して呼び出すことができます。また、symbolEffectモディファイアーを使用して、押されたときに画像をスケールアップするアニメーションをカスタムスタイルに追加することもできます。これにより、UIKitのボタンの状態構成と同様の効果をSwiftUIで実現することができます。カスタムボタンのスタイルは、アプリケーションの他のボタンでも再利用することができますので、便利なソリューションです。全体的には、SwiftUIボタンの外観をカスタマイズするには、カスタムボタンのスタイルを作成するのが良い方法です、特にビルトインスタイルがニーズに満たない場合。 SwiftUI Button Image When Pressed useyourloaf.com
アニメーションの動きを減らす アップルのHuman Interface Guideでは、ユーザーインターフェイスに目的のない動きを追加することを避けるようアドバイスしています。動きはユーザーにとって邪魔で不快なものになる可能性があるからです。動きはオプションでなければならず、重要な情報を伝える唯一の方法であってはなりません。振動する動きや大きなアニメーションなどの特定の動きは、ユーザーにとって問題を引き起こす可能性があります。ユーザーはデバイスのアクセシビリティ設定で動きを減らすことを要求できますが、これは標準的なビューの遷移に影響を及ぼす可能性があります。しかし、カスタムアニメーションは、開発者が自ら動作を無効化または置き換える必要があります。動きを減らす設定は、SwiftUIビューで@Environmentプロパティを使用して検出できます。ドキュメントでは、動きを減らす設定が有効になっている場合に、3次元を模した大きなアニメーションを避けることを推奨しています。アニメーションを無効にするには、開発者は動きを減らす状態を考慮して計算プロパティを作成できます。これは、動きを減らす設定が有効になっている場合にアニメーションに対してnilを返すことで実現できます。開発者は、自分のアニメーションに対して動きを減らす設定にどのように対応するかを決定する必要があります。 Reducing Motion of Animations useyourloaf.com
スウィフト パラメータ化テスト WWDC24でAppleはSwift Testingを導入し、@Testマクロのargumentsパラメーターを使用してテスト関数に引数を渡すことを可能にしました。この機能により、パラメータ化されたテストが可能になり、argumentsコレクション内の各値に対してテスト関数が1回呼び出されます。Test Navigatorは各テストの結果を表示します。2つの引数が渡された場合、Swift Testingは2つの引数の全ての組み合わせに対してテストケースを生成します。ただし、最多2つの引数までしかサポートされず、全ての組み合わせが必要ない場合は、引数をzipしてペアリングすることができます。この機能は、同じ結果を期待する入力引数のコレクションをテストする場合に特に便利です。CaseIterable enumを使用してテストを駆動する場合にも特に便利です。著者は、XCTestベースのユニットテストをSwift Testingに移行する際、特にCore Dataマネージドオブジェクトクラスの属性を検証する場合にこの機能が有効であったと発見しました。Swift Testingのアプローチは、forループを使用するよりも独立したテストケースが並列実行可能で、失敗の報告が明確になるなどの利点があります。全体的には、Swift Testingでのパラメータ化されたテストはテストを簡略化し、結合することができます。 Swift Parameterized Testing useyourloaf.com
XCTest を Swift テストに移行 スウィフト・テストは、AppleがWWDC24で導入し、Xcode 16に同梱されたオープンソースのテスト・フレームワークです。スウィフトのモダンな機能 seperti 並行処理やマクロを使用し、AppleのプラットフォームだけでなくWindowsやLinuxもサポートしています。XCTestから移行する緊急の理由はないが、スウィフト・テストはいくつかの利点を提供します。例えば、スウィフト・コンカレンシーを使用して物理デバイス上で並列テストを実行することができます。スウィフト・テストを始めるには、テスト・ターゲット内でXCTestとスウィフト・テストのユニット・テストを混在させることができますが、テスト・フレームワークを混在させることは避けるべきです。テスト・ファイルに「import Testing」を追加することで、スウィフト・テスト・フレームワークをインポートできます。Appleは、テストをグループ化するために、構造体やクラスにテストを追加し、init メソッドを使用してセットアップとティアダウンを行うことを推奨しています。スウィフト・テストのテストは、@Test マクロを追加することで通常のスウィフト・メソッドがユニット・テストになるものです。テスト・メソッドにはasyncやthrowsをマークすることができ、必要に応じてアクターに分離することもできます。@Test 属性は、マクロであり、実装を見ることができます。スウィフト・テストでは、#expect と #require マクロをアサーションに使用し、XCTestのXCTAssertよりも柔軟性と情報の多いエラーメッセージを提供します。#expect マクロは、失敗した期待をログに記録し、テストを継続します。一方、#require マクロは、エラーが発生するとテストの実行を停止するthrowing バージョンです。また、Issue.record を使用して、条件を評価せずにテストに失敗することもできます。これは、XCTestのXCTFailと似ています。全体的に、スウィフト・テストはXCTestよりも並行処理のサポートやアサーションの柔軟性が向上しています。 Migrating XCTest to Swift Testing useyourloaf.com
SwiftUI チャートのプロット関数 iOS 18のSwiftUI Chartsフレームワークは、LinePlotとAreaPlotを使用した関数プロットをサポートするようになりました。これらのチャートは、DoubleをDoubleにマッピングする関数を受け付けます。関数は、Double.nanまたはDouble.infinityを返すことで未定義の値を処理できます。AreaPlotの単一の関数は、関数とx軸の間の領域を埋めます。2つの関数はそれらの間の領域を定義できます。関数プロットは、データを期待される関数近似と比較して視覚化するのに役立ちます。棒グラフと関数プロットを組み合わせると、直接比較が可能になります。例では、AreaPlotとLinePlotの両方を使用して、棒グラフと放物線を比較する方法が示されています。この新機能はWWDC24で発表されました。情報はもともとuseyourloaf.comに投稿されました。 SwiftUI Charts Plotting Functions useyourloaf.com
自動的な特徴追跡 iOS 18では、UIKitが自動トレイト追跡を導入し、レイアウト更新メソッドでトレイト変更通知を手動で登録する必要がなくなりました。この機能は、UIViewのlayoutSubviews、updatesConstraints、drawなどのメソッド、およびUIViewControllerのviewWillLayoutSubviewsとupdateViewConstraintsなどのメソッドでサポートされています。UIKitがこれらのメソッドのいずれかを呼び出すと、どのトレイトにアクセスしたかを記録し、トレイトが変更されたときにビューを自動的に無効にします。これは、setNeedsLayout、setNeedsUpdateConstraints、setNeedsDisplay、またはsetNeedsUpdateConfigurationなどのメソッドを使用して行われます。たとえば、UIViewのサブクラスでdrawをオーバーライドし、preferredContentSizeCategoryトレイトにアクセスすると、トレイトが変更されたときに自動的にsetNeedsDisplayが呼び出されます。iOS 18以前は、開発者はトレイト変更を手動で登録し、setNeedsDisplayを呼び出してdrawを呼び出す必要がありました。しかし、自動トレイト追跡では、このプロセスはUIKitによって自動的に処理されます。この機能により、トレイト変更に応じるプロセスが簡素化され、必要なコード量が減ります。自動トレイト追跡は、iOS 18の重要な改善点であり、開発者が適応性の高いユーザーインターフェイスを作成することを容易にします。 Automatic Trait Tracking useyourloaf.com
SwiftUI 自動サイズ調整フローレイアウト この記事では、UICollectionViewとUICollectionViewFlowLayoutを使用してSwiftUIでカードレイアウトを作成する方法について説明しています。カードの理想的なサイズを計算する方法、行と列のカードの数を決定する方法、サブビューをコンテナに配置する方法について説明しています。また、キャッシュの使用方法や、カスタムレイアウトを垂直スクロールビューで使用する方法についても説明しています。 SwiftUI Self-Sizing Flow Layouts useyourloaf.com
条件付き SwiftUI アクセシビリティラベル iOS 18では、AppleはSwiftUIの様々なアクセシビリティ修飾子に、オプションのisEnabledパラメータを導入しました。このパラメータにより、開発者は特定の条件に基づいてアクセシビリティ修飾子を条件付きで適用できます。isEnabledパラメータは、.accessibilityLabel、.accessibilityInputLabels、.accessibilityValue、.accessibilityHintなどの修飾子で使用できます。この機能は、開発者がデフォルトのアクセシビリティ動作を条件付きでオーバーライドする必要がある場合に役立ちます。たとえば、お気に入り状態を切り替えるボタンが付いたアイテムのリストでは、ボタンアクションのデフォルトのアクセシビリティラベルをお気に入り状態に基づいて変更できます。条件付きのアクセシビリティラベルを提供する代わりに、開発者は修飾子のisEnabledバリアントを使用して、特定の条件が満たされた場合にのみカスタムラベルを適用できます。このアプローチは、デフォルトラベルの繰り返しとローカリゼーションを回避します。提供された例では、.accessibilityLabel修飾子はisEnabledパラメータと共に使用され、アイテムがお気に入り状態の場合にのみカスタムラベル「お気に入り解除」を適用します。これは、コードを簡素化し、ローカリゼーションの労力を削減する小さな改善です。iOS 18でのisEnabledパラメータの導入により、SwiftUIにおけるアクセシビリティ修飾子の柔軟性が向上しました。 Conditional SwiftUI Accessibility Labels useyourloaf.com
iPhone 16 の画面サイズ アップルは、iPhone 16 シリーズを発表しました。iPhone 15 Pro モデルは廃止され、ベースモデルの iPhone 16 シリーズが強化された機能で拡張されました。Pro モデルは画面サイズが拡大し、iPhone 16 Pro は 6.3 インチディスプレイ、iPhone 16 Pro Max は 6.9 インチディスプレイを搭載しています。画面サイズが大きくなったにもかかわらず、Pro モデルはベゼルを縮小することでコンパクトなフォームファクターを維持しています。すべてのモデルに、アクションボタンとカメラコントロールボタン、A18 チップが搭載されています。ベースモデルの iPhone 16 モデルは、画面サイズはそのままですが、ProMotion と常時表示機能は搭載されていません。ボディはアルミニウム製です。iPhone 16 Plus は、iPhone 16 と同じ仕様ですが、画面サイズが大きく、バッテリー寿命が向上しています。Pro モデルは、USB-3 対応、ProMotion ディスプレイ、常時表示機能、チタン製ボディなどの専用機能を引き続き提供しています。画面サイズが大きくなったにもかかわらず、Pro モデルは先代モデルと比べてわずかに寸法が大きくなっています。App Store Connect は、iPhone 用のスクリーンショットを 6.9 インチまたは 6.5 インチのいずれか 1 セットのみ必要とすることで、プロセスを簡素化しました。全体として、iPhone 16 シリーズは、画面サイズの大型化、機能強化、洗練されたデザインなど、段階的な改良を提供しています。 iPhone 16 Screen Sizes useyourloaf.com
SwiftData式 iOS 18 の SwiftData は、Core Data の NSExpression と同様、述語式をサポートしています。述語式は、Foundation の #Expression マクロを使用して、複雑なクエリと計算を可能にします。Core Data では、NSExpression は、最小値や最大値を見つけるような集計クエリを可能にします。SwiftData の述語式は、述語の一部として任意の型を評価できます。たとえば、スコアが 90 以上であるレコードが 2 つ以上あるアイテムを見つけることができます。SwiftData の述語式は、さまざまなメソッドを提供する PredicateExpressions を使用します。ただし、最大値を見つけるなどのメソッドは、常に動作するわけではありません。現時点では、SwiftData の述語式は、直接述語を書くことよりも限定的な利点しか提供していません。SwiftData の新機能に関するドキュメントは、Apple の開発者向けウェブサイトでご覧いただけます。今後のアップデートでは、SwiftData の述語式の機能が向上する可能性があります。 SwiftData Expressions useyourloaf.com
SwiftUIプレビュー可能マクロ iOS 18 の Previewable マクロについて1. iOS 18 の Apple の Previewable マクロは、State バインディング付きの SwiftUI プレビュー用のボイラープレートラッパービューを生成します。 2. SwiftUI プレビューはビュー作成のエクスペリエンスを向上させることができますが、多くの場合、State バインディングを持つコンテナビューが必要です。 3. Previewable マクロは、プレビューで直接 @State プロパティを宣言することで、手動でラッパービューを作成する必要性を排除します。 4. このマクロは、必要な状態プロパティを持つラッパービューを作成します。 5. Previewable マクロを使用するには、プレビューのルートにある @State プロパティに @Previewable マクロを付けます。 6. このマクロは、状態プロパティとプレビュービューを含むラッパービューに変換されます。 7. Previewable マクロによって生成されるラッパービューは、手動で作成されたラッパービューに似ています。 8. Previewable マクロは、State バインディングを持つインタラクティブな SwiftUI プレビューの作成を簡素化します。 9. ラッパービューに必要なボイラープレートコードを減らし、開発プロセスを効率化します。 10. WWDC24 の「SwiftUI の新機能」で、Previewable マクロとその他の SwiftUI の進歩の詳細を参照してください。 SwiftUI Previewable Macro useyourloaf.com
Xcodeアセットシンボル生成の無効化 Xcode 16 のアセットカタログにおける「アセットシンボル」プロパティXcode 16 は、アセットカタログに「アセットシンボル」プロパティを導入し、シンボル生成を制御することを可能にしました。このプロパティにより、Swiftパッケージはシンボル生成をオプトアウトできるようになりました。以前はこれは不可能でした。デフォルトの設定は「継承」で、プロジェクト/ターゲット設定から継承されます。「拡張機能オン」はシンボル生成を有効にし、「拡張機能オフ」はSwiftパッケージ内の個々のアセットカタログに対してシンボル生成を無効にします。シンボル生成は、アセットカタログ内のカラーと画像に対してSwiftおよびObjective-Cシンボルを作成します。デフォルトでは、新しいプロジェクトではシンボル生成が有効になっていますが、プロジェクト設定でカスタマイズできます。生成されたカラーシンボルは、ColorResourceの静的プロパティであり、画像シンボルはImageResourceの静的プロパティです。SwiftUI、UIKit、およびAppKitタイプのフレームワーク拡張も生成されますが、フレームワークサポートは制限できます。生成されるシンボルの最初の文字は、アセットカタログ名が大文字で始まっていても、小文字になります。このオプトアウト機能により、Swiftパッケージはシンボル生成の競合を回避し、アセットシンボルの使用をより細かく制御できます。 Disabling Xcode Asset Symbol Generation useyourloaf.com
カスタム SwiftUI 環境値のためのエントリマクロ Entry マクロは、定型的なコードを減らすことで、SwiftUI 環境のカスタマイズを簡素化します。環境キーを作成したり、ゲッターとセッターで環境を拡張する必要がなくなります。ユーザーは @Entry マクロを使用して環境を直接拡張し、必要に応じてデフォルト値を提供できます。このマクロは、内部のキーと値のストレージを処理するコードを生成します。Transaction、ContainerValues、FocusedValues をサポートし、iOS 13 以降と互換性があります。このマクロのユースケースは、カスタム環境値を作成することであり、手動での実装と比較して、より簡潔で効率的なアプローチを提供します。 Entry Macro for Custom SwiftUI Environment Values useyourloaf.com
SwiftDataインデックス iOS 17で導入されたSwiftDataは、当初データベースインデックス機能を欠いていました。iOS 18ではこの欠陥が修正され、フェッチインデックスを使用することでデータベースの検索を高速化できるようになりました。Core Dataは、特定のプロパティに基づいてデータベース検索を高速化するフェッチインデックスの追加を長年サポートしています。XcodeのCore Dataモデルエディタでは、エンティティを選択し、「フェッチインデックスを追加」オプションを使用することでフェッチインデックスを追加できます。しかし、iOS 18でSwiftDataへのフェッチインデックスのサポートが導入されたにもかかわらず、Xcode 16ではフェッチインデックスはサポートされていないという警告が表示されます。SwiftDataフェッチインデックスを追加するには、各インデックスのキーパスを指定するために#Indexマクロを使用します。#Indexマクロはモデルクラスごとに1回しか使用できないため、すべてのインデックスは単一のマクロにリストする必要があります。重複するプロパティを持つ項目をソートするのに役立つ複合インデックスも追加できます。詳細については、「SwiftDataの新機能」に関するWWDC24のドキュメントを参照してください。 SwiftData Indexes useyourloaf.com
Swiftのswitchとif式 Swift 5.9 では、if 文と switch 文を式として使用できるようになりました。 これにより、これらの文から値を返したり、変数に代入したりできるようになります。 たとえば、switch 式を使用して、列挙型状態に関連付けられた URL の最後のパスコンポーネントを決定できます。 ただし、if 文の各分岐または switch 文の各ケースは、単一の式でなければなりません。 さらに、if 文には else を含める必要があり、すべての分岐から同じ型を返す必要があります。 これらの制限により、if 式と switch 式の有用性はいくらか制限されます。 コンパイラは、場合によっては型指定を要求することがあります。 これらの式について詳しく知りたい場合は、SE-0380 を参照してください。 Swift Switch And If Expressions useyourloaf.com
Xcode 明示的にビルドされたモジュール Xcode 16 は、暗黙的にビルドされたモジュールがビルドタスクをブロックする問題に対処するため、「明示的にビルドされたモジュール」を試験的に導入しました。この新しいアプローチでは、Xcode はソースファイルをスキャンしてすべてのモジュールの依存関係グラフを構築し、依存関係が準備されたモジュールを遅延なくビルドできるようになります。明示的にビルドされたモジュールは現在、C および Objective-C コードに対してデフォルトで有効になっていますが、Swift コードでは実験的な設定が必要です。ビルドタイムラインは、明示的なモジュールビルドがモジュールのコンパイルを早期に開始することを示していますが、初期テストでは暗黙的なビルドよりも遅くなる可能性があることが示唆されています。明示的にビルドされたモジュールは、ビルドされたモジュールをデバッガーと共有するため、式の評価時の遅延を軽減できる可能性があります。この機能は Xcode 16 ではまだ試験段階であり、今後のベータ版で変更される可能性があります。詳細については、Apple の WWDC24 セッションおよび明示的なモジュール依存関係によるビルドに関する記事を参照してください。 Xcode Explicitly Built Modules useyourloaf.com
WWDC 2024 視聴ガイド WWDC 2024 セッションをナビゲートするには、まず Platforms State of the Union を見て、今年のアップデートの概要を把握しましょう。Swift 6 は言語機能の強化と新しい Static Linux SDK を導入します。SwiftUI は、フローティングタブバーやカスタムコントロールなど、アップデートを受けます。UIKit も、ドキュメントの起動エクスペリエンスや新しいアニメーションなど、強化が加えられています。iPadOS は、タブとサイドバーのエクスペリエンスを向上させることに焦点を当てています。AppKit は、Writing Tools API やウィンドウのタイル化など、新しい機能を獲得します。watchOS は Live Activities を導入し、tvOS は TVML アプリを SwiftUI に移行することを推奨しています。クロスプラットフォームセッションでは、UI アニメーションと新しいドキュメント起動エクスペリエンスを取り上げます。Xcode 16 は、デバイス上のモデルによるコード補完とプレビュー可能なマクロを実現します。開発者は、Swift テストフレームワークと Xcode Cloud ワークフローも活用できます。ローカリゼーションとアクセシビリティのアップデートには、多言語キーボードのサポートと動的フォントサイズのスケールアップの改善が含まれています。StoreKit とアプリ内購入では、トランザクション履歴の強化と AdAttributionKit による新しいプライバシー保護型広告属性が導入されます。 WWDC 2024 Viewing Guide useyourloaf.com
2024年版 iPad の画面サイズ アップル、4つの新型iPadを発表:13インチと11インチのiPad Pro(M4)、および13インチと11インチのiPad Air(M2)アップルは、4つの新型iPadを発表しました。13インチと11インチのiPad Pro(M4)、そして13インチと11インチのiPad Air(M2)です。iPad Proは、M4チップ、新しいUltra Retina XDR OLEDディスプレイ、横向きに配置されたFace IDカメラを搭載しています。iPad Airは、M2チップを搭載していますが、IPS Liquid RetinaディスプレイとTouch IDはそのままです。13インチモデルは、新しい命名規則にもかかわらず、以前の12.9インチと10.9インチモデルと同じディスプレイサイズです。ProモデルはAirモデルよりも薄く、13インチは5.1mm、11インチは5.3mmです。4つのモデル全てがApple Pencil ProとApple Pencil(USB-C)に対応しています。第一世代と第二世代のApple Pencilは、これらの新型モデルでは使用できません。Proモデルでは、ストレージ容量が1TB以上の場合は、4つのパフォーマンスコアを持つ10コアCPUと16GBのRAMが搭載されます。エントリーモデルのiPad(第10世代)とiPad mini(第6世代)は、変更されていません。開発者は、13インチのiPad Proと12.9インチのiPad Pro(第2世代)の両方にApp Storeのスクリーンショットをアップロードする必要があります。13インチのスクリーンショットは、同じディスプレイサイズを持つProモデルとAirモデルのどちらにも対応できます。 iPad 2024 Screen Sizes useyourloaf.com
SwiftUIの円グラフ SwiftUIでのパイチャートについて1. AppleはiOS 17で、SwiftUIにパイチャートを導入しました。 2. パイチャートは、各セクターのサイズを表す "angle" パラメータを持つ SectorMark ビューを使用して作成されます。 3. データは、固定範囲または動的値のいずれかでプロットできます。 4. セクターマークは、内径と外径、および角度インセットでカスタマイズできます。 5. SwiftUIチャートは、角丸や凡例設定など、幅広いカスタマイズオプションを提供します。 6. チャートの背景は、パイチャートの中心にビューを表示するために使用できます。 7. .chartAngleSelection ビュー修飾子を使用して選択されたセクターを見つけることで、インタラクティブ機能を追加できます。 8. 選択されたセクターは、不透明度を調整することで強調表示できます。 9. 選択されたセクターに関する詳細を表示するために、カスタムタイトルビューを背景に表示できます。 10. Appleは、SwiftUIでのパイチャートを調べるための追加のリソースと例を提供しています。 SwiftUI Pie Charts useyourloaf.com