infoDictionary构建号与Plist不同步

时间:2010-11-10 14:54:21

标签: iphone objective-c xcode synchronization plist

我按照本指南在XCode iPhone项目(guide)中实现内部版本号。 我试过了,在NSLogging时我得到了错误的内部版本号。它没有正确更新,并且始终是info.plist后面的一两个数字。我需要它是相同的数字。任何人都知道为什么会这样吗?

即“[[[NSBundle mainBundle] infoDictionary] objectForKey:@”CFBuildNumber“]”与plist的CFBuildNumber不同。

在复制捆绑包资源和所有内容之前,脚本设置为先运行。这是我得到的输出和info.plist数字:

应用版本:1.0 Build No:52 Build Date:Wed Nov 10 15:10:05 CET 2010
(info.plist是内部版本号:54和日期:11月10日星期三15:10:43 CET 2010)

应用版本:1.0 Build No:54 Build Date:Wed Nov 10 15:10:43 CET 2010
(info.plist是内部版本号:55和日期:11月10日星期三15:12:54 CET 2010)

应用版本:1.0 Build No:54 Build Date:Wed Nov 10 15:10:43 CET 2010
(info.plist是内部版本号:56和日期:11月10日星期三15:13:49 CET 2010)

应用版本:1.0 Build No:56 Build Date:Wed Nov 10 15:13:49 CET 2010
(info.plist是内部版本号:57和日期:11月10日星期三15:14:46 CET 2010)

似乎始终遵循这种模式。所以继续它将是56(真58),58(真59),58(真60),60(真61),60真(62),62(真63)等等。

脚本(设置为在其他所有内容之前运行)是:

#!/bin/bash
# Auto Increment Version Script
buildPlist="Project-Info.plist"
CFBuildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBuildNumber" $buildPlist)
CFBuildNumber=$(($CFBuildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBuildNumber $CFBuildNumber" $buildPlist
CFBuildDate=$(date)
/usr/libexec/PlistBuddy -c "Set :CFBuildDate $CFBuildDate" $buildPlist

2 个答案:

答案 0 :(得分:3)

因为项目的Info.plist在“运行脚本”阶段之前处理。请参阅XCode中的“构建结果”窗口。要解决这个问题,你应该 1)使用“仅运行脚本”类型创建新目标,并将其配置为更新版本号 2)创建“Aggregate”类型的新目标,并添加“Version update”目标和“you product”目标。

因此,当您构建“聚合”目标时,第一步 - 版本将更新,第二步 - 您的产品。

答案 1 :(得分:0)

我最终使用了已经复制的plist文件${TARGET_BUILD_DIR}/${INFOPLIST_PATH},并在脚本运行之前放置了“复制包资源”阶段。这样,数字将始终保持同步。