全力で怠けたい

怠けるために全力を尽くしたいブログ。

apk ファイルと ipa ファイルのバージョンを雑に確認するシェルスクリプトを書いた。

apk ファイルと ipa ファイルのバージョンを雑に確認するスクリプトを書いたときのメモ。

やりたいこと

apk ファイルで知りたいのは android:versionNameandroid:versionCode の2つ。 このあたりの情報は aapt コマンドを使って apk ファイルから取得できるので、必要な情報だけを取得と出力するように。

ipa ファイルで知りたいのは CFBundleShortVersionStringCFBundleVersion の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 向けの開発をしているなら普通に入っていそうだが。

apk ファイルと ipa ファイルのバージョンを雑に確認するスクリプトを書いたときことは以上。