2012-07-18 137 views
14

當你設置一個的PhoneGap項目,你看到以下內容:如何獲取應用程序版本並構建iOS PhoneGap應用程序?

BUILD

我怎樣才能得到iOS的應用程序內部的信息?有沒有辦法用phonegap來做到這一點?怎麼樣一個插件?如果沒有插件存在,並且有辦法在iOS應用程序中執行此操作,則可以編寫一個插件。我只是無法找到任何答案。

謝謝!

+0

你最終實現了什麼解決方案?你有沒有創建自己的PhoneGap插件?我有和你一樣的問題。 – 2012-10-25 13:24:54

+0

@FarhanAhmad我知道這已經過去了幾個月,但我用我的解決方案發布了更詳細的答案。 – CWSpear 2013-02-05 17:44:24

回答

22

我想提供我的解決方案(基於Adam Ware的解決方案)。

通常我不喜歡給人們複製和粘貼所有的代碼,但是我覺得這是一個例外,因爲很多潛入PhoneGap的人都對Objective-C一無所知看起來語法(像我一樣)。

因此,這裏是我使用過的代碼和以下指導亞當指出,去:

在我的項目插件文件夾在<project name>/Plugins/,我創建MyCDVPlugin.mMyCDVPlugin.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不會自動更新文件(這實際上是有意義的),但我總是忘記。僅僅因爲你的文件在你的項目目錄中,並不意味着它們在你的項目中。不要忘了將它們拖動到你的插件目錄中的項目:

Dragging files into the project.

此外,請確保您的插件添加到您的Cordova.plistPlugins項:

Editing 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一方所淹沒。

+0

這正是我期待的(當時)。我最終實現了一些其他方式,所以我不能真正測試這是否工作。我確定它!但感謝分享。它可能會幫助別人有這個問題:) – 2013-02-05 20:01:29

+0

@rjmunro謝謝!我也爲我們的Android版本使用了該片段=)。在那裏好好考慮plugman。 – CWSpear 2013-07-12 05:33:51

+3

找到這個答案後,我將它打包成一個兼容插件的插件,並在此基礎上添加了Android支持。該項目位於:github.com/whiteoctober/cordova-plugin-app-version(編輯的URL) – rjmunro 2013-07-12 09:41:53

2

作爲一個小的調整,以@ 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回調函數有兩個參數,否則,將可能是最直接的。

史蒂夫

0

如果您正在使用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); 
}); 
相關問題