PhoneGapの機能を拡張するにあたり、
PhoneGapプラグインのアップデート
旧バージョン向けに作成されたPhoneGapプラグインは、
PhoneGapはAdobeの買収やApacheへの寄贈、
今回は、
プラグインのアップデート手順(iOS)
基本的にCordova Plugin Upgrade Guideに記載されているとおりの手順でアップグレード可能です。JavaScriptのcordova.
iOS向けPhoneGapプラグインのアップデート手順は次のとおりです。
- PhoneGap 1.
5.0以前向けに作成されたプラグインを、 1. 5.0に対応 - PhoneGap 1.
5.0向けに作成されたプラグインを、 1. 6.x~1. 9.0に対応 - PhoneGap 1.
6.x~1. 9.0向けに作成されたプラグインを、 2. 0.0に対応 - PhoneGap 2.
0.0向けに作成されたプラグインを、 2. 1.0に対応
PhoneGap 1.5.0以前向けに作成されたプラグインを、1.5.0に対応
プラグイン中のJavaScriptファイル、
ファイルの種類 | 修正内容 |
---|---|
JavaScript | 文字列 |
ヘッダファイル |
文字列 |
ヘッダファイル | 文字列 |
ヘッダファイル | クラス接頭辞 |
ヘッダファイル | 文字列 |
JavaScriptにおいて、
// 修正前
PhoneGap.exec(...);
PhoneGap.addConstructor(function(){
PhoneGap.addPlugin(...);
});
// 修正後
Cordova.exec(...);
Cordova.addConstructor(function(){
Cordova.addPlugin(...);
});
Objective-Cコードにおいても同様、
// 修正前
#ifdef PHONEGAP_FRAMEWORK
#import <PhoneGap/PGPlugin.h>
[ super appViewController ] ... ]
// 修正後
#ifdef CORDOVA_FRAMEWORK
#import <Cordova/CDVlugin.h>
[self appViewController ... ]
PhoneGap 1.5.0向けに作成されたプラグインを、1.6.x~1.9.0に対応
プラグイン中のJavaScriptファイルを修正します。
ファイルの種類 | 修正内容 |
---|---|
JavaScript | 文字列 |
JavaScript中のグローバルCordovaオブジェクト名は、
// 修正前
Cordova.exec(...);
Cordova.addConstructor(function(){
Cordova.addPlugin(...);
});
// 修正後
cordova.exec(...);
cordova.addConstructor(function(){
cordova.addPlugin(...);
});
PhoneGap 1.6.x~1.9.0向けに作成されたプラグインを、2.0.0に対応
プラグイン中のJavaScriptファイル、
ファイルの種類 | 修正内容 |
---|---|
JavaScript | cordova. |
ヘッダファイル | #import文の確認 |
ヘッダファイル | verifyArgumentsメソッド, appViewControllerメソッドが使用されている箇所を、 |
PhoneGap 2.
cordova.
// 修正前
cordova.addConstructor(function() {
cordova.addPlugin('MyPlugin', new MyPlugin());
});
// 修正後
if(!window.plugins)
{
window.plugins = {};
}
if (!window.plugins.MyPlugin)
{
window.plugins.MyPlugin = new MyPlugin();
}
また、
// 修正前
#import <Cordova/CDV.h>
// 修正後
#import "CDV.h"
PhoneGap 2.
PhoneGap 2.0.0向けに作成されたプラグインを、2.1.0に対応
ファイルの種類 | 修正内容 |
---|---|
ヘッダファイル | 文字列 |
JSONKitと外部ライブラリとの名前空間の問題
// 修正前
[myDict cdvjk_JSONString];
// 修正後
[myDict JSONString];
PhoneGap 2.
// 修正前
- (void) myMethod:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options;
// 修正後
- (void) myMethod:(CDVInvokedUrlCommand*)command;
プラグインのアップデート手順(Android)
執筆時点ではApache Cordova Documentationにまとまった手順が記述されていません。主要開発者の一人であるSimon MacDonald氏のブログ - Simon Mac DonaldやAndroid版Cordovaリポジトリのコミットログ、
Android向けPhoneGapプラグインのアップデート手順は次のとおりです。
- PhoneGap 1.
5.0以前向けに作成されたプラグインを、 1. 5.0に対応 - PhoneGap 1.
5.0向けに作成されたプラグインを、 1. 6.x~1. 9.0に対応 - PhoneGap 1.
9.0向けに作成されたプラグインを、 2. 0.0に対応
PhoneGap 1.5.0以前向けに作成されたプラグインを、1.5.0に対応
プラグイン中のJavaScriptファイル、
ファイルの種類 | 修正内容 |
---|---|
JavaScript | 文字列 |
Java | 文字列 |
Java | メンバ変数 |
プラグイン中JavaScriptにおいて、
// 修正前
PhoneGap.exec(...);
PhoneGap.addConstructor(function(){
PhoneGap.addPlugin(...);
});
// 修正後
cordova.exec(...);
cordova.addConstructor(function(){
cordova.addPlugin(...);
});
また、
// 修正前
import com.phonegap.api.Plugin;
import com.phonegap.api.PluginResult;
// 修正後
import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;
クラス名の変更に伴ってプラグインの名前を変更した場合は、
となっています。これをorg.
同じ要領で、
// 修正前
<plugin name="MyPlugin" value="com.phonegap.plugin.MyPlugin" />
// 修正後
<plugin name="MyPlugin" value="org.apache.cordova.plugin.MyPlugin" />
最後に、
// 修正前
this.ctx
// 修正後
this.ctx.getContext()
// または
this.ctx.getIntent()
// または
((DroidGap)this.ctx).getIntent()
PhoneGap 1.5.0向けに作成されたプラグインを、1.6.x~1.9.0に対応
プラグイン中のJavaファイルを修正します。
ファイルの種類 | 修正内容 |
---|---|
Java | 文字列 |
Java | 文字列 |
Java | 文字列 |
Java | 文字列 |
Java | 文字列 |
Java | 文字列 |
Java | 文字列 |
Java | 文字列 |
Java | 文字列 |
Java | 文字列 |
CordovaInterfaceのメンバ変数
PhoneGap 1.9.0向けに作成されたプラグインを、2.0.0に対応
プラグイン中のJavaScriptファイルを修正します。
ファイルの種類 | 修正内容 |
---|---|
JavaScript | cordova. |
PhoneGap 2.
Failed to run constructor: TypeError: Object #<Object> has no method 'addPlugin'
iOS版と同様、
// 修正前
cordova.addConstructor(function() {
cordova.addPlugin('MyPlugin', new MyPlugin());
});
// 修正後
if(!window.plugins)
{
window.plugins = {};
}
if (!window.plugins.MyPlugin)
{
window.plugins.MyPlugin = new MyPlugin();
}
PhoneGapでは新バージョンがリリースされるにあたり、