5

我们有一个 Xcode 项目,其中包括用于基于 NIB 的 UI 和 WebView UI 的 Retina 图形。这个项目为 Mac 构建了一个应用程序。

该项目使用两个单独的构建阶段将这些图形移动到最终应用程序中。第一个是传统的 Copy Bundle Resource,它将 1x 和 2x 图形都放入应用程序包中。第二个是复制文件构建阶段,它将 Web 图形复制到具有“图形”子路径的单独资源目标中。

(这避免了一些命名冲突,并让网页设计师使用熟悉的“graphics/whatever.png”路径。)

在构建这个项目时,我们得到一个依赖分析错误,上面写着:

复制文件构建阶段无法处理多表示图像“whatever@2x.png” - 尝试复制资源构建阶段,或禁用 COMBINE_HIDPI_IMAGES。

关闭名为“Combine High Resolution Artwork”的部署构建设置很容易,但这会影响基于 NIB 的 UI 以及 WebView UI 中使用的图形。打开该选项,button.pngbutton@2x.png合并到button.tiff应用程序包的 Resource 文件夹中。没有它,将使用原始名称。

据我所知,应用程序运行正常,但由于默认情况下设置了 COMBINE_HIDPI_IMAGES,我怀疑将图形部署为单个文件有一些好处(可能更快地加载和缓存。)

理想情况下,我只想在 Copy Files 构建阶段禁用 COMBINE_HIDPI_IMAGES。我想不出办法做到这一点,希望这里的其他人可以......

2012 年 8 月 27 日更新

对于这个特定的应用程序,解决问题的最简单方法是将所有 HTML 图像替换为 2x 版本。由于标签指定了宽度和高度,因此图像在非 Retina 设备上缩小了 50%。质量很好,因为它们是从本地文件系统加载的,所以对性能没有明显的影响。

2012 年 8 月 28 日更新

我们采用的另一种方法是使用命名约定。一些 HTML 图像是使用 CSS 指定的(通过媒体查询选择 Retina 或非 Retina 版本。)为了避免将这些图像组合成单个 HiDPI 图像时出现问题,我们使用了whatever.png 和whatever_retina.png。

4

1 回答 1

0

我能想到的唯一方法是有点破解,但没有其他人回答,因为它应该适合你。

我建议您在目标 (target.xcconfig) 上使用 xcconfig 文件来指定要更改的设置,然后在将当前 xcconfig 替换为两个版本之一的阶段之前/之后构建脚本 (target-on.xcconfig, target -off.xcconfig)。这应该可以,但是 Xcode 可能要等到以后才更新 xcconfig 文件(我现在无法检查),你必须检查一下。

我会留给你来弄清楚细节。有关此方法(一种不那么骇人听闻的变体)以及如何设置它的更多详细信息,可以在我的博客中找到。

于 2012-08-23T21:47:39.963 回答