【发布时间】:2011-12-10 18:45:39
【问题描述】:
我想通过 xcode 目标从我的静态库的资源文件中创建资源包。我看到 Three20 有一个需要导入的 .bundle 文件。
我该怎么做?
【问题讨论】:
我想通过 xcode 目标从我的静态库的资源文件中创建资源包。我看到 Three20 有一个需要导入的 .bundle 文件。
我该怎么做?
【问题讨论】:
Apple 不认可此解决方案。当我与 Apple 的一位从事 Xcode 工作的开发人员交谈时,他们告诉我 iOS 不支持资源包,他们对这完全有效感到惊讶。
此解决方案适用于 iOS 9 至 13,包括手机和平板电脑。但是,未来对 iOS 的更新可能会打破这一点。请注意这一点。
我知道这已经晚了 8 年,但由于我偶然发现了这个问题,因此很有可能其他人会这样做,所以我想我会提供一个有用的答案。
+
我们将在第 3 步中将其转换为 iOS Bundle
Base SDK 并将此值从macOS 更改为iOS
此时,您的问题在技术上已完成(为 iOS 创建资源包目标),但需要进行一些配置才能使其正常工作
- 按钮将其删除+ 按钮将新的捆绑资源添加到 iOS 应用程序(未图示)+ 按钮添加新的依赖项完成所有这些步骤后,您将构建与 iOS 兼容的资源包并将其嵌入到要加载的应用程序中。它不是那么直截了当,很多文章可能会说这是不受支持的,但我已经在已发布的应用程序中使用了此功能,并且效果很好
请记住,如果您现在想将任何资源(PNG、XIB 文件等)添加到您的应用中,您需要将它们添加到捆绑包而不是应用中,如下所示:
设置完成后,再次检查资源包的构建设置。查找标题为“版本控制系统”的设置。此值必须设置为None。如果设置为Apple Generic,您将在尝试推送到应用商店时遇到问题!
Apple 的版本控制系统将创建一个*_vers.c 文件,对其进行编译,然后将此二进制文件嵌入到您的包中。由于这不是一个有效的 CFBundleExecutable,它会导致您的应用被拒绝并出现错误 ITMS-90171
【讨论】:
bundle 只是一个具有特殊结构和 .bundle 扩展名的目录。您可以在documentation 中阅读有关详细信息的更多信息。
编辑:
重要的是,bundle 只是一个以特殊扩展名命名的普通文件夹。例如,如果您有一个名为 MyBundle.bundle 的文件夹和一个名为 image.png 的图像,则可以使用 [UIImage imageNamed:@"MyBundle.bundle/image.png"]; 加载它,因此无需通过 Xcode 目标构建它。事实上,它在 iOS 项目中不可用。您的项目中可能有一个 Copy Files 构建阶段,或者一个 shell 脚本。
这很简单,而且功能强大。例如,如果您符合框架文档中列出的特殊结构,您可以使用简单的方法、shell 脚本或 ant 任务或 rake 文件将静态库构建到框架中。只要输出目录符合结构并命名为Something.framework,你就可以将其用作Framework,即使在iOS上也是如此。
【讨论】: