XCode 16.2 日本語化計画:
バンドルコンテンツをその型に基づいて適切な場所に配置します。
バンドル は、標準化された階層構造を持つディレクトリで、通常は実行可能コードとそのコードで使用されるリソースが含まれます。バンドルはさまざまな役割を果たします。アプリ、アプリ拡張機能、フレームワーク、そしてプラグインはすべてバンドルです。バンドルには他のバンドルを含めることもできます。たとえば、アプリにはアプリ拡張機能を含めることができます。
バンドルには、コンテンツを保持するための標準的な場所のセットがあります。バンドル内でコンテンツを配置する適切な場所は、コンテンツの種類によって異なります。たとえば、アプリ拡張機能はプラグイン用に予約されている場所に、ストーリーボードはリソース用に予約されている場所に配置しなければなりません。すべての場所がすべてのプラットフォームに適しているわけではなく、同様に、すべてのプラットフォームがすべてのコンテンツの種類をサポートしているわけではありません。
Xcode はバンドル構造を理解して、Xcode を使用してあなたのバンドルをビルドすると、そのタイプに基づいてコンテンツが正しく配置されます。ソフトウェア製品のビルドに Xcode を使用しない場合は、以下の情報を使用してバンドルされたコンテンツを適切な場所に配置してください。Xcode を使用する場合でも、製品の最終的な構造を確認するときにこの情報が役立つ場合があります。
バンドルされたコンテンツには、バンドルの Info.plist、コード コンテンツ、リソースが含まれます。
バンドルにコンテンツを追加するときは、以下の表のルールに従って配置します。
コンテンツの種類 | プラットフォーム | 場所 |
Info.plist | macOS | Contents/Info.plist |
macOS フレームワーク | Versions/A/Resources/Info.plist | |
iOS, watchOS, tvOS, visionOS | Info.plist | |
main 実行可能 | macOS | Contents/MacOS/ |
macOS フレームワーク | Versions/A/ | |
iOS, watchOS, tvOS, visionOS | / | |
リソース | macOS | Contents/Resources/ |
macOS フレームワーク | Versions/A/Resources/ | |
iOS, watchOS, tvOS, visionOS | / | |
プライバシーマニフェスト | macOS | Contents/Resources/ |
macOS フレームワーク | Versions/A/Resources/ | |
iOS, watchOS, tvOS, visionOS | / | |
フレームワーク,ダイナミックライブラリ | macOS | Contents/Frameworks/ |
macOS フレームワーク | Versions/A/Frameworks/ | |
iOS, tvOS, visionOS | Frameworks/ | |
watchOS | 以下の watchOS でのフレームワークと Swift システムライブラリの処理 セクションを参照せよ。 | |
アプリ拡張機能 | macOS | Contents/PlugIns/ |
iOS, watchOS, tvOS | PlugIns/ | |
plug-in | macOS | Contents/PlugIns/ |
macOS フレームワーク | Versions/A/PlugIns/ | |
iOS, watchOS, tvOS, visionOS | PlugIns/ | |
provisioning profile | macOS | Contents/embedded.provisionprofile |
iOS, watchOS, tvOS, visionOS | embedded.mobileprovision | |
ヘルプアプリ、ヘルパーツール | macOS | Contents/MacOS/ |
Contents/Helpers/ | ||
macOS フレームワーク | Versions/A/Helpers/ | |
XPC Service | macOS | Contents/XPCServices/ |
Automator action | macOS | Contents/Library/Automator/ |
QuickLook generator | macOS | Contents/Library/QuickLook/ |
特権ヘルパーツール | macOS | Contents/Library/LaunchServices/ |
サービス管理ログイン項目 | macOS | Contents/Library/LoginItems/ |
Spotlight importer | macOS | Contents/Library/Spotlight/ |
system 格調機能 | macOS | Contents/Library/SystemExtensions/ |
アプリクリップ | iOS | AppClips/ |
watchOS app | iOS | Watch/ |
iOS、watchOS、tvOS はサードパーティのフレームワークをサポートしていますが、サードパーティのスタンドアロン動的ライブラリはサポートしていません。これはフレームワークバンドル外のもので、通常は .dylib ファイル名拡張子を持ちます。このルールの唯一の例外は、Xcode によって提供される Swift システムライブラリです。
iOS と tvOS は、最上位のアプリレベルでフレームワークと Swift システムライブラリをサポートしています。アプリ拡張機能などのネストされたバンドルにはフレームワークを含めることはできません。
watchOS にフレームワークと Swift システムライブラリを埋め込む方法の詳細については、watchOS でのフレームワークと Swift システムライブラリの処理 を参照してください。
リソースのローカライズの詳細については、バンドル内のローカライズされたリソース (Localized Resources in Bundles) を参照してください。
watchOS アプリは、watchOS アプリを含む iOS アプリと、WatchKit 拡張機能を含む iOS アプリで構成されています。このネストは、ウォッチ専用アプリの場合でも存在します。watchOS アプリにフレームワークと Swift システムライブラリを埋め込む場合は、以下の操作を行う必要があります。
macOS フレームワークは、独自の形式を使用するバンドルです。フレームワークのルートには、フレームワークの 1 つ以上のバージョンを保持する Versions ディレクトリが含まれており、各バージョンは独自のバンドルのような構造を持っています。macOS の祖先プラットフォームでは、このバージョンのバンドル内にフレームワークの複数のバージョンが共存できます。ただし、macOS では、A という名前の単一のバージョンを使用するのがベストプラクティスです。
Xcode で macOS フレームワークをビルドすると、正しい構造が自動的に生成されます。Xcode の外部で作業している場合は、互換性を最大限に高めるために、以下のルールに従ってフレームワークを構造化してください。
最終的な構造は以下のようになります。
各コードの場所には、コードコンテンツのフラットなリストが含まれていなければなりません。コードコンテンツが大量にある場合は、例えば以下のようにネストされたディレクトリにグループ化したくなるかもしれません。
ネストされたあなたのコードをこのようにグループ化しないでください。状況によっては機能するかもしれませんが、後でデバッグが困難な方法で失敗する可能性があります。
この推奨事項を無視してこの構造を使用する場合は、上記の例の Waffles や Varnishes のように、ディレクトリ名にドット (.) を使用しないでください。コード署名機構は、名前にドットが含まれるディレクトリはすべてバンドルであると想定し、そのディレクトリの署名時に、形式に沿ったバンドルではないために失敗します。
コードのないバンドルには実行可能なコードがありません。たとえば、一部のアプリでは、プラグインサポートの一部としてコードのないバンドルを使用します。コードのないバンドルにはコード署名を保持できるため、状況に応じてコードまたはリソースとして署名できます。