当您设置PhoneGap项目时,您会看到以下内容:
如何在iOS应用程序中获取该信息?有没有办法用phonegap做到这一点?插件怎么样?如果没有插件,并且有一种方法可以在iOS应用程序中执行,则可以编写插件。我只是找不到任何答案。
谢谢!
答案 0 :(得分:22)
我想提供我的解决方案(基于Adam Ware的解决方案)。
通常我不喜欢只给人们复制和粘贴的所有代码,但我觉得这有点例外,因为许多潜入PhoneGap的人对Objective-C一无所知及其有趣 - 寻找语法(像我一样)。
所以这就是我使用代码并遵循Adam指出的指南:
在<project name>/Plugins/
的项目插件文件夹中,我创建了MyCDVPlugin.m
和MyCDVPlugin.h
。
我之前用C语言写过,所以我理解标题,但是对于那些没有标题的人来说,它基本上告诉编译器要查找什么,所以我们只告诉它我们方法的名称并导入Cordova的标题:
#import <Cordova/CDVPlugin.h>
@interface MyCDVPlugin : CDVPlugin
- (void)getVersionNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options;
@end
这些参数是标准的Cordova插件参数(据我所知)。作为一个吸气剂,我们的功能在某种意义上实际上没有任何参数,但仍然需要这些参数。 (options
实际上可能是可选的?我没有测试过。)
在我们的.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
基本上,这会获取版本号并将其传递回成功回调。 (我不认为这种方法确实有失败的情况,所以它没有失败的回调。)
为了完整起见,Xcode不会自动更新文件(实际上有意义),但我总是忘记。仅仅因为您的文件位于项目目录中,并不意味着它们在您的项目中。不要忘记将它们拖到项目的Plugins目录中:
另外,请务必将插件添加到 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方面有点不知所措。
答案 1 :(得分:2)
作为对@ CWSpear的精彩回答的一个小调整,我也想抓住Build:
抓住构建和版本:
NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
NSString* build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
把它们扔进Dict:
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:[NSString stringWithString:version] forKey:@"version"];
[dict setObject:[NSString stringWithString:build] forKey:@"build"];
修改pluginResult以返回新的Dict:
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.exec回调函数中的两个args返回,否则这可能是最直接的。
史蒂夫
答案 2 :(得分:2)
现在有一个插件,: http://plugins.cordova.io/#/package/uk.co.whiteoctober.cordova.appversion
我只是测试它,就像一个魅力。
答案 3 :(得分:0)
如果您正在使用jquery,那么我们可以从 cordova-plugin-app-version cordova插件的 cordova.getAppVersion.getVersionNumber 获取应用版本。
cordova.getAppVersion.getVersionNumber().then(function (version) {
$('.version').text(version);
});
但是如果我们使用angular,那么我们必须将版本设置代码放在 $ timeout 中,然后才能正常工作。
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);
});