如何获取应用程序版本并构buildiOS PhoneGap应用程序?
在设置PhoneGap项目时,您会看到以下内容:
我怎样才能获得iOS应用程序内的信息? 有没有办法用phonegap来做到这一点? 怎么样一个插件? 如果没有插件,并且有办法在iOS应用程序中执行,则可以编写一个插件。 我只是无法find任何答案。
谢谢!
我想提供我的解决scheme(基于Adam Ware的解决scheme)。
通常我不喜欢给所有的代码复制和粘贴,但是我觉得这是一个例外,因为很多潜入PhoneGap的人对Objective-C及其有趣的语法一无所知(像我这样的)。
所以这就是我通过使用代码所经历的事情,接着Adam指导的指导:
在我的项目插件文件夹<project name>/Plugins/
,我创build了MyCDVPlugin.m
和MyCDVPlugin.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
条目:
从那里,调用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); });