58

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

我的问题是我为给定的图像使用了大约 22,000 个图块的 CATiledLayer,编译需要很长时间(半小时干净构建,常规构建需要 5-10 分钟)。因此,我想获取所有图像并制作一个自定义包以使其可移植,并且希望不会每次都重新编译到应用程序包中。

我该怎么做?我检查了文档,但没有看到有关如何实际创建捆绑包的说明。

4

7 回答 7

105

答案很简单

在 finder 中创建一个文件夹,向其中添加文件,将其重命名为 bundlename.bundle

拖入 Xcode - 成功!

访问,使用 PathToMainBundle+"/bundlename.bundle" 的形式

于 2011-03-11T19:32:39.207 回答
41

如何创建捆绑包

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

(替换BundleName,fileNamefileType使用适当的名称)

于 2014-05-27T08:26:28.057 回答
27

另外两个有用的建议:

首先,为了在 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需要匹配实际文件的大小写才能在设备上工作。它可以在模拟器中以任何一种方式工作,所以不要被这条红鲱鱼愚弄!

最后,您不需要将资源放在捆绑包内的“资源”子文件夹中。似乎您可以使用任意布局,但可能会产生未知的性能影响。

于 2011-11-19T12:50:00.803 回答
10

这是我如何让它工作的:在 Xcode 中创建一个新文件 | 资源 | 设置包。然后在 Finder 中选择该包并选择 Show Package Contents,然后添加任何图像文件。

然后在代码中以这种方式引用图像:

NSString *imgName = @"bundlename.bundle/my-image.png";
UIImage *myImage = [UIImage imageNamed:imgName]; 
于 2011-07-10T05:17:36.823 回答
3

以下是创建资产或资源包(例如FrameworkResources.bundle)的步骤 - 出人意料地不明显。如果您正在创建静态框架,这将特别有用。

  1. 在 Xcode 中按文件 -> 新建 -> 目标
  2. 选择“macOS”选项卡,搜索“Bundle”
  3. 点击“Bundle” -> 点击“Next” -> 输入产品名称“MyResources” -> 点击“Finish”
  4. 转到新创建的 Bundle 的“构建设置”。将“基础 SDK”( SDKROOT) 更改为“iOS”
  5. 转到新创建的捆绑包的“构建阶段”。删除“Compile Sources”和“Link Binary With Libraries”(这将删除包中的可执行文件,这可能会导致各种构建和应用程序提交错误)
于 2019-02-05T17:04:01.733 回答
0

我在 Xcode 项目中捆绑和读取文件的笔记

脚步:

  1. 创建一个 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
    }
}
于 2017-07-31T20:41:12.193 回答
0

创建一个可加载的捆绑项目就像创建一个应用程序一样——你只需要选择合适的项目模板。要创建可加载的捆绑项目,请执行以下步骤:

  1. 启动 Xcode。
  2. 从文件菜单中选择新建项目...。
  3. 从模板列表中,选择 Cocoa Bundle。
  4. 点击下一步。
  5. 选择项目的位置,然后单击完成。

构建并运行,在 Xcode 中,您将在 Project Navigator 的 Products 文件夹中看到 bundle 文件。右键单击捆绑包并选择“在 Finder 中显示”。

于 2020-04-24T20:41:25.147 回答