Iphone 如何向用户显示我的应用程序的当前项目版本?
我想将当前版本添加到我的应用程序的“关于”部分。 如所附的屏幕截图所示,苹果提供版本控制 如何在应用程序中显示这些设置Iphone 如何向用户显示我的应用程序的当前项目版本?,iphone,cocoa,cocoa-touch,xcode,Iphone,Cocoa,Cocoa Touch,Xcode,我想将当前版本添加到我的应用程序的“关于”部分。 如所附的屏幕截图所示,苹果提供版本控制 如何在应用程序中显示这些设置 查看您的Info.plist文件,该文件应该有CbundLeverVersion和CbundleShortVersionString等键。在进一步搜索和测试之后,我自己找到了解决方案 NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary]; NSLog(@"%i Keys: %@", [in
查看您的
Info.plist
文件,该文件应该有CbundLeverVersion
和CbundleShortVersionString
等键。在进一步搜索和测试之后,我自己找到了解决方案
NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];
NSLog(@"%i Keys: %@", [infoDictionary count],
[[infoDictionary allKeys] componentsJoinedByString: @" ,"]);
这个snipplet给了我以下输出:
20个键:NSBundleResolvedPath、CbundLeverVersion、NSBundleInitialPath、CbundleIdentifier、NSMainNibFile、CbundleConfire、CbundleInfoplisture、CbundleExecutable、DTSDKName、UIStatusBarStyle、CbundleDevelopmentRegion、DTPlatformName、CbundleInformationary版本、CbundleSupportedPlatforms、CbundleExecutablePath、,CbundleDisplayName、LsrequiresPhoneOS、CbundlePackageType、CbundleSignature、CbundleName
因此,解决方案非常简单:
NSString *version =[[[NSBundle mainBundle] infoDictionary] valueForKey:@"CFBundleVersion"];
但是,这不是屏幕截图中显示的当前项目版本,而是plist文件的捆绑版本。构建信息中的这些项目对您构建的应用程序不可用。它们是占位符,您可以将其拉入应用程序。应用程序中的内容是您放置在应用程序的Resources文件夹中的任何内容,如任何文本文件、plist或版本控制工程师的精美图片 现在,您可以使用特殊标识符,例如${VERSION\u Info\u PREFIX}或其他标记,将Build Info窗口中的一些项拉入Info.plist。如果您在上面包含的窗口中单击左侧的任何项目,则可以使用令牌。例如,单击“当前项目版本”一词,复制您在底部看到的标记“当前项目版本”。然后转到plist文件,添加一个条目。给它任何你想要的名字或“当前项目版本”。在右侧粘贴${CURRENT_PROJECT_VERSION}。现在,您可以通过应用程序以编程方式使用该值。当然,现在必须有人在buildinfo窗口或其他地方的适当位置输入该值。在info.plist文件中管理此字段和类似字段可能会更容易。这取决于你如何处理这些事情 以下是如何从info.plist中获取版本信息:
+ (NSString *) getAppVersionNumber;
{
NSString *myVersion,
*buildNum,
*versText;
myVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
buildNum = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey];
if (myVersion) {
if (buildNum)
versText = [NSString stringWithFormat:@"Version: %@ (%@)", myVersion, buildNum];
else
versText = [NSString stringWithFormat:@"Version: %@", myVersion];
}
else if (buildNum)
versText = [NSString stringWithFormat:@"Version: %@", buildNum];
NSLog(versText);
return versText;
}
返回始终相同的值(初始版本),即使我从项目设置中更改了版本,但是
NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
做到了这一点。对于懒惰的人,这里是swift版本:
NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString")!
NSBundle.mainBundle.infoDictionary[@“CbundleShortVersionString”]代码>更多信息:ghommey-developer.apple.com上有一个列表编程指南。我相信你现在可以自己发现,)我认为版本控制包括添加存储库和在XCode中为你的项目设置SCM,这可能不是你想要的版本(尽管我可能错了)。如果你在plist文件中将CbundLeverVersion值设置为${CURRENT_project_version}它将替换为生成设置中当前项目版本中的内容。然后,您可以使用agvtool bump来增加构建编号。此外,还可以使用CFString
kcfbundleverosionkey
代替硬编码字符串@“cfbundleverosion”
,如有必要,按照上述代码的要求将其强制转换为NSString
。cfbundleverosion键显示构建编号,不是版本。对于版本,使用Eimantas所说的键:CbundleShortVersionString。“未定义或垃圾值返回给调用方”!删除versText并在其位置上放置return语句。最后返回nil。不要像这样NSLog
。它应该是NSLog(@“%@”,vs text)代码>。如果versText
仍然未定义,这可能是由于代码导致的,这将导致崩溃。CFBundleVersion-汇编代码。不是版本字符串。
NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString")!