Einführung in die iPhone SDK-Entwicklung

Mobiletuts + wird alle wichtigen mobilen Plattformen abdecken - iPhone, Windows, Android und Blackberry. Dieses Tutorial befasst sich mit der Entwicklung mit dem iPhone SDK. Sie erfahren Informationen zur iPhone-Plattform, zum Einrichten und Konfigurieren Ihrer Entwicklungsumgebung und zu den erforderlichen Schritten zum Erstellen einer einfachen Fortune-Cookie-Anwendung!

Über die Plattform

iOS ist eine mobile Version von Mac OS X, die von Apple Inc. entwickelt wurde. Sie wird mit allen iPod touch-, iPhone- und iPad-Geräten vertrieben und belegt nur etwa 500 MB Speicherplatz.

Es gibt drei verschiedene Ansätze für die iOS-Entwicklung:

  1. Entwicklung von Webanwendungen

    Für das ursprüngliche iPhone OS 1.0 mussten alle Nicht-Apple-Anwendungen webbasiert und im Mobile Safari-Webbrowser ausgeführt werden. Da Mobile Safari keine Plug-Ins wie Adobe Flash oder Microsoft Silverlight unterstützt, wurden alle Anwendungen von Drittanbietern ursprünglich in HTML, CSS und JavaScript geschrieben. Diese Entwicklungsmethode bleibt heute eine praktikable Option, insbesondere für Anwendungen, die auf einer breiten Palette von Geräten verfügbar sein müssen, oder für Entwicklungsteams mit einer Abneigung gegen Mac OS X und Objective-C.

  2. Native Anwendungsentwicklung

    Mit der Veröffentlichung von iPhone OS 2.0 und der Einführung des iPhone SDK und des iTunes App Store wurden Entwickler aufgefordert, native Anwendungen für das iPhone mit Objective-C und Xcode zu schreiben. Native Anwendungen sind kompilierte Binärdateien, die auf dem Gerät des Benutzers installiert und ausgeführt werden. Diese Anwendungen haben erheblichen Zugriff auf die Gerätehardware, und nur native Anwendungsbinärdateien können über den iTunes App Store verteilt werden. Da das iPhone-Betriebssystem auf iPod touch-, iPhone- und iPad-Geräten ausgeführt werden kann, können die meisten Anwendungen für alle drei Geräte mit nur geringfügigen Codevariationen erstellt werden. Die Optimierung Ihrer Anwendung für den viel größeren iPad-Bildschirm bietet jedoch erhebliche Vorteile.

  3. Hybrid-Anwendungsentwicklung

    Es ist auch möglich, die obigen Ansätze zu kombinieren und iPhone-Anwendungen zu erstellen, die auf dem Gerät eines Benutzers installiert sind, hauptsächlich in HTML, CSS und JavaScript geschrieben sind und über den iTunes App Store veröffentlicht werden. Solche Anwendungen werden dank Open-Source-Bibliotheken wie QuickConnect und Plattformen wie PhoneGap, AppCelerator und Rhomobile immer beliebter.

Mobiletuts + deckt alle oben genannten Methoden der iPhone-Betriebssystementwicklung ab. Dieses Tutorial konzentriert sich jedoch auf die Entwicklung nativer Anwendungen mit dem offiziellen iPhone-SDK mit Objective-C und Xcode. Dies ist die von Apple empfohlene Methode zum Erstellen nativer iPhone-Betriebssystemanwendungen für die Verteilung im iTunes App Store.

Fertig machen

Um iPhone SDK-Anwendungen zu entwickeln und dieses Lernprogramm fortzusetzen, benötigen Sie Folgendes:

  • Ein Intel-basierter Mac mit Mac OS X Snow Leopard

    Um native Anwendungen mit dem offiziellen iOS-SDK zu schreiben und Ihre Anwendungen im offiziellen iPhone- oder iPad-Simulator von Apple zu testen, müssen Sie Snow Leopard, das neueste Desktop- und Laptop-Betriebssystem von Apple, ausführen können.

  • Ein Apple Developer-Konto.

    Dies ist erforderlich, um das iPhone SDK 4, die Xcode IDE und den iPhone Simulator herunterzuladen. Sie müssen sich hier für ein Apple Developer-Konto registrieren. Die Registrierung ist kostenlos und ermöglicht es Ihnen, Anwendungen im iPhone-Simulator auszuführen. Für dieses Lernprogramm benötigen Sie lediglich ein kostenloses Konto. Wenn Sie jedoch Ihre Apps auf einem Gerät ausführen oder über den iTunes App Store veröffentlichen möchten, müssen Sie für die Anmeldung zum iPhone Developer Program bezahlen.

  • Xcode und das iPhone SDK 4.

    Laden Sie nach dem Anmelden bei Ihrem Entwicklerkonto Xcode 3.2.5 und iPhone SDK 4 (oder die neuesten verfügbaren Versionen) herunter und installieren Sie sie..

Nachdem Sie die oben genannten Informationen erhalten haben, sollten Sie mit dem Erstellen von "Fortune Crunch", einer einfachen iPhone-Anwendung, die es Benutzern ermöglicht, einen Glückskeks zu "knacken" und eine Nachricht zu lesen, bereit sein.

Schritt 1. Starten Sie Xcode und erstellen Sie Ihr Projekt

Xcode ist eine integrierte Entwicklungsumgebung (IDE), in der die verschiedenen Tools zum Erstellen eines iPhone-Programms in einer Anwendung zusammengefasst sind. Starten Sie Xcode jetzt, indem Sie im Spotlight danach suchen oder mit dem Finder zum Standardinstallationspfad von navigieren / Entwickler / Anwendungen / Xcode.

Wählen Sie im erscheinenden Dialogfeld "Neues Xcode-Projekt erstellen".

Wählen Sie in der linken Spalte unter iOS die Option „Anwendung“. Machen Sie sich mit den verschiedenen Arten von Anwendungsvorlagen vertraut, die im Inhaltsbereich verfügbar sind. Dieses Tutorial ist eine einfache, einzige Ansichts-App. Wählen Sie das Symbol "Ansichtsbasierte Anwendung" und klicken Sie auf "Auswählen".

Geben Sie den Text "FortuneCrunch" in das Feld "Speichern unter" ein, um unser Projekt zu benennen, und klicken Sie auf "Speichern".

Die FortuneCrunch-Projektvorlage sollte jetzt auf dem Bildschirm angezeigt werden.

Es ist wichtig zu wissen, dass dieser Ausgangspunkt ein vollständig ausführbares Programm ist. Fahren Sie fort und verwenden Sie den iPhone-Simulator, um die Vorlage auszuführen, indem Sie auf klicken "Build and Run" oder durch Auswahl Erstellen> Erstellen und Ausführen aus der Menüleiste.

Die Standardanwendungsvorlage ist zwar unglaublich einfach, der iPhone-Simulator jedoch nicht. Klicken Sie im Simulator auf die Starttaste, um zum iPhone-Dock zurückzukehren und ein wenig zu blättern. Beachten Sie auch die folgenden Kurzbefehle für den Simulator:

Befehl + Pfeil nach links: Drehen Sie das Gerät nach links.

Befehl + rechter Pfeil: Drehen Sie das Gerät nach rechts.

Strg + Befehl + Z: Emuliert eine Shake-Geste (wird nicht visuell angezeigt).

Schritt 2. Starten Sie den Interface Builder und erstellen Sie die Schnittstelle

Die Standardoberfläche, die mit einer View-basierten Vorlage bereitgestellt wird, ist unglaublich langweilig. Erstellen Sie nun unsere Fortune-Cookie-App-Benutzeroberfläche. Wir werden zwei Glückskeksbilder verwenden, die speziell für dieses Tutorial aufgenommen wurden: cookie-closed.png und cookie-crunched.png. Sie finden sie in der Download-Datei, die diesem Beitrag beigefügt ist, und sie werden unter der WTFPL-Lizenz frei verteilt.

Starten Sie Interface Builder, nachdem Sie die erforderlichen Fortune-Cookie-Images abgerufen haben. Öffnen Sie dazu den Bereich „Groups & Files“ in Xcode, erweitern Sie den Ordner „Resources“ und doppelklicken Sie auf die FortuneCrunchViewController.xib-Datei.

