Help us understand the problem. What is going on with this article?

apk、ipaをアップロード前にチェック

More than 3 years have passed since last update.

はじめに

動作確認をする前後に、簡単に、機械的に処理できるチェックを行うと
がっかりすることが少なくなります。

バイナリをアップロード時の失敗要因

内部バージョン

一度提出したipaやapkファイルを取り下げるのは条件によりますが
難しいことが多く、次のバージョンにビルドしなおしての更新となります。

AndroidでのVersionCodeとiOSでのBuild(CFBundleShortVersionString)はバイナリ提出時、どちらも数値を増やさないとアップロードができません。

apkは提出前に"アップロードしますか?"ダイアログが表示され
VersionCodeとVersionNameが表示されます。
iOSは内部で設定したBuild(CFBundleShortVersionString)は申請時に表示されなかったかと思います。

keystore、manifest.xml、provisioing Fileの設定

提出できないこともありますが
必要な権限が付いていないと機能が使えない
permissionの記述に誤りがあることに気づかずダウンロードできる端末が0機種と管理コンソール上に表示されて困惑する
iOSの場合はバイナリアップロード時にアラートが飛んできても見逃すとPush通知ができないなど、危ないところは多数あります。

チェック環境

Mac OS X Yosemite
Xcode 設定済み
AndroidStudio 設定済み

Android

署名

所定のkeystoreで署名されているかを確認します。
debug用のkeystoreで署名されたapkはStoreに上がらない。

$ jarsigner -verify -verbose -certs hoge.apk

次のような署名が見つかるとガッカリ

X.509, CN=Android Debug, O=Android, C=US

設定

aaptコマンドを使うため、androidSDKが必要です。
pathが通ってない場合は下記を参考に直接指定しても使えます。

[androidSDKのパス]/build-tools/[version]/aapt

[androidSDKのパス]はEl Capitanだと

$ ~/Library/Android/sdk/build-tools/[version]/aapt dump badging app-release.apk

$ aapt dump badging app-debug.apk | grep Version

AndroidStudioで署名したapkだと次のように表示されました。

package: name='jp.hoge.sample' versionCode='1' versionName='1.0' platformBuildVersionName='5.1-1756733'
sdkVersion:'15'
targetSdkVersion:'22'

パイプ後のgrepを除けば全部表示されます。

iOS

provisioing File

Push通知などの有効化などはprovisioning Fileの設定を確認します。

$ unzip hogehoge.ipa

下記のhogehoge.appは実際のものと置き換えてください

$ security cms -D -i "Payload/hogehoge.app/embedded.mobileprovision"

provisioing Fileの内容そのままが表示されます。

設定

アプリのBundleIdentifierやバージョンなどはInfo.plistに記載されています。
ipaに含まれているplistはバイナリになっているため通常のエディタでは閲覧が難しくなっています。

Xcodeが入っている

Xcodeのエディタが使えます。openコマンドでplistをダブルクリックしたのと同じ状態で表示されます。

ざっくりipaからInfo.plistだけを取り出す方法は下記の通り

$ unzip -c hogehoge.ipa Payload/hogehoge.app/Info.plist >  Info.plist
$ open Info.plist 

Xcodeなし

plutilコマンドで変換してエディタで確認します。
変換した後のファイルであればWindowsなど他のOSでも確認が可能になります。

下記はxmlへの変換例です。

$ plutil -convert xml1 Payload/pchSample.app/Info.plist -o xml.text

-convert json にすることでjson形式でも出力ができます。

参考

http://docs.oracle.com/javase/jp/7/technotes/tools/windows/jarsigner.html
http://nosource.blog35.fc2.com/blog-entry-95.html

http://peroon.hatenablog.com/entry/2012/12/04/130026
http://stackoverflow.com/questions/3014369/php-how-to-get-version-from-android-apk-file

http://l-w-i.net/t/macosx/plist_002.txt

さいごに

チェック方法を知ることで個別に自動化が可能になります。
自動化のシステムのメンテが困難であったり、サービスのAPIが未対応の部分は手動で確認するところがまだまだ必要です。

nofrmm
会社の人への説明用、趣味用にまとめています。 メインはiOSまわりっぽい。Photoshop、サーバまわりと記事を散文してます。 人は自由に生きるべき。 いつか北海道の良い開発会社にご縁があれば移住したい
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした