評価したiOSプロジェクトでカスタムアセットバンドルを見たので、少なくともそれが可能であることは知っています。
私の問題は、特定の画像に約22,000タイルのCATiledLayerを使用しているため、コンパイルに非常に長い時間がかかることです(30分クリーンビルド、通常ビルドの場合5〜10分)。そのため、すべての画像を取得し、カスタムバンドルを作成してポータブルにし、毎回アプリバンドルに再コンパイルしないようにします。
これについてどうすればいいですか?ドキュメントを確認しましたが、実際にバンドルを作成する方法についての説明は表示されませんでした。
答えはばか簡単です
Finderでフォルダーを作成し、ファイルを追加して、名前をbundlename.bundleに変更します
xcodeにドラッグ-成功!
アクセスするには、PathToMainBundle + "/ bundlename.bundle"の形式を使用します
バンドルの作成方法
.bundle
になるようにします(例:「新しいフォルダー」->「BundleName.bundle」)PS:いつでもフォルダーを右クリックし、「パッケージの内容を表示」をクリックして、ファイルを追加、削除、または変更できます。
バンドルをXcodeに追加する方法
バンドルの使用方法
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
NSString *resource = [bundle pathForResource:@"fileName" ofType:@"fileType"];
(BundleName
、fileName
、fileType
を適切な名前に置き換えてください)
その他の役立つ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」サブフォルダーにリソースを配置する必要はありません。任意のレイアウトを使用できるようですが、未知のパフォーマンスへの影響がある可能性があります。
XCodeで新しいファイルを作成する|リソース|設定バンドル。次に、Finderでそのバンドルを選択し、[パッケージの内容を表示]を選択して、任意の画像ファイルを追加します。
次に、コードで画像を次のように参照します。
NSString *imgName = @"bundlename.bundle/my-image.png";
UIImage *myImage = [UIImage imageNamed:imgName];
XCodeプロジェクトでのファイルのバンドルと読み取りに関するメモ
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.txtprint(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
}
}
アセットまたはリソースバンドルを作成する手順は次のとおりです(例:FrameworkResources.bundle
)-驚くほど非自明です。これは、静的フレームワークを作成している場合に特に便利です。
SDKROOT
)を「iOS」に変更します