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
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.
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.
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.
qué marco era? –
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
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.
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.
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/
Parece que este sitio está caído. ¿Alguien sabe de otras aplicaciones que realizan una funcionalidad similar? – rvijay007
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)];
- 1. Directrices de la aplicación de Apple: ¿API privadas?
- 2. ¿Qué son las API privadas
- 3. Apple Magic Mouse Api
- 4. Detectando el uso de API privadas
- 5. Apple iCloud calendario API
- 6. Cómo detectar y evitar el uso de API privadas en bibliotecas de terceros
- 7. Cómo usar las API privadas de SDK de iPhone
- 8. Clases privadas y uml
- 9. Funciones privadas y variables ExtJs4?
- 10. iPad de Apple y el apoyo PDF
- 11. ¿Qué indica el prefijo 'k' en las API de Apple?
- 12. ¿Las claves públicas y privadas son intercambiables?
- 13. Colas privadas y públicas en MSMQ
- 14. C Variables privadas Obtener y establecer métodos
- 15. Clases de C++ (públicas, privadas y protegidas)
- 16. Generando URL privadas, únicas y seguras
- 17. git svn y trabajando con sucursales privadas?
- 18. Tragamonedas públicas y privadas en R?
- 19. force get/set acceso de variables privadas para propiedades privadas
- 20. Integración de OpenSSL y Apple Keychain
- 21. diferencia entre clang y Apple clang?
- 22. Clave de Apple clave privada/pública cuestión
- 23. Java incluye Javadoc privadas
- 24. C++ Estructuras Privadas
- 25. Funciones privadas en JavaScript
- 26. Funciones privadas abstractas
- 27. variables privadas o protegidas?
- 28. Clases privadas anidadas
- 29. delegar en partes privadas
- 30. funciones de plantillas privadas
Muy bien. ¡Gracias a todos por las rápidas respuestas! – RyJ
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? –
@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. –