React Native версия приложения из pckage.json

Общие настройки

ДЛя начала нужно убедиться что в package.json указана версия, например

{
"name": "app",
"version": "2.0.4",
"private": true,
"dependencies": {
"react": "16.6.3",
"react-native": "0.57.8"
},
}

Android

Android версия собирается с помощью gradle. Для автоматического присвоения номера версии, ужно добавить настройки в файл android/app/build.gradle.

В начале файла дописываем:


import groovy.json.JsonSlurper
def getNpmVersion() {
def inputFile = new File("../package.json")
def packageJson = new JsonSlurper().parseText(inputFile.text)
return packageJson["version"]
}
/* calculated from git commits to give sequential integers */
def getGitVersion() {
def process = "git rev-list master --first-parent --count".execute()
return process.text.toInteger()
}

def userVer = getNpmVersion()
def googleVer = getGitVersion()

Затем ищем секцию defaulConfig, в которой прописаны номера версий и меняем на:

 defaultConfig {
...
// versionCode 18
// versionName "2.0.3"
versionCode googleVer
versionName userVer
...
}

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

IOS

В Xcode нет gradle сборщика, но есть возможность выполнить скрипт, который бы выполнялся перед сборкой проекта.

Создадим скрипт


PROJECT_DIR="ios/app"
INFOPLIST_FILE="Info.plist"
INFOPLIST_DIR="${PROJECT_DIR}/${INFOPLIST_FILE}"

PACKAGE_VERSION=$(cat package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[\",]//g' | tr -d '[[:space:]]')

BUILD_NUMBER=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${INFOPLIST_DIR}")
BUILD_NUMBER=$(($BUILD_NUMBER + 1))

/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${PACKAGE_VERSION#*v}" "${INFOPLIST_DIR}"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "${INFOPLIST_DIR}"

Данный скрипт читает строку с номером версии из package.json, затем с помощью утилиты PlistBuddy записывает в файл Info.plist. Теперь нужно в xcode перейти на вкладку build phases нажать на кнопку добавления, скопировать скрипт и поставить перед фазой "Compile Sources".