WebView的COMBINE_HIDPI_IMAGES和Retina图形

cho*_*rry 5 macos xcode appkit retina-display

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

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

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

构建此项目时,我们会得到一个依赖性分析错误,该错误表示:

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

关闭名为"组合高分辨率图稿"的部署构建设置很容易,但这会影响基于NIB的UI以及WebView UI中使用的图形.随着选项打开,button.pngbutton@2x.png共同结合成一个button.tiff应用程序包的资源文件夹中.没有它,使用原始名称.

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

理想情况下,我只想在复制文件构建阶段禁用COMBINE_HIDPI_IMAGES.我无法想办法做到这一点,希望这里的其他人可以......

2012年8月27日更新

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

2012年8月28日更新

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

And*_*rew 0

我能想到的唯一方法是有点黑客,但没有其他人回答,所以它应该对你有用。

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

我将让你来弄清楚细节。有关此方法(一种不太黑客的变体)以及如何设置它的更多详细信息,可以在我的博客中找到。