Cordova向けビルド情報プラグイン(Cordovaでデバッグビルドかを判断するプラグイン)

[Apache Cordova](https://cordova.apache.org/)でビルド情報を扱うためのプラグインをVer2.0.1にして公開しました。
[cordova-plugin-buildinfo](https://www.npmjs.com/package/cordova-plugin-buildinfo)です。

# Ver2.0.1では何が変わった？

海外の方からPullRequestがあり、

- Windowsプラットフォームのサポート
- ビルド日時、インストール日時の取得

を追加しました。

# 何ができるの？

BuildInfo.packageName などでビルド時の情報を取得することができます。

# 何故作ったの？

バージョン情報やパッケージIDを取得するプラグインはいくつかあるのですが、 **デバッグビルド** なのか **リリースビルド** なのかを判断できるプラグインを見つけられなかったので作る事にしました。

```js
document.addEventListener('deviceready', onDeviceReady, false);

function onDeviceReady() {
    if (BuildInfo.debug) {
        alert('Debugだよ');
    } else {
        alert('Debugじゃないよ');
    }
}
```

ということができます。

# そもそも、デバッグビルドかどうかを知る必要があるの？

デバッグの時とリリースの時で接続先サーバを替えたり、デバッグの時だけ表示させたいメニューがあったり・・・
ビルドの状態がどちらなのかは結構重要だったりする。

あと、iOSに対してPUSHをしようとすると

|ビルド|サーバから接続するときに使う証明書|サーバの接続先|
|------|----------------------------------|--------------|
|リリースビルド|APNs Production iOS証明書|Production server|
|デバッグビルド|APNs Development iOS証明書|Development server|

と言う感じでPUSHを送る時にビルドによって分ける必要があったので、一々サーバ側の情報とかを切り替えて対応するのが面倒になってきた。
( 今は [APNs Provider API](https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/APNsProviderAPI.html) で HTTP/2 でのAPIが提供されていて、SandboxでもProductionでも、どちらでも1つの証明書でOKみたいだけど… まだ、[Binary Provider API](https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Appendixes/BinaryProviderAPI.html)なので、判別が必要。)

# 他の似たようなプラグインと違うところは？

1. 前述のデバッグビルドかどうか分かる。
1. 何かメソッドを呼び出さなくても BuildInfo オブジェクトのプロパティとして deviceready イベントが発生した時点で情報を持っている

案外、devicereadyイベントが発生した時点でプロパティとして情報を持っているのは良い感じだと思ってます。

他の似たようなプラグインでは、メソッドを呼び出してコールバック関数で受け取るっていう感じになっていたので、

```js
function onDeviceReady() {
  $('#version').text(BuildInfo.version);

  if (BuildInfo.debug) {
    // Debug時の処理
  }
}
```

とできるところが…

```js
var isDebug = false;

function onDeviceReady() {
  OtherPlugin.getVersion(function (ver) {
    $('#version').text(ver);
  });

  OtherPlugin.isDebug(function (debug) {
    if (debug) {
      // Debug時の処理(BuildInfoとは違うタイミングで発生)
      // 後で即座に参照できるように確保
      isDebug = debug;
    }
  });
}
```

と、コールバック関数になり非同期を上手く使わないといけないコードになってしまいます。

---

以下、README.mdの日本語版

# cordova-plugin-buildinfo

このプラグインは、BuildInfoをグローバルのオブジェクトとして定義します。

BuildInfoは deviceready イベントが発火した時点で有効になっています。

```js
document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
	console.log('BuildInfo.packageName    =' + BuildInfo.packageName);
	console.log('BuildInfo.basePackageName=' + BuildInfo.basePackageName);
	console.log('BuildInfo.displayName    =' + BuildInfo.displayName);
	console.log('BuildInfo.name           =' + BuildInfo.name);
	console.log('BuildInfo.version        =' + BuildInfo.version);
	console.log('BuildInfo.versionCode    =' + BuildInfo.versionCode);
	console.log('BuildInfo.debug          =' + BuildInfo.debug);
	console.log('BuildInfo.buildType      =' + BuildInfo.buildType);
	console.log('BuildInfo.flavor         =' + BuildInfo.flavor);
	console.log('BuildInfo.buildDate      =' + BuildInfo.buildDate);
	console.log('BuildInfo.installDate    =' + BuildInfo.installDate);
}
```

## インストール

```sh
cordova plugin add cordova-plugin-buildinfo
```

## サポートプラットフォーム

* Android
* iOS
* Windows

## プロパティ

* BuildInfo.packageName
* BuildInfo.displayName
* BuildInfo.name
* BuildInfo.version
* BuildInfo.versionCode
* BuildInfo.debug
* BuildInfo.buildType
* BuildInfo.flavor
* BuildInfo.buildDate
* BuildInfo.installDate
* BuildInfo.windows
    - logo
    - version

### BuildInfo.packageName

Application IDをpackageNameとして取得します。

|Platform|Value|Type|
|--------|-----|----|
|Android|Package Name|String|
|iOS|Bundle Identifier|String|
|Windows|Identity name|String|


### BuildInfo.basePackageName

Androidのみ。

BuildConfigクラスのpackageNameを取得します。

ビルドタイプやFlavorを利用すると、config.xmlのwidget要素で指定したidとは異なるパッケージ名を指定できるため、BuildConfigクラスが属するパッケージ名を取得するためのプロパティです。
(config.xmlのwidget要素にあるid属性と同じになるはずです)


|Platform|Value|Type|
|--------|-----|----|
|Android|BuildConfigクラスにあるパッケージ名|String|
|iOS|Bundle Identifier(BuildInfo.packageNameと同一)|String|
|Windows|Identity name(BuildInfo.packageNameと同一)|String|


### BuildInfo.displayName

アプリのホーム画面での表示名を取得します。

|Platform|Value|Type|
|--------|-----|----|
|Android|Application Label|String|
|iOS|CFBundleDisplayName|String|
|Windows|AppxManifest.xmlのVisualElements要素にあるDisplayName属性|String|

### BuildInfo.name

アプリの名前を取得します。
(iOSのみ。Androidでは、displayNameと同一になります)

|Platform|Value|Type|
|--------|-----|----|
|Android|Application Label(BuildInfo.displayNameと同一)|String|
|iOS|CFBundleName|String|
|Windows|Windows Store display name|String|


### BuildInfo.version

バージョンを取得します。

|Platform|Value|Type|
|--------|-----|----|
|Android|BuildConfig.VERSION_NAME|String|
|iOS|CFBundleShortVersionString|String|
|Windows|Major.Minor.Build 例) "1.2.3"|String|


### BuildInfo.versionCode

Version Codeを取得します。
AndroidではINT型で提供されます。

|Platform|Value|Type|
|--------|-----|----|
|Android|BuildConfig.VERSION_CODE|int|
|iOS|CFBundleVersion|string|
|Windows|Major.Minor.Build.Revision 例) "1.2.3.4"|String|


