如何制作iOS资产套件?

我在我评估的iOS项目中看到了一个自定义资产包,所以至less我知道这是可能的。

我的问题是,我使用的CATiledLayer与一个给定的图像大约22000瓷砖,它需要很长时间来编译(半小时干净的build设,5-10分钟的常规build设)。 所以,我想把所有的图像,并制作一个自定义的包,使其可移植,并希望每次不希望重新编译到应用程序包。

我如何去做这件事? 我检查了文档,但没有看到如何实际创build捆绑的解释。

答案是愚蠢的简单

在查找器中创build一个文件夹,添加文件,将其重命名为bundlename.bundle

拖入Xcode – 成功!

要访问,使用PathToMainBundle +“/ bundlename.bundle”的forms

如何创build一个包

  1. 在取景器中创build一个文件夹。
  2. 将文件添加到文件夹
  3. 重命名文件夹,使其扩展名为.bundle (例如“New folder” – >“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"]; 

(用合适的名称replaceBundleNamefileNamefileType

另外两点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项目中的文件的笔记

脚步:

  1. 创build一个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 } }