我在我评估的iOS项目中看到了一个自定义资产包,所以至少我知道它是可能的。
我的问题是我使用的CATiledLayer对于给定的图像大约有22,000个图块,编译需要很长时间(半小时清理版本,常规版本需要5-10分钟)。因此,我希望获取所有图像并制作自定义捆绑包以使其可移植,并且希望每次都不会重新编译到应用程序包中。
我该如何解决这个问题?我检查了文档,但没有看到如何实际创建包的解释。
答案 0 :(得分:92)
答案非常简单
在finder中创建一个文件夹,向其中添加文件,将其重命名为bundlename.bundle
拖入Xcode - 成功!
访问,使用PathToMainBundle +“/ bundlename.bundle”的形式
答案 1 :(得分:35)
如何创建捆绑
.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 :(得分:25)
另外两个有用的建议:
首先,为了在XCode中查看包的内容,您需要在File Inspector Utility窗格中将其类型设置为“Application Bundle”。您仍然无法通过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
需要匹配你的实际文件的情况才能工作在设备上。它可以在模拟器中工作,所以不要被这个红鲱鱼欺骗!
最后,您不需要将资源放在捆绑包内的“Resources”子文件夹中。您似乎可以使用任意布局,但可能会有未知的性能影响。
答案 3 :(得分:10)
以下是我如何使用它:在XCode中创建一个新文件资源|设置捆绑。然后在Finder中选择该包并选择“显示包内容”,并添加任何图像文件。
然后在代码中以这种方式引用图像:
NSString *imgName = @"bundlename.bundle/my-image.png";
UIImage *myImage = [UIImage imageNamed:imgName];
答案 4 :(得分:1)
关于在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
}
}
答案 5 :(得分:0)
以下是创建资产或资源包(例如FrameworkResources.bundle
)的步骤-令人惊讶的是,它并不明显。如果您要创建静态框架,这尤其有用。
SDKROOT
)更改为“ iOS” 答案 6 :(得分:0)
创建可加载的捆绑包项目就像创建应用程序一样-您只需要选择适当的项目模板即可。要创建可加载的捆绑包项目,请执行以下步骤:
构建并运行,在Xcode中,您将在Project Navigator的Products文件夹中看到捆绑文件。右键单击该捆绑包,然后选择“在Finder中显示”。