### BuildInfo.debug

デバッグビルドかどうかを取得します。

|Platform|Value|Type|
|--------|-----|----|
|Android|BuildConfig.DEBUG|Boolean
|iOS|defined "DEBUG" is true|Boolean|
|Windows|isDevelopmentMode is true|Boolean|


### BuildInfo.buildType

ビルドタイプを取得します。(AndroidおよびWindowsのみ)

|Platform|Value|Type|
|--------|-----|----|
|Android|BuildConfig.BUILD_TYPE|String|
|iOS|empty string|String|
|Windows|"release" or "debug"|String|


### BuildInfo.flavor

フレーバーを取得します。(Androidのみ)

|Platform|Value|Type|
|--------|-----|----|
|Android|BuildConfig.FLAVOR|String|
|iOS|empty string|String|
|Windows|empty string|String|


### BuildInfo.buildDate

Dateオブジェクトとしてビルド日時を取得します。

注意:

- Aandroid: BuildInfo.gradeファイルをAndroidプロジェクトに追加します。  
  BuildInfo.gradeファイルは、BuildConfigクラスに_BUILDINFO_TIMESTAMPというプロパティを追加します。
- Windows: buildinfo.resjsonファイルをWindowsプロジェクトのstringsフォルダに追加します。  
  また、buildinfo.resjsonファイルはCordovaApp.projitemsファイルに追記されたタスクよにりビルド実行時に書き換えられます。

|Platform|Value|Type|
|--------|-----|----|
|Android|BuildConfig.\_BUILDINFO\_TIMESTAMP value|Date|
|iOS|メインバンドルのexecutionPathから取得したInfo.plistの更新日時|Date|
|Windows|文字列リソースの "/buildinfo/Timestamp" 値を返します|Date|


### BuildInfo.installDate

Dateオブジェクトとしてインストール日時を返します
Get the install date and time in the Date object returns.

|Platform|Value|Type|
|--------|-----|----|
|Android|PackageInfoのfirstInstallTimeプロパティ|Date|
|iOS|documentディレクトリの作成日時|Date|
|Windows|Windows.ApplicatinoModel.Package.currentのinstalledDateプロパティ|Date|


### BuildInfo.windows

Windowsのみ。

Windowsの追加情報を格納しています。

|Platform|Value|Type|
|--------|-----|----|
|Android|(未定義)|undefined|
|iOS|(未定義)|undefined|
|Windows|Object|Object|

|Property name|Value|Type|
|-------------|-----|----|
|architecture|Windows.ApplicationModel.Package.current.id.architecture|integer|
|description|Windows.ApplicationModel.Package.current.description|String|
|displayName|Windows.ApplicationModel.Package.current.displayName|String|
|familyName|Windows.ApplicationModel.Package.current.id.familyName|String|
|fullName|Windows.ApplicationModel.Package.current.id.fullName|String|
|logo|Object|Object|
|publisher|Windows.ApplicationModel.Package.current.id.publisher|String|
|publisherId|Windows.ApplicationModel.Package.current.id.publisherId|String|
|publisherDisplayName|Windows.ApplicationModel.Package.current.publisherDisplayName|String|
|resourceId|Windows.ApplicationModel.Package.current.id.resourceId|String|
|version|Windows.ApplicationModel.Package.current.id.version|Object|

#### BuildInfo.windows.logo

|Property name|Value|Type|
|-------------|-----|----|
|absoluteCannonicalUri|Windows.ApplicationModel.Package.logo.absoluteCanonicalUri|String|
|absoluteUri|Windows.ApplicationModel.Package.logo.absoluteUri|String|
|displayIri|Windows.ApplicationModel.Package.logo.displayIri|String|
|displayUri|Windows.ApplicationModel.Package.logo.displayUri|String|
|path|Windows.ApplicationModel.Package.logo.path|String|
|rawUri|Windows.ApplicationModel.Package.logo.rawUri|String|

#### BuildInfo.windows.version

|Property name|Value|Type|
|-------------|-----|----|
|major|Windows.ApplicationModel.Package.current.id.version.major|integer|
|minor|Windows.ApplicationModel.Package.current.id.version.minor|integer|
|build|Windows.ApplicationModel.Package.current.id.version.build|integer|
|revision|Windows.ApplicationModel.Package.current.id.version.revision|integer|