更新 React Native App 版本號

原文:Versioning React Native apps
地址:https://medium.com/@andr3wjack/versioning-react-native-apps-407469707661
複製代碼

React Naitve 整合了 JavaScript、Android 和 iOS。隨之而來的是三種不一樣的構建工具:npm、Xcode 和 Gradle。當咱們要發佈 App 並增長版本號是會發生什麼?咱們必需要更新 package.json、build.gradle 和 info.plist。react

經過一條命令更新版本號?

若是咱們能夠作到只運行下面的命令就能實現那就最好了:android

npm version [major|minor|patch]
複製代碼

嘗試一下

做爲一名Android開發人員,我知道Gradle能夠作不少事情,因此我從 Android 開始。ios

build.gradle 文件中,我須要讀取 package.json 文件,這在 Gradle 中很是容易作到。git

import groovy.json.JsonSlurper
def getNpmVersion() {
    def inputFile = new File("../package.json")
    def packageJson = new JsonSlurper().parseText(inputFile.text)
    return packageJson["version"]
}
複製代碼

而後我能夠將它拆分爲單獨的字符串,以便在構建腳本中使用它。github

def (major, minor, patch) = getNpmVersion().tokenize('.')
複製代碼

如何使用 package.json 版本計算 versioncode 和 versionname 取決於您本身。您能夠在 github 上看到一個完整的例子。npm

android/build.gradle

def getNpmVersionArray() { // major [0], minor [1], patch [2]
    def (major, minor, patch) = getNpmVersion().tokenize('.')
    return [Integer.parseInt(major), Integer.parseInt(minor), Integer.parseInt(patch)] as int[]
}
subprojects {
    ext {
        def npmVersion = getNpmVersionArray()
        versionMajor = npmVersion[0]
        versionMinor = npmVersion[1]
        versionPatch = npmVersion[2]
    }
}
複製代碼

android/app/build.gradle

android {
    ...

    defaultConfig {
        ...
        versionCode versionMajor * 10000 + versionMinor * 100 + versionPatch
        versionName "${versionMajor}.${versionMinor}.${versionPatch}"
    }
}
複製代碼

iOS

Xcode 沒有 Gradle 這種方便的功能,因此我打算使用 bash。json

#!/usr/bin/env bash -e

PROJECT_DIR="ios/ReactNativeApp"
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))


# Update plist with new values
/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.plistreact-native

整合到一塊兒

默認狀況下,npm version會更新版本號,若是是在 git 倉庫中,會建立一個新版本 commit 並打上標籤。同時,npm version 提供了三個掛載點,用於執行用戶自定義的操做:perversion、version 和 postversion。bash

要在增長版本時執行version-ios.sh腳本,能夠添加如下內容:app

{
    "scripts": {
    "version": "./version-ios.sh"
}
複製代碼

成功

有了它,咱們如今就能夠增長版本,而無需再進行三次更新,只用執行 npm version [major|minor|patch]

使用 npm version 的鉤子,咱們能夠作更多的事情!咱們能夠更新CHANGELOG.md,建立發佈分支,而後將分支和標籤推送到遠程。

源碼:github.com/AndrewJack/…

相關文章
相關標籤/搜索