Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 如何向用户显示我的应用程序的当前项目版本?_Iphone_Cocoa_Cocoa Touch_Xcode - Fatal编程技术网

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")!