Xcodeを使用して脱獄iOSデバイス上で開発デバッグを行う

12043 ワード

1目的2 iOSデバイスの設定3プライベート署名を生成
4 Xcodeの設定
4.1 Xcodeに署名を必要としないことを伝える4.2 Xcodeに発行動作をしなくてもいいと伝える4.3 Xcodeがプライベート署名を使用してApp を発行することを指示する

5デバッグ開始6補足1 目的
iOSプログラムを開発する際、本体でデバッグするには、開発者がアップル社のiOS開発者アカウントを取得するために99ドルの年会費を払わなければならない.99ドルは高くありませんが、AppStoreでアプリケーションを発表したくないiOS開発を練習したいプログラマーにとって、この投資は少し悩んでいます.一方、iOS脱獄プログラムの開発デバッグは通常、コマンドラインのSDKを使用して行われており、Xcode統合開発環境が提供する利便性を利用して本番でデバッグできると、開発効率の向上に大きく役立ちます.iOS開発者のアカウントを申請しない場合、Xcodeを使用して脱獄したiOSデバイス上で開発デバッグを行う方法について説明します.
2 iOSデバイスの設定
iOSデバイスは、各Appをインストールして実行するときに、デジタル署名を確認する必要があります.安全のため、アップル社はアップルが公式に授権したデジタル署名で署名したAppだけを実機で実行することを許可した.まずこの制限を迂回してみましょう.
あなたのiOSデバイスを脱獄します.自分で犬を放して脱獄教程を探してください
脱獄アプリケーションAppSyncをインストールします.Cydiaにソースを追加する必要があります http://cydia.hackulo.us , 次に、デバイスに適したAppSyncバージョンのダウンロードインストールを選択します.このアプリケーションは、アップルのデジタル署名検証メカニズムを迂回して、プライベート署名で発行されたAppをインストールすることができます(もちろん、海賊版Appもインストールできます.これは議論の範囲内ではありません.正規版をサポートしてください!)iOSデバイスを再起動
iOSオペレーティングシステムのアップグレードのたびに、この手順をデバイスで繰り返します.
3 プライベート署名の生成
iOSデバイス上で実行するには、Appに署名する必要があります.99ドルでアップルの公式開発者の署名を申請したくない以上、自分のプライベート署名を生成して署名します.アップルの公式ドキュメントには詳細な生成手順がありますhttps://developer.apple.com/library/mac/#documentation/Security/Conceptual/CodeSigningGuide/Procedures/Procedures.html:
Mac OS Xオペレーティングシステムに付属のユーティリティのキーホルダーアクセスプログラムを開く.
キーストローク・アクセス・プログラムのメニューから証明書アシスタントを選択->証明書の作成...証明書の名称は必ず“iPhone Developer”を書いて、不要な面倒を避けるためにアイデンティティタイプは自己署名ルート証明書であり、証明書タイプ選択コード署名これらのデフォルト値を上書きし、に進みます.
任意にシーケンス番号を入力します.シリアル番号と証明書名が一意であることを保証する証明書情報を入力します.私有証明書なので、勝手に書いてください.
後ろの選択ボックスはデフォルト値でです.
完了すると、この新しく作成された「iPhone Developer」という自己署名のルート証明書をキー列アクセスで見ることができます.「この証明書は信頼されていません」と赤で警告され、権威機関の認証で生成されたものではないことを示しています.これは大丈夫です.私たちは前のステップでiOSデバイスを完成したからです.
この手順は1回だけです.
4 Xcodeの設定
Xcodeはデバッグをコンパイルするときに署名も自動的な署名も必要ないことを伝える必要があります.最後に、Xcodeが前のステップで生成したプライベート署名を使用して私たちのプログラムを発行することも指定します.
4.1 Xcodeにサイン不要と伝える
Xcodeのプロファイルを変更する必要があるため、まずXcodeを閉じ、セキュリティのためにプロファイルを変更する前に元のファイルをバックアップします.以下の設定は、Xcode 4.3とiOS SDK 5.0を例にとります.他のバージョンではXcodeとiOS SDKの経路が若干異なりますので、ご自身で対応してください.
cd /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/
sudo cp Info.plist Info.plist.orig
sudo vi Info.plist

見つける
<key>CODE_SIGNING_REQUIREDkey>
<string>YESstring>

YESをNOに変更します.再検索
<key>ENTITLEMENTS_REQUIREDkey>
<string>YESstring>

YESをNOに変える
その後、同じ方法で/Developer/Platforms/iPhoneOS.platform/Info.plistプロファイルをバックアップし、すべてのプロファイルを変更します.
<key>CODE_SIGN_CONTEXT_CLASSkey>
<string>XCiPhoneOSCodeSignContextstring>

置換 XCiPhoneOSCodeSignContext を選択します. XCCodeSignContext
最後に、XcodeのiPhoneが開発したプラグインを修正します.
cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/PrivatePlugIns/iPhoneOS\ Build\ System\ Support.xcplugin/Contents/MacOS/
dd if=iPhoneOS\ Build\ System\ Support of=working bs=500 count=255
printf "\xc3\x26\x00\x00" >> working
mv -n iPhoneOS\ Build\ System\ Support iPhoneOS\ Build\ System\ Support.original
mv working iPhoneOS\ Build\ System\ Support
chmod a+x iPhoneOS\ Build\ System\ Support

これにより、XcodeはiOSのプログラムに署名する必要がないことを知っています.この手順は、新しくインストールされたXcodeとiOS SDKのバージョンごとに行います.
4.2 Xcodeにサインをしなくてもいいと伝える
任意のXcodeプロジェクトを開き、プロジェクトファイルを選択し、Build SettingsでCode Signingアイテムを見つけ、「Code Signing Identity」のサブアイテム「Any iOS SDK」を選択し、「Don't Code Sign」に設定します.
4.3 Xcodeにプライベート署名を使用してAppを発行するよう指示する
次のpythonスクリプトを新規作成して保存します.
#!/usr/bin/env python
 
import sys
import struct
 
if len(sys.argv) != 3:
    print "Usage: %s appname dest_file.xcent" % sys.argv[0]
    sys.exit(-1)
 
APPNAME = sys.argv[1]
DEST = sys.argv[2]
 
if not DEST.endswith('.xml') and not DEST.endswith('.xcent'):
    print "Dest must be .xml (for ldid) or .xcent (for codesign)"
    sys.exit(-1)
 
entitlements = """




    application-identifier
    %s
    get-task-allow
    


""" % APPNAME
 
f = open(DEST,'w')
if DEST.endswith('.xcent'):
    f.write("\xfa\xde\x71\x71")
    f.write(struct.pack('>L', len(entitlements) + 8))
f.write(entitlements)
f.close()

スクリプトが/Developer/iphonentitlements 401/genに保存されていると仮定します.entitlements.py、実行可能に設定
chmod 777 /Developer/iphoneentitlements401/gen_entitlements.py

最後に、エンティティ・デバイスのデバッグが必要なプロジェクトごとに、スクリプトの実行を指定する必要があります.プロジェクトファイルを選択し、Build Phasesページの右下にあるAdd Build Phaseボタンをクリックします.Shellボックスに次のshellスクリプトを入力します.
export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
if [ "${PLATFORM_NAME}" == "iphoneos" ]; then
/Developer/iphoneentitlements401/gen_entitlements.py "my.company.${PROJECT_NAME}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent";
codesign -f -s "iPhone Developer" --entitlements "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/"
fi

5 デバッグの開始
設定したXcodeプロジェクトを開き、iOSデバイスに接続します.XcodeのOrganizer面版を開き、左のDeviceリストで接続上のiOSデバイスを選択し、Use for Developmentをクリックし、ポップアップダイアログボックスに対して「拒否」または「Cancel」を選択します.Runボタンをクリックすると、デバイス上でプログラムを実行できます.デバッグが必要な場合は、Debugバージョンに切り替えることもできます.メニューProduct->Edit Scheme...Run YourAppName.appのBuild ConfigurationをDebugに変更します.これで、99ドルの年会費を免除して、本体でアプリケーションをデバッグすることができます.
6 補足
本明細書のシナリオの重大な参考 http://www.alexwhittemore.com/developing-jailbroken-iphone-ios-401/ 原作者にお礼を言う.
このシナリオの経験はXcode 3~4,iOS 4~5のバージョンで実行できる.バージョンによってプロファイルのパスが異なりますので、ご自身で変更してください.
AppStoreであなたのアプリケーションを公開するには、99ドルの登録年会費はどうしても節約できません.実は価格も公正で、結局Xcodeは無料です.
正常な発行プロセスを行うには、各ステップでバックアップされた元のプロファイルを使用してリカバリします.警告!本人はまだ回復していないので、必ず成功するとは保証できません.