apk ファイルと ipa ファイルのバージョンを雑に確認するスクリプトを書いたときのメモ。
やりたいこと
apk ファイルで知りたいのは android:versionName
と android:versionCode
の2つ。
このあたりの情報は aapt
コマンドを使って apk ファイルから取得できるので、必要な情報だけを取得と出力するように。
ipa ファイルで知りたいのは CFBundleShortVersionString
と CFBundleVersion
の2つ。
このあたりの情報は plutil
コマンドを使って ipa ファイルから取得できるので、必要な情報だけを取得と出力するように。
書いたスクリプト
こんなシェルスクリプトを書いて packver.sh /path/to/hoge.apk
みたいな感じで使っている。
#!/bin/bash if [ "$1" = "" ]; then echo "usage: $(basename $0) package-path" exit 1 fi PACKAGE=$1 if [ "$(echo ${PACKAGE} | grep '.*apk$')" != "" ]; then VERSION_NAME=$(aapt l -a ${PACKAGE} | grep android:versionName | sed -E -e 's/^.*Raw: "//' -e 's/".*$//') echo "Version: ${VERSION_NAME}" VERSION_CODE=$(aapt l -a ${PACKAGE} | grep android:versionCode | sed -E -e 's/^.*)//') echo "Version Code: $(printf '%d' ${VERSION_CODE})" exit 0 fi if [ "$(echo ${PACKAGE} | grep '.*ipa')" != "" ]; then PLIST=$(unzip -p ${PACKAGE} Payload/*.app/Info.plist | plutil -convert json -o - -- -) SHORT_VERSION=$(echo ${PLIST} | jq -r .CFBundleShortVersionString) echo "CFBundleShortVersionString: ${SHORT_VERSION}" BUNDLE_VERSION=$(echo ${PLIST} | jq -r .CFBundleVersion | sed -E -e 's/^.*\.//') echo "CFBundleVersion: ${BUNDLE_VERSION}" exit 0 fi echo "Invalid package: ${PACKAGE}" exit 1
依存しているツール
シェルスクリプトの中で aapt とか plutil とか使っているので以下のコマンドは事前にインストールしておく。 Android とか iOS 向けの開発をしているなら普通に入っていそうだが。