答案 0 :(得分:25)
经过进一步的搜索和测试,我自己找到了解决方案。
NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];
NSLog(@"%i Keys: %@", [infoDictionary count],
[[infoDictionary allKeys] componentsJoinedByString: @" ,"]);
这个snipplet给了我以下输出:
20个键:NSBundleResolvedPath,的 CFBundleVersion 下,NSBundleInitialPath,CFBundleIdentifier,NSMainNibFile,CFBundleIconFile,CFBundleInfoPlistURL,CFBundleExecutable,DTSDKName,UIStatusBarStyle,CFBundleDevelopmentRegion,DTPlatformName,CFBundleInfoDictionaryVersion,CFBundleSupportedPlatforms,CFBundleExecutablePath,CFBundleDisplayName,LSRequiresIPhoneOS,CFBundlePackageType,CFBundleSignature ,CFBundleName
所以解决方案很简单:
NSString *version =[[[NSBundle mainBundle] infoDictionary] valueForKey:@"CFBundleVersion"];
但是,这是不当前项目版本,如截图中所示,但是plist文件的Bundle版本。
答案 1 :(得分:12)
查看您的Info.plist
文件,该文件应包含CFBundleVersion
和CFBundleShortVersionString
答案 2 :(得分:7)
构建信息中的这些项目不适用于您构建的应用。它们是占位符,您可以将其拉入您的应用程序。您的应用程序中包含您放置在应用程序的Resources文件夹中的任何内容,例如任何文本文件或plist,或者版本工程师的精美图片。
现在,您可以使用特殊标识符(例如$ {VERSION_INFO_PREFIX}或其他标记)将“构建信息”窗口中的某些项目拉入info.plist。如果您单击上面包含的窗口左侧的任何项目,则可以使用标记。例如,单击“当前项目版本”一词并复制您在底部看到的令牌“CURRENT_PROJECT_VERSION”。然后转到plist文件,并添加一个条目。给它任何你想要的名字或“当前项目版本”。粘贴在右侧的$ {CURRENT_PROJECT_VERSION}中。现在,您可以通过编程方式从应用中获得该值。当然,有人现在必须在“构建信息”窗口或其他位置将该值输入适当的位置。在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;
}
答案 3 :(得分:4)
NSString *currentVersion = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"CFBundleVersion"];
即使我从项目设置中更改了版本,也总是返回相同的值(初始版本)。
NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
诀窍。
答案 4 :(得分:1)
对于懒惰,这里是swift版本:
NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString")!
答案 5 :(得分:1)
NSBundle.mainBundle.infoDictionary[@"CFBundleShortVersionString"];