如何获取应用程序版本并构buildiOS PhoneGap应用程序?

在设置PhoneGap项目时,您会看到以下内容:

建立

我怎样才能获得iOS应用程序内的信息? 有没有办法用phonegap来做到这一点? 怎么样一个插件? 如果没有插件,并且有办法在iOS应用程序中执行,则可以编写一个插件。 我只是无法find任何答案。

谢谢!

我想提供我的解决scheme(基于Adam Ware的解决scheme)。

通常我不喜欢给所有的代码复制和粘贴,但是我觉得这是一个例外,因为很多潜入PhoneGap的人对Objective-C及其有趣的语法一无所知(像我这样的)。

所以这就是我通过使用代码所经历的事情,接着Adam指导的指导:

在我的项目插件文件夹<project name>/Plugins/ ,我创build了MyCDVPlugin.mMyCDVPlugin.h

我以前用C写过,所以我理解标题,但是对于那些不知道的东西,基本上是告诉编译器要查找什么,所以我们只是告诉它我们方法的名称并导入Cordova的头文件:

 #import <Cordova/CDVPlugin.h> @interface MyCDVPlugin : CDVPlugin - (void)getVersionNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options; @end 

这些参数是标准的Cordova插件参数(据我所知)。 我们的function,作为一个吸气,实际上并没有任何参数,但仍然是必需的。 ( options可能实际上是可选的,我没有testing。)

在我们的.m ,我们需要的是实际的函数,我们的头文件和CDVPluginResult.h

 #import "MyCDVPlugin.h" #import <Cordova/CDVPluginResult.h> @implementation MyCDVPlugin - (void)getVersionNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; NSString* callbackId = [arguments objectAtIndex:0]; CDVPluginResult* pluginResult = nil; NSString* javaScript = nil; pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:version]; javaScript = [pluginResult toSuccessCallbackString:callbackId]; [self writeJavascript:javaScript]; } @end 

基本上,这将获得版本号,并将其传回给您的成功callback。 (我不认为这个方法真的有失败的情况,所以它没有失败的callback。)

为了完整起见,Xcode不会自动更新文件(这实际上是有意义的),但我总是忘记。 只是因为你的文件在你的项目目录中,并不意味着它们在你的项目中。 不要忘记把它们拖到你项目的插件目录中:

将文件拖到项目中。

另外,确保你的插件添加到你的Cordova.plist Plugins条目:

编辑Cordova.plist

从那里,调用JavaScript的方法非常简单(确保在deviceready被触发后使用它):

 // get and show the version number var gotVersionNumber = function(version) { // cache value so we can use it later if we need it Hub.Global.Version = version; $('.version-number').text(version); }; // my plugin doesn't even have a failure callback, so we pass null. // 5th param (parameters to pass into our Obj-C method) is NOT // optional. must be at least empty array cordova.exec(gotVersionNumber, null, "MyCDVPlugin", "getVersionNumber", []); 

而已! 简单,正确…? 希望这可以帮助其他人稍稍被PhoneGap的Obj-C所淹没。

作为@ CWSpear真棒回答的一个小调整,我也想抓住Build:

抓住版本和版本:

 NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; NSString* build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 

把它们扔进一个字典:

 NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; [dict setObject:[NSString stringWithString:version] forKey:@"version"]; [dict setObject:[NSString stringWithString:build] forKey:@"build"]; 

修改pluginResult返回新的字典:

 pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dict]; 

Cordova.exec:

  cordova.exec(function(response){ console.log(response.build); console.log(response.version); }, null, "MyCDVPlugin", "getVersionNumber", []); 

我不太了解目标C将它作为JS cordova.execcallback函数中的两个参数返回,否则这可能是最直接的。

史蒂夫

现在有一个插件: http : //plugins.cordova.io/#/package/uk.co.whiteoctober.cordova.appversion

我只是testing它,就像一个魅力。

如果您使用的是jquery,那么我们可以从cordova-plugin-app-version cordova插件的这个函数cordova.getAppVersion.getVersionNumber获取应用程序版本。

 cordova.getAppVersion.getVersionNumber().then(function (version) { $('.version').text(version); }); 

但是,如果我们使用angular度,那么我们必须把版本设置代码放在$超时,那么它会正常工作。

 angular.module('testApp', []) .controller('MainCtrl', function($scope, $rootScope, $timeout) { // Calling cordova plugin cordova-plugin-app-version cordova.getAppVersion.getVersionNumber().then(function (version) { $timeout(function() { $rootScope.app = {}; $rootScope.app.version = version; }, 0); });