Entwickeln für Jailbreak-iPhones mit OS3.0

Ich gehe an dieser Stelle davon aus, dass Ihr eine im iPhone-Simulator lauffähige Anwendung mit der Entwicklungsumgebung für das iPhone-OS-3.0 fertiggestellt habt. Diese Anwendung nehmen wir jetzt als Basis für alle weiteren Aktionen. Einige davon müssen einmalig durchgeführt werden, einige für jede Anwendung erneut.

Als erstes stellen wir in der Anwendung, die ich gerade angesprochen habe im Menü "Project" die SDK-Umgebung auf das iPhone um, da die Simulator-Anwendungen leider nicht auf dem iPhone laufen:

Entwicklungsumgebung umstellen

Wenn wir an dieser Stelle die Anwendung versuchen zu kompilieren, bekommen wir den Fehler "CodeSign error: Code Signing Identity iPhone Developer does not match any code-signing certificate in your keychain. Once added to the keychain, touch a file or clean the project to continue." - Das ist kein großes Problem, da uns XCode nur mitteilen möchte, dass wir kein Zertifikat haben. Lästig aber sehr schnell behoben:

  1. Öffnet die "Schlüsselbundverwaltung"
  2. Wählt den Menüpunkt "Zertifikat erstellen" aus dem Zertifikatsassistenten im Hauptmenü
  3. Als Namen gebt Ihr den Namen "iPhone Developer" ein, der Typ bleibt auf Root, der Haken für "Standardwerte überschreiben" muss gesetzt werden. (Fortfahren klicken, Warnung mit Fortfahren bestätigen)
  4. Die Seriennummer muss immer so erhöht werden, dass sie nicht doppelt vorhanden ist. Da Ihr noch kein Zertifikat habt, sollte es hier die "1" tun. Im Zertifikatstyp wählt Ihr "Code-Signierung" aus. (Fortfahren)
  5. Die Zertifikatsinformationen füllt Ihr einfach aus. (Namen bitte nicht ändern, dann fortfahren)
  6. Alles weitere wird einfach mit "Fortfahren" bestätigt und nicht weiter verändert.
Damit wäre das erste Problem erschlagen und nach einem Neustart von XCode dürfte der Fehler nicht wieder auftauchen. Dafür haben wir jetzt Probleme mit dem nächsten Fehler: "CodeSign error: a valid provisioning profile is required for product type Application in SDK Device - iPhone OS 3.0?". Der Fix für dieses Problem ist - gelinde ausgedrückt - ekelhaft, funktioniert aber.

Im "iPhone Dev SDK Forum" wird ein Script bereit gestellt, welches Ihr als root (sudo -s als Admin und Ihr habt eine root-Shell) ausführen müsst:

#!/bin/bash
cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS\ Build\ System\ Support.xcplugin/Contents/MacOS/

dd if=iPhoneOS\ Build\ System\ Support of=working bs=500 count=255 printf "\x8f\x2a\x00\x00" >> working dd if=iPhoneOS\ Build\ System\ Support of=working bs=1 skip=127504 seek=127504 /bin/mv -n iPhoneOS\ Build\ System\ Support iPhoneOS\ Build\ System\ Support.original /bin/mv working iPhoneOS\ Build\ System\ Support chmod a+x iPhoneOS\ Build\ System\ Support

Diese Script verändert eine Datei des XCode-iPhone-Build-Systems, speichert aber die Originaldatei zusätzlich zur Sicherheit ab. Auch diese Änderung erfordert wiederum einen Neustart von XCode.

An dieser Stelle sollte es jetzt problemlos möglich sein die Anwendung für das iPhone SDK 3.0 zu kompilieren. Zumindest war das der Fall hier bei mir.

Der nächste Schritt ist, dass XCode sich weigert die Signatur für die Anwendung zu erstellen. Somit haben wir zwar eine theoretisch lauffähige Anwendung für das iPhone, allerdings wird das iPhone diese Anwendung sofort nach dem Start unweigerlich vom Kernel beenden lassen, da sie nicht signiert ist. Ohne einen Jailbreak würden wir an dieser Stelle verzweifeln, da der Jailbreak allerdings die Signaturüberprüfung verändert, können wir mit jedem beliebigen Zertifikat die Signierung durchführen.

  1. Öffnet ein Terminal und begebt euch in den Ordner, in dem XCode die build-Datei eurer Anwendung erstellt hat
  2. Führt an dieser Stelle die folgenden Befehle aus: (Program.app natürlich durch euer Programm ersetzen!)
    platform=/Developer/Platforms/iPhoneOS.platform
    allocate=${platform}/Developer/usr/bin/codesign_allocate
    export CODESIGN_ALLOCATE=${allocate}

    codesign -fs "iPhone Developer" Program.app

Damit ist das Programm signiert und kann auf das iPhone (z.B. via SSH) kopiert werden. Die Anwendung sollte somit normal starten und wir freuen uns. Dieser letzte Schritt - das Signieren - muss jedes mal erneut durchgeführt werden, wenn Ihr das Programm neu kompiliert. XCode ersetzt die Dateien einfach und übernimmt wie oben gesagt keine Signatur.

Wie Ihr euer Programm mit Cydia installieren könnt, damit beschäftige ich mich in einem anderen Artikel, der später erscheinen wird.