PhoneGap プロジェクトをセットアップすると、次のように表示されます。
iOS アプリケーション内でその情報を取得するにはどうすればよいですか? phonegapでそれを行う方法はありますか? プラグインはどうですか?プラグインが存在せず、iOS アプリケーションでそれを行う方法がある場合は、プラグインを作成できます。私は答えを見つけることができませんでした。
ありがとう!
PhoneGap プロジェクトをセットアップすると、次のように表示されます。
iOS アプリケーション内でその情報を取得するにはどうすればよいですか? phonegapでそれを行う方法はありますか? プラグインはどうですか?プラグインが存在せず、iOS アプリケーションでそれを行う方法がある場合は、プラグインを作成できます。私は答えを見つけることができませんでした。
ありがとう!
私は自分のソリューションを提供したかったのです (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 プラグインの標準パラメーターです (私の知る限り)。getter としての私たちの関数は、ある意味で実際にはパラメーターを持っていませんが、それらは依然として必要です。(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 側に圧倒されている他の誰かの助けになることを願っています。
@CWSpear のすばらしい回答を微調整するために、ビルドも取得したいと思いました。
ビルドとバージョンを取得します。
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"];
新しい Dict を返すように 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", []);
JS cordova.exec コールバック関数で 2 つの引数として返す目的 C について十分に知りません。それ以外の場合は、おそらく最も簡単です。
スティーブ
jquery を使用している場合は、cordova-plugin-app-versionコルドバ プラグインのこの関数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);
});