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

1 min read読了の目安(約1500字

背景と目的

アプリのベータ配信を運用していると、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')
}