Предварительные требования
- Приложение 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);