Repolode
siteline

siteline/swiftui-introspect

SwiftUIのコードから背後にあるUIKitまたはAppKitのビューにアクセスし、カスタマイズできるSwiftライブラリ。

スター
6,574
フォーク
420
未解決の Issue
16
最終コミット
先月

これは何?

SwiftUIでは、背後にあるUIKitやAppKitのコンポーネントのプロパティが公開されていないことが多くあります。SwiftUI Introspectは、SwiftUIビューの周囲に不可視のマーカービューを追加し、その間のビュー階層を検索して、UIScrollViewやNSTextFieldなど対応するUIKitまたはAppKitのインスタンスを見つけることで、このギャップを埋めます。クロージャにはそのネイティブビューが渡されるため、SwiftUIでは提供されていないプロパティを変更できます。

List、ScrollView、Form、TextField、NavigationStack、TabView、Tableのほか、シートやポップオーバーなど、幅広いコントロールに対応しています。OSのリリースによって内部のビュー型が変わる可能性があるため、イントロスペクション対象ごとに.iOS(.v18)のようなプラットフォームバージョンを明示する必要があります。将来のバージョンもサポートしたいライブラリ作者向けに、範囲ベースのバージョン判定も用意されています。

このプロジェクトは、private APIを使用せず、ビューを強制キャストしないと説明しています。想定したビューが見つからない場合、モディファイアは無視されます。また、ネイティブのSwiftUIモディファイアが利用できる場合はそちらを優先し、このライブラリは必要最小限に使うようドキュメントで推奨しています。

主な機能

  • 01多くのSwiftUIコントロールの背後にあるUIKitまたはAppKitのビューにアクセスできる。
  • 02iOS、tvOS、visionOS、macOSを対象とする。
  • 03イントロスペクション対象ごとに、明示的なOSバージョンの指定が必要。
  • 04将来のプラットフォームバージョンに対応する範囲ベースのバージョン判定を提供する。
  • 05未対応の要素に対して、開発者がカスタムのイントロスペクション可能なビュー型を定義できる。

ユースケース

  • SwiftUIのListやScrollViewのバウンス動作や背景を変更する。
  • SwiftUIのモディファイアだけでは難しいTextFieldやSecureFieldの外観をカスタマイズする。
  • NavigationStackやNavigationViewのナビゲーションバーをスタイリングする。
  • iOSアプリで高度な制御を行うため、ネイティブのUIKitビューへの参照を保持する。

クイックスタート

  1. 1

    Swift Package Managerの依存関係にSwiftUIIntrospectパッケージを追加します

    .package(url: "https://github.com/siteline/swiftui-introspect", from: "27.0.0"),
  2. 2

    ターゲットの依存関係にSwiftUIIntrospectプロダクトを追加します

    .product(name: "SwiftUIIntrospect", package: "swiftui-introspect"),

使う前に知っておきたいこと

  • 基盤となるUIKit/AppKitの型はメジャーバージョン間で変更される可能性があるため、イントロスペクションを利用するには各OSバージョン(例:.iOS(.v18))を個別にオプトインする必要があります。
  • サポートされるのはREADMEに記載されたビュー型のみです。TextやImageなど、多くのSwiftUIビューはイントロスペクションできません。

収録されている特集

トピック

#swiftui#uikit#appkit#ios#macos#swift-package-manager#ui-customization#inspect#inspection#introspection

よくある質問

swiftui-introspect とは?
SwiftUIのコードから背後にあるUIKitまたはAppKitのビューにアクセスし、カスタマイズできるSwiftライブラリ。 SwiftUIでは、背後にあるUIKitやAppKitのコンポーネントのプロパティが公開されていないことが多くあります。SwiftUI Introspectは、SwiftUIビューの周囲に不可視のマーカービューを追加し、その間のビュー階層を検索して、UIScrollViewやNSTextFieldなど対応するUIKitまたはAppKitのインスタンスを見つけることで、このギャップを埋めます。クロージャにはそのネイティブビューが渡されるため、SwiftUIでは提供されていないプロパティを変更できます。
swiftui-introspect は無料で使えますか?ライセンスは?
swiftui-introspect は MIT ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
swiftui-introspect は今もメンテナンスされていますか?
半年以内に更新あり。swiftui-introspect の最終コミットは 2026年10月7日 です。
swiftui-introspect は何に使えますか?
SwiftUIのListやScrollViewのバウンス動作や背景を変更する。 SwiftUIのモディファイアだけでは難しいTextFieldやSecureFieldの外観をカスタマイズする。 NavigationStackやNavigationViewのナビゲーションバーをスタイリングする。 iOSアプリで高度な制御を行うため、ネイティブのUIKitビューへの参照を保持する。
swiftui-introspect のインストール方法は?
Swift Package Managerの依存関係にSwiftUIIntrospectパッケージを追加します: .package(url: "https://github.com/siteline/swiftui-introspect", from: "27.0.0"), ターゲットの依存関係にSwiftUIIntrospectプロダクトを追加します: .product(name: "SwiftUIIntrospect", package: "swiftui-introspect"),
swiftui-introspect はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/siteline/swiftui-introspect

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト