web-dev-qa-db-ja.com

iOSアセットバンドルの作成方法

評価したiOSプロジェクトでカスタムアセットバンドルを見たので、少なくともそれが可能であることは知っています。

私の問題は、特定の画像に約22,000タイルのCATiledLayerを使用しているため、コンパイルに非常に長い時間がかかることです(30分クリーンビルド、通常ビルドの場合5〜10分)。そのため、すべての画像を取得し、カスタムバンドルを作成してポータブルにし、毎回アプリバンドルに再コンパイルしないようにします。

これについてどうすればいいですか?ドキュメントを確認しましたが、実際にバンドルを作成する方法についての説明は表示されませんでした。

54
michael

答えはばか簡単です

Finderでフォルダーを作成し、ファイルを追加して、名前をbundlename.bundleに変更します

xcodeにドラッグ-成功!

アクセスするには、PathToMainBundle + "/ bundlename.bundle"の形式を使用します

93
michael

バンドルの作成方法

  1. Finderでフォルダーを作成します。
  2. ファイルをフォルダーに追加する
  3. フォルダーの名前を変更して、拡張子が.bundleになるようにします(例:「新しいフォルダー」->「BundleName.bundle」)

PS:いつでもフォルダーを右クリックし、「パッケージの内容を表示」をクリックして、ファイルを追加、削除、または変更できます。

バンドルをXcodeに追加する方法

  1. Xcodeにドラッグします

バンドルの使用方法

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; 
NSString *resource = [bundle pathForResource:@"fileName" ofType:@"fileType"];

BundleNamefileNamefileTypeを適切な名前に置き換えてください)

36
hfossli

その他の役立つ2つのアドバイス:

まず、XCodeでバンドルの内容を表示するには、ファイルインスペクターユーティリティペインでそのタイプを「アプリケーションバンドル」に設定する必要があります。 XCode経由でコピーすることはできません。ターミナルを使用する必要がありますが、XCodeはすぐにそれを更新します。

第二に、バンドル内のリソースを使用するために役立つスニペットがあります...

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"AquarianHarp" ofType:@"bundle"];
NSString *imageName = [[NSBundle bundleWithPath:bundlePath] pathForResource:@"trebleclef2" ofType:@"png"];
UIImage *myImage = [[UIImage alloc] initWithContentsOfFile:imageName];

上記の私のコメントで述べたように、実際にバンドルをロードする必要はありません(実行可能ではないため、できません)。ofTypeは、実際のファイルの大文字と小文字を一致させる必要がありますonデバイス。シミュレータではどちらの方法でも機能するので、この赤いニシンにだまされないでください!

最後に、バンドル内の「Resources」サブフォルダーにリソースを配置する必要はありません。任意のレイアウトを使用できるようですが、未知のパフォーマンスへの影響がある可能性があります。

25

XCodeで新しいファイルを作成する|リソース|設定バンドル。次に、Finderでそのバンドルを選択し、[パッケージの内容を表示]を選択して、任意の画像ファイルを追加します。

次に、コードで画像を次のように参照します。

NSString *imgName = @"bundlename.bundle/my-image.png";
UIImage *myImage = [UIImage imageNamed:imgName]; 
10
LandedGently

XCodeプロジェクトでのファイルのバンドルと読み取りに関するメモ

手順:

  1. Test.txtファイルを作成し、テキスト「testing✌️」を追加して、test.bundleという名前のフォルダーに入れます
  2. Xcode(コピー)の.appファイルの横にドラッグアンドドロップします
  3. print(Bundle.main.resourcePath!+"/temp.bundle/test.txt")出力:/Users/James/Library/Developer/Xcode/DerivedData/GitSyncMac-heiwpdjbtaxzhiclikjotucjguqu/Build/Products/Debug/GitSyncMacApp.app/Contents/Resources/temp.bundle/test.txt

例:

print(content(Bundle.main.resourcePath!+"/temp.bundle/test.txt"))// testing✌️
static func content(_ path:String)->String?{
    do {
        let content = try String(contentsOfFile:path, encoding:String.Encoding.utf8) as String//encoding: NSUTF8StringEncoding
        return content
    } catch {
        return nil
    }
}
1
eonist

アセットまたはリソースバンドルを作成する手順は次のとおりです(例:FrameworkResources.bundle)-驚くほど非自明です。これは、静的フレームワークを作成している場合に特に便利です。

  1. Xcodeでファイル->新規->ターゲットを押します
  2. 「macOS」タブを選択し、「バンドル」を検索します
  3. 「バンドル」をタップ->「次へ」をクリック->製品名「MyResources」と入力->「完了」をタップ
  4. 新しく作成されたバンドルの「ビルド設定」に移動します。 「ベースSDK」(SDKROOT)を「iOS」に変更します
  5. 新しく作成されたバンドルの「ビルドフェーズ」に進みます。 「ソースのコンパイル」と「ライブラリとバイナリのリンク」を削除します(これにより、バンドル内の実行可能ファイルが削除され、あらゆる種類のビルドおよびアプリ送信エラーが発生する可能性があります)
0
kgaidis