如何制作iOS资产套件?
我在我评估的iOS项目中看到了一个自定义资产包,所以至less我知道这是可能的。
我的问题是,我使用的CATiledLayer与一个给定的图像大约22000瓷砖,它需要很长时间来编译(半小时干净的build设,5-10分钟的常规build设)。 所以,我想把所有的图像,并制作一个自定义的包,使其可移植,并希望每次不希望重新编译到应用程序包。
我如何去做这件事? 我检查了文档,但没有看到如何实际创build捆绑的解释。
答案是愚蠢的简单
在查找器中创build一个文件夹,添加文件,将其重命名为bundlename.bundle
拖入Xcode – 成功!
要访问,使用PathToMainBundle +“/ bundlename.bundle”的forms
如何创build一个包
- 在取景器中创build一个文件夹。
- 将文件添加到文件夹
- 重命名文件夹,使其扩展名为
.bundle
(例如“New folder” – >“BundleName.bundle”)
PS:你可以随时右键点击文件夹,点击“显示包内容”,以添加,删除或修改任何文件。
如何将该包添加到Xcode
- 将其拖入Xcode
如何使用捆绑
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"]; NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; NSString *resource = [bundle pathForResource:@"fileName" ofType:@"fileType"];
(用合适的名称replaceBundleName
, fileName
和fileType
)
另外两点build议:
首先,为了在XCode中查看包的内容,需要在File Inspector Utility窗格中将其types设置为“Application Bundle”。 您仍然无法通过XCode进行复制。 您需要使用terminal,但XCode会立即更新。
其次,为了在捆绑中使用资源,这里有一个有用的代码片段。
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"AquarianHarp" ofType:@"bundle"]; NSString *imageName = [[NSBundle bundleWithPath:bundlePath] pathForResource:@"trebleclef2" ofType:@"png"]; UIImage *myImage = [[UIImage alloc] initWithContentsOfFile:imageName];
正如我在上面的评论中所提到的,你不需要实际加载bundle(你不能这样做,因为它不可执行),并且ofType
需要与实际文件的大小写匹配才能在设备上工作。 它会在模拟器中以任何方式工作,所以不要被这个红鲱鱼愚弄!
最后,您不需要将资源放入资源束中的“资源”子文件夹中。 看起来你可以使用任意布局,但是可能存在未知的性能影响。
这是我得到这个工作:在XCode创build一个新的文件| 资源| 设置包。 然后在Finder中select该包并selectShow Package Contents,并添加任何图像文件。
然后在代码中这样引用一个图像:
NSString *imgName = @"bundlename.bundle/my-image.png"; UIImage *myImage = [UIImage imageNamed:imgName];
我在捆绑和读取XCode项目中的文件的笔记
脚步:
- 创build一个test.txt文件,并将文本“testing✌️”添加到它,然后将其放在名为test.bundle的文件夹中
- 将它拖放到xcode中的.app文件旁边(复制)
-
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 } }