繁体   English   中英

iOS:通过 Xcode Target 构建资源包

[英]iOS: Build a Resource Bundle via Xcode Target

我想通过 xcode 目标从我的静态库的资源文件创建一个资源包。 我看到 Three20 有一个需要导入的 .bundle 文件。

我怎样才能做到这一点?

重要免责声明:

Apple 不认可此解决方案。 当我与一位在 Xcode 上工作的 Apple 开发人员交谈时,他们告诉我 iOS不支持资源包,他们很惊讶这竟然有效。

这个解决方案在 iOS 9 到 13 上对我有用,包括手机和平板电脑。 但是,未来对 iOS 的更新可能会破坏这一点。 请注意这一点。

现在来回答:

我知道已经晚了 8 年,但是由于我偶然发现了这个问题,因此其他人很有可能会这样做,所以我想我会提供一个有用的答案。

步骤 1. 创建一个新目标

在此处输入图片说明

  • 确保您在项目导航器中选择了您的项目
  • 单击目标列表底部的+

第 2 步。创建一个 macOS 包

在此处输入图片说明

我们将在步骤 3 中将其转换为 iOS Bundle

第 2 步(续)。 创建 macOS 捆绑包

在此处输入图片说明

  • 为您的捆绑包命名
  • 点击“完成”

步骤 3. 将 Base SDK 从 macOS 更改为 iOS

在此处输入图片说明

  • 确保您选择了新的资源包目标
  • 转到构建设置
  • 查找Base SDK并将此值从macOS更改为iOS

在这一点上,您在技术上已经完成了您的问题(为 iOS 创建了一个资源包目标),但是需要一些配置才能使其正常工作

步骤 4. 替换 iOS 捆绑资源

在此处输入图片说明

  • 确保您选择了应用程序目标(而不是资源包)
  • 转到构建阶段
  • 选择所有资源
  • -按钮删除它们

第 4 步(续)。 替换 iOS 捆绑资源

在此处输入图片说明

  • +按钮向 iOS 应用程序添加新的捆绑资源(未图示)
  • 选择您的捆绑产品
  • 点击“添加”

步骤 5. 设置依赖项

在此处输入图片说明

  • 打开Dependencies部分(仍在 Build Phases 下并且仍在您的应用程序中,而不是资源包中)
  • 单击+按钮添加新的依赖项

第 5 步(续)。 设置依赖

在此处输入图片说明

  • 选择资源包项目
  • 点击“添加”

现在你完成了!

完成所有这些步骤后,您将构建一个与 iOS 兼容的资源包并将其嵌入到要加载的应用程序中。 这不是那么简单,很多文章可能会说这是不受支持的,但我已经在已发布的应用程序中使用了此功能,并且效果很好

请记住,如果您现在想向您的应用程序添加任何资源(PNG、XIB 文件等),您需要将它们添加到而不是应用程序,如下所示:

在此处输入图片说明

重要问题

设置完成后,再检查一次资源包的构建设置。 查找标题为“版本控制系统”的设置。 此值必须设置为None 如果将其设置为Apple Generic在尝试推送到应用商店时遇到问题!

Apple 的版本控制系统将创建一个*_vers.c文件,编译它,然后将此二进制文件嵌入到您的包中。 由于这不是有效的 CFBundleExecutable,它会导致您的应用程序被拒绝并出现错误 ITMS-90171

在此处输入图片说明

捆绑包只是一个具有特殊结构和 .bundle 扩展名的目录。 您可以在文档中阅读更多关于细节的信息

编辑:

重要的是,bundle 只是一个带有特殊扩展名的普通文件夹。 例如,如果你有一个名为 MyBundle.bundle 的文件夹和一个名为 image.png 的图像,你可以用[UIImage imageNamed:@"MyBundle.bundle/image.png"];加载它[UIImage imageNamed:@"MyBundle.bundle/image.png"]; 因此,无需通过 Xcode 目标构建它。 实际上,它不适用于 iOS 项目。 您可以在项目或 shell 脚本中使用 Copy Files 构建阶段。

这很简单,也很强大。 例如,如果您符合框架文档中列出的特殊结构,您可以使用简单的方法、shell 脚本或 ant 任务或 rake 文件将静态库构建到框架中。 只要输出目录符合结构并且命名为Something.framework,你就可以将其作为Framework使用,即使在iOS上也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM