2014-11-17 2 views
13

Мы используем Cordova вместе с AngularJS для приложений iOS и Android.Cordova/Phonegase: Live update codebase

Один большой недостаток iOS - это длительное время обзора от Apple. В PlayStore Google ваше приложение доступно почти сразу или в течение нескольких часов. Но Apple занимает много времени, чтобы просмотреть ваше приложение, даже если это небольшое изменение.

Так что я думал, если есть способ поддержать какое-то живое обновление.
Это означает, что я мог бы предоставить ZIP-файл или что-то еще с новой кодовой базой, мое приложение проверяет наличие обновлений и затем устанавливает новые файлы.

Я что-то читал от appmobi, но есть ли какие-либо решения с открытым исходным кодом?

+0

Возможно, вам понадобится минута или две, чтобы пересмотреть лицензионное соглашение с Программой разработчиков для iOS. То, что вы предлагаете, - это не новая идея, но этого не происходит, потому что это нарушение вашего соглашения с Apple. – sherb

+1

Но я знаю некоторые игры, которые регулярно обновляют обновления. Нарушают ли они это соглашение? – 23tux

+0

* Содержимое * обновления разрешены, но исполняемого кода нет. В некоторых случаях разница между кодом и контентом, который, возможно, размывается. Я не юрист, но, как разработчик, мой единственный совет - действовать осторожно. Удачи! – sherb

ответ

4

Я не знаю каких-либо готовых решений для этого, но это должно быть достаточно просто, чтобы запрограммировать что-то подобное по своему усмотрению. Вот некоторые моменты, чтобы вы начали и рассмотреть:

  • Если вы хотите распространять обновления с помощью молнии, вам нужно Натив плагин, который обрабатывает экстракцию
  • Вы не могли бы быть в состоянии перезаписать файлы в местоположение вашего приложения по умолчанию (в зависимости от ОС). Таким образом, все файлы, которые вы хотите обновить в будущем, должны находиться в папке, в которой ваше приложение имеет доступ для чтения/записи (iOS: например, папка Library или Documents).
  • Теперь вам просто нужно скачать zip-пакет, распаковать zip в выбранный вами каталог и перезагрузить/перезагрузить приложение.
  • вы не сможете обновлять собственные плагины!
  • Apple, вероятно, не нравится, что, так как вы можете изменить все приложения без прохождения процесс их обзор
+0

Да, это как-то так же, как и я сам. К сожалению, пока нет решений с открытым исходным кодом. – 23tux

+1

На самом деле у Apple все в порядке: https://www.meteor.com/blog/2014/10/02/Apple-hot-code-push-mobile Пока вы не «меняете основную цель приложения ». – Rick

1

Ну, Adobe предлагает именно эту услугу в их PhoneGap Build Service. Это называется Hydration.

Пример показывает его использование на платформах Android и iOS, поэтому я думаю, они сделали его совместимым с лицензионным соглашением программы iOS Dev.

Если вы используете Кордову, вам, вероятно, придется переключиться на CLG Phonegap, если вы хотите использовать свои облачные сервисы, которые в основном такие же, как у Кордовы, с некоторыми дополнительными командами для загрузки в их облако и т. Д.

Я думаю, что есть плагин, такой как Splashscreen, который также имеет некоторые незначительные изменения (с использованием <gap> для параметров в config.xml вместо <preference>). Опять же, если Hydration решит проблему для вас, изменения будут незначительными, и вы получите действительно приятную функцию.

+0

Прохладный, я не знал, что они предлагают такую ​​услугу. Но, как ни крути, я бы предпочел решение с открытым исходным кодом (которого здесь еще нет)) – 23tux

+2

да ... Итак, если вы, наконец, внедрите себе решение ... убедитесь, что он с открытым исходным кодом; -) – jrub

0

Я думаю, что такого решения нет, но вы можете сделать это программным способом. Вы можете обновить свое приложение cardova, извлекая файлы с сервера и обновляя его.

2

Я делаю это внутри моего приложения cordova и не имел никаких проблем с обзором магазина приложений ios.

Я использую функцию ajax Jquery для загрузки как javascript, так и файла css с сервера, который я могу изменить без утверждения магазина приложения, а затем я могу вставить эти сценарии после их загрузки при запуске приложения.

Я попытался использовать файл cordova File api, и тогда я сохранил файл локально, но автономная поддержка не важна для меня в данный момент, и ajax JQuery намного проще.

Вот код jquery, который я использую. У меня есть идентификатор пакета, который я использую, чтобы определить, доступен ли новый файл javascript, иначе jQuery ajax кэширует предыдущие запросы, чтобы ускорить время загрузки.

Это решение позволяет вам подмножество вашего кода быть динамическим. У меня все еще есть базовый набор кода, который поставляется вместе с приложением, а также собственный плагин js и собственный код, который нужно будет пройти через магазин приложений. Но это, по крайней мере, позволяет мне исправлять ошибки, не проходя через магазин приложений.

В противном случае, я хотел бы посмотреть на решение, как это: http://docs.build.phonegap.com/en_US/tools_hydration.md.html

function insertScript(version) { 
    var scriptUrl = ""; 
    try { 
     // get javascript file... 
     scriptUrl = mobileWebServiceUrl + "/DynamicContent/Bundles/Scripts/dynamic"; 

     scriptUrl += "_" + bundleVersion.replace(/\./g, "_") + ".js?v=" + version; 

     console.log("downloading script: " + scriptUrl); 

     // Allow user to set any option except for dataType, cache, and url 
     options = { 
      dataType: "script", 
      cache: true, 
      url: scriptUrl 
     }; 

     // Use $.ajax() since it is more flexible than $.getScript 
     // Return the jqXHR object so we can chain callbacks 
     return $.ajax(options).success(function(response) { 
      console.log("insertScript success"); 
      dynamicContentScriptLoaded = true; 
     }); 


    } catch (e) { 
     //console.error(e); 
     ReportError("problem downloading javscript: " + scriptUrl); 
    } 

} 


function insertCSS(version) { 
    try { 
     // get css file... 
     var cssUrl = mobileWebServiceUrl + "/DynamicContent/Bundles/Css/dynamic"; 

     cssUrl += "_" + bundleVersion.replace(/\./g, "_") + ".css?v=" + version; 

     console.log("downloading dynamic css: " + cssUrl); 

     $.ajax(cssUrl) 
      .success(function (response) { 
       console.log("successfully downloaded dynamic css"); 
       var script = document.createElement("style"); 
       script.type = "text/css"; 
       script.innerHTML = response; 

       $('head link').each(function() { 
        if ($(this).attr('href').search('MobileFrame') > -1) { 
         $("#MobileFrameCSS").before(script); 
        } 
       }); 

       dynamicContentCssLoaded = true; 

       // TODO: implement caching at a later date 
       //if (isPhoneGap()) 
       // saveFile("DynamicStyles", response); 

      }); 
    } catch (e) { 
     ReportError("problem downloading css"); 
    } 

} 
+0

В случае, если вы обновите свой Css, как вы справляетесь с новыми связанными ресурсами, такими как изображения или шрифты внутри css? Обновляете приложение или связываете ли вы ресурсы с абсолютным путем к веб-серверу? – systempuntoout

+1

Я использую sass для компиляции абсолютного пути веб-сервера в файл css. – TWilly

1

Я думаю, что лучший выбор должен был бы не попробовать сделать это с помощью PhoneGap, а определить динамические части и реализовать их в Javascript.

Да, я имею в виду, вы должны действительно использовать JavaScript себя без PhoneGap, например, через JavaScriptBridge: https://github.com/kishikawakatsumi/JavaScriptBridge

Это может потребовать больше работы, первоначально перепроектировать ваше приложение в «статические» части (ваше приложение PhoneGap) и динамическая часть (динамические созданные представления через JavascriptBirdge) и взаимодействуют между ними без видимости. Но, на мой взгляд, это, в конечном счете, лучший дизайн программного обеспечения.

Однако, убедитесь, что вы все еще встречаетесь с требованиями App Store App.

1

Рамка Meteor обеспечивает именно эту функциональность в сочетании с PhoneGap. Это даже санкционировано Apple в последнем соглашении разработчиков. Вот некоторые technical details, а затем some about Apple's view on it.

6

cordova-app-loader является простой в использовании плагин для обновления приложения файлов через 3 простых шага:

  1. check() для нового манифеста
  2. download() файлов
  3. update() ваше приложение!

Он поддерживает Android и IOS

+1

Прохладный, это, кажется, идеальное решение. Я попробую на следующей неделе попробовать – 23tux

0

Заканчивать CodePush from Microsoft. Работает с Кордовой и Реальным Родом.

Появляется, чтобы быть очень похожим на функцию «живого обновления» от Ionic Cloud.