Interface Builder ist ein grafisches Werkzeug, mit dem Sie das Layout Ihrer Anwendung schnell und einfach erstellen können, ohne eine einzige Zeile mit Objective-C-Code schreiben zu müssen. Wie wir sehen werden, können Sie damit auch Beziehungen zwischen Objekten wie Schaltflächen und den Methoden, die Sie in Ihrer Anwendung schreiben, visuell definieren.

Es gibt vier Hauptfenster des Interface Builder, die Sie kennen sollten:

  1. Das XIB-Fenster. Dieses Fenster trägt den Titel "FortuneCrunchViewController.xib" und ist eine Darstellung von allem, was in der XIB-Datei gespeichert ist, auf die Sie zum Öffnen des Interface Builder doppelklicken. Der Besitzer der Datei repräsentiert eine Instanz der FortuneCrunchViewController-Klasse. Sie können sich die Ansicht im XIB-Fenster als Leinwand für Ihre Einzelanwendung vorstellen. Der Ersthelfer ist ein Platzhalter für ein Objekt, das zur Laufzeit bestimmt wird und auf Aktionen wie Berührungsereignisse reagiert.
  2. Die View-Instanz. Die Ansichtsinstanz ist im Wesentlichen Ihr Arbeitsbereich für diese Anwendung und sollte durch die Ausführung der Vorlagen-App in Schritt 1 bekannt sein. Die hier vorgenommenen Änderungen werden beim Erstellen und Ausführen der Anwendung angezeigt. Wenn die Ansichtsinstanz nicht geöffnet ist oder Sie sie nach dem Schließen erneut öffnen möchten, können Sie dies tun, indem Sie im XIB-Fenster auf das Symbol „Ansicht“ doppelklicken.
  3. Die Bibliothek. Die Bibliothek zeigt Objekte wie Schaltflächen, Beschriftungen und Textfelder an, die in Ihrer Ansicht verwendet werden können. Objekte können auf Ihrer Leinwand erstellt werden, indem Sie sie einfach auf die Ansichtsinstanz ziehen. Um die Bibliothek manuell zu öffnen, wählen Sie Extras> Bibliothek aus der Menüleiste.
  4. Der Inspektor. Der Inspektor bietet eine detaillierte Ansicht der Attribute und Verbindungen Ihrer Objekte. Öffnen Sie das Inspektorfenster, indem Sie auswählen Extras> Inspektor wenn es nicht schon geöffnet ist Beachten Sie die vier Registerkarten oben im Inspektorfenster: Attribute, Verbindungen, Größe und Identität.

Jetzt, da Sie mit Interface Builder vertraut sind, können Sie die Benutzeroberfläche unserer Anwendung weiter einrichten.

Zuerst ändern wir die Hintergrundfarbe von grau in weiß. Wählen Sie dazu die oben beschriebene Ansichtsinstanz. Das Inspektorfenster sollte nun die Ansichtseigenschaften geladen haben. Wählen Sie die Registerkarte Attribute im Inspektor, suchen Sie das Hintergrundattribut und die Farbpalette und ändern Sie die Farbe in Weiß.

Jetzt erstellen wir einen Button, um unseren Glückskeks darzustellen. Geben Sie im Bibliotheksfenster "UIButton" in das Suchfeld unten ein.

Ziehen Sie dann die Schaltfläche auf die Ansichtsinstanz.

Wir müssen die Bilder cookie-closed.png und cookie-crunched.png zum Ressourcenordner in Xcode hinzufügen. Wechseln Sie zurück zum Xcode-Hauptfenster und ziehen Sie jedes Bild in den Ordner Ressourcen im Bereich Gruppen & Dateien. Ein Dialogfeld wird angezeigt. Aktivieren Sie das Kontrollkästchen "Elemente in Zielordner kopieren" und klicken Sie auf "Hinzufügen".

Wechseln Sie wieder zum Interface Builder und wählen Sie den zuvor hinzugefügten UIButton aus. Verwenden Sie die Registerkarte "Attribute" des Inspektors, um die Bildeigenschaft in "cookie-crunched.png" und den Bildtyp in "benutzerdefiniert" zu ändern. Verändern Sie die Größe des UIButton-Objekts, indem Sie auswählen Layout> Größe anpassen.

Wir haben jetzt einen kaputten Glückskeks auf dem Bildschirm. Erstellen Sie unser Vermögen, indem Sie ein UILabel aus der Bibliothek in die Ansicht ziehen. Ändern Sie den Text in „Happy iPhone Hacking“ und ändern Sie die Schriftart mit der Registerkarte „Attribute“ des Inspektors auf 12 Punkt und die Schrift auf Fett. Passen Sie die Größe des UILabels an den Text an und positionieren Sie ihn über dem weißen Zettel auf dem gebrochenen Cookie-Bild. Aktivieren Sie nun das Kontrollkästchen "Verborgen", da dieses Etikett nur angezeigt werden soll, nachdem der Benutzer auf die Schaltfläche geklickt hat.

Wählen Sie den UIButton erneut aus und ändern Sie die Bildeinstellung auf der Registerkarte "Attribute" des Inspektors in "cookie-closed.png".

Speichern Sie alle Ihre Arbeit im Interface Builder, und wechseln Sie dann wieder zu Xcode und erstellen und führen Sie Ihre Anwendung erneut aus. Sie sollten jetzt die ungebrochene Glückskeks-Schaltfläche auf dem Bildschirm sehen.

Schritt 3. Codieren Sie die FortuneCrunchViewController-Header-Datei

Wenn die Schnittstelle konfiguriert ist, können wir in Objective-C eintauchen und mit dem Schreiben des Codes beginnen, durch den unsere Anwendung funktioniert.

Wählen Sie wieder in Xcode die FortuneCrunchViewController.h-Datei unter Klassen Ordner in der Gruppen & Dateien Feld. Diese Datei ist eine sogenannte Header-, Interface- oder Deklarationsdatei für die FortuneCrunchViewController-Klasse. Hier deklarieren wir die internen Variablen, Methoden, Protokolle und andere Komponenten, die in der Klasse verwendet werden.

Die FortuneCrunchViewController-Klasse wurde im Interface Builder visuell als "Zeichenfläche" dargestellt, auf die wir die UILabel- und UIButton-Instanzen ziehen konnten. Wir werden jetzt die Klassenheaderdatei aktualisieren, damit wir diese Objekte später in unserem Code referenzieren können.

Aktualisieren Sie die Headerdatei, indem Sie die folgenden Änderungen vornehmen:

 #einführen  @interface FortuneCrunchViewController: UIViewController IBOutlet UIButton * fortuneCookieButton; IBOutlet UILabel * fortuneLabel;  @property (nichtatomisch, beibehalten) IBOutlet UIButton * fortuneCookieButton; @ property (nichtatomisch, einbehalten) IBOutlet UILabel * fortuneLabel; - (IBAction) crunchCookie: (id) Absender; @Ende 

Zeile 1 ist als Präprozessor-Direktive bekannt und fordert den Präprozessor im Wesentlichen auf, das UIKit-Framework für die Verwendung innerhalb der Klasse verfügbar zu machen.

Zeile 3 verwendet @interface, um anzugeben, dass dies eine Schnittstellendefinition für die FortuneCrunchViewController-Klasse ist. Der Teil ": UIViewController" dieser Zeile bedeutet, dass FortuneCrunchViewController eine untergeordnete Klasse der UIViewController-Klasse ist.

Zeile 5 deklariert einen UIButton-Klassenzeiger namens fortuneCookieButton als IBOutlet. Das IBOutlet-Tag hat für den Compiler keine wirkliche Bedeutung und wird nur vom Interface Builder verwendet, um zu bestimmen, welche Objekte in der Klasse mit ihrer visuellen Darstellung in der Interface Builder-XIB-Datei verbunden werden können. Die UIButton-Klasse sollte aus unserer Arbeit in Schritt 2 bekannt sein.

Zeile 6, ähnlich wie Zeile 5, deklariert einen UILabel-Klassenzeiger namens fortuneLabel als IBOutlet.

Die Zeilen 10-11 verwenden die @property-Anweisung, um dem Compiler mitzuteilen, dass FortuneCookieButton und FortuneLabel als Eigenschaften der Klasse zugänglich sind, die Methoden für den späteren dynamischen Zugriff jedoch deklariert werden.

Zeile 13 ist eine Funktionssignatur für die CrunchCookie-Methode. Der - (IBAction) -Teil der Anweisung gibt an, dass diese Methode vom Datentyp IBAction ist. Dieser Datentyp ist im Wesentlichen derselbe wie der Datentyp Void. Der einzige bemerkenswerte Unterschied besteht darin, dass IBAction diese Methode als Aktion im Interface Builder verfügbar macht . Der Absender ": (id) sender" der Anweisung weist den Compiler an, ein Argument namens "sender" vom Datentyp "id" zu akzeptieren. In Cocoa-Touch ist id ein generischer Datentyp, der eine Zeigerreferenz auf jede Unterklasse von NSObject darstellen kann. In unserer Anwendung wird beim Aufruf der crunchCookie-Methode durch Drücken von fortuneCookieButton tatsächlich ein Verweis auf das fortuneCookieButton-Objekt als "Sender" -Objekt gesendet. Dies ist für unsere Anwendung nicht notwendig, aber es ist hier enthalten, da es eine übliche Konvention ist, die Sie häufig sehen werden.

Zeile 15 zeigt an, dass dies das Ende unserer @ Interface-Deklaration ist.

Schritt 4. Verbinden Sie den Interface Builder mit dem FortuneCrunchViewController

Nachdem wir nun die internen Variablen und Methoden, die von unserer Anwendung verwendet werden, deklariert und mit IBOutlet und IBAction markiert haben, müssen wir den Kreis schließen, indem wir unsere Interface Builder-Objekte mit der FortuneCrunchViewController-Klasse verbinden.

Doppelklicken Sie auf die FortuneCrunchViewController.xib-Datei und starten Sie den Interface Builder erneut.

Klicken Sie mit der rechten Maustaste, oder klicken Sie mit der rechten Maustaste, und klicken Sie im XIB-Controller auf das Objekt Eigentümer. Ein Feld wird angezeigt, in dem die verschiedenen Objekte des Dateieigentümers aufgeführt sind, die mit Objekten in der XIB verbunden werden können. Beachten Sie, dass die Ansicht für uns bereits verbunden ist.

Klicken Sie auf den Kreis rechts von fortuneCookieButton, und ziehen Sie den Cursor aus dem Feld Dateibesitzer auf den aktuellen UIButton auf der Leinwand. Das Feld Besitzer der Datei sollte grafisch aktualisiert werden, um die Verbindung zwischen dem fortuneCookieButton-Objekt und dem UIButton-Objekt auf dieselbe Weise anzuzeigen, wie es die Verbindung zwischen dem View-Ausgang und dem View-Objekt anzeigt.

Machen Sie dasselbe für die fortuneLabel-Verbindung.

Wir müssen jetzt eine Verbindung zwischen dem UIButton und unserer crunchCookie-Methode herstellen. Interface Builder bietet uns dazu viele verschiedene Möglichkeiten. Klicken Sie mit der rechten Maustaste auf unseren Fortune-Cookie-Button, um eine Liste der verfügbaren Ereignisse anzuzeigen.

Zwei der am häufigsten verwendeten Optionen sind:

  • Aufsetzen. Mit dieser Option wird Interface Builder angewiesen, unsere Methode auszulösen, wenn ein Finger das Element "berührt".
  • Touch Up Inside.Mit dieser Option wird Interface Builder angewiesen, unsere Methode auszulösen, nachdem der Benutzer einen Finger auf das Element gedrückt und den Finger anschließend auch vom Element gelöst hat.

"Touch Up Inside" ist normalerweise die Option, die bei der Arbeit mit Schaltflächen ausgewählt wird. In unserem Fall möchten wir jedoch, dass der Fortune-Cookie den Moment bricht, in dem der Finger des Benutzers ihn berührt. Daher binden wir das Touch Down-Ereignis an unsere crunchCookie-Methode. Ziehen Sie dazu im XIB-Fenster aus dem Kreis auf das Dateieignerobjekt und dann auf Stellen Sie sicher, dass Sie die CrunchCookie-Methode aus dem angezeigten Dialogfeld auswählen.

Speichern Sie Ihre Arbeit im Interface Builder und wechseln Sie dann wieder zu Xcode.

Schritt 5. Codieren Sie die FortuneCrunchViewController-Implementierungsdatei

