クラス


Bundle


ディスク上のバンドルディレクトリに保存されているコードとリソースの表現。


iOS 2.0+ iPadOS 2.0+ Mac Catalyst 13.0+ macOS 10.0+

tvOS 9.0+ visionOS 1.0+ watchOS 2.0+

class Bundle : NSObject




概観


Apple はバンドルを使用して、アプリ、フレームワーク、プラグイン、およびその他の多くの特定の型のコンテンツを表します。バンドルは、含まれているリソースを明確に定義されたサブディレクトリに整理し、バンドル構造体は、プラットフォームとバンドルの型によって異なります。バンドルオブジェクトを使用すると、バンドルの構造を知らなくてもバンドルのリソースにアクセスできます。バンドルオブジェクトは、バンドル構造、ユーザの設定、利用可能なローカリゼーション、およびその他の関連要因を考慮して、アイテムを見つけるための単一のインターフェイスを提供します。


どの実行可能ファイルでも、バンドルオブジェクトを使用して、アプリのバンドル内または他の場所にある既知のバンドル内のリソースを見つけることができます。バンドルオブジェクトを使用して、コンテナディレクトリ内またはファイルシステムの他の部分にあるファイルを見つけることはできません。


バンドルオブジェクトを使用する一般的なパターンは以下のとおりです。


  1. 目的のバンドルディレクトリのバンドルオブジェクトを作成します。

  2. バンドルオブジェクトのメソッドを使用して、必要なリソースを検索またはロードします。

  3. 他のシステム API を使用してリソースを操作します。

頻繁に使用されるリソースの一部の型は、バンドルなしで検索して開くことができます。たとえば、画像 (イメージ) をロードする場合は、アセットカタログにイメージを保存し、UIImage または NSImageinit(named:) メソッドを使用してロードします。同様に、文字列リソースの場合は、.strings ファイル全体を自分で読み込むのではなく、NSLocalizedString を使用して個々の文字列を読み込んで下さい。


注意 :


対応する Core Foundation 名を持つ他の Foundation クラス (NSStringCFString など) とは異なり、Bundle オブジェクトは CFBundle 参照にキャストできません。CFBundle によって提供される機能が必要な場合は、CFBundle を作成して CFBundle API を使用できます。詳細については、通話無料でブリッジされた型 を参照してください。


バンドルを検索して開く


リソースを見つける前に、まずそのリソースが含まれるバンドルを指定しなければなりません。Bundle クラスには多くの建造者がありますが、最もよく使用されるのは main です。main バンドルは、現在実行中のコードを含むバンドルディレクトリを表します。そのため、アプリの場合、main バンドルオブジェクトを使用すると、アプリに付属しているリソースにアクセスできます。


あなたのアプリがプラグイン、フレームワーク、またはその他のバンドルされたコンテンツを直接操作する場合は、このクラスの他のメソッドを使用して適切なバンドルオブジェクトを作成できます。あなたは既知の URL またはパスからバンドルオブジェクトをいつでも作成できますが、他のメソッドを使用すると、アプリが既に使用しているバンドルに簡単にアクセスできます。たとえば、フレームワークにリンクする場合は、init(for:) メソッドを使用して、そのフレームワークで定義されているクラスに基づいてフレームワークバンドルを見つけることができます。


  1. // Get the app's main bundle
  2. let mainBundle = Bundle.main
  3. // Get the bundle containing the specified private class.
  4. let myBundle = Bundle(for: NSClassFromString("MyPrivateClass")!)


バンドル内のリソースの検索


Bundle オブジェクトを使用して、バンドル内の特定のリソースの場所を取得して下さい。リソースを検索するときは、少なくともリソースの名前とその型を指定して下さい。特定のサブディレクトリ内のリソースの場合は、そのディレクトリを指定することもできます。リソースが見つかった後、バンドルのルーチンは、ファイルを開くために使用できるパス文字列または URL を返します。


リスト 2 : バンドル内の単一のリソースの検索


  1. NSBundle *main = [NSBundle mainBundle];
  2. NSString *resourcePath = [main pathForResource:@"Seagull" ofType:@"jpg"];

Bundle オブジェクトは、ディスク上のリソースを検索するときに特定の検索パターンに従います。グローバルリソース (つまり、言語固有の .lproj ディレクトリにないリソース) が最初に返され、次に地域および言語固有のリソースが返されます。この検索パターンは、バンドルが以下の順序でリソースを検索することを意味します。


  1. グローバル (ローカライズされていない) リソース

  2. 地域固有のローカライズされたリソース (ユーザの地域設定に基づく)

  3. 言語固有のローカライズされたリソース (ユーザの言語設定に基づく)

  4. 開発言語リソース(バンドルの Info.plist ファイルの CFBundleDevelopmentRegion キーで指定)

グローバルリソースは言語固有のリソースよりも優先されるため、特定のリソースのグローバルバージョンとローカライズバージョンの両方をあなたのアプリには決して含めないでください。リソースのグローバルバージョンが存在する場合、言語固有のバージョンは決して返されません。この優先順位の理由はパフォーマンスです。ローカライズされたリソースが最初に検索されると、バンドルオブジェクトはグローバルリソースを返す前に、存在しないローカライズされたリソースを検索して時間を浪費する可能性があります。


重要 :


Bundle オブジェクトは、大文字と小文字を区別しないファイル名をサポートするファイルシステムであっても、リソースファイルを検索するときに常に大文字と小文字を考慮します。常に大文字と小文字を区別してファイル名を指定するようにしてください。


リソースファイルを検索するとき、バンドルオブジェクトは、返されるファイルを決定する際に、多くの標準ファイル名修飾子を自動的に考慮します。リソースは、特定のデバイス (~iphone、~ipad) または特定の画面解像度 (@2x、@3x) 用にタグ付けされている場合があります。必要なリソースの名前を指定するときは、これらの修飾子を含めないでください。バンドルオブジェクトは、基盤となるデバイスに最も適したファイルを選択します。詳細については、iPhone、iPad、Apple Watch のアプリ アイコン (App Icons on iPhone, iPad and Apple Watch.)を参照してください。


Bundle の構造を理解


バンドルの構造は、ターゲットのプラットフォームと、構築するバンドルの型によって異なります。ほとんどの場合 (ただし、すべてではありません)、Bundle クラスはこの基礎構造を非表示にします。バンドルからリソースをロードするために使用するメソッドの多くは、適切な開始ディレクトリを自動的に見つけ、既知の場所にあるリソースを探します。また、このクラスのメソッドとプロパティを使用して、既知のバンドルディレクトリの場所を取得し、それらのディレクトリからリソースを取得することもできます。


iOS および macOS アプリのバンドル構造の詳細については、バンドルプログラミングガイド (Bundle Programming Guide) を参照してください。フレームワークバンドルの構造の詳細については、フレームワークプログラミングガイド (Framework Programming Guide) を参照してください。macOS プラグインの構造の詳細については、コード読み込みプログラミングトピックス (Code Loading Programming Topics) を参照してください。





トピックス


標準バンドルオブジェクトの取得


class var main: Bundle

現在の実行可能ファイルを含むバンドルオブジェクトを返します。


class var allFrameworks: [Bundle]

フレームワークを表すアプリケーションのすべてのバンドルの配列を返します。


class var allBundles: [Bundle]

アプリケーションのすべてのフレームワークでないバンドルの配列を返します。



バンドルの作成と初期化


init(for: AnyClass)

指定されたクラスが関連している NSBundle オブジェクトを返します。


init?(identifier: String)

指定されたバンドル識別子を持つ NSBundle インスタンスを返します。


init?(url: URL)

指定されたファイルの URL に対応する初期化された NSBundle オブジェクトを返します。


init?(path: String)

指定されたディレクトリに対応する初期化された NSBundle オブジェクトを返します。



Nib ファイルをロードする


