📅

iOS/Android のバージョンに環境と日付を加える

2021/04/06に公開

背景と目的

アプリのベータ配信を運用していると、QAフェーズにおけるバグ報告などで開発チームとやり取りを行う際に「どのバージョンのアプリを使っているか?」が明確に特定できていないと齟齬が起きたりします。

そこでバージョンを明確に特定するために環境と日付を入れると良いでしょう。

iOS の場合

Run Script Phase に以下を加えます。これは Configuration に IntegrationStaging を増やしている場合の例です。

if [ "${CONFIGURATION}" != "Release" ]; then
FORMAT_DATE=$(date "+%Y-%m-%d-%H-%M")
if [ "${CONFIGURATION}" == "Development" ]; then
ENV="dev"
elif [ "${CONFIGURATION}" == "Integration" ]; then
ENV="itg"
elif [ "${CONFIGURATION}" == "Staging" ]; then
ENV="stg"
else
ENV="dev"
fi
export VERSION_SUFFIX="-${ENV}-${FORMAT_DATE}"
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${MARKETING_VERSION}${VERSION_SUFFIX}" "${TEMP_DIR}/Preprocessed-Info.plist"
fi

一時的に出力される Preprocessed-Info.plist を変更しているので、元の CFBundleShortVersionString には影響はありません。Preprocessed-Info.plist えを利用するためには Build Settings の Preprocess Info.plist FileYes に変更する必要があります。

また Run Script の InputFiles にも加えておく必要があります。

Androidの場合

Android の場合は、iOSと比較するともっとシンプルに実現できます。build.gradle に加えるだけです。以下では日付文字列を整形する処理を関数にしています。

android {
  buildTypes {
    debug {
      versionNameSuffix "-dev" + "-" + getDate()
    }
    integration {
      versionNameSuffix "-itg" + "-" + getDate()
    }
    staging {
      versionNameSuffix "-stg" + "-" + getDate()
    }
  }
}

static def getDate() {
  return new Date().format('yyyy-MM-dd-HH-mm')
}

Discussion