Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone infoDictionary内部版本号未与Plist同步_Iphone_Objective C_Xcode_Synchronization_Plist - Fatal编程技术网

Iphone infoDictionary内部版本号未与Plist同步

Iphone infoDictionary内部版本号未与Plist同步,iphone,objective-c,xcode,synchronization,plist,Iphone,Objective C,Xcode,Synchronization,Plist,我遵循本指南在XCode iPhone项目()中实现了内部版本号。 我试过了,但在登录时得到了错误的版本号。它没有正确更新,并且总是在info.plist后面有一个或两个数字。我需要它是相同的号码。有人知道为什么会这样吗 i、 e“[[[NSBundle mainBundle]infoDictionary]objectForKey:@“CFBuildNumber”]”与plist的CFBuildNumber不同 脚本设置为先运行,然后再复制捆绑资源和所有内容。这是我得到的输出和info.plis

我遵循本指南在XCode iPhone项目()中实现了内部版本号。 我试过了,但在登录时得到了错误的版本号。它没有正确更新,并且总是在info.plist后面有一个或两个数字。我需要它是相同的号码。有人知道为什么会这样吗

i、 e“[[[NSBundle mainBundle]infoDictionary]objectForKey:@“CFBuildNumber”]”与plist的CFBuildNumber不同

脚本设置为先运行,然后再复制捆绑资源和所有内容。这是我得到的输出和info.plist编号:

应用程序版本:1.0版本号:52版本日期:星期三11月10日15:10:05 CET 2010
(info.plist是构建编号:54和日期:Wed Nov 10 15:10:43 CET 2010)

应用程序版本:1.0版本号:54版本日期:星期三11月10日15:10:43 CET 2010
(info.plist是制造编号:55和日期:星期三11月10日15:12:54 CET 2010)

应用程序版本:1.0版本号:54版本日期:星期三11月10日15:10:43 CET 2010
(info.plist是构建编号:56和日期:Wed Nov 10 15:13:49 CET 2010)

应用程序版本:1.0版本号:56版本日期:星期三11月10日15:13:49 CET 2010
(info.plist是构建编号:57和日期:Wed Nov 10 15:14:46 CET 2010)

它似乎始终遵循这种模式。所以继续下去会是56(雷亚尔58)、58(雷亚尔59)、58(雷亚尔60)、60(雷亚尔61)、60(雷亚尔62)、62(雷亚尔63)等等

脚本(设置为先运行后运行)为:


因为项目的Info.plist是在“运行脚本”阶段之前处理的。请参阅XCode中的“生成结果”窗口。要解决这个问题,您应该 1) 创建类型为“仅运行脚本”的新目标,并将其配置为更新版本号 2) 创建类型为“聚合”的新目标,并将“版本更新”目标和“您的产品”目标添加到其中


所以,当您构建“聚合”目标时,在第一步-版本将被更新,在第二步-您的产品

我最终使用了已经复制的plist文件,
${TARGET\u BUILD\u DIR}/${INFOPLIST\u PATH}
,并将“复制捆绑资源”阶段放在脚本运行之前。这样,号码将始终同步

谢谢,但目标太多了。我试图指向我在复制捆绑包阶段添加的另一个plist文件,并在我的运行脚本中添加了'touch-cm',以强制Xcode每次复制该文件,但Xcode仍有一半时间不复制该文件。我最终使用了已经复制的plist文件${TARGET\u BUILD\u DIR}/${INFOPLIST\u PATH},并放置了“复制捆绑包资源”-而是在脚本运行之前执行阶段。这样,号码将始终同步。但你带我去,所以我给你道具。谢谢。不需要创建聚合目标。当显示任何目标的信息时,可以指定“直接依赖项”,并在其中包含任何其他目标,该目标在选定目标之前自动运行。因此,shell脚本只需要一个单独的目标,并将其作为直接依赖项包含在所有其他目标中。“1)使用“仅运行脚本”类型创建新目标“并将其配置为更新版本号”这是什么?我在XCode 4中没有看到它。
#!/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