Nachdem die Interface Builder XIB-Datei konfiguriert und die Klassenschnittstelle geschrieben wurde, müssen Sie nur noch die Klassenmethoden codieren, die die Anwendung zum Crunching unseres Cookies und zum Anzeigen des Fortune-Labels verwendet. Die Klassenimplementierungsdatei ist FortuneCrunchViewController.m. Öffnen Sie sie jetzt, indem Sie sie aus dem Ordner auswählen Klassen Ordner in der Gruppen & Dateien Feld.

Aktualisieren Sie den Code wie folgt:

 #import "FortuneCrunchViewController.h" @implementation FortuneCrunchViewController @synthesize fortuneCookieButton; @synthesize fortuneLabel; // Diese Methode ändert das Cookie-Bild, wenn die Schaltfläche gedrückt wird: - (IBAction) crunchCookie: (id) sender NSLog (@ "In crunchCookie"); [fortuneCookieButton setImage: [UIImage imageNamed: @ "cookie-crunched.png"] forState: UIControlStateNormal]; fortuneLabel.hidden = NEIN;  // Diese Methoden beziehen sich auf die Speicherverwaltung: - (void) viewDidUnload [fortuneCookieButton release]; fortuneCookieButton = null;  - (void) dealloc [fortuneCookieButton release]; [FortuneLabel Release]; [Super Dealloc];  @Ende 

Zeile 1 ist die Präprozessoranweisung, die die Schnittstellendatei vor dem Kompilieren der Klasse enthält.

Zeile 3 beginnt mit der Klassenimplementierung.

Die Zeilen 5 - 6 verwenden die Anweisung @synthesize, um dynamisch Methoden zu erstellen, um auf die in der Headerdatei deklarierten fortuneCookieButton- und fortuneLabel-Zeigerobjekte zuzugreifen und sie zu speichern. Durch diesen Schritt müssen die Methoden getVariable () und setVariable () für alle deklarierten Objekte nicht manuell codiert werden.

Die crunchCookie-Methode befindet sich in den Zeilen 8 - 12 und ist das Herzstück dieses Programms.

In Zeile 9 - 10 erstellen wir ein neues UIImage-Objekt mit dem Cookie-crunched.png-Image. Dieses Objekt übergeben wir dann an die setImage: forState: -Methode des fortuneCookieButton-Objekts. Diese Methode ändert das Image-Attribut, das wir im Interface Builder manuell auf cookie-closed.png gesetzt haben, in das neue UIImage-Objekt, das wir übergeben haben. Die Nachrichtenübergabe ist eine zentrale Komponente der Objective-C-Sprache und folgt im Allgemeinen diesem Muster:

 [myObject methodParam1: value1 methodParam2: value2]; 

Zeile 11 greift auf das Attribut „hidden“ des fortuneLabel-Objekts zu und setzt seinen Wert auf NO. Dadurch wird unser Label-Objekt angezeigt, nachdem das Image den zusammengepressten Cookie aktualisiert hat.

Alle verbleibenden Zeilen befassen sich mit Fragen der Speicherverwaltung, die in zukünftigen Tutorials ausführlicher behandelt werden. Zusammenfassend müssen Sie jedoch beim Entladen unserer Ansicht sicherstellen, dass Sie alle von Ihnen erstellten IBOutlet-Objekte freigegeben haben. Die Dealloc-Methode ist der Objekt-Destruktor und wird aufgerufen, wenn das Objekt kurz vor der Zerstörung steht. Diese beiden Methoden sind bereits standardmäßig in der Klasse vorhanden. Sie müssen jedoch die angezeigten Zeilen hinzufügen.

Mit dem obigen Code können wir unsere fertige Anwendung speichern, kompilieren und ausführen!

Fazit

In diesem Lernprogramm haben Sie eine kurze Einführung in die Entwicklung nativer iPhone-Betriebssystemanwendungen mit Xcode, Interface Builder und dem iPhone SDK erhalten. Wir haben einige Grundlagen der Plattform behandelt und Sie haben mit Interface Builder und Xcode nasse Füße bekommen.

Das Material, das in diesem Tutorial behandelt wird, wird in zukünftigen Tutorials erweitert, während wir uns weiter mit Objective-C, Cocoa-Touch und dem iPhone SDK beschäftigen.