2009-11-20 25 views
6

Ahora que es de conocimiento público que las entregas de la App Store se están probando para el uso de API privadas, necesito hacer la pregunta ... ¿qué es exactamente una API privada para poder evitarla?Apple y API privadas

Respuesta

14

Una API privada es una API que no está documentada en el SDK. Por ejemplo, una clase de marco puede declarar un método que no está destinado a ser utilizado por desarrolladores externos. El comportamiento de una API privada no está garantizado. Ni siquiera puede estar seguro de que el método estará allí en las futuras actualizaciones de la plataforma. Probablemente su declaración no esté disponible en archivos de encabezado SDK distribuidos públicamente. Si se apega a las cosas definidas públicamente en la documentación del SDK, estará bien.

+0

Muy bien. ¡Gracias a todos por las rápidas respuestas! – RyJ

+0

Entonces, en lugar de llamar a un método dentro de una API privada, ¿cuál es la diferencia de que usted cree su propio método que hace lo mismo? ¿Estoy en lo cierto al decir que no se trata de llamar a ciertos métodos de API, es el hecho de que estás tratando de hacer cosas que no quieren que hagas? –

+0

@Nick No necesariamente. Para que Apple apruebe una aplicación, debe tener las dos características siguientes: 1. solo hacer cosas que no le hayan restringido, independientemente del método. 2. hazlos a través de un mecanismo válido. Puede haber cosas que está bien hacer en general, pero no se puede llamar a una API privada directamente para lograrlas. El ritual es una API privada que puede cambiar en futuras versiones y rompe tu aplicación, mientras que escribir un método personalizado en una API pública no debe romper con una actualización de iOS. –

1

Generalmente por su ausencia de los encabezados de SDK. Una de las convenciones de Apple es liderar los nombres de los métodos ObjC con guiones bajos.

5

Le resultará difícil utilizar una API privada por accidente. No están documentados en los documentos SDK, y no aparecen en las sugerencias de finalización del código de XCode. El motivo por el cual esto se ha convertido recientemente en noticia es el creador de un marco utilizado por varias aplicaciones que usan una API privada, por lo que cuando los desarrolladores que incluían su marco actualizaron sus aplicaciones, fueron rechazadas (aunque esos desarrolladores no usaron una API privada, el marco que agregaron a su aplicación sí lo hizo).

Esa es la única forma en que podría utilizar accidentalmente una API privada.

+0

qué marco era? –

+1

Estaba en el marco de las tres décadas, pero el problema se ha solucionado hace mucho tiempo. Esta respuesta tiene más de dos años. – mmc

0

No es difícil ser rechazado por el llamado "uso de API privada". Trate de usar lo siguiente como atributo central de datos y sería rechazado:

  • ColorIndex
  • ocurrencia
  • Identificación

Muestra cómo el robot explora el API.

3

No son solo las API privadas las que pueden hacer que su aplicación sea rechazada. El uso de miembros no documentados de una API pública puede hacer que su aplicación sea rechazada. Por ejemplo, la biblioteca three20 (desde que se arregló) accedió a _phase y a otros miembros de UITouch dentro de una categoría.

También pueden detectar las llamadas a privadas miembros a través performSelector, ya que el siguiente también marcado un rechazo:

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

más preocupante, si usted hace su trabajo de aplicación en el punto 3.1 y 3.0 y en tiempo de ejecución en 3.0 no usas nada de 3.1, tu aplicación puede ser rechazada. Un ejemplo podría ser el cameraOverlayView de UIImagePickerController (consulte here). Esto es un poco desconcertante.

1

Una gran herramienta para usar antes de enviar su aplicación es el Escáner de aplicaciones. De analizar el archivo .app para el uso de la API privada y le muestra lo que firmas de los métodos coinciden y qué clases de esos métodos están en

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

+0

Parece que este sitio está caído. ¿Alguien sabe de otras aplicaciones que realizan una funcionalidad similar? – rvijay007

1

Mi aplicación fue rechazada por Apple debido a usar la API privada . Aquí está el código,

Class UIKeyboardImpl = NSClassFromString(@"UIKeyboardImpl"); 

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

    [activeInstance performSelector:@selector(dismissKeyboard)];