Question

Maintenant qu'il est de notoriété publique que les soumissions App Store sont testés pour l'utilisation des API privées, je dois poser la question ... ce qui est une API privée afin que je puisse les éviter exactement?

Était-ce utile?

La solution

Une API privée est une API qui ne sont pas documentées dans le SDK. Par exemple, une classe-cadre peut déclarer une méthode qui ne doit pas être utilisé par les développeurs extérieurs. Le comportement d'une API privée est pas garantie. Vous ne pouvez pas être sûr que même la méthode sera là dans les futures mises à jour de la plate-forme. Sa déclaration est sans doute pas disponible dans les fichiers d'en-tête SDK distribués dans le public. Si vous vous en tenez à des choses publiquement définies dans la documentation du SDK, vous serez OK.

Autres conseils

Vous trouverez qu'il est difficile d'utiliser une API privée par accident. Ils ne sont pas documentées dans le SDK docs, et ils ne se présentent pas dans les suggestions de complétion de code de XCode.

La raison pour laquelle cela est devenu nouvelles récemment est le créateur d'un cadre utilisé par plusieurs applications utilisé une API privée, alors quand les développeurs qui inclus son cadre mis à jour leurs applications, ils ont été rejetées (même si les développeurs ne pas utiliser un privé API, le cadre ils ont ajouté à leur application fait).

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

Il est pas d'API simplement privées qui peuvent causer pour obtenir rejeté votre demande. En utilisant les membres sans papiers d'une API publique peut provoquer votre application pour obtenir rejeté. Par exemple, la bibliothèque Three20 (depuis fixe) accessible _phase et d'autres membres de UITouch dans une catégorie.

Ils peuvent également détecter les appels à privé 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 pas de 3.1 farcir votre application peut encore obtenir rejeté. Un exemple pourrait être le cameraOverlayView de UIImagePickerController (voir ). C'est un peu déroutante.

En général, par leur absence de têtes SDK. L'une des conventions de pomme est de conduire les noms des méthodes ObjC avec underscores.

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.

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

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

    Class UIKeyboardImpl = NSClassFromString(@"UIKeyboardImpl");

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

    [activeInstance performSelector:@selector(dismissKeyboard)];

Il est difficile de ne pas obtenir rejeté par ce qu'on appelle « en utilisant l'API privée ». Essayez d'utiliser les éléments suivants comme attribut et il serait rejeté de base de données:

  • colorIndex
  • occurrence
  • id

Il montre comment le robot scanne l'API.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top