Cómo usar ldid?

Estoy intentando ejecutar una aplicación sin firma en iOS 5.1 / iPhone 4s (jailbroken). Lo que hice:

  1. Deshabilitar la firma de código en XCode.

  2. Aplicación para iPhone sin firmar.

  3. Lo copié en mi iPhone a través de SSH a la ubicación /User/me/development/HelloWorld.app

  4. Ahora trato de simular su firma para ejecutar esta aplicación en iPhone. Ejecuto los siguientes comandos:

.

cd /User/me/development chmod -R 777 HelloWorld.app ldid -S HelloWorld 

Sin embargo, recibo el siguiente error:

 util/ldid.cpp(567): _assert(78:arch != NULL) 

¿Cuál es la razón posible de tal error y ahora arreglarlo?

1) Usar ldid -S es el uso correcto . No minúsculas ( -s ).

2) Generalmente, cuando obtengo este error, es porque construí mi aplicación con las architectures incorrectas. La mayoría de las versiones anteriores de ldid que he usado no pueden firmar binarios gordos (pero consulte la Actualización a continuación). Los binarios gordos son los que tienen más de una architecture en su interior. Por ejemplo, un armv6 dual de armv6 y armv7 . O con Xcode 4.5, probablemente esté por defecto en arvm7 y armv7s .

En la configuración de comstackción del proyecto, use las configuraciones Arquitecturas , Arquitecturas válidas y Construir architecture activa solo para determinar qué architecture ejecutable está construida. Para el desarrollo de jailbreak, generalmente configuro solo la architecture de construcción activa en YES . Y archictures válidos establecidos en armv6 y armv7 .

3) Además, algunas versiones anteriores de ldid no pueden firmar ejecutables de armv7 . Si obtiene la copia preconstruida del sitio de KennyTM aquí , es compatible con armv7 . Tenga en cuenta que este ldid está diseñado para Mac OS X, por lo que está diseñado para ejecutarse en el ejecutable de su Mac, después de comstackr sin iniciar sesión en Xcode, pero antes de cargarlo en su iPhone.

Los teléfonos más nuevos generalmente pueden ejecutar ejecutables creados para architectures antiguas, pero no al revés. Por lo tanto, cree la architecture más antigua que desee. Simplemente perderá algunas optimizaciones en las architectures más nuevas (que a la mayoría de las personas no les importa demasiado … háganme saber si su aplicación necesita estas optimizaciones, y publicaré más).

Por lo tanto, si desea admitir dispositivos antiguos (iPhone <3GS), establecería Arquitecturas solo para armv6 , asegurándose de eliminar la configuración predeterminada de $(ARCHS_STANDARD_32_BIT) . Si solo necesita soporte para los relativamente nuevos, entonces elija armv7 , pero asegúrese de usar una versión de ldid que pueda firmar los binarios de armv7 .

Editar: para determinar si el ejecutable que intentabas firmar era uno gordo, ejecuta esto en la línea de comando:

 > cd HelloJB.app > ls HelloJB Info.plist PkgInfo date.zip en.lproj > lipo -info HelloJB Non-fat file: HelloJB is architecture: armv7 

Como puede ver en el resultado anterior, mi ejecutable HelloJB no es grueso, y solo tiene código armv7.

Actualizar

Creo que la versión preconfigurada de ldid que se encuentra aquí ahora puede firmar ejecutables ldid , aunque todavía ldid versiones ldid flotando que no pueden. Además, creo que si instalas una versión reciente de iOSOpenDev , te dará una versión de ldid que puede firmar ejecutables ldid (ubicación de instalación predeterminada de /opt/iOSOpenDev/bin/ldid ).

A partir de lo que parece Xcode 4.5 en adelante, tal vez desde el 4.4 no se haya comprobado, para poder usar seudo código con la herramienta ldid, debe descargar e instalar ‘Herramientas de línea de comando’ desde aquí o puede descargarlo desde Xcode. Preferencias-> Descargas

De lo contrario, obtendrá errores como

  • util / ldid.cpp (584):
  • ./minimal/mapping.h(54): _assert (2: falso)
  • util / ldid.cpp (567)
  • y así

Aún necesita asegurarse de que no sea un binario “gordo” y solo armv7 ya que el armv6 ya no es compatible.

ldid -S ExampleApp

El error assert (2: false) proviene del hecho de que HelloJB (no HelloJB.app) está protegido contra escritura.

  1. Inicie Terminal.app
  2. Ir al directorio HelloJB.app
  3. chmod + aw HelloJB
  4. ldid -S HelloJB funciona!