クラス


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]

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



イメージリソースの検索


func urlForImageResource(NSImage.Name) -> URL?

指定されたイメージリソースの場所を NSURL として返します。


func pathForImageResource(NSImage.Name) -> String?

指定されたイメージリソースファイルの場所を返します。


func image(forResource: NSImage.Name) -> NSImage?

指定された名前に関連した NSImage インスタンスを返します。このインスタンスは、イメージの異なる解像度バージョンを表す複数のファイルによってサポートされます。



サウンドリソースの検索


func path(forSoundResource: NSSound.Name) -> String?

指定されたサウンドリソースファイルの場所を返します。



ローカライズされた文字列の取得


func localizedString(forKey: String, value: String?, table: String?) -> String

指定されたキーで指名され、指定された表に存在する文字列のローカライズされたバージョンを返します。



文脈ヘルプリソースの取得


func contextHelp(forKey: NSHelpManager.ContextHelpKey) -> NSAttributedString?

バンドルのヘルプファイルから指定されたキーの文脈依存ヘルプを返します。



標準バンドルディレクトリの取得


var resourceURL: URL?

リソースファイルを含むバンドルのサブディレクトリのファイル URL。


var executableURL: URL?

受信者の実行可能ファイルのファイル URL。


var privateFrameworksURL: URL?

private なフレームワークを含むバンドルのサブディレクトリのファイル URL。


var sharedFrameworksURL: URL?

共有フレームワークを含む受信者のサブディレクトリのファイル URL。


var builtInPlugInsURL: URL?

plug-in を含む受信者のサブディレクトリのファイル URL。


func url(forAuxiliaryExecutable: String) -> URL?

受信者のバンドル内の指定された名前の実行可能ファイルのファイル URL を返します。


var sharedSupportURL: URL?

共有サポートファイルを含むバンドルのサブディレクトリのファイル URL。


var appStoreReceiptURL: URL?

バンドルの App Store 領収書のファイル URL。


var resourcePath: String?

リソースを含むバンドルのサブディレクトリの完全なパス名。


var executablePath: String?

受信者の実行可能ファイルの完全なパス名。


var privateFrameworksPath: String?

private フレームワークを含むバンドルのサブディレクトリの完全なパス名。


var sharedFrameworksPath: String?

共有フレームワークを含むバンドルのサブディレクトリの完全なパス名。


var builtInPlugInsPath: String?

plug-in を含む受信者のサブディレクトリの完全なパス名。


func path(forAuxiliaryExecutable: String) -> String?

受信者のバンドル内の指定された名前の実行可能ファイルの完全なパス名を返します。


var sharedSupportPath: String?

共有サポートファイルを含むバンドルのサブディレクトリの完全なパス名。



バンドル情報の取得


var bundleURL: URL

受信者のバンドルディレクトリの完全な URL。


var bundlePath: String

受信者のバンドルディレクトリの完全なパス名。


var bundleIdentifier: String?

受信者のバンドル識別子。


var infoDictionary: [String : Any]?

バンドルの Info.plist ファイルから構築され、受信者に関する情報を含む辞書。


func object(forInfoDictionaryKey: String) -> Any?

受信者の情報プロパティリスト内の指定されたキーに関連した値を返します。



ローカライズ情報の取得


var localizations: [String]

バンドル内に含まれるすべてのローカリゼーションのリスト。


var preferredLocalizations: [String]

バンドル内に含まれる優先ローカリゼーションの順序付きリスト。


var developmentLocalization: String?

開発言語のローカライズ。


var localizedInfoDictionary: [String : Any]?

バンドルのローカライズされたプロパティリストのキーを含む辞書。


class func preferredLocalizations(from: [String]) -> [String]

バンドルオブジェクトが現在のユーザのリソースを見つけるために使用する、指定されたリストから 1 つ以上のローカリゼーションを返します。


class func preferredLocalizations(from: [String], forPreferences: [String]?) -> [String]

ユーザの言語設定の候補の指定されたリストに基づいて、バンドルがローカライズされたコンテンツを提供するロケール識別子を返します。



オンデマンドリソースの保存優先度の管理


func setPreservationPriority(Double, forTags: Set<String>)

バンドル内のタグ付けされたリソースセットを消去するための相対的な順序をシステムに伝えるヒント。


func preservationPriority(forTag: String) -> Double

指定されたタグの現在の保存優先度を返します。



バンドルからクラスを取得


func classNamed(String) -> AnyClass?

指定された名前の Class オブジェクトを返します。


var principalClass: AnyClass?

バンドルの主クラス。


class let didLoadNotification: NSNotification.Name

クラスが動的にロードされたことを監視者に知らせる通知。


let NSLoadedClasses: String

ロードされた各クラスの名前の配列に対応する didLoadNotification 通知の userInfo 辞書のキーとして使用される定数。



コードをバンドルからロード


var executableArchitectures: [NSNumber]?

バンドルの実行可能ファイルでサポートされているアーキテクチャの型を示す数値の配列。


func preflight()

バンドルの実行可能コードが正常に読み込まれたかどうかを示すブール値を返します。


func load() -> Bool

コードがまだロードされていない場合は、バンドルの実行可能コードを実行中のプログラムに動的にロードします。


func loadAndReturnError()

バンドルの実行可能コードをロードし、エラーがあれば返します。


func unload() -> Bool

受信者に関連したコードのロードを解除します。


var isLoaded: Bool

バンドルのロードの状況。


Mach-O Architecture

バンドルの実行可能コードがサポートする CPU の型を記述する定数。



エラー


var NSExecutableErrorMinimum: Int

実行可能ファイルに関連するエラー用に予約されているエラーコードの範囲の始まり。


var NSExecutableNotLoadableError: Int

実行可能な型は現在のプロセスではロードできません。


var NSExecutableArchitectureMismatchError: Int

実行可能ファイルは、現在のプロセスと互換性のあるアーキテクチャを提供しません。


var NSExecutableRuntimeMismatchError: Int

実行可能ファイルには、現在のプロセスと互換性のない Objective-C 実行時情報が含まれています。


var NSExecutableLoadError: Int

何らかの特定されない理由により実行可能ファイルはロードできません。


var NSExecutableLinkError: Int

リンクの問題により実行可能ファイルが失敗しました。


var NSExecutableErrorMaximum: Int

実行可能ファイルに関連するエラー用に予約されているエラーコードの範囲の終わり。





関連


以下からの継承


NSObject



以下に準拠


Sendable














トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