2012-06-17 18 views
7

No quiero enviar esta aplicación a AppStore. Lo he intentado muchas veces pero he encontrado tantos problemas :(iOS ¿Cómo utilizar la API privada?

Utilizo class-dump para obtener todos los archivos de encabezado de UIKit.framework. En el UIApplication.h generado por class-dump, vi el método I quiero usar ---- launchApplicationWithIdentifier.

Luego pongo UIApplication.h en mi proyecto y lo importo. Compile, obtuve un montón de error de "Redefinición del enumerador ...." porque en el UIKit.framework I use previous, hay otra UIApplication.h. Pero este archivo no tiene el método launchApplicationWithIdentifier.

Si borro el UIKit.framework anterior e importo la carpeta generada por el volcado de clase. Entonces aparece como un framework pero si YO desplegarlo, está vacío.

Luego quiero hacer que todos los archivos de encabezado generados sean reemplazados por un archivo de marco y el anterior UIKit.framework. Pero no sé cómo. Como podemos ver, en el directorio del sistema marco, hay un archivo que tiene el mismo nombre que el marco y tiene un ícono de 'script ejecutado'. ¿Cómo puedo hacer este archivo?

Realmente me confundí. Alguien puede darme una mano? Gracias.

+0

OMG, acabo de agregar la respuesta a su pregunta en su otra pregunta: http://stackoverflow.com/questions/11047176/ios-how-can-i-use-uiapplication-launchapplicationwithidentifier-which-in- -priv –

Respuesta

7

Sólo especifique los métodos privados en una interfaz de categoría por encima de la implementación de la clase en la que desea utilizarlo, así:

@interface UIApplication (Private) 

- (BOOL)launchApplicationWithIdentifier:(id)identifier suspended:(BOOL)suspended; 

@end 

No importar todo el archivo de clase-volcado y el enlace con el original, UIKit marco de referencia.

Debe tener mucho cuidado al usar API privada. ¡Estos métodos pueden cambiar o eliminarse en futuras versiones de iOS!

Compruebe si el método existe realmente con respondsToSelector: en tiempo de ejecución y prepárese para el caso de que no exista.

Utilicé una característica de MapKit en mi propia aplicación y sabía que los métodos privados solo existen en iOS 5. Por lo tanto, mi aplicación aún funciona en todas las versiones de iOS pero esta función solo está disponible en iOS 5 (Apple eliminada o cambiada en iOS 6 beta 1).

+1

Funciona. Muchas gracias :-) Además, debo hacer que mi aplicación sea un archivo deb use la herramienta dpkg y luego instalarlo. Solo de esta manera, mi aplicación puede lanzar otra aplicación. – wyp

Cuestiones relacionadas