追記: 5/31/2012 別の fork で、Xcode 5.3.2+iOS5.1 で転送と実行まで、正しく動くものがあるようです。最後に追記します。
Fruitstrapというライブラリが、PrivateAPIをたたいて、appファイルを実機に転送することを可能にしているようです。Snow Leopardだけでなく、Lionでも途中まで動いたので経過報告です。
現状で、転送は出来ているのですが、実行が出来ません。引き続き調査をしてくださる方がいればうれしいです。
- Fruitstrapをインストール
- Fruitstrapをビルド
- アプリのファイルを作成
- 実機転送
phildrip/fruitstrap こちらから行いました。これは、メインのブランチではなくて、有志で改造している人のひとりのブランチですので注意してください。
cd /user/....(cloneしたフォルダ)
gcc -g -o fruitstrap -framework CoreFoundation -framework MobileDevice -F/System/Library/PrivateFrameworks fruitstrap.c
これで、fruitstrap というファイル(実行ファイル)が出来ればOK
ここは、Jenkinsなどで、アプリをビルドするところから行う必要があるのですが、今回は手抜きで、Xcodeのアーカイブから、ipaファイルを作って、拡張子を.zipに変えて解凍し、payloadフォルダの中の、 testapp.app を、fruitstrapと同じフォルダにおきました。
./fruitstrap install --bundle=testapp.app --debug
こんな感じのコマンドをたたくと、
[….] Waiting for iOS device to be connected
found device id
[ 0%] Found device (f7722a1785c8ca5c7f8ce6bd5ca70addf37a0210), beginning install
[ 5%] Copying testapp.app to device
[ 5%] Copying testapp.app/_CodeSignature to device中略
[ 50%] TakingInstallLock
[ 52%] CreatingStagingDirectory
[ 57%] ExtractingPackage
[ 60%] InspectingPackage
[ 65%] PreflightingApplication
[ 70%] VerifyingApplication
[ 70%] InstallingEmbeddedProfile
[ 75%] CreatingContainer
[ 80%] InstallingApplication
[ 85%] PostflightingApplication
[ 90%] SandboxingApplication
[ 95%] GeneratingApplicationMap
[100%] Installed package PriMasDXII.app
—— Debug phase ——
[ 0%] Looking up developer disk image
[ 30%] Copying DeveloperDiskImage.dmg to device
[ 90%] Mounting developer disk image
[ 95%] Developer disk image already mounted
[100%] Connecting to remote debug server
————————-
tomohisa@Tomos-MBP-17$ Reading symbols for shared libraries ……………… done
こんな感じで止まってしまって、ctrl-cを押すとコマンドラインに戻ります。アプリは無事転送されて、iPhoneから、アイコンをタップすると正しく実行されるのですが、コマンドラインからの自動実行は動いていないみたいです。
とりあえず、snow leopardだけじゃなくて、Lionでも、転送は出来るようですよということでした。privateAPIを使っているので、appleによってふさがれる可能性が高いという説明がありました。
参考リンク
How to deploy iOS apps to the iPhone via the command line
追記 2012/5/31
@k_katsumi @tomohisa @akisutesama @shachi これ github.com/walm/fruitstrap の CFStringGetSystemEncoding() を kCFStringEncodingMacRoman に書き換えると動きます。
— Norio Nomura / 野村 憲男さん (@norio_nomura) 5月 30, 2012
ここにあるように、walm/fruitstrap · GitHub を使ったら、アプリの起動も正しく動作しました! Norio Nomura / 野村 憲男 (norio_nomura)さん、ありがとうございました!