7

このアプリをAppStoreに送信したくありません。私は何度も試しましたが、非常に多くの問題に遭遇しました:(

class-dumpを使用して、UIKit.frameworkのすべてのヘッダーファイルを取得します。class-dumpによって生成されたUIApplication.hで、使用したいメソッド----launchApplicationWithIdentifierを見ました。

次に、UIApplication.hをプロジェクトに配置してインポートします。コンパイルすると、以前使用したUIKit.frameworkに別のUIApplication.hがあるため、「列挙子の再定義....」エラーが多数発生しました。ただし、このファイルにはlaunchApplicationWithIdentifierメソッドがありません。

以前のUIKit.frameworkを削除し、class-dumpによって生成されたフォルダーをインポートした場合。それからそれはフレームワークのように見えますが、私がそれを展開すると、それは空です。

次に、生成されたすべてのヘッダーファイルをフレームワークファイルにし、以前のUIKit.frameworkを置き換えます。しかし、私は方法がわかりません。ご覧のとおり、システムフレームワークディレクトリの下に、フレームワークと同じ名前で「実行されたシェルスクリプト」アイコンが付いたファイルがあります。このファイルを作成するにはどうすればよいですか?

本当に戸惑いました。誰かが私に手を差し伸べることができますか?ありがとうございました。

4

1 に答える 1

8

次のように、使用するクラス実装の上のカテゴリ インターフェイスでプライベート メソッドを指定するだけです。

@interface UIApplication (Private)

- (BOOL)launchApplicationWithIdentifier:(id)identifier suspended:(BOOL)suspended;

@end

クラスダンプ ファイル全体をインポートして、元の UIKit フレームワークとリンクしないでください。

プライベート API を使用する場合は、十分に注意する必要があります。これらのメソッドは、将来の iOS バージョンで変更または削除される可能性があります。

実行時にメソッドが実際に存在するかどうかを確認し、respondsToSelector:存在しない場合に備えます。

私は自分のアプリケーションで秘密の MapKit 機能を使用し、プライベート メソッドは iOS 5 にしか存在しないことを知っていました。そのため、私のアプリはすべての iOS バージョンで引き続き動作しますが、この機能は iOS 5 でのみ使用できます (Apple は iOS 6 で削除または変更しました)。ベータ 1)。

于 2012-06-17T10:10:13.450 に答える