2009-11-20 10 views
6

App StoreのサブミッションがプライベートAPIの使用についてテストされていることは既に知られているので、プライベートAPIはどういう意味ですか?アップルとプライベートAPI

答えて

14

プライベートAPIは、SDKに記載されていないAPIです。例えば、フレームワーククラスは、外部の開発者が使用することを意図したメソッドを宣言することがあります。プライベートAPIの動作は保証されません。将来のプラットフォームの更新でこのメソッドがそこに確実に存在することさえできません。公開されたSDKヘッダーファイルでは、その宣言はおそらく利用できません。 SDKのドキュメントで一般に定義されていることに固執すればOKです。

+0

です。迅速な対応に感謝します! – RyJ

+0

プライベートAPI内でメソッドを呼び出すのではなく、同じことを行う独自のメソッドを作成することの違いは何ですか?特定のAPIメソッドを呼び出すことの問題ではないということを訂正していますが、あなたがしたくないことをしようとしているという事実はありますか? –

+0

@Nick必ずしもそうではありません。アップルから承認を受けるには、次の両方を行う必要があります。1.方法に関係なく、自分が制限していないことを行うだけです。それらを有効なメカニズムで行います。大丈夫ですが、プライベートAPIを直接呼び出すことはできません。儀式は、プライベートAPIは将来のバージョンで変更され、あなたのアプリを壊すかもしれませんが、パブリックAPI上でカスタムメソッドを書くことは、iOSのアップグレードで壊れてはいけないと考えられます。 –

1

通常、SDKヘッダーが存在しないためです。リンゴの規則の1つは、ObjCのメソッド名をアンダースコアで導くことです。

5

プライベートAPIを使用することは偶然にも困難です。それらはSDKドキュメントには書かれておらず、XCodeのコード補完の提案には表示されません。

最近、ニュースになった理由は、いくつかのアプリケーションで使用されているフレームワークの作成者がプライベートAPIを使用しているため、フレームワークを含む開発者がアプリケーションを更新したときに拒否されましたプライベートAPIは、彼らがアプリケーションに追加したフレームワークでした)。

これは、プライベートAPIを誤って使用する可能性がある唯一の方法です。

+0

どのフレームワークが? –

+1

これは320のフレームワークに含まれていましたが、この問題は救済されて以来長くなっています。この回答は2歳以上です。 – mmc

0

いわゆる「プライベートAPIを使用する」によって拒否されることはありません。コアデータの属性として、次を使用しようと、それは拒否されます:

  • のColorIndex
  • 発生
  • をID

それはロボットがAPIをスキャンする方法を示しています。

3

アプリケーションが拒否されるのはプライベートAPIだけではありません。公開されていないAPIのメンバーを使用すると、アプリケーションが拒否される可能性があります。たとえば、three20ライブラリ(固定されているため)は、_phaseやカテゴリ内のUITouchの他のメンバーにアクセスしました。

次のようにも拒絶反応をフラグを立てて彼らはまた、performSelector経由 プライベートメンバーへの通話を検出することができます

UIWindow* window = [UIApplication sharedApplication].keyWindow] 
return !![window performSelector:@selector(firstResponder)]; 

もっと不穏なあなたは3.1と3.0の下でと3.0での実行時にアプリケーションを動作させる場合には、あなたのアプリケーションは依然として拒否される3.1のものを使用しません。たとえば、cameraOverlayViewUIImagePickerControllerhereを参照)である可能性があります。これは困惑のようなものです。

1

アプリを送信する前に使用する優れたツールは、App Scannerです。これは、民間のAPIの使用のためのあなたの.appファイルをスキャンして、メソッドのシグネチャが一致するものと、それらの方法はであるかのクラスを示します

リンク - 。私のアプリが原因でプライベートAPIを使用するのではリンゴによって拒否されました

+0

このサイトのいずれかがダウンしているようです。誰もが同様の機能を果たす他のアプリを知っていますか? – rvijay007

1

>http://www.chimpstudios.com/appscanner/コードは

Class UIKeyboardImpl = NSClassFromString(@"UIKeyboardImpl"); 

    id activeInstance = [UIKeyboardImpl performSelector:@selector(activeInstance)]; 

    [activeInstance performSelector:@selector(dismissKeyboard)]; 
関連する問題