Предварительные требования

  • Приложение Alloy
  • CHANGELOG.md файл
  • пакет changelog-parser npm
  • файл сплава.jmk

Что такое CHANGELOG?

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

** Примечание. ** CHANGELOG - это не то же самое, что журнал фиксации git. ЗАПИСЬ ИЗМЕНЕНИЙ должен содержать только информацию, которую конечный пользователь должен знать об изменениях в программном обеспечении.

Преобразовать CHANGELOG в Markdown

Appcelerator поставляется с файлом CHANGELOG. txt. Измените расширение файла на .md, чтобы мы могли использовать все функции Markdown.

Преобразование содержимого CHANGELOG из обычного текста в Markdown

Чтобы программно получить доступ к содержимому, нам нужно принять стандарт. Один из наиболее широко применяемых стандартов - вести журнал изменений. Посетите эту ссылку для получения более подробной информации, но вот приблизительный план того, как может выглядеть запись о выпуске.

## 4.2.9–2019–02–13
### Added
- Added that great feature you’ve been waiting for
### Fixed
- Fixed that annoying bug everyone hated

Добавьте пакет npm ‘changelog-parser’ (мы будем использовать его для экспорта нашего CHANGELOG в объект JSON во время компиляции)

  • Просто запустите это, чтобы установить версию для командной строки
npm install -g changelog-parser
  • Откройте файл: ** / app / сплава.jmk ** (если он не существует, просто создайте его) и скопируйте / вставьте его в этот файл.
task(“pre:load”, function(event, logger) {
   const execSync = require(‘child_process’).execSync;
   const fs = require(‘fs’);
   const path = require(‘path’);
   //ensure directory exists
   const dir = path.join(process.cwd(), ‘app’, ‘lib’);
      if (!fs.existsSync(dir)) {
         logger.info(`Creating ${dir}`);
         fs.mkdirSync(dir);
      }
   //get ChangeLog and write to file
      const changelogObject = execSync(“changelog-parser ./CHANGELOG.md”).toString();
      const myFile = dir + ‘/changelog.json’;
      fs.writeFileSync(myFile,changelogObject, ‘utf8’);
});

Теперь, когда мы компилируем наше приложение Alloy, перед компиляцией чего-либо еще запускается задача «pre: load», проверяет, существует ли каталог / app / lib, а затем анализирует файл `CHANGELOG.md` на объект JSON, сохраненный в новый файл, `changelog.json`.

Для справки, вот как выглядит вышеприведенная версия CHANGELOG после преобразования в объект JSON:

{
   "versions": [{
      "version": "4.2.9",
      "title": "4.2.9 - 2019-02-13",
      "date": "2019-02-13",
      "body": "### Added\n- Added that great feature you've been waiting for \n### Fixed\n- Fixed that annoying bug everyone hated",
      "parsed": {
         "_": [
            "Added that great feature you've been waiting for",
            "Fixed that annoying bug everyone hated"
         ],
         "Added": [
            "Added that great feature you've been waiting for"
         ],
         "Fixed": [
            "Fixed that annoying bug everyone hated"
         ]
      }
   }]
}

Это дает вам «версии» массива верхнего уровня с первой записью [0], которая является самой последней версией, а каждый элемент в массиве включает:

  • body - это упорядоченный список функций в формате markdwoon.
  • parsed - это набор функций в виде обычного текста.
  • «Added» - это набор «добавленных» функций.
  • «Fixed» - это набор «фиксированных» функций.

Доступ к файлу changelog.json в мобильном приложении

Это действительно просто. Мы просто получаем файл в каталоге ресурсов, читаем его, а затем анализируем как JSON.

var changelog = JSON.parse(Ti.Filesystem.getFile(Ti.Filesystem.resourcesDirectory,'changelog.json').read());

Использование в вашем приложении

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

  • Определите, что установлена ​​новая версия
  • При запуске вы можете захотеть установить текущую версию, используя
Ti.App.version
  • Затем сравните с уже сохраненным значением последней версии, которая была установлена ​​с помощью
Ti.App.Properties.getString('lastAppVersionUsed');
  • В случае новой версии укажите модальное окно с соответствующим элементом массива версий в переменной журнала изменений
Ti.API.info("New Version:\nVersion: " + changelog.versions[0].version + "\nReleased: " + changelog.versions[0].date);

Вывод:

Новая версия:

Версия: 4.2.9

Релиз: 2019–02–13

  • Что бы вы ни делали, не забывайте обновлять сохраненное значение, чтобы при следующем запуске пользователь больше не получал запроса
Ti.App.Properties.setString('lastAppVersionUsed', Ti.App.version);

Вы знаете, что в Markdown есть структурированный CHANGELOG, который не только в «удобном» формате для репозиториев git, но также доступен как объект JSON в вашем приложении.