當你設置一個的PhoneGap項目,你看到以下內容:如何獲取應用程序版本並構建iOS PhoneGap應用程序?
我怎樣才能得到iOS的應用程序內部的信息?有沒有辦法用phonegap來做到這一點?怎麼樣一個插件?如果沒有插件存在,並且有辦法在iOS應用程序中執行此操作,則可以編寫一個插件。我只是無法找到任何答案。
謝謝!
當你設置一個的PhoneGap項目,你看到以下內容:如何獲取應用程序版本並構建iOS PhoneGap應用程序?
我怎樣才能得到iOS的應用程序內部的信息?有沒有辦法用phonegap來做到這一點?怎麼樣一個插件?如果沒有插件存在,並且有辦法在iOS應用程序中執行此操作,則可以編寫一個插件。我只是無法找到任何答案。
謝謝!
我想提供我的解決方案(基於Adam Ware的解決方案)。
通常我不喜歡給人們複製和粘貼所有的代碼,但是我覺得這是一個例外,因爲很多潛入PhoneGap的人都對Objective-C一無所知看起來語法(像我一樣)。
因此,這裏是我使用過的代碼和以下指導亞當指出,去:
在我的項目插件文件夾在<project name>/Plugins/
,我創建MyCDVPlugin.m
和MyCDVPlugin.h
。
我以前用C寫過,所以我理解標題,但對於那些不知道的,它基本上告訴編譯器要查找什麼,所以我們只是告訴它我們方法的名稱並導入Cordova的頭:
#import <Cordova/CDVPlugin.h>
@interface MyCDVPlugin : CDVPlugin
- (void)getVersionNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options;
@end
這些參數是標準的科爾多瓦插件參數(據我所知)。我們的功能,作爲一個吸氣器,實際上並沒有任何參數,但仍然是必需的。 (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不會自動更新文件(這實際上是有意義的),但我總是忘記。僅僅因爲你的文件在你的項目目錄中,並不意味着它們在你的項目中。不要忘了將它們拖動到你的插件目錄中的項目:
此外,請確保您的插件添加到您的Cordova.plistPlugins
項:
從那裏,從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一方所淹沒。
這正是我期待的(當時)。我最終實現了一些其他方式,所以我不能真正測試這是否工作。我確定它!但感謝分享。它可能會幫助別人有這個問題:) – 2013-02-05 20:01:29
@rjmunro謝謝!我也爲我們的Android版本使用了該片段=)。在那裏好好考慮plugman。 – CWSpear 2013-07-12 05:33:51
找到這個答案後,我將它打包成一個兼容插件的插件,並在此基礎上添加了Android支持。該項目位於:github.com/whiteoctober/cordova-plugin-app-version(編輯的URL) – rjmunro 2013-07-12 09:41:53
作爲一個小的調整,以@ CWSpear的真棒回答,我也想抓住體形:
抓住構建和版本:
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.exec回調函數有兩個參數,否則,將可能是最直接的。
史蒂夫
一個插件現在存在,: http://plugins.cordova.io/#/package/uk.co.whiteoctober.cordova.appversion
我只是測試它,就像一個魅力。
如果您正在使用jQuery那麼我們就可以利用此功能科爾多瓦 - 插件,應用程序版本科爾多瓦插件cordova.getAppVersion.getVersionNumber獲取應用程序版本。
cordova.getAppVersion.getVersionNumber().then(function (version) {
$('.version').text(version);
});
但是如果我們用角那麼我們必須把版本設置代碼$超時裏面那麼它會正常工作。
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);
});
你最終實現了什麼解決方案?你有沒有創建自己的PhoneGap插件?我有和你一樣的問題。 – 2012-10-25 13:24:54
@FarhanAhmad我知道這已經過去了幾個月,但我用我的解決方案發布了更詳細的答案。 – CWSpear 2013-02-05 17:44:24