Class

Bundle

A representation of the code and resources stored in a bundle directory on disk. ディスク上のバンドルディレクトリの中に格納されるコードとリソースの表現。

Declaration 宣言

class Bundle : NSObject

Overview 概要

Apple uses bundles to represent apps, frameworks, plug-ins, and many other specific types of content. Bundles organize their contained resources into well-defined subdirectories, and bundle structures vary depending on the platform and the type of the bundle. By using a bundle object, you can access a bundle's resources without knowing the structure of the bundle. The bundle object provides a single interface for locating items, taking into account the bundle structure, user preferences, available localizations, and other relevant factors. Appleはバンドルを使って、アプリ、フレームワーク、プラグイン、そして多くの他の特定の型のコンテンツを表現します。これらバンドルはそれらの含むリソースをうまく定義されたいくつかの下位ディレクトリへと組織化します、そしてバンドル構造はプラットホームとバンドルの型によって異なります。バンドルオブジェクトを使うことによって、あなたはバンドルの持つリソースにアクセスすることが、バンドルの構造を知ることなしに可能です。バンドルオブジェクトは、単一のインターフェイスをさまざまな項目の所在を突き止めるのに提供していて、それはバンドル構造、ユーザ環境設定、利用可能な現地化、そして他の関連因子を考慮します。

Any executable can use a bundle object to locate resources, either inside an app’s bundle or in a known bundle located elsewhere. You don't use a bundle object to locate files in a container directory or in other parts of the file system. 何らかの実行可能ファイルは、バンドルオブジェクトを使ってリソースを捜し出すことが、アプリの持つバンドル内部でまたはどこか他に位置する既知のバンドルの中でのどちらでも可能です。あなたは、コンテナディレクトリにおいてまたはファイルシステムの他の部分においてファイルを捜し出すために、バンドルオブジェクトを使いません。

The general pattern for using a bundle object is as follows: バンドルオブジェクトの使用の一般的なパターンは、以下の通りです:

  1. Create a bundle object for the intended bundle directory. 意図するバンドルディレクトリのためにバンドルオブジェクトを作成する。

  2. Use the methods of the bundle object to locate or load the needed resource. バンドルオブジェクトのメソッドを使用して、必要なリソースを発見したりロードする。

  3. Use other system APIs to interact with the resource. 他のシステムのAPIを使ってリソースと相互作用する。

Some types of frequently used resources can be located and opened without a bundle. For example, when loading images, you store images in asset catalogs and load them using the init(named:) methods of UIImage or NSImage. Similarly, for string resources, you use NSLocalizedString to load individual strings instead of loading the entire .strings file yourself. いくつかの型のよく使われるリソースは、バンドルなしで発見され開かれることが可能です。例えば、画像をロードする場合、あなたは画像をアセットカタログの中に格納して、それらをUIImageまたはNSImageinit(named:)メソッドを使ってロードします。同様に、文字列リソースに対して、あなたはNSLocalizedStringを使って個々の文字列をロードします、あなた自身で.stringsファイル全体をロードする代わりに。

Finding and Opening a Bundle バンドルを捜して開く

Before you can locate a resource, you must first specify which bundle contains it. The Bundle class has many constructors, but the one you use most often is main. The main bundle represents the bundle directory that contains the currently executing code. So for an app, the main bundle object gives you access to the resources that shipped with your app. あなたがあるリソースを捜し出す前に、あなたは最初にそれを含んでいるバンドルを指定しなければなりません。Bundleクラスは多くのコンストラクタを持ちます、しかしあなたが最もよく使うものはmainです。メインバンドルは、現在実行しているコードを含むバンドルディレクトリを表します。なのであるアプリに対して、メインバンドルオブジェクトは、あなたにあなたのアプリに積み込まれるリソースへのアクセスを与えます。

If your app interacts directly with plug-ins, frameworks, or other bundled content, you can use other methods of this class to create appropriate bundle objects. You can always create bundle objects from a known URL or path, but other methods make it easier to access bundles your app is already using. For example, if you link to a framework, you can use the init(for:) method to locate the framework bundle based on a class defined in that framework. あなたのアプリがプラグイン、フレームワーク、または他のバンドルされる内容と直接に相互作用するならば、あなたはこのクラスの他のメソッドを使って適切なバンドルオブジェクトを作成できます。あなたは常にバンドルオブジェクトを既知のURLやパスから作成できます、しかし他のメソッドはあなたのアプリがもう既に使っているバンドルへのアクセスをより簡単にします。例えば、あなたがあるフレームワークにリンクするならば、あなたはinit(for:)メソッドを使って、そのフレームワークの中で定義されるあるクラスに基づいてそのフレームワークバンドルを捜し出します。


// Get the app's main bundle
let mainBundle = Bundle.main


// Get the bundle containing the specified private class.
let myBundle = Bundle(for: NSClassFromString("MyPrivateClass")!)

Locating Resources in a Bundle バンドル内のリソースを捜し出す

You use Bundle objects to obtain the location of specific resources inside the bundle. When looking for resources, you provide the name of the resource and its type at a minimum. For resources in a specific subdirectory, you can also specify that directory. After locating the resource, the bundle routines return a path string or URL that you can use to open the file. あなたは、Bundleオブジェクトを使ってバンドル内部の特定のリソースの位置を取得します。リソースを見つける時、あなたは最低限リソースの名前とそれの型を提供します。特定の下位ディレクトリの中のリソースに対して、あなたはまたそのディレクトリも指定できます。リソースを捜し出した後、バンドルルーチンは、あなたがそのファイルを開くのに使うことができるパス文字列またはURLを返します。

Listing 2 Locating a single resource in a bundle コード出力 2 バンドル内のただ1つのリソースを捜し出す

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

Bundle objects follow a specific search pattern when looking for resources on disk. Global resources—that is, resources not in a language-specific .lproj directory—are returned first, followed by region- and language-specific resources. This search pattern means that the bundle looks for resources in the following order: バンドルオブジェクトは、ディスク上でリソースを見つける時に特定のサーチパターンに従います。グローバルリソース — すなわち、ある言語特有の.lprojディレクトリの中にないリソース — は、最初に返されます、その後に地域そして言語特有のリソースが続きます。このサーチパターンは、次の順序でバンドルがリソースを捜すことを意味します:

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

  2. Region-specific localized resources (based on the user’s region preferences) 地域特定のローカライズされたリソース(ユーザの地域環境設定に基づいて)

  3. Language-specific localized resources (based on the user’s language preferences) 言語特有のローカライズされたリソース(ユーザの地域環境設定に基づいて)

  4. Development language resources (as specified by the CFBundleDevelopmentRegion key in the bundle’s Info.plist file) 開発言語リソース(バンドルの持つInfo.plistファイルの中のCFBundleDevelopmentRegionキーによって指定される通りに)

Because global resources take precedence over language-specific resources, you should never include both a global and localized version of a given resource in your app. When a global version of a resource exists, language-specific versions are never returned. The reason for this precedence is performance. If localized resources were searched first, the bundle object might waste time searching for a nonexistent localized resource before returning the global resource. グローバルリソースは言語特有のリソースを越える優先順をとることから、あなたは与えられたリソースのグローバルおよびローカライズ版の両方とも、あなたのアプリに決して含むべきではありません。あるリソースのグローバル版が存在する場合、言語特有版は、決して返されません。この優先順のわけは、性能です。ローカライズされたリソースが最初に検索されたならば、バンドルオブジェクトは、グローバルリソースを返す前に、存在しないローカライズリソースを検索する時間を浪費するかもしれません。

When locating resource files, the bundle object automatically considers many standard filename modifiers when determining which file to return. Resources may be tagged for a specific device (~iphone, ~ipad) or for a specific screen resolution (@2x, @3x). Do not include these modifiers when specifying the name of the resource you want. The bundle object selects the file that is most appropriate for the underlying device. For more information, see App Icons on iPhone, iPad and Apple Watch. リソースファイルを捜し出す場合、バンドルオブジェクトは、どのファイルを返すか判断する時に自動的に多くの標準ファイル名修飾子を考慮します。リソースは、特定のデバイスに対して(~iphone~ipad)または特定の画面解像度に対して(@2x@3x)タグをつけられるかもしれません。あなたの望むリソースの名前を指定する場合これらの修飾子を含まないでください。バンドルオブジェクトは、根底にあるデバイスに最も適切なファイルを選択します。さらなる情報として、App Icons on iPhone, iPad and Apple Watchを見てください。

Understanding Bundle Structures バンドル構造を理解する

Bundle structures vary depending on the target platform and the type of bundle you are building. The Bundle class hides this underlying structure in most (but not all) cases. Many of the methods you use to load resources from a bundle automatically locate the appropriate starting directory and look for resources in known places. You can also use the methods and properties of this class to get the location of known bundle directories and to retrieve resources specifically from those directories. バンドル構造は、あなたがビルドしている対象のプラットホームそしてバンドルの型次第でいろいろです。Bundleクラスは、たいていの場合(しかし全てではない)この基底構造を隠します。あなたがリソースをバンドルからロードするのに使うメソッドの多くは、自動的に適切な開始ディレクトリを突き止めて、いくつかの既知の場所でリソースを探します。あなたはまた、このクラスのメソッドとプロパティを使って、既知のバンドルディレクトリの位置を取得して、リソースを取ってくることがそれらのディレクトリからに限定して可能です。

For information about the bundle structure of iOS and macOS apps, see Bundle Programming Guide. For information about the structure of framework bundles, see Framework Programming Guide. For information about the structure of macOS plug-ins, see Code Loading Programming Topics. iOSとmacOSアプリのバンドル構造についての情報として、Bundle Programming Guideを見てください。フレームワークバンドル構造についての情報として、Framework Programming Guideを見てください。macOSプラグインの構造についての情報として、Code Loading Programming Topicsを見てください。

Topics 話題

Getting Standard Bundle Objects 標準バンドルオブジェクトを取得する

Creating and Initializing a Bundle バンドルの作成と初期化

Loading Nib Files nibファイルをロードする

Finding Resource Files リソースファイルを見つける

Finding Image Resources 画像リソースを見つける

Finding Sound Resources サウンドリソースを見つける

Fetching Localized Strings ローカライズされた文字列を取ってくる

Fetching Context Help Resources コンテキストヘルプ・リソースを取ってくる

Getting the Standard Bundle Directories 標準バンドルディレクトリを取得する

Getting Bundle Information バンドル情報を取得する

Getting Localization Information ローカライズされた情報の取得

Managing Preservation Priority for On Demand Resources 「オンデマンドリソース」に対する維持優先度を管理する

Getting Classes from a Bundle バンドルからクラスを取得する

Loading Code from a Bundle バンドルからコードをロードする

Errors エラー

Relationships 関係

Inherits From 継承元