6

estoy usando Jailbreak + + Appsync iOS5.0.1 dispositivo (sin una licencia de desarrollador, pero con algunos trucos que puedo ejecutar mi aplicación en el dispositivo)IOS Cómo utilizar Entitlement.plist para especificar la propiedad de mi aplicación

Ahora quiero usar una API privada launchApplicationWithIdentifier: suspendida :. Entonces necesito agregar

<key>com.apple.springboard.launchapplications</key> 
<true/> 

a myApp.entitlements.plist file. Entonces debería funcionar, pero yo todavía tengo el error

'Receiver type 'UIApplication' for instance message does not declare a method 
with selector 'launchApplicationWithIdentifier:suspended:'' 

Entonces me encontré con alguien dijo, la firma de código se debe habilitar si quiero usar Entitlements.plist. ¿Es verdad? Debo tener una licencia de desarrollador?

¿O hay alguna otra forma de utilizar este método? Leí algún método sobre cómo usar API privada. Parece difícil. Soy nuevo en el desarrollo de iOS.

Gracias.

+1

nota: si se pregunta por qué dije "No sé" a su otra pregunta, pero contestó esta, es porque su otra pregunta se especificó utilizando Xcode. este no. Actualmente solo sé cómo hacer esto ** fuera ** de Xcode. Normalmente construyo con Xcode (sin firma de código), y luego firmo el código fuera de Xcode (con ldid) cuando construyo aplicaciones de jailbreak. – Nate

Respuesta

5

veo dos problemas/preguntas en su mensaje:

1) se obtiene el error

'Receptor tipo 'UIApplication' para el mensaje de instancia no declarar un método con el selector' launchApplicationWithIdentifier: suspendido: ''

¿Eso es un error de compilación? Parece que es así. Aquí está la cosa. Hay un montón de clases object-c en el conjunto de Frameworks públicos que todavía tienen algunos métodos privados en ellos. Por lo tanto, en los encabezados normales (archivos .h) para los marcos públicos, esos métodos privados no se enumerarán. Pero, están ahí en las bibliotecas dinámicas. Si desea construir una aplicación que los use, entonces una forma de resolver el problema es encontrar una copia del encabezado completo .

Por ejemplo, here's a copy of the full UIApplication.h header.

A continuación, puede copiar la declaración de los métodos privados, y en su propio código, declararlos así:

// Used to disable warning for non-public methods 
@interface UIApplication (Extensions) 
    - (BOOL)launchApplicationWithIdentifier:(id)identifier suspended:(BOOL)suspended; 
@end 

Eso debe dejar que el compilador se queja de que el método privado no lo hace existe.

Para el futuro, debe leer acerca de class-dump, que es una herramienta que puede ejecutar en los marcos públicos o privados en el SDK, y generar encabezados inversos como el anterior, usted mismo. Cambiaran con cada versión del SDK, por lo que es bueno poder generarlos usted mismo.

2) preguntas sobre el uso de autorizaciones sin firma de código.

Primero, read what Saurik originally wrote about it here. Sí, necesita indicar el código de las autorizaciones. Pero, no, no tiene que ser con un certificado de Apple en teléfonos con jailbreak.Puede señal de código falso, mediante la descarga del ejecutable ldid, y haciendo

cd MyAppName.app 
ldid -Sentitlements.xml MyAppName 

asumiendo que su aplicación es nombrado MyAppName y que realizó los derechos de archivo entitlements.xml. Yo creo derechos que este archivo funcionaría para usted, si usted firmó de código falsa con ldid:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
    <dict> 
    <key>com.apple.springboard.launchapplications</key> 
    <true/> 
    </dict> 
</plist> 

tener cuidado. He encontrado ldid en internet en un par de lugares. Realmente no estoy seguro de cuál es el derecho uno. Recuerdo que una vez, traté de hacer esto, y la versión de ldid que estaba usando no funcionaba para firmar los derechos. Descargué ldid de otra fuente, y luego funcionó. Así que ten cuidado.

+0

Gracias por su respuesta. Finalmente tengo éxito, puedes leer este [enlace] (http://stackoverflow.com/questions/11070089/ios-how-to-use-private-api). Para el primer punto. Si importo UIApplication que generé con class-dump, recibí el "error de redefinición". Para el segundo punto, no lo intenté pero parece estar bien :-). En total, para usar launchApplicationWithIdentifier: suspendido, debo empaquetar mi aplicación en un archivo deb para instalarlo como aplicación del sistema (como Phone, Messages) para otorgarle la propiedad raíz. Luego, incluya este método en el lugar donde desea usarlo y simplemente llámelo. – wyp

+1

@wyp, gracias por atrapar eso. Es un poco diferente cuando intentas usar métodos privados dentro de las clases que están en la API pública (por ejemplo, 'UIApplication'), a diferencia de las clases que son completamente privadas. Actualicé mi respuesta a (1) arriba para mostrar cómo puede usar el método privado 'UIApplication'. – Nate

Cuestiones relacionadas