2009-11-20 5 views
6

Maintenant qu'il est de notoriété publique que les soumissions App Store sont testées pour l'utilisation d'API privées, je dois poser la question ... qu'est-ce qu'une API privée pour les éviter?Apple et API privées

Répondre

14

Une API privée est une API qui n'est pas documentée dans le SDK. Par exemple, une classe de structure peut déclarer une méthode qui n'est pas destinée à être utilisée par des développeurs externes. Le comportement d'une API privée n'est pas garanti. Vous ne pouvez même pas être sûr que la méthode sera là dans les futures mises à jour de la plate-forme. Sa déclaration n'est probablement pas disponible dans les fichiers d'en-tête SDK distribués publiquement. Si vous vous en tenez à des éléments définis publiquement dans la documentation du SDK, tout ira bien.

+0

D'accord cool. Merci à tous pour les réponses rapides! – RyJ

+0

Donc, plutôt que d'appeler une méthode dans une API privée, quelle est la différence entre créer votre propre méthode et faire la même chose? Ai-je raison de dire que ce n'est pas la question d'appeler certaines méthodes API, c'est le fait que vous essayez de faire des choses qu'ils ne veulent pas que vous fassiez? –

+0

@Nick Pas nécessairement. Pour qu'une application soit approuvée par Apple, vous devez disposer des deux éléments suivants: 1. Ne faites que des choses dont elle ne vous a pas empêché, quelle que soit la méthode utilisée. 2. faites-les via un mécanisme valide. Il peut y avoir des choses que vous pouvez faire en général, mais vous ne pouvez pas appeler une API privée directement pour les accomplir. Le rituel est une API privée qui peut changer dans les futures versions et casse votre application, alors que l'écriture d'une méthode personnalisée sur une API publique n'est pas supposée rompre avec une mise à jour iOS. –

1

Généralement par leur absence des en-têtes SDK. L'une des conventions d'Apple consiste à diriger les noms de méthode ObjC avec des traits de soulignement.

5

Vous aurez du mal à utiliser une API privée par accident. Ils ne sont pas documentés dans les documents SDK et n'apparaissent pas dans les suggestions d'achèvement de code de XCode. La raison pour laquelle ceci est récemment devenu une nouveauté est la création d'un framework utilisé par plusieurs applications utilisant une API privée, donc quand les développeurs qui ont inclus son framework ont ​​mis à jour leurs applications, ils ont été rejetés (même si ces développeurs n'utilisaient pas API privée, le framework qu'ils ont ajouté à leur application).

C'est à peu près la seule façon d'utiliser accidentellement une API privée.

+0

quel cadre était? –

+1

C'était dans le cadre de trois20, mais le problème a été remédié depuis longtemps. Cette réponse a plus de deux ans. – mmc

0

Il n'est pas difficile d'être rejeté par ce qu'on appelle "using private API". Essayez d'utiliser les éléments suivants comme attribut de base de données et il serait rejeté:

  • colorIndex
  • occurrence
  • id

Il montre comment le robot scanne l'API.

3

Ce ne sont pas seulement les API privées qui peuvent entraîner le rejet de votre application. L'utilisation de membres non documentés d'une API publique peut entraîner le rejet de votre application. Par exemple, la bibliothèque three20 (depuis fixée) a accédé _phase et d'autres membres de UITouch dans une catégorie.

Ils peuvent également détecter les appels à privés membres via performSelector, comme suit a également signalé un rejet:

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

Plus inquiétant, si vous faites votre travail d'application sous 3.1 et 3.0 et à l'exécution dans la version 3.0 vous n'utilisez aucun des éléments 3.1 que votre application peut toujours être rejetée. Un exemple pourrait être le cameraOverlayView de UIImagePickerController (voir here). C'est assez déroutant.

1

Un excellent outil à utiliser avant de soumettre votre application est App Scanner. Il scanne votre fichier .app pour l'utilisation de l'API privée et vous montre ce que les signatures de méthode correspondent et quelles classes ces méthodes sont en lien

-.>http://www.chimpstudios.com/appscanner/

+0

On dirait que ce site est soit en panne. Quelqu'un connaît-il d'autres applications qui exécutent des fonctionnalités similaires? – rvijay007

1

Mon application a été rejetée par Apple en raison de l'utilisation de l'API privée .Voici le code,

Class UIKeyboardImpl = NSClassFromString(@"UIKeyboardImpl"); 

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

    [activeInstance performSelector:@selector(dismissKeyboard)]; 
Questions connexes