我在我评估的一个 iOS 项目中看到了一个自定义资产包,所以至少我知道这是可能的。
我的问题是我为给定的图像使用了大约 22,000 个图块的 CATiledLayer,编译需要很长时间(半小时干净构建,常规构建需要 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
使用适当的名称)
另外两个有用的建议:
首先,为了在 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
需要匹配实际文件的大小写才能在设备上工作。它可以在模拟器中以任何一种方式工作,所以不要被这条红鲱鱼愚弄!
最后,您不需要将资源放在捆绑包内的“资源”子文件夹中。似乎您可以使用任意布局,但可能会产生未知的性能影响。
这是我如何让它工作的:在 Xcode 中创建一个新文件 | 资源 | 设置包。然后在 Finder 中选择该包并选择 Show Package Contents,然后添加任何图像文件。
然后在代码中以这种方式引用图像:
NSString *imgName = @"bundlename.bundle/my-image.png";
UIImage *myImage = [UIImage imageNamed:imgName];
以下是创建资产或资源包(例如FrameworkResources.bundle
)的步骤 - 出人意料地不明显。如果您正在创建静态框架,这将特别有用。
SDKROOT
) 更改为“iOS”我在 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
}
}
创建一个可加载的捆绑项目就像创建一个应用程序一样——你只需要选择合适的项目模板。要创建可加载的捆绑项目,请执行以下步骤:
构建并运行,在 Xcode 中,您将在 Project Navigator 的 Products 文件夹中看到 bundle 文件。右键单击捆绑包并选择“在 Finder 中显示”。