Em um dos meus últimos artigos, eu expliquei como atualizar os aplicativos Cordova-Android fora da Google Play Store com AngularJS. Hoje é a vez dos aplicativos iOS.
Se você trabalha com aplicativos iOS in-house, precisa definir uma estratégia de distribuição (você não pode usar a App Store, na verdade). A Apple fornece documentação para fazê-lo. Basicamente, precisamos colocar o nosso arquivo ipa além do arquivo plist (gerado quando arquivamos o nosso pedido com o Xcode). Eu não vou explicar como fazer isso aqui. Como eu disse antes, é bem documentado. Aqui eu vou explicar como fazer o mesmo truque que o do artigo do Android, mas agora com o aplicativo iOS.
Com o iOS, para instalar o aplicativo, só precisamos fornecer o link do iTunes para o nosso aplicativo plist (algo assim: itms-services://?action=download-manifest&url=http://url.to.plist) e abri-lo com o plugin InAppBrowser.
Primeiro, vamos instalar o plugin InAppBrowser:
$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-inappbrowser.git
E agora nós só precisamos abrir a URL usando o plugin:
var iosPlistUrl = 'http://url.to.plist'; cordova.exec(null, null, "InAppBrowser", "open", [encodeURI("itms-services://?action=download-manifest&url=" + iosPlistUrl), "_system"]);
Podemos usar exatamente o mesmo AngularJS utilizado no artigo anterior para verificar a versão e a mesma verificação do lado do servidor.
Podemos, também, detectar a plataforma com o plugin do dispositivo e fazer uma coisa ou outra, dependendo do sistema que estivermos usando – Android ou iOS.
Aqui você pode ver um exemplo usando o framework Ionic. Esse exemplo usa um $ httpinterceptor para enviar o número da versão dentro de cada pedido e nós desencadeamos ‘wrong.version’ para o evento distribuidor quando ele detecta uma versão errada entre o cliente e o servidor.
angular.module('G', ['ionic']) .value('appConf', { version: 1, apiHost: 'http://localhost:8080' }) .config(function ($httpProvider, $urlRouterProvider, $stateProvider) { $httpProvider.interceptors.push('versionInterceptor'); $stateProvider .state('home', { url: '/home', templateUrl: 'partials/home.html', controller: 'HomeController' }) .state('upgrade', { url: '/upgrade', templateUrl: 'partials/upgrade.html', controller: 'UpgradeController' }) ; $urlRouterProvider.otherwise('/home'); }) .run(function ($ionicPlatform, $rootScope, $state) { $ionicPlatform.ready(function () { if (window.cordova && window.cordova.plugins.Keyboard) { cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); } if (window.StatusBar) { StatusBar.styleDefault(); } }); $rootScope.$on('wrong.version', function () { $state.go("upgrade"); }); }) .controller('HomeController', function ($scope, $http, appConf) { $scope.someAction = function () { $http.get(appConf.apiHost + "/hello", function (data) { alert(data); }); } }) .controller('UpgradeController', function ($scope) { $scope.upgrade = function () { cordova.exec(null, null, "InAppBrowser", "open", [encodeURI("itms-services://?action=download-manifest&url=https://path/to/plist.plist"), "_system"]); } }) .factory('versionInterceptor', function ($rootScope, appConf) { var versionInterceptor = { request: function (config) { config.url = config.url + '?_version=' + appConf.version; return config; }, responseError: function(response) { if (response.status == 410) { $rootScope.$emit('wrong.version'); } } }; return versionInterceptor; }) ;
***
Artigo traduzido pela Redação iMasters, com autorização do autor. Publicado originalmente em http://gonzalo123.com/2014/10/13/upgrading-cordova-ios-apps-outside-apple-store/