ここ最近はIonicを使ったハイブリッドアプリを開発してました(個人でなく、会社でのプロジェクトです)。
さて、こちらの記事の通り、Cordova Androidに脆弱性が見つかり、修正版がリリースされました。
IonicではCordovaのAPIを利用してネイティブの機能を使うので、今のプロジェクトでも「脆弱性の影響ないかな?」「そもそも、今のCordovaのバージョンなんだっけ?」と思ったのですが、調べていく過程で色々と混乱してしまっていたので、整理がてらまとめておきます。
Cordova iOS, Cordova Androidのバージョンを調べる
最初に結論なんですが、Ionic(Cordova)プロジェクト内のCordovaのバージョンを調べたい場合、プロジェクトの直下で
# cordova platform list
とすればよいです(Ionicの場合はionic platform list
でもOKですね)。
サンプル出力は以下。
Installed platforms: android 4.0.2, ios 3.8.0
Available platforms: amazon-fireos, blackberry10, browser, firefoxos
Cordova Androidが4.0.2、Cordova iOSが3.8.0であることが分かります。
紛らわしいなーと感じた点は、あるハイブリッドアプリについて、以下のバージョンがどれも違うところです(カッコ内は手元の環境におけるバージョンです)
そのため、本エントリにおける以下の説明ではこれらは使い分けていきます。
ionicとionic-cliのバージョンは別物
バージョンを調べたい時は、慣れで
# ionic --version
としてしまいますが、ここで返ってくる結果はionicではなく、ionic-cliのバージョンです。
手元の環境だと1.4.5という結果が返ってきますが、Ionic自体はつい先日1.0がリリースされたばかりなので、Ionicが1.4.5というのはおかしいですしね。
ionicの諸々のバージョンを調べたい場合は、
# ionic info
とすると、以下のような結果が返ります。
Your system information:
Cordova CLI: 5.0.0
Ionic Version: 1.0.0
Ionic CLI Version: 1.4.5
Ionic App Lib Version: 0.0.22
ios-deploy version: Not installed
ios-sim version: Not installed
OS: Mac OS X Mavericks
Node Version: v0.12.4
Xcode version: Xcode 6.2 Build version 6C131e
通常、Ionicはグローバルにインストール( npm install -g ionic
)すると思いますが、これでインストールされるのは、正確にはionicではなくionic-cliのようです。
ionic-cliはその名の通りコマンドラインツールであり、ionic-cliにおけるモジュールの依存関係的には ionic-cli -> ionic-app-lib -> cordova-lib
となっていて、ionicには依存しません。
ionic-app-libはプロジェクトのジェネレータ、cordova-libはCordovaモジュールです。
というわけで、ionicとionic-cliは直接の依存関係はないし、cordova-libとCordova iOS/Cordova Androidにも直接の依存関係はない、ようです。
じゃあ、Ionicのバージョンはいつ、どこで決まってるのか?
…という疑問が湧いてきたので調べました。
どうやら、ionic start
を実行する時(=プロジェクトを作成する時)に決まり、{PROJECT_ROOT}/www/lib/ionic/version.json
で定義されるようです*1。
流れとして、Ionicプロジェクトを作る場合、ionic start
コマンドで雛形を生成することが多いと思いますが、プロジェクトのテンプレートに依らず、基底の雛形である ionic-app-baseというのがいて、その中でIonicのバージョンが指定されています。
つまり、ionic-cliをバージョンアップしなくても、ionic start
を実行した時点で最新のIonicに基づくプロジェクト雛形が生成される、ようです(試してないので確証はないですが…)
なお、既存のプロジェクトのIonicをバージョンアップしたい場合は、プロジェクトで
# ionic lib update
とします。この辺りを知っておけば、プロジェクト作成後もionicのバージョンを自分達で管理することができます。
Cordova iOS, Cordova Androidのインストール
各プラットフォーム(Cordova iOS, Cordova Android)は、
# cordova platform add ios
# cordova platform add android
を実行することで、 platforms
の下に ios
, android
ディレクトリが作られ、インストールされます。
プロジェクトのプラットフォーム情報は、package.json
および platforms/platforms.json
に書き込まれます。
package.json
では以下のようにインストールされているプラットフォームが列挙されています(抜粋)。
"cordovaPlatforms": [
"ios",
"android"
]
platforms/platforms.json
には以下のように、プラットフォームとバージョンが記載されています。
{
"ios" : "3.8.0",
"android" : "4.0.0"
}
自分達の環境では、IonicプロジェクトをGitでバージョン管理しているのですが、platforms
以下はダウンロードされている依存ライブラリということで .gitignore してます。
インストールするためには
# ionic state restore
とすると、package.json
の中身を見てプラットフォームやプラグインをよしなにインストールしてくれます。
バージョンを指定してCordova iOS, Cordova Androidをインストール
2015.5.30時点で、 ionic platform add android
を実行しても、Cordova Androidのバージョンとして(リリースされたばかりの)4.0.2ではなく4.0.0がインストールされていまいました…。
そこで、4.0.2をインストールするべく、明示的にバージョンを指定してインストールします。
なお、すでにプラットフォームがインストールされている場合は、一度削除してから追加した方が無難です。
# ionic platform rm android
# ionic platform add android@4.0.2
これでめでたくCordova Android 4.0.2が入りました。package.json
は
"cordovaPlatforms": [
"ios",
{
"platform": "android",
"version": "4.0.2",
"locator": "android@4.0.2"
}
]
となります(抜粋)。
まとめ
用途 |
コマンド |
ionic, ionic-cli, etcのバージョン確認*2 |
ionic info |
Cordovaのバージョン確認 |
ionic platform list |
ionicのバージョンアップ |
ionic lib update |
Cordovaのバージョンアップ |
ionic platform rm {ios|android} (インストール済の場合のみ) ionic platform add {ios|android}@{version} |