Mostrando entradas con la etiqueta programacion. Mostrar todas las entradas
Mostrando entradas con la etiqueta programacion. Mostrar todas las entradas

23 mayo 2010

Cómo ejecutar en un dispositivo iPhone sin pagar el programa de desarrolladores iPhone

Editado: Parece que hay que tener el teléfono con jailbreak e Installous debe de estar instalado.

Os voy a contar un truco que he encontrado por ahí y que me ha sido de gran utilidad.
Si alguna vez has pensado en programar para iPhone OS, uno de los mejores ejemplos para empezar sería éste. Es sencillo, te asienta varios conceptos importantísimos y está muy bien explicado. En el transcurso del tutorial vas ejecutando el ejemplo y lo vas probando para ver la evolución de lo que es tu primer programa de muchos más por llegar, espero. Lo bonito sería, cuando lo terminas, ejecutarlo en tu flamante iPhone para poder llevártelo por ahí y fardar con tus amigos de que "eres programador iPhone"... si es que estás dispuesto a pagar 79€ (99$).
Aunque hay una forma de saltarse esta restricción...

El Programa de Desarrollador iPhone de Apple no solo sirve para poder poner tus aplicaciones en la App Store, sino que también es necesario si quieres probar tus desarrollos en tu propio teléfono. Sinceramente es una cagada. Otro punto negativo para Apple (y ya van unos cuantos). Pero como decía en la entrada, buscando cómo solucionar este problema encontré un hilo donde una persona se curró una forma para poder ejecutar los desarrollos en el propio teléfono sin pasar por caja. Os cuento mi experiencia y los pasos para poder hacerlo también vosotros.
La configuración que he usado es XCode 3.2.2 con iPhone SDK 3.2, y el firmware de mi iPhone es un 3.1. Voy a explicarlo con el iPhone OS 3.1, si tenéis otra versión probad con la vuestra.

  1. Hacéis una copia de seguridad del fichero /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/SDKSettings.plist.
    sudo cp -p /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/SDKSettings.plist /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/SDKSettings.plist.bak

  2. Ahora lo editamos con vuestro editor favorito o con pico.
    sudo pico /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/SDKSettings.plist

  3. Buscad y cambiad las claves DefaultProperties/CODE_SIGNING_REQUIRED y ENTITLEMENTS_REQUIRED y ponedlas a NO.
  4. Cread un fichero llamado gen_entitlements.py con el siguiente contenido (personalmente lo he salvado en /Developer/Applications/):
    #!/usr/bin/env python

    import sys
    import struct

    if len(sys.argv) != 3:
    print "Usage: %s appname dest_file.xcent" % sys.argv[0]
    sys.exit(-1)

    APPNAME = sys.argv[1]
    DEST = sys.argv[2]

    if not DEST.endswith('.xml') and not DEST.endswith('.xcent'):
    print "Dest must be .xml (for ldid) or .xcent (for codesign)"
    sys.exit(-1)

    entitlements = """
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>application-identifier</key>
    <string>%s</string>
    <key>get-task-allow</key>
    <true/>
    </dict>
    </plist>
    """ % APPNAME

    f = open(DEST,'w')
    if DEST.endswith('.xcent'):
    f.write("\xfa\xde\x71\x71")
    f.write(struct.pack('>L', len(entitlements) + 8))
    f.write(entitlements)
    f.close()


  5. Cambiad los permisos del fichero para que se pueda ejecutar:
    chmod +x gen_entitlements.py



  6. Una vez tengáis vuestro proyecto terminado, vais a "Project -> Edit Project Settings". En la pestaña "Build" buscáis "Code Signing Identity" y donde no suele poner nada lo seleccionáis y lo dejáis en "iPhone Developer" y bajo ésta seleccionais "Device - iPhone OS 3.1" o "Any iPhone OS Device" y ponéis "Don't Code Sign".
  7. Ahora vais a "Project -> New Build Phase -> New Run Script Build Phase" y copiamos el siguiente código (aseguraos de poner correctamente la ruta al fichero gen_entitlements.py, y de que coincida el Bundle Identifier):
    export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
    if [ "${PLATFORM_NAME}" == "iphoneos" ]; then
    /Developer/Applications/gen_entitlements.py "my.company.${PROJECT_NAME}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent";
    codesign -f -s "iPhone Developer" --entitlements "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/"
    fi


  8. Ahora debemos crearnos un certificado con el nombre que hemos dado a "Code Signing Identity" en el paso 6: "iPhone Developer". Para ello abrimos el programa de "Acceso a Llaveros" localizado en /Aplicaciones/Utilidades.
  9. Seleccionadmos "Acceso a Llaveros -> Asistente para Certificados -> Crear un Certificado..."
  10. Nombramos al certificado "iPhone Developer", con tipo de identidad "Raíz autofirmada" y tipo de certificado "Firma en código". Chequeamos "Permitir ignorar los valores por omisión". Le damos a continuar.
  11. Le damos un número de serie distinto de cualquier otro certificado y un periodo de validez. Continuar.
  12. Rellenamos los datos de correo electrónico, empresa, etc...
  13. Dejamos todo lo demás con las opciones por defecto hasta llegar al final. Con esto tenemos todo preparado para poder ejecutar nuestra aplicación en un dispositivo.
  14. Abrimos el organizador, en XCode "Window -> Organizer" y preparamos nuestro dispositivo para usarlo en nuestros desarrollos.
  15. Una vez configurado el iPhone vamos a compilar y ejecutar nuestro programa. Seleccionamos como destino de la ejecución "Device - 3.1|Debug" y le damos a "Build and Run". Después de unos segundos tendrá que aparecer nuestra aplicación en nuestro iPhone.


