iOS の実機にアプリをコマンドラインからインストールする

iOS の実機にアプリをインストールする時、Organizer(Xcode) を使うのが普通です。 ですが、自動化等しようとすると、iOS 実機へのコマンドラインからのインストールが必須です。

そこで、fruitstrap というツールを使います。 https://github.com/ghughes/fruitstrap

※"This project is no longer maintained." となっているので、注意が必要です。今現在使用出来る事を確認できています。ただ、他に方法がないので、今はこれしかないです。

(2013/07/16: 追記 他のツールを教えて頂きました。下に追記してあります。)

ただ、日本語環境だと途中で失敗するので、fork して直しました。 https://github.com/seamountain/fruitstrap

修正点

言語設定によって発生するエラー

  • CFStringGetSystemEncoding() を kCFStringEncodingMacRoman に書き換えました

システムの言語設定を日本語にしていると、上記リンクの fruitstrap だと途中でエラーになります。(英語にしていると問題ありません)

以下のブログでも述べられています。 http://www.zero4racer.com/blog/709

失敗した時にエラーコードしか表示されない

  • 自分で行なっていた時の出やすいエラーコードの時は、エラーメッセージを出すようにしました。

アプリの codesign がうまくいっていない状態で実行しても途中で落ちますが、エラーコードのみ表示されるのでよくわかりませんでした。

以下のサイトの "Known Error Codes" の章が役に立ちます。 http://theiphonewiki.com/wiki/MobileDevice_Library

この中に、今回はまったエラーコードがなかったので、エラーメッセージとして追加しました。

(そもそもエラーコードだけではなく何のエラーなのか出ると良いのですが…)

使い方

fruitstrap は以下のコマンドでビルドしたあとに、

make fruitstrap

このコマンドで実行出来ます。

 fruitstrap -i <device_id> -b bundle.app

device_id は Organizer を使って、Device Identifier を調べます。bundle.app の部分は、インストールしたい .app を指定します。

生成された fruitstrap は適宜、~/local/bin に置くと良いと思います。

2013/07/16: 追記

mobiledevice

https://github.com/imkira/mobiledevice

このツールを教えてもらいました! これが使っている技術は、fruitstrap と一緒で、 Apple の private API を利用しています。 ただ、こちらの方が機能が多い・ASSERT がちゃんとあるので問題があった時に把握しやすいので、良いです。

備えている機能は以下です。

  • デバイスの Identifier 取得
  • .app の Bundle_id 取得
  • アプリのインストール
  • アプリのアンインストール
  • インストールされているアプリ一覧
  • TCP コネクションを張る

すべて実機で行えます。 大変良い!