func loadNibNamed(String, owner: Any?, options: [UINib.OptionsKey : Any]?) -> [Any]?

受信者のバンドルにある nib ファイルの内容をアーカイブ解除します。


func loadNibNamed(NSNib.Name, owner: Any?, topLevelObjects: AutoreleasingUnsafeMutablePointer<NSArray?>?) -> Bool

指定されたファイル名と所有者を持つバンドルから nib をロードします。



リソースファイルの検索


func url(forResource: String?, withExtension: String?, subdirectory: String?) -> URL?

指定された名前と拡張子で識別され、与えられたバンドルディレクトリに存在するリソースファイルのファイル URL を返します。


func url(forResource: String?, withExtension: String?) -> URL?

指定された名前とファイル拡張子によって識別されるリソースのファイル URL を返します。


func urls(forResourcesWithExtension: String?, subdirectory: String?) -> [URL]?

指定されたファイル拡張子で識別され、指定されたバンドルのサブディレクトリ内にあるすべてのリソースのファイル URL の配列を返します。


func url(forResource: String?, withExtension: String?, subdirectory: String?, localization: String?) -> URL?

指定されたバンドルのサブディレクトリにあり、グローバルリソースと指定されたローカリゼーションに関連したリソースに限定され、指定された名前とファイル拡張子で識別されるリソースのファイル URL を返します。


func urls(forResourcesWithExtension: String?, subdirectory: String?, localization: String?) -> [URL]?

指定されたファイル名拡張子を持ち、指定されたリソースのサブディレクトリ内に存在し、グローバルリソースと指定されたローカリゼーションに関連したリソースに限定されたすべてのバンドルリソースのファイル URL を含む配列を返します。


class func url(forResource: String?, withExtension: String?, subdirectory: String?, in: URL) -> URL?

指定されたバンドル内の指定された名前と拡張子を持つリソースのファイル URL を作成して返します。


class func urls(forResourcesWithExtension: String?, subdirectory: String?, in: URL) -> [URL]?

指定されたバンドル内の指定されたリソースのサブディレクトリに存在する、指定されたファイル名拡張子を持つすべてのバンドルリソースのファイル URL を含む配列を返します。


func path(forResource: String?, ofType: String?) -> String?

指定された名前とファイル拡張子によって識別されるリソースの完全なパス名を返します。


func path(forResource: String?, ofType: String?, inDirectory: String?) -> String?

指定された名前とファイル拡張子で識別され、指定されたバンドルのサブディレクトリにあるリソースの完全なパス名を返します。


func path(forResource: String?, ofType: String?, inDirectory: String?, forLocalization: String?) -> String?

指定された名前とファイル拡張子で識別され、指定されたバンドルのサブディレクトリにあり、グローバルリソースと指定されたローカリゼーションに関連したリソースに限定されたリソースの完全なパス名を返します。


func paths(forResourcesOfType: String?, inDirectory: String?) -> [String]

指定されたファイル名拡張子を持ち、リソースのサブディレクトリに存在するすべてのバンドルリソースのパス名を含む配列を返します。


func paths(forResourcesOfType: String?, inDirectory: String?, forLocalization: String?) -> [String]

指定されたファイル名拡張子を持ち、指定されたリソースのサブディレクトリ内に存在し、グローバルリソースと指定されたローカリゼーションに関連したリソースに限定されたすべてのバンドルリソースのファイルを含む配列を返します。


class func path(forResource: String?, ofType: String?, inDirectory: String) -> String?

指定された名前と拡張子で識別され、与えられたバンドルのディレクトリに存在するリソースファイルの完全なパス名を返します。


class func paths(forResourcesOfType: String?, inDirectory: String) -> [String]

指定された拡張子を持ち、指定されたパスにあるバンドルのディレクトリに存在するすべてのバンドルリソースのパス名を含む配列を返します。




@@@@@@@@@@@@@@@@@
10/20 ここまで
@@@@@@@@@@@@@@@@@












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