在Xcode 4中预处理Info.plist

4
我正在尝试使用Xcode中的Info.plist预处理功能,以便在应用程序的Info.plist中嵌入最新的git提交ID。在Xcode 3中使用此处描述的技术可以正常工作。然而,在Xcode 4中尝试时,第一次构建后似乎没有执行任何预处理。
我所看到的是:
  • 从干净状态开始构建我的目标,创建了具有正确内容的InfoPlist.h,目标构建并成功运行,并且我可以在运行时访问该值。
  • 创建一个新的提交以更改HEAD提交ID。
  • 再次构建我的目标,InfoPlist.h将更新为具有新的提交ID,目标构建并成功运行,但信息字典中的值仍是上一个提交ID。
看起来Xcode正在运行脚本构建步骤,但未对我的Info.plist进行预处理,而是使用缓存版本。如何解决?我尝试将InfoPlist.h作为后构建步骤删除,这样它将始终是新修改的文件,但没有任何差别。 更新: 执行清理,然后再次构建将导致正确的值出现。但是,我不应该每次提交时都需要清理目标。

我在 XCode 4.5.2 中仍然看到這種行為。你找到了解決方法或比每次清理更好的解決方案嗎? - Mark Norgren
2个回答

1

你应该做的第一件事是提交一个错误报告。我认为这是一个bug。

在那之前,你可以尝试编辑你的方案,选择Build操作,展开其披露三角形,然后添加一个Pre-action脚本,运行touch来处理PLIST文件。这样暂时就可以解决问题了。


我会提交一个 bug。不幸的是,使用 touch 命令并没有起到作用。该文件已经在依赖目标的脚本阶段被修改了。 - brianpartridge
确实是一个相当恶心的 bug。:-( 这将影响到我自己的几个即将发布的版本,所以感谢您让它浮出水面。 - Joshua Nozzi

0

如果您的脚本位于聚合目标中并作为目标依赖项实现,则不需要清理项目即可正常工作:

plist=${PROJECT_DIR}/${PROJECT_NAME}/${PROJECT_NAME}-Info.plist

touch $plist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接