Entwickeln für Jailbreak-iPhones mit OS3.0

Achtung: Diese Anleitung funktioniert nur für das iPhone-SDK 3.0! Im 3.1 scheinen einige Schritte wieder vollkommen anders zu sein. Das konnte ich allerdings noch nicht testen, da ich weder das iPhone-OS-3.1 noch das entsprechende SDK einsetze.

Wie der Titel schon sagt, beschäftigt sich dieser Artikel mit der Entwicklung von Software für ein iPhone mit iPhone-OS-3.0 und installiertem Jailbreak. Das unterscheidet sich in so fern von der normalen Entwicklung, da Apple uns dabei ein paar Steine in den Weg legt, die es zu umgehen gilt. Die Basis, auf der dieser Artikel basiert ist, dass kein Apple-Developer-Account besteht. Also Ihr zwar an das SDK herankommt, allerdings die 99 Euro nicht ausgebt um Software für den App-Store zu entwickeln. In dem Fall würden diverse Schritte wegfallen.

Vorausgesetztes Wissen für die Anleitung:

  • Ihr wisst, wie man eine Anwendung für den iPhone-Simulator entwickelt
  • Ihr wisst, wo XCode welche Dateien im Projektverzeichnis anlegt
  • Ihr könnt mit dem Terminal umgehen
  • SSH ist euch ein Begriff
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.