あなたの投稿には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
別のソースからダウンロードしたところ、機能しました。だから、注意してください。