6

Jailbreak + Appsync + iOS5.0.1デバイスを使用しています(開発者ライセンスはありませんが、いくつかのトリックを使用して、デバイスでアプリを実行できます)

ここで、プライベートAPIのlaunchApplicationWithIdentifier:suspended:を使用します。だから私は追加する必要があります

<key>com.apple.springboard.launchapplications</key>
<true/>

myApp.entitlements.plistファイルに。その後は動作するはずですが、それでもエラーが発生します

'Receiver type 'UIApplication' for instance message does not declare a method 
 with selector 'launchApplicationWithIdentifier:suspended:''

次に、誰かがEntitlements.plistを使用する場合は、コード署名を有効にする必要があると言っているのを見つけました。それは本当ですか?開発者ライセンスが必要ですか?

または、この方法を使用する他の方法はありますか?プライベートAPIの使い方についていくつかの方法を読みました。難しいようです。私はiOS開発に不慣れです。

ありがとうございました。

4

1 に答える 1

5

あなたの投稿には2つの問題/質問があります。

1)エラーが発生します

'レシーバータイプ'UIApplication'インスタンスメッセージはセレクター'launchApplicationWithIdentifier:suspended:''でメソッドを宣言しません

それはコンパイラエラーですか?多分そうですね。つまりね。パブリックフレームワークのセットには、まだいくつかのプライベートメソッドが含まれているObjective-cクラスがたくさんあります。したがって、パブリックフレームワークの通常のヘッダー(.hファイル)では、これらのプライベートメソッドはリストされません。しかし、それらはダイナミックライブラリにあります。これらを使用するアプリを作成する場合、問題を解決する1つの方法は、完全なヘッダー のコピーを見つけることです。

たとえば、UIApplication.hヘッダー全体のコピーを次に示します。

次に、プライベートメソッドの宣言をコピーし、独自のコードで次のように宣言できます。

// Used to disable warning for non-public methods
@interface UIApplication (Extensions)
  - (BOOL)launchApplicationWithIdentifier:(id)identifier suspended:(BOOL)suspended;
@end

これにより、コンパイラがプライベートメソッドが存在しないと文句を言うのを防ぐことができます。

将来的にclass-dumpは、SDKのパブリックフレームワークまたはプライベートフレームワークで実行できるツールであるについて読んで、上記のようなヘッダーを自分で逆生成する必要があります。SDKのリリースごとに変更されるため、自分で生成できるのは良いことです。

2)コード署名なしで資格を使用することについて質問します。

まず、Saurikが最初にそれについて書いたことをここで読んでくださいはい、資格にコード署名する必要があります。ただし、いいえ、ジェイルブレイクされた電話でApple証明書を使用する必要はありません。ldid実行可能ファイルをダウンロードして、コード署名を偽造することができます

cd MyAppName.app
ldid -Sentitlements.xml MyAppName

アプリの名前がMyAppNameで、エンタイトルメントファイルentitlements.xmlを作成したと仮定します。ldidで偽のコード署名をした場合、このエンタイトルメントファイルは機能すると思います

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>com.apple.springboard.launchapplications</key>
    <true/>
  </dict>
</plist>

気をつけて。私はldidインターネット上でいくつかの場所で見つけました。どちらが正しいのかよくわかりません。一度、これを試みたのですが、ldid使用していたバージョンが資格の署名に機能しなかったことを思い出します。ldid別のソースからダウンロードしたところ、機能しました。だから、注意してください。

于 2012-06-19T02:00:28.203 に答える