diff options
Diffstat (limited to 'plugins/uk.co.whiteoctober.cordova.appversion')
11 files changed, 394 insertions, 0 deletions
diff --git a/plugins/uk.co.whiteoctober.cordova.appversion/CHANGELOG.md b/plugins/uk.co.whiteoctober.cordova.appversion/CHANGELOG.md new file mode 100644 index 00000000..dcc0129a --- /dev/null +++ b/plugins/uk.co.whiteoctober.cordova.appversion/CHANGELOG.md @@ -0,0 +1,39 @@ +### 0.1.7 + +* Add getPackageName feature (thanks to @gprasanth) +* Add getAppName feature (thanks to @mirko77) +* Fix for windows 8 (thanks to @deliriousrhino) +* Fix version number in plugin.xml file + +### 0.1.6 + +* Split into two functions getAppVersion.getVersionNumber() and getAppVersion.getVersionCode() to return build number +* Fix a deprecation warning in iOS version + +### 0.1.5 + +* iOS: Return version number but log and fall back to build number if it is nil (thanks to [Eddy Verbruggen](https://github.com/EddyVerbruggen)) + +### 0.1.4 + +* Return version number, not build number on iOS (thanks to http://www.humancopy.net) +* Support for Windows phone 8 (thanks to Cristi Badila / Gediminas Šaltenis) +* Support for AngularJS as well as jQuery (thanks to Matias Singers, [Red Ape Solutions](http://www.redapesolutions.com/)) + +### 0.1.3 + +* Fixes to Android for Corova 3 and above (thanks to AxoInsanit) + +### 0.1.2 + +* Updated for Cordova 3 and above (thanks to Russell Keith-Magee [freakboy3742](https://github.com/freakboy3742) + +### 0.1.1 + +* Improved README +* Bug fix for non-jQuery use +* Tidy plugin.xml + +### 0.1.0 + +* First release diff --git a/plugins/uk.co.whiteoctober.cordova.appversion/LICENSE b/plugins/uk.co.whiteoctober.cordova.appversion/LICENSE new file mode 100644 index 00000000..484859fd --- /dev/null +++ b/plugins/uk.co.whiteoctober.cordova.appversion/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2013 White October + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/plugins/uk.co.whiteoctober.cordova.appversion/README.md b/plugins/uk.co.whiteoctober.cordova.appversion/README.md new file mode 100644 index 00000000..2afff928 --- /dev/null +++ b/plugins/uk.co.whiteoctober.cordova.appversion/README.md @@ -0,0 +1,71 @@ +# Cordova AppVersion plugin + +Reads the version of your app from the target build settings. + +## Installation + +### With cordova-cli + +If you are using [cordova-cli](https://github.com/apache/cordova-cli), install +with: + + cordova plugin add https://github.com/whiteoctober/cordova-plugin-app-version.git + +### With plugman + +With a plain [plugman](https://github.com/apache/cordova-plugman), you should be +able to install with something like: + + plugman --platform <ios|android> --project <directory> --plugin https://github.com/whiteoctober/cordova-plugin-app-version.git + +### Manually in iOS + +TODO: Write these instructions + +### Manually in Android + +TODO: Write these instructions + +## Use from Javascript + +If you are using jQuery or AngularJS, promise style is supported. Use something like: + + cordova.getAppVersion.getVersionNumber().then(function (version) { + $('.version').text(version); + }); + +If not, pass a callback function: + + cordova.getAppVersion.getVersionNumber(function (version) { + alert(version); + }); + +In addition to the version number you can also retrieve other details about your application: + +### getAppName + +Returns the name of the app. E.g. "My Awesome App" + +### getPackageName + +Returns the package name of the app - the reversed domain name app identifier like com.example.myawesomeapp + +### getVersionCode + +Returns the build identifier of the app + +### getVersionNumber + +Returns the version number of the app + +## Credits + +Written by [Robert (Jamie) Munro](http://twitter.com/rjmunro) at +[White October](http://whiteoctober.co.uk/) + +Various others have contributed fixes and new features. See the CHANGELOG.md for details. + +Original code based on the following Stack Overflow posts: + +* [iOS](http://stackoverflow.com/a/14713364/3408) +* [Android](http://stackoverflow.com/a/3637686/3408) diff --git a/plugins/uk.co.whiteoctober.cordova.appversion/VERSION b/plugins/uk.co.whiteoctober.cordova.appversion/VERSION new file mode 100644 index 00000000..11808190 --- /dev/null +++ b/plugins/uk.co.whiteoctober.cordova.appversion/VERSION @@ -0,0 +1 @@ +0.1.7 diff --git a/plugins/uk.co.whiteoctober.cordova.appversion/plugin.xml b/plugins/uk.co.whiteoctober.cordova.appversion/plugin.xml new file mode 100644 index 00000000..8ff4c5eb --- /dev/null +++ b/plugins/uk.co.whiteoctober.cordova.appversion/plugin.xml @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="UTF-8"?> +<plugin xmlns="http://www.phonegap.com/ns/plugins/1.0" + xmlns:android="http://schemas.android.com/apk/res/android" + id="uk.co.whiteoctober.cordova.appversion" + version="0.1.7"> + + <name>AppVersion</name> + <description> + This plugin will return the version of your App that you have set in + packaging it. I.e. it will always match the version in the app store. + </description> + <license>MIT</license> + + <engines> + <!-- + Cordova 2.8.0 is all I have tested on - it should work fine with earlier versions. + Please modify the below line, test, and submit a PR if it works for you. + --> + <engine name="cordova" version=">=3.0.0" /> + </engines> + + <js-module src="www/AppVersionPlugin.js"> + <clobbers target="cordova.getAppVersion" /> + </js-module> + + <!-- android --> + <platform name="android"> + <config-file target="res/xml/config.xml" parent="/*"> + <feature name="AppVersion"> + <param name="android-package" value="uk.co.whiteoctober.cordova.AppVersion"/> + </feature> + </config-file> + <source-file src="src/android/AppVersion.java" target-dir="src/uk/co/whiteoctober/cordova" /> + </platform> + + <!-- blackberry10 --> + <platform name="blackberry10"> + <dependency id="com.blackberry.app" /> + + <config-file target="www/config.xml" parent="/widget"> + <feature name="AppVersion" value="AppVersion" /> + </config-file> + <js-module src="www/blackberry10/AppVersionProxy.js" name="AppVersionProxy.js" > + <runs /> + </js-module> + </platform> + + <!-- ios --> + <platform name="ios"> + <plugins-plist key="AppVersion" string="AppVersion" /> + + <config-file target="config.xml" parent="/*"> + <feature name="AppVersion"> + <param name="ios-package" value="AppVersion" /> + </feature> + </config-file> + + <header-file src="src/ios/AppVersion.h" /> + <source-file src="src/ios/AppVersion.m" /> + </platform> + + <!-- windows8 --> + <platform name="windows8"> + <js-module src="src/windows8/AppVersionProxy.js" name="AppVersionProxy"> + <merges target=""/> + </js-module> + </platform> + + <!-- wp8 --> + <platform name="wp8"> + <config-file target="config.xml" parent="/*"> + <feature name="AppVersion"> + <param name="wp-package" value="AppVersion"/> + </feature> + </config-file> + + <source-file src="src/wp8/AppVersion.cs" /> + </platform> +</plugin> diff --git a/plugins/uk.co.whiteoctober.cordova.appversion/src/android/AppVersion.java b/plugins/uk.co.whiteoctober.cordova.appversion/src/android/AppVersion.java new file mode 100644 index 00000000..204ed7e8 --- /dev/null +++ b/plugins/uk.co.whiteoctober.cordova.appversion/src/android/AppVersion.java @@ -0,0 +1,45 @@ +package uk.co.whiteoctober.cordova; + +import org.apache.cordova.CordovaPlugin; +import org.apache.cordova.CallbackContext; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.pm.PackageManager; + +public class AppVersion extends CordovaPlugin { + @Override + public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { + + try { + if (action.equals("getAppName")) { + PackageManager packageManager = this.cordova.getActivity().getPackageManager(); + ApplicationInfo app = packageManager.getApplicationInfo(this.cordova.getActivity().getPackageName(), 0); + callbackContext.success((String)packageManager.getApplicationLabel(app)); + return true; + } + if (action.equals("getPackageName")) { + callbackContext.success(this.cordova.getActivity().getPackageName()); + return true; + } + if (action.equals("getVersionNumber")) { + PackageManager packageManager = this.cordova.getActivity().getPackageManager(); + callbackContext.success(packageManager.getPackageInfo(this.cordova.getActivity().getPackageName(), 0).versionName); + return true; + } + if (action.equals("getVersionCode")) { + PackageManager packageManager = this.cordova.getActivity().getPackageManager(); + callbackContext.success(packageManager.getPackageInfo(this.cordova.getActivity().getPackageName(), 0).versionCode); + return true; + } + return false; + } catch (NameNotFoundException e) { + callbackContext.success("N/A"); + return true; + } + } + +} diff --git a/plugins/uk.co.whiteoctober.cordova.appversion/src/ios/AppVersion.h b/plugins/uk.co.whiteoctober.cordova.appversion/src/ios/AppVersion.h new file mode 100644 index 00000000..87c0330b --- /dev/null +++ b/plugins/uk.co.whiteoctober.cordova.appversion/src/ios/AppVersion.h @@ -0,0 +1,13 @@ +#import <Cordova/CDVPlugin.h> + +@interface AppVersion : CDVPlugin + +- (void)getAppName:(CDVInvokedUrlCommand*)command; + +- (void)getPackageName:(CDVInvokedUrlCommand*)command; + +- (void)getVersionNumber:(CDVInvokedUrlCommand*)command; + +- (void)getVersionCode:(CDVInvokedUrlCommand*)command; + +@end diff --git a/plugins/uk.co.whiteoctober.cordova.appversion/src/ios/AppVersion.m b/plugins/uk.co.whiteoctober.cordova.appversion/src/ios/AppVersion.m new file mode 100644 index 00000000..a73c78f9 --- /dev/null +++ b/plugins/uk.co.whiteoctober.cordova.appversion/src/ios/AppVersion.m @@ -0,0 +1,47 @@ +#import "AppVersion.h" +#import <Cordova/CDVPluginResult.h> + +@implementation AppVersion + +- (void)getAppName : (CDVInvokedUrlCommand *)command +{ + NSString * callbackId = command.callbackId; + NSString * version =[[[NSBundle mainBundle]infoDictionary]objectForKey :@"CFBundleDisplayName"]; + CDVPluginResult * pluginResult =[CDVPluginResult resultWithStatus : CDVCommandStatus_OK messageAsString : version]; + [self.commandDelegate sendPluginResult : pluginResult callbackId : callbackId]; +} + +- (void)getPackageName:(CDVInvokedUrlCommand*)command +{ + NSString* callbackId = command.callbackId; + NSString* packageName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"]; + CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:packageName]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:callbackId]; +} + +- (void)getVersionNumber:(CDVInvokedUrlCommand*)command +{ + NSString* callbackId = command.callbackId; + NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; + if (version == nil) { + NSLog(@"CFBundleShortVersionString was nil, attempting CFBundleVersion"); + version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; + if (version == nil) { + NSLog(@"CFBundleVersion was also nil, giving up"); + // not calling error callback here to maintain backward compatibility + } + } + + CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:version]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:callbackId]; +} + +- (void)getVersionCode:(CDVInvokedUrlCommand*)command +{ + NSString* callbackId = command.callbackId; + NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; + CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:version]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:callbackId]; +} + +@end diff --git a/plugins/uk.co.whiteoctober.cordova.appversion/src/windows8/AppVersionProxy.js b/plugins/uk.co.whiteoctober.cordova.appversion/src/windows8/AppVersionProxy.js new file mode 100644 index 00000000..3b4c50ee --- /dev/null +++ b/plugins/uk.co.whiteoctober.cordova.appversion/src/windows8/AppVersionProxy.js @@ -0,0 +1,7 @@ +AppVersionProxy = { + getVersionNumber: function (successCallback, failCallback, args) { + var version = Windows.ApplicationModel.Package.current.id.version; + successCallback([version.major, version.minor, version.build, version.revision].join('.')); + } +}; +cordova.commandProxy.add("AppVersion", AppVersionProxy); diff --git a/plugins/uk.co.whiteoctober.cordova.appversion/src/wp8/AppVersion.cs b/plugins/uk.co.whiteoctober.cordova.appversion/src/wp8/AppVersion.cs new file mode 100644 index 00000000..2f3d2c95 --- /dev/null +++ b/plugins/uk.co.whiteoctober.cordova.appversion/src/wp8/AppVersion.cs @@ -0,0 +1,24 @@ +using System; +using System.Windows; +using System.Windows.Navigation; +using Microsoft.Phone.Controls; +using WPCordovaClassLib.Cordova; +using WPCordovaClassLib.Cordova.Commands; +using WPCordovaClassLib.Cordova.JSON; +using Windows.ApplicationModel; +using System.Xml.Linq; + +namespace Cordova.Extension.Commands +{ + public class AppVersion : BaseCommand + { + public void getVersionNumber(string empty) + { + //Windows.ApplicationModel.Package.current.id.version is NOT working in Windows Phone 8 + //Workaround based on http://stackoverflow.com/questions/14371275/how-can-i-get-my-windows-store-apps-title-and-version-info + String version= XDocument.Load("WMAppManifest.xml").Root.Element("App").Attribute("Version").Value; + + this.DispatchCommandResult(new PluginResult(PluginResult.Status.OK, version)); + } + } +} diff --git a/plugins/uk.co.whiteoctober.cordova.appversion/www/AppVersionPlugin.js b/plugins/uk.co.whiteoctober.cordova.appversion/www/AppVersionPlugin.js new file mode 100644 index 00000000..3e395260 --- /dev/null +++ b/plugins/uk.co.whiteoctober.cordova.appversion/www/AppVersionPlugin.js @@ -0,0 +1,48 @@ +/*jslint indent: 2 */ +/*global window, jQuery, angular, cordova */ +"use strict"; + +// Returns a jQuery or AngularJS deferred object, or pass a success and fail callbacks if you don't want to use jQuery or AngularJS +var getPromisedCordovaExec = function (command, success, fail) { + var toReturn, deferred, injector, $q; + if (success === undefined) { + if (window.jQuery) { + deferred = jQuery.Deferred(); + toReturn = deferred; + } else if (window.angular) { + injector = angular.injector(["ng"]); + $q = injector.get("$q"); + deferred = $q.defer(); + toReturn = deferred.promise; + } else { + return console.error('AppVersion either needs a success callback, or jQuery/AngularJS defined for using promises'); + } + success = deferred.resolve; + fail = deferred.reject; + } + // 5th param is NOT optional. must be at least empty array + cordova.exec(success, fail, "AppVersion", command, []); + return toReturn; +}; + +var getAppVersion = function (success, fail) { + return getPromisedCordovaExec('getVersionNumber', success, fail); +}; + +getAppVersion.getAppName = function (success, fail) { + return getPromisedCordovaExec('getAppName', success, fail); +}; + +getAppVersion.getPackageName = function (success, fail) { + return getPromisedCordovaExec('getPackageName', success, fail); +}; + +getAppVersion.getVersionNumber = function (success, fail) { + return getPromisedCordovaExec('getVersionNumber', success, fail); +}; + +getAppVersion.getVersionCode = function (success, fail) { + return getPromisedCordovaExec('getVersionCode', success, fail); +}; + +module.exports = getAppVersion; |