¡Suerte con vuestros desarrollos!

Leer la pencada completa...

20 abril 2008

Programación en Mac: Objective-C

Últimamente no toco nada de código, concretamente desde que entré a trabajar en Indra. Me contrataron como Arquitecto Java, pero por ahora solo estoy haciendo parte del análisis, concretamente diagrama de actividades y la cosa va para largo. Es un proyecto mastodóntico subvencionado por el Estado en el que se ha iniciado el desarrollo a la par que la definición de la metodología a seguir en dicho desarrollo, con lo que cada dos por tres cambian algo de la metodología y hay que modificar el análisis para que se vea reflejado... vamos, que lo que se dice avanzar, avanza poco.


Debido a que llevo más de dos meses sin tocar código me siento un poco apenado e inútil... bueno, esto último puede ser debido a que soy inútil, pero el hecho es que me esta entrando ganas de cambiar esto, y para ello he decidido aprender a programar para el mundo Mac, que de paso me servirá para programar aplicaciones para el iPhone :-) y lo primero que me estoy leyendo y la guía de aprendizaje de Objective-C  (actualmente en su versión 2.0), que para quien no lo sepa es un lenguaje orientado a objetos tomando como base el lenguaje C, siendo compatible con éste y con C++. Es una especie de mezcla entre C y Modula-2.

Del manual llevaré la mitad más o menos leído y la verdad es que hay algunos conceptos que no existe en Java que me están gustando: Categories, Extensions, Dynamic Binding de métodos, etc... Todo esto le da una potencia inimaginable en Java aunque no nos engañemos, Java hoy por hoy le da mil vueltas, en sencillez, librerías libres, manuales, foros, y sobre todo en herramientas empresariales.

Pero esto es solo el primer paso para aprender a programar para el mundo Mac... aun quedaría por aprender un poco los frameworks de CoreFundation, Cocoa, etc... antes de hacer nada vistoso. Por si a alguien le interesa esto de la programación para el mundo Mac, intentaré escribir poco a poco los pasos que voy dando para ir aprendiendo y comentar alguna característica que me parezca novedosa. Así que lo primero que recomiendo es que los interesados empiecen a leerse el manual del lenguaje de programación Objective-C 2.0 que no es muy largo y esta bien escrito pero eso si, id repasando un poco el lenguaje C antes :-)

Leer la pencada completa...