cover-image
image

Christian Bleske ist Autor, Trainer und Entwickler. Sein Arbeitsschwerpunkt ist die Entwicklung von Client/Server- und mobilen Anwendungen. In vielen namhaften Entwicklerzeitschriften erscheinen seine Fachaufsätze. Er lebt in Witten im Ruhrgebiet.

image

Zu diesem Buch – sowie zu vielen weiteren dpunkt.büchern – können Sie auch das entsprechende E-Book im PDF-Format herunterladen. Werden Sie dazu einfach Mitglied bei dpunkt.plus+:

www.dpunkt.de/plus

iOS-Apps programmieren mit Swift

Der leichte Einstieg in die Entwicklung für iPhone, iPad und Co. – inkl. Apple Watch und Apple TV

2., aktualisierte und erweiterte Auflage

Christian Bleske

image

Christian Bleske

cb.2000@hotmail.de

christianbleske.wordpress.com

Lektorat: René Schönfeldt, Sandra Bollenbacher

Copy-Editing: Petra Kienle, Fürstenfeldbruck

Satz: III-satz, Husby

Herstellung: Susanne Bröckelmann

Umschlaggestaltung: Helmut Kraus, www.exclam.de

Druck und Bindung: M.P. Media-Print Informationstechnologie GmbH, 33100 Paderborn

Bibliografische Information der Deutschen Nationalbibliothek

Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

ISBN:

Print   978-3-86490-438-7

PDF   978-3-96088-074-5

ePub   978-3-96088-075-2

mobi   978-3-96088-076-9

2., aktualisierte und erweiterte Auflage

Copyright © 2017 dpunkt.verlag GmbH

Wieblinger Weg 17

69123 Heidelberg

Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.

Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.

Alle Angaben und Programme in diesem Buch wurden mit größter Sorgfalt kontrolliert. Weder Autor noch Verlag können jedoch für Schäden haftbar gemacht werden, die in Zusammenhang mit der Verwendung dieses Buches stehen.

5 4 3 2 1 0

Vorwort

Liebe Leserinnen und Leser,

mobile Geräte wie Smartphones, Tablets und Smartwatches erobern den Erdball, gleichzeitig stagniert der Absatz von PCs oder ist sogar rückläufig. Durch den massenhaften Absatz mobiler Geräte wird auch der Hunger nach Anwendungen, die darauf ausgeführt werden können, immer größer – ein spannender und manchmal sogar lukrativer Markt für Entwickler.

Im Jahr 2011 schrieb ich mein erstes Buch für Entwickler, die sich diesen Markt über Windows Phone erschließen wollten (»Windows Phone 7 Apps entwickeln«). Im Jahr darauf erschien das zweite Buch zur Entwicklung von Apps, dieses Mal für Android (»Java für Android«). Nun, mit dem vorliegenden Buch zur iOS-Programmierung, schließt sich der Kreis.

iOS und Swift

iOS ist das universelle Betriebssystem von Apple, das sowohl die unterschiedlichen iPhone- und iPad-Modelle sowie iPod Touch, CarPlay, Apple TV (tvOS) und Apple Watch (Basis von watchOS ist iOS) antreibt.

Neben den unterschiedlichen Geräten gibt es seit nunmehr zwei Jahren bei Apple auch eine passende moderne Programmiersprache, die die Entwicklung für die iOS-Plattform erleichtern soll: Swift. Swift ist der Nachfolger von Objective-C, das mit seinen fast 30 Jahren langsam, aber sicher abgelöst werden soll. Viele Entwickler setzen ihre neuen Projekte deshalb nur noch mit Swift um.

In diesem Jahr ist Swift in der Version 3.0 erschienen und es enthält viele Änderungen. Dies ist die zweite Auflage des Buches, neben der Aktualisierung auf Swift 3.0 finden Sie in dieser Auflage auch neue Themen. So ist ein Kapitel zum Thema Apple TV 4 (tvOS) hinzugekommen. In diesem erfahren Sie, wie Apps für diese Plattform geschrieben werden. Außerdem gibt es im Buch jetzt ein Kapitel zum Thema parallele Verarbeitung. Auch die Programmierung von Apps mit Unterstützung für Handoff, Spotlight und 3D Touch wird demonstriert. Zuletzt wird nun auch das Thema Drucken aus Apps heraus behandelt.

Leser

Konzentrieren werde ich mich auch in Bezug auf die Leserschaft dieses Buches. Es spricht Leser an, die bisher noch keine iOS-Anwendungen entwickelt haben und auch mit Swift nicht vertraut sind. Auch mit Apples Entwicklungsumgebung Xcode müssen Sie sich nicht auskennen, denn die lernen Sie hier ausführlich kennen. Sie sollten aber grundlegende Kenntnisse in einer beliebigen anderen Programmiersprache haben und über einen Mac-Computer als Entwicklungsrechner verfügen.

Damit ausgestattet sollten Sie kaum Probleme haben, meinen Ausführungen zu folgen und die Beispiele nachzuvollziehen. Nach der Lektüre werden Sie dann genügend über das Betriebssystem iOS, die Entwicklungsumgebung Xcode und die Programmiersprache Swift gelernt haben, um eigene Apps damit zu programmieren.

Beispielcode

Wie in meinen Büchern üblich, so finden Sie auch hier wieder viele Beispiele. Sie sind allesamt mit Swift 3 und Xcode 8 entwickelt worden, und ihren Code können Sie online von der Buch-Webseite herunterladen unter

www.dpunkt.de/swift2

Als Alternative hierzu ist der Code ebenso über meinen GitHub-Account https://github.com/christianbleske verfügbar. Dort können die Beispiele auch einzeln heruntergeladen werden. Wenn neue Swift-Versionen erscheinen, dann werde ich an dieser Stelle aktualisierte Versionen der Beispiele zum Download bereitstellen.

Den Rückmeldungen der Leserinnen und Leser zu meinen bisherigen Büchern habe ich entnommen, dass sich viele etwas komplexere Beispiele und eine »richtige« App wünschen. Diesem Wunsch habe ich versucht in diesem Buch gerecht zu werden. So werden die meisten Themen anhand einer kompletten App, etwa einer App zur Wettervorhersage, erläutert.

Darüber hinaus zieht sich eine besondere Beispiel-App durchs ganze Buch: eine Passwortverwaltung, die in verschiedenen Kapiteln immer wieder aufgegriffen und themenbezogen weiterentwickelt wird.

Ein weiteres besonderes Beispiel ist der Schnelleinstieg, in dem ich Ihnen in kompakter Form die wichtigsten Dinge zeige, die die iOS-Entwicklung mit Swift ausmachen. Das komplette Einstiegsbeispiel finden Sie zusätzlich in Form eines kleinen Videos auf der Buch-Webseite.

Das Blog zum Buch

Begleitend zum Buch gibt es außerdem ein Blog, in dem ich Ihnen zusätzliche Informationen sowie ggf. Fehlerkorrekturen zum Buch bereitstelle und auf Änderungen in Xcode und der iOS-API hinweise. Sie finden es unter

http://christianbleske.wordpress.com

Über das Blog oder per E-Mail unter cb.2000@hotmail dürfen Sie mich auch gerne persönlich ansprechen, wenn bei der Lektüre zu diesem Buch Fragen auftreten sollten.

Christian Bleske, im September 2016

Inhaltsübersicht

1       Einleitung

2       Schnellstart mit Swift

3       Einstieg in Swift

4       Objektorientierte Programmierung mit Swift

5       Grundlagen der App-Entwicklung

6       Fehlersuche und Problembehandlung

7       Tabellen und Controller

8       Core Data

9       Internet und Netzwerke

10     Sensoren

11     iOS Maps

12     Lokalisierung

13     Universal Apps

14     App Extensions

15     WatchKit

16     Apps für Apple TV

17     NSOperation und Dispatch Queue

18     Handoff-API

19     Das Core Spotlight Framework

20     3D Touch verwenden

21     Drucken unter iOS

22     Apps verteilen

Nachwort

Index

Inhaltsverzeichnis

1       Einleitung

1.1     iPhone, iPad & Co.

1.2     Für wen ist dieses Buch gedacht?

1.3     Benötigte Hard- und Software

1.3.1     Welcher Mac genügt?

1.3.2     Welche macOS-Version?

1.4     Xcode und das iOS-SDK

1.4.1     Download und Installation von Xcode

1.4.2     Xcode im Detail

1.4.3     Projektübersicht

1.4.4     Quellcodefenster

1.4.5     Interface Builder

1.4.6     Object Library & Co.

1.4.7     Inspektoren

1.5     Vorlagen in Xcode

1.5.1     Schnellstart: Hallo Playground

1.5.2     Die Projektvorlagen von Xcode für iOS-Apps

1.5.3     Schnellstart: Die Master-Detail-Application-Vorlage

1.5.4     Schnellstart: Die Page-Based-Application-Vorlage

1.5.5     Schnellstart: Die Single-View-Application-Vorlage

1.5.6     Schnellstart: Die Tabbed-Application-Vorlage

1.5.7     Bestandteile eines Projekts

1.6     Apps ausführen

1.6.1     App im Simulator

1.6.2     Die App auf dem iOS-Gerät

1.6.3     Der iOS-Simulator im Detail

1.7     Mehrere Xcode-Versionen parallel verwenden

1.7.1     Ältere Versionen von Xcode finden

1.7.2     Weitere Xcode-Versionen installieren

1.8     Das Apple Developer Program – Anlaufstelle für Entwickler

1.8.1     Von Zertifikaten, Profilen und Identitäten

1.8.2     App auf ein angeschlossenes iOS-Gerät übertragen

2       Schnellstart mit Swift

2.1     Das Projekt anlegen

2.2     Die Oberfläche mit dem Interface Builder bauen

2.3     Controls und Ereignisse

2.4     Mit Swift zum Ergebnis

3       Einstieg in Swift

3.1     Variablen, Konstanten und Zuweisungen

3.1.1     Zuweisungsoperator

3.1.2     Konstanten

3.2     Datentypen

3.2.1     Strings

3.2.2     Ganze Zahlen und Fließkommazahlen

3.2.3     Wahrheitswerte

3.2.4     Aufzählungen (Enumerationen)

3.2.5     Felder (Arrays)

3.2.6     Dictionarys

3.2.7     NS-Datentypen

3.2.8     NSNumber

3.2.9     NSString

3.2.10   NSDate

3.2.11   NSRange

3.2.12   TimeInterval

3.2.13   NSArray/NSMutableArray

3.2.14   NSDictionary und NSMutableDictionary

3.3     Operatoren

3.3.1     Boolesche Operatoren

3.4     Arithmetische Operatoren

3.5     Kontrollstrukturen

3.5.1     Die Fallunterscheidung (if)

3.5.2     Mehrfachauswahl

3.6     Schleifen

3.6.1     Kopfgesteuerte Schleifen (while-Schleife)

3.6.2     Fußgesteuerte Schleifen (repeat...while-Schleife)

3.6.3     Zählschleifen (for-Schleife)

3.7     Funktionen

3.7.1     Funktionen – Parameter übergeben

3.7.2     Funktionen – Werte zurückgeben

3.7.3     Funktionen – Mehrere Werte zurückgeben (Tupel)

3.7.4     Funktionen – Externe Parameternamen

3.7.5     Funktionen – Parameter vorbelegen

3.7.6     Funktionen – Weitere Parametertypen

3.7.7     Verschachtelte Funktionen

3.7.8     Closures

3.7.9     Optionals

3.8     Strukturen Teil 1 (Structs)

4       Objektorientierte Programmierung mit Swift

4.1     Grundlagen der OOP

4.1.1     Strukturen aus objektorientierter Sicht (Strukturen Teil 2)

4.1.2     Was sind Objekte?

4.1.3     Was sind Klassen?

4.1.4     Public, Private und wer noch?

4.2     Eigenschaften (Properties)

4.3     Methoden

4.3.1     Instanzmethoden (Instance Methods)

4.3.2     Klassenmethoden (Type Methods)

4.3.3     Der Initialisierer (Konstruktor)

4.3.4     Der Deinitialisierer (Dekonstruktor)

4.4     Vererbung

4.4.1     Erben (Ableitung) von Klassen

4.4.2     Zugriff auf Elemente der vererbenden Klasse

4.4.3     Initializer delegation

4.4.4     Überschreiben von Methoden

4.4.5     Überschreiben von Eigenschaften

4.4.6     Das Überschreiben von Elementen verhindern

4.5     Schnittstellen

4.5.1     Was sind Protokolle?

4.5.2     Ableitung von Protokollen

4.6     Erweiterung von Typen (Klassen, Strukturen und Enumerationen)

4.6.1     Subscripts

4.6.2     Verschachtelte Typen (Nested Types)

4.6.3     Erweiterungen (Extensions)

4.6.4     Optional Chaining

4.7     Typumwandlung (is & as) und (Any & AnyObject)

4.8     Generics

4.9     Speicherverwaltung (Automatic Reference Counting)

5       Grundlagen der App-Entwicklung

5.1     Storyboard und Interface Builder

5.1.1     App im Storyboard

5.2     Bausteine einer iOS-App

5.2.1     View, ViewController und wer noch?

5.2.2     View-Ereignisse und View-Lebenszyklus

5.2.3     Outlets und Actions

5.2.4     MVC – Model View Controller

5.2.5     Controls

5.2.6     UIAlertController

5.3     Delegate

5.4     Gestenverarbeitung (Touch Events)

5.5     AutoLayout

5.6     Workshop – Passwortverwaltung – Teil 1

5.6.1     Planung der App

5.6.2     Umsetzung des Projekts – Teil 1

6       Fehlersuche und Problembehandlung

6.1     Breakpoints im Quellcode setzen

6.2     Inspizieren von Variablen

6.3     View Debugging

6.4     Fehlerbehandlung mit »try catch«, (NS)Error & Co.

6.5     Fehlerbehandlung bei knappem Speicher

6.6     Vorausetzungen prüfen, Fehler vermeiden

7       Tabellen und Controller

7.1     Schnellstart: App mit Master-Detail-Application-Vorlage

7.1.1     Datenquelle für Master-Detail hinzufügen

7.1.2     Das Projekt testen

7.2     UITableView und Controller

7.3     UITableViewCell

7.4     CustomCell

7.5     NavigationBar anpassen

7.6     Workshop – Passwortverwaltung – Teil 2

8       Core Data

8.1     Was ist Core Data?

8.2     Ein neues Projekt mit Core Data

8.3     Ein Modell für die Speicherung

8.4     Core-Data-Klassen verwenden

8.5     Workshop – Passwortverwaltung – Teil 3

9       Internet und Netzwerke

9.1     Das UIWebView

9.2     Wetter mit JSON

9.2.1     Mit der App zum (aktuellen) Wetter

9.3     Dateiaustausch mit AirDrop

9.4     Daten in der iCloud

10     Sensoren

10.1   Kamera

10.2   Mikrofon

10.3   Beschleunigungssensor

10.4   Positionsdienste

10.5   Workshop – Passwortverwaltung – Teil 4

11     iOS Maps

11.1   Das MapKit-Framework

11.2   Das MapView-Control

11.3   Markierung mit Annotation

11.4   Markierung auf der Karte anzeigen

11.5   Icon ändern

12     Lokalisierung

12.1   Statische Texte in der GUI

12.2   Eine Sprache hinzufügen

12.3   Lokalisierung von Bildern

12.4   Dynamische Texte

12.5   Lokalisierung des App-Namens

12.6   Workshop – Passwortverwaltung – Teil 5

13     Universal Apps

13.1   Universal Apps

13.2   Ein Projekt als Universal App anlegen

13.3   Bilder in der App

13.4   Portrait oder Landscape?

13.5   iPad oder iPhone?

13.6   Icons und Launch Images

13.7   Workshop – Passwortverwaltung – Teil 6

14     App Extensions

14.1   Widgets und iOS

14.2   Ein Projekt für Widgets

14.3   Today Extension anlegen

14.4   Code und GUI des Widgets entwerfen

14.5   Test des Widgets

15     WatchKit

15.1   Apple und die Watch

15.2   Zweiteilung

15.3   Das Projekt im Projekt

15.4   Das WatchKit-Projekt

15.5   GUI für die Watch-App

15.6   Der Code im anderen Abschnitt

15.7   Wie kommt die App auf die Watch?

16     Apps für Apple TV

16.1   Apps im Fernsehen

16.2   Projektvorlagen für Apple-TV-Apps

16.3   Auflösungen berücksichtigen

16.4   Fokus und Steuerung der App

16.5   Der Simulator und Apple Remote

16.6   Würfel im Fernsehen

16.7   Die Programmlogik der Würfel-App

16.8   Icons hinzufügen

16.9   Installation der App

17     NSOperation und Dispatch Queue

17.1   Operationen und Queues

17.2   Grand Central Dispatch und Queues im Überblick

17.2.1   Serielle Queues

17.2.2   Konkurrierende Queues

17.3   Queues in der praktischen Anwendung

17.4   Serielle Abarbeitung

17.5   NSOperation Queues

18     Handoff-API

18.1   Einrichtung von Handoff

18.2   Die Klasse NSUserActivity

18.3   Das Projekt einrichten

18.4   Activity anlegen

18.5   Update und Ereignisse

19     Das Core Spotlight Framework

19.1   Indizierung mit Spotlight

19.2   Neue Struktur für ein Zitat

19.3   Den Text analysieren

19.4   NSUserActivity verwenden

19.5   Activity-Instanz prüfen

19.6   Ein Activity wiederherstellen

20     3D Touch verwenden

20.1   Was ist 3D Touch?

20.2   3D Touch verwenden

20.3   Waage mit 3D Touch

20.4   Shortcuts definieren

20.5   Shortcut im Code

21     Drucken unter iOS

21.1   Was ist Airprint?

21.2   Der Printer Simulator

21.3   Drucken aus einem TextView-Control

21.4   Generierung eines PDF-Dokuments

21.4.1   Drucklayout mit HTML

21.4.2   PDF im Code erzeugen

22     Apps verteilen

22.1   Der Distributionsprozess

22.2   iTunes Connect verwenden

22.2.1   Meine Apps (App registrieren)

22.3   Apps verteilen

22.3.1   App Store

22.3.2   Ad Hoc Deployment

22.3.3   Enterprise Deployment

22.3.4   Bereitstellung einer App zur Verteilung

Nachwort

Index

1 Einleitung

Viele Normalbenutzer waren wohl relativ enttäuscht, als auf der World Wide Developers Conference (WWDC) 2014 keine Uhr, kein Telefon bzw. kein neuer Rechner vorgestellt wurde – die Entwicklergemeinde freute sich dafür umso mehr. Denn im Juni 2014 wurde auf der WWDC eine neue Programmiersprache nebst passender Integration in Apples Entwicklungswerkzeug Xcode präsentiert. Swift heißt die neue Sprache, was man unter anderem als »Mauersegler« übersetzen kann, und der gilt als ganz schneller Vogel. Aber warum eine neue Programmiersprache? Mit Objective-C hatte man doch eigentlich die Mutter aller Sprachen im Programm – oder etwa doch nicht?

Um diese Frage zu beantworten, sehen wir uns folgenden Objective-C-Code-Auszug an: Hier wird einer String-Variablen eine URL zugewiesen und anschließend in einem Browser-Control aufgerufen:

NSString *urlString=@"http://";
urlString = [urlString stringByAppendingString:Id];
NSURL *url = [NSURL URLWithString:[NSString
   stringWithFormat:@"%@",urlString]];
NSURLRequest *requestObj = [NSURLRequest
   requestWithURL:url];
[uiWebView loadRequest:requestObj];

Selbst wenn man ein Fan von Objective-C ist, wird man zugeben müssen, dass die Syntax dieser Sprache im Vergleich zu anderen (Assembler einmal ausgenommen) gewöhnungsbedürftig ist. Gerade Ein- und Umsteigern bereitet die komplexe Syntax von Objective-C oft Probleme. Apple bzw. die Geräte des Unternehmens zeichnen sich dadurch aus, dass sie besonders einfach zu bedienen sind. Von der Haus- und Hofsprache Objective-C kann man das leider nicht sagen.

Es musste also etwas Neues her, um sicherzustellen, dass der Strom von neuen Apps für die iOS-Plattform und die damit verbundenen Geräte auch zukünftig nicht abreißt. So kam man bei Apple vor einigen Jahren auf die Idee, Objective-C noch eine zweite Sprache zur Seite zu stellen – eine moderne Sprache mit einem zeitgemäßen Funktionsumfang (z.B. Generics), die leicht zu erlernen sein soll.

Man kann durchaus festhalten, dass es Apple mit Swift gelungen ist, genau die »Problemzonen« von Objective-C anzugehen und trotzdem kompatibel zum Rest von Apples SDK zu bleiben. Denn neben den bereits genannten Vorzügen von Swift gibt es auch eine Brücke in die »alte« (Objective-C-)Welt. Natürlich ist auch das passende API (Cocoa Touch) in Swift-Apps nutzbar. So muss nicht alles neu entwickelt werden.

1.1 iPhone, iPad & Co.

Eine Programmiersprache allein – und sei sie noch so gut – bringt nichts, wenn die zugrunde liegende Plattform bzw. das Betriebssystem keinen Erfolg hat. Das kann man von iOS nicht sagen, denn es ist auf vielen Geräten im Einsatz.

Daher wird in diesem Buch bewusst nicht allein das iPhone angesprochen, denn iOS treibt darüber hinaus natürlich auch das iPad und den iPod Touch, Apple TV und die Apple Watch an. Seinen Ursprung hat iOS in Apples MacBetriebssystem macOS (OS X). Im Prinzip handelt es sich um eine abgespeckte Variante dieses Betriebssystems, die für die Bedienung mit der Hand und für die Ausführung der Software auf schwächerer Hardware optimiert wurde.

An dieser Stelle sollen Sie aber nicht mit der Historie rund um Apples Hardund Software gequält werden. Die ganze Story ist sicherlich bekannt.

1.2 Für wen ist dieses Buch gedacht?

Dieses Buch ist für Einsteiger mit Programmierkenntnissen gedacht. Fachbegriffe aus dem Bereich der Softwareentwicklung, wie z.B. IDE (Entwicklungsumgebung), Variable oder Schleife, sollten Sie also kennen. Ideal wäre es, wenn Sie bereits mit einer anderen Programmiersprache (z.B. C, C# oder Java) gearbeitet haben. Es wird also vorausgesetzt, dass Sie sich mit dem Thema Programmierung bereits beschäftigt haben. Leser ohne diese Kenntnisse werden es schwer haben, mit dem Buch zurechtzukommen.

Außerdem wird davon ausgegangen, dass Sie die Bedienung von macOS beherrschen, also beispielsweise wissen, wie man Dateien kopiert oder Anwendungen aus dem App Store installiert.

Die Entwicklungsumgebung Xcode müssen Sie nicht kennen.

1.3 Benötigte Hard- und Software

Eine wichtige Frage ist, welche Hard- und Software man benötigt, um Apps für iOS zu entwickeln – vor allem, wenn man bisher auf einer anderen Plattform, z.B. Windows, gearbeitet hat.

1.3.1 Welcher Mac genügt?

Haben Sie bereits einen Mac oder suchen Sie noch ein passendes Gerät? Generell gilt: Jeder Mac, auf dem Yosemite oder El Capitan läuft, kann zur Entwicklung von iOS-Apps verwendet werden. Die neueste Version von macOS 10.12 (Sierra) kann auf den folgenden Macs installiert werden:

Ferner werden mindestens 2 Gigabyte Arbeitsspeicher (besser 4) und 8 Gigabyte Festplattenspeicher benötigt. Sehen Sie diese Werte als Minimalwerte an – mehr ist immer besser!

Ein Tipp, wenn Sie noch keinen Mac haben und einen kaufen möchten: Schauen Sie sich einmal einen Mini an. Warum? Wenn Sie bereits einen anderen Computer (PC) zu Hause haben, dann können Sie vorhandene Hardware (z.B. Monitor, USB-Tastatur, USB-Maus) weiterverwenden. Sofern Sie nicht auf gebrauchte Hardware setzen, ist das die günstigste Variante (ab ca. 600 Euro), um in die Mac-Welt einzusteigen.

1.3.2 Welche macOS-Version?

Yosemite, El Capitan oder Sierra – diese Versionen können Sie zur Entwicklung von Apps mit Swift verwenden. Ältere Versionen von macOS, z.B. Mountain Lion, können nicht zur Entwicklung verwendet werden. Welche Version ist besser? Sierra unterstützt zurzeit die größte Anzahl an APIs. Das liegt daran, dass Sierra die aktuellste macOS-Version ist. Man sollte aber generell darauf achten, dass es mit der neusten Version von macOS nicht zu Stabilitätsproblemen kommt. Konservative Zeitgenossen (der Autor zählt auch dazu) warten deshalb immer auch darauf, dass die aktuellste macOS-Version mindestens ein oder zwei Updates erhalten hat, bevor ein Umstieg erfolgt.

Benötigen Sie ein iOS-Gerät?

Nicht zwingend, aber es erleichtert die Entwicklung von Apps doch sehr. Außerdem kann man nur auf einem »echten« Gerät bestimmte Funktionen (z.B. den Beschleunigungssensor) auch aus dem Code heraus ansprechen. Ob Sie sich für ein iPhone, ein iPad oder gar einen iPod touch entscheiden, das bleibt Ihrem Geschmack überlassen. Möchten Sie in Ihrer App auch auf Telefoniedienste zugreifen, so muss das Testgerät natürlich ein iPhone sein. Achten Sie auch auf darauf, wie lange es noch Updates für das jeweilige Gerät gibt. Nichts ist ärgerlicher, als viel Geld für ein Gerät auszugeben, um dann festzustellen, dass das Gerät vom Hersteller nicht mehr mit neuen Versionen des Betriebssystems versorgt wird.

1.4 Xcode und das iOS-SDK

Apple hat eine Entwicklungsumgebung, die für die Entwicklung von Anwendungen sowohl für iOS als auch für macOS verwendet wird. Diese IDE trägt den Namen Xcode. Es gibt sie seit vielen Jahren (genauer gesagt seit 2003), und mittlerweile ist Xcode relativ umfangreich. Xcode unterstützt nicht nur eine Programmiersprache, denn neben Swift können Sie damit auch Programme in Objective-C, C++ und C schreiben. Im Gegensatz zu den bekannten Java-IDEs (Eclipse/Net Beans) gibt es Xcode nur für den Mac bzw. macOS.

Xcode besteht aus mehreren Komponenten. Zum einen ist da natürlich der Quellcodeeditor, in dem Sie den Code schreiben. Wenn eine grafische Oberfläche für eine Anwendung erstellt werden muss, dann kann man dafür den grafischen Designer von Xcode verwenden. Er trägt den Namen Interface Builder. Mit dem Interface Builder lassen sich Oberflächen von Anwendungen via Drag & Drop zusammenstellen. Das bedeutet: Ähnlich wie in Microsofts Visual Studio gibt es einen Bereich mit vorgefertigten Controls, die auf einem Formular (View) abgelegt werden können.

1.4.1 Download und Installation von Xcode

Neben Xcode benötigen Sie für die Entwicklung von Apps für iOS noch das entsprechende SDK. Es handelt sich dabei aber nicht um einen separaten Download neben Xcode, sondern Sie laden einfach die neueste Xcode-Version aus dem App Store herunter. Diese Version enthält dann alle benötigten Komponenten.

Es gibt mehrere Wege, um Xcode auf Ihren Mac herunterzuladen. Der einfachste Weg soll Ihnen an dieser Stelle vorgestellt werden. Er führt über den App Store von macOS zum Ziel. Öffnen Sie den App Store, und geben Sie im Suchfeld einfach »Xcode« ein. Nach Aktivierung der Suche sollte gleich der erste Treffer in den Suchergebnissen Xcode sein.

image

Abb. 1–1 Download und Installation von Xcode über den App Store

Wenn Sie den Xcode-Link auswählen, kommen Sie auf die Xcode-Homepage im App Store. Zum Download und zur Installation müssen Sie einfach den Laden-Button einmal anklicken und anschließend die grüne Schaltfläche mit der Beschriftung App installieren betätigen. Der Rest läuft vollautomatisch ab. Das heißt, nach dem Download wird Xcode auch gleich automatisch installiert. Informationen zur Größe des Downloads und zur aktuellen Versionsnummer finden Sie ebenfalls auf der Xcode-Homepage. Nach dem Download und der Installation können Sie Xcode über das Launchpad starten. Dort wurde ein entsprechendes Icon angelegt. Alternativ ist natürlich der Start aus dem Verzeichnis Programme möglich. Alle notwendigen Dateien von Xcode befinden sich im Xcode-Package. Das bedeutet: Wenn Sie Xcode wieder loswerden möchten, müssen Sie nur das entsprechende Paket aus dem Programme-Verzeichnis auf den Papierkorb ziehen.

1.4.2 Xcode im Detail

Nachdem Start von Xcode gibt es zwei Möglichkeiten, wie sich Xcode meldet: Entweder zeigt Xcode den Willkommens-Dialog an (siehe Abb. 1–2) oder es öffnet automatisch das bzw. die zuletzt geöffneten Projekte. Direkt nach der Installation wird der Willkommens-Dialog angezeigt.

image

Abb. 1–2 Der Willkommens-Dialog von Xcode

Der Willkommens-Dialog von Xcode bietet unterschiedliche Optionen. Im linken Bereich werden unter anderem folgende Punkte angeboten:

Wenn man bereits ein paar Projekte mit Xcode erstellt bzw. bearbeitet hat, dann werden zusätzlich im rechten Bereich die bisher geöffneten Projekte angezeigt. Wird ein neues Projekt angelegt, so zeigt Xcode das Projekt anschließend in der Übersicht an. In dieser Ansicht sind nun mehrere Bereiche von Xcode gut sichtbar (siehe Abb. 1–3).

image

Abb. 1–3 Die Bereiche von Xcode mit einem geöffneten Projekt

Im oberen Bereich von Xcode ( in Abb. 1–3) befindet sich die Toolbar von Xcode. In der Toolbar wird mittig das gerade geöffnete Projekt angezeigt. Direkt unterhalb des Projektnamens befindet sich ein Textfeld, dem Sie den aktuellen Status des Projekts entnehmen können. Wenn Sie beispielsweise ein Projekt starten, so zeigt hier ein Fortschrittsbalken (blau), wie lange es noch dauert, bis das Projekt übersetzt und gestartet wird.

Im linken Bereich der Toolbar befindet sich die Build and Run-Schaltfläche, mit der das Projekt (im Simulator oder auf einem angeschlossenen iOS-Gerät) gestartet wird. Direkt danach kommt die Schaltfläche zum Beenden eines laufenden Projekts. Dann folgen der Projektname und das Gerät, auf dem die App gestartet wird. Auch wenn es nicht offensichtlich ist: Es handelt sich hierbei um ein Auswahlfeld. Aufgelistet finden Sie hier die möglichen (simulierten) Geräte sowie ein eventuell angeschlossenes iOS-Gerät.

Im rechten Bereich der Toolbar befinden sich sechs Schaltflächen. Die erste (von links nach rechts) aktiviert den Standard Editor. Darin werden die Projekt-details angezeigt, z.B. die Versionsnummer oder Informationen zum Deployment (Zielversion von iOS oder Zielgerät).

Unterhalb der Toolbar befindet sich im linken Bereich ( in Abb. 1–3) der Project Navigator. Diesem können Sie die aktuelle Struktur des Projekts entnehmen. Es handelt sich hierbei allerdings nicht um eine reine Ansicht auf Dateiebene, sondern um eine logische Ansicht des Projekts. Änderungen, die an dieser Stelle vorgenommen werden können, müssen sich aber nicht auf die physikalische Struktur des Projekts auswirken. Abhängig vom im Project Navigator ausgewählten Element des Projekts ändert sich auch die Ansicht in Xcode. Wählt man an dieser Stelle beispielsweise eine Codedatei aus (ihr Name endet auf .swift), dann wird zentral das Codefenster von Xcode geöffnet.

image

Abb. 1–4 Auswahl des iOS-Geräts zur Ausführung des Projekts

Von links folgt dann die Project and Target-Übersicht (siehe in Abb. 1–3). Darin können Sie zwischen den Einstellungen für das Projekt selbst (Project) und der Konfiguration zur Erstellung der Anwendung (Target) umschalten. Im Target-Bereich befindet sich auch die Konfiguration der Anwendungstests.

In der Mitte ( in Abb. 1–3) sehen Sie das zentrale Fenster, in dem beispielsweise die Projektkonfiguration, der Quellcodeeditor oder auch der Interface Builder angezeigt werden.

Am rechten Rand von Xcode ( und in Abb. 1–3) befinden sich dann noch zwei Bereiche mit unterschiedlichen Funktionen. Im Bereich von werden die sogenannten Inspektoren angezeigt. Je nach Auswahl im Project Navigator oder Interface Builder werden in einem Inspektor unterschiedliche Informationen angezeigt bzw. können dort bearbeitet werden. Der letzte Bereich ( in Abb. 1–3) enthält ebenfalls unterschiedliche Werkzeuge. Hier befindet sich unter anderem die Object Library (enthält die Controls), die File Template Library (Vorlagen für Dateien) oder auch die Code Snippet Library (Codevorlagen).

1.4.3 Projektübersicht

Im letzten Abschnitt wurde unter anderem der Project Navigator bereits kurz vorgestellt. Dieser erlaubt die Navigation im Projekt. Im Project Navigator ausgewählte Elemente haben Einfluss auf das, was zentral in Xcode angezeigt wird. Wählt man in diesem Bereich z.B. eine Quellcodedatei aus, so wird automatisch der Codeeditor von Xcode geöffnet. Aber auch der Interface Builder lässt sich hier aktivieren. Hierzu müssen Sie im Project Navigator nur eine passende Datei auswählen, die den Interface Builder zur Darstellung verwendet. Sie erkennen diese Dateien an der Endung *.storyboard und *.xib.

image

Abb. 1–5 Der Project Navigator von Xcode

Neben dem Project Navigator gibt es aber auch noch andere Funktionen, die in diesem Teil der IDE angezeigt werden. In der Leiste direkt oberhalb des Project Navigator gibt es dafür noch weitere Schaltflächen. Das erste Symbol (Ordner) aktiviert den Project Navigator. Der zweite Button aktiviert den Symbol Navigator, in dem die Klassen eines Projekts angezeigt werden. Es folgt der Find Navigator, über den sich im Projekt suchen lässt. Das nächste Icon aktiviert den Issue Navigator, der Informationen zu Problemen im Projekt enthält. Danach folgen der Test Navigator (Übersicht der Tests im Projekt), der Debug Navigator, der Breakpoint Navigator und der Report Navigator.

1.4.4 Quellcodefenster

Wählt man im Project Navigator eine Quellcodedatei (diese Dateien enden auf *.swift) aus, so wird automatisch der Quellcodeeditor geöffnet.

image

Abb. 1–6 Der Codeeditor von Xcode

Im Editor stehen alle bekannten Funktionen (Bearbeiten, Kopieren, Einfügen) zur Bearbeitung von Texten zur Verfügung. Die gerade geöffnete Quellcodedatei kann nicht nur dem Project Navigator entnommen werden, sie wird auch direkt oberhalb des Editors angezeigt. Eine nützliche Funktion ergibt sich in Verbindung mit der Code Snippet Library.

image

Abb. 1–7 Code Snippet Library und Codeeditor

Aus der Code Snippet Library können Codeblöcke via Drag & Drop im Editor abgelegt werden. An der abgelegten Stelle wird dann der jeweilige Codeblock (z.B. eine Klasse) automatisch eingefügt.

1.4.5 Interface Builder

Der Interface Builder ist das Werkzeug in Xcode, um Oberflächen für Anwendungen zu entwickeln. Ähnlich wie in anderen Entwicklungsumgebungen, so wird auch in Xcode eine Anwendung Formular für Formular entwickelt. Controls – beispielsweise Textfelder oder Schaltflächen – werden aus der Object Library (siehe auch Abschnitt 1.4.6) via Drag & Drop in das gerade im Interface Builder geöffnete View eingefügt.

In Abbildung 1–8 ist links neben dem Interface Builder das sogenannte Document Outline zu sehen. Nachdem das Label-Control in Abbildung 1–8 in das View eingefügt wurde, wird neben der Ansicht im Interface Builder auch das Document Outline aktualisiert. Darin werden die im View eingefügten Elemente innerhalb einer hierarchischen Ansicht angezeigt. Das Document Outline kann so auch zur Selektion von Elementen in einem View verwendet werden, wenn die direkte Auswahl im Interface Builder vielleicht nicht möglich ist – beispielsweise weil ein anderes Control das auszuwählende verdeckt. Um Eigenschaften eines Views oder eines Controls zu bearbeiten, werden die Inspektoren von Xcode verwendet.

image

Abb. 1–8 Der Interface Builder von Xcode

1.4.6 Object Library & Co.

Im letzten Abschnitt wurde bereits eine Funktion angesprochen, die im rechten Bereich der IDE angesiedelt ist. Die Object Library enthält unter anderem Elemente (Controls), die innerhalb eines Views eingefügt werden können. Das ist aber längst nicht alles.

image

Abb. 1–9 Die Object Library von Xcode

In Abbildung 1–9 ist gut zu sehen, dass beispielsweise auch ein View Controller innerhalb der Object Library vorhanden ist. Wenn man eine App erstellt, die über mehrere Views verfügt, dann können in einer *.storyboard-Datei zusätzliche Views eingefügt werden. Es ist also nicht erforderlich, für jedes neue View eine eigene Datei anzulegen.

Ein weiteres Fenster in diesem Bereich ist die bereits vorgestellte Code Snippet Library, die kurze Codeschnipsel zum Einfügen in den Xcode-Texteditor enthält. Neben diesen beiden Bibliotheken gibt es auch noch die File Template Library. In ihr sind Vorlagen für Dateien enthalten, die in ein Projekt eingefügt werden können. Auch das geschieht via Drag & Drop. Hierbei ist aber nicht der Interface Builder das Ziel der Drop-Aktion, sondern der Project Navigator. Um beispielsweise eine neue Swift-Code-Datei anzulegen, müssen Sie nur die entsprechende Vorlage (Swift-File) aus der File Template Library in das aktuelle Projekt einfügen, das gerade im Project Navigator angezeigt wird.

image

Abb. 1–10 Die File Template Library von Xcode

Hinter dem vierten Button in diesem Bereich verbirgt sich die Media Library. Hierbei handelt es sich um einen Shortcut auf die Medien-Elemente (z.B. Bilder, Audio- und Videodateien), die Sie einem Projekt hinzugefügt haben.

1.4.7 Inspektoren

Wichtig für die Arbeit in Xcode sind die sogenannten Inspektoren. Diese werden in der rechten oberen Ecke von Xcode angezeigt. Abhängig davon, was im Project Navigator oder im Interface Builder markiert wurde, wird automatisch der Inspektor geöffnet, mit dem sich die Eigenschaften des zuvor markierten Elements bearbeiten lassen. In Abbildung 1–11 wurde beispielsweise im Interface Builder ein Button-Control markiert.

image

Abb. 1–11 Der Attributes Inspector von Xcode

Wird nun der Attributes Inspector geöffnet (siehe Abb. 1–11), so können die Eigenschaften des Buttons (z.B. seine Beschriftung oder ein Bild oder die Hintergrundfarbe) über den Inspektor konfiguriert werden.

Insgesamt gibt es sechs Inspektoren:

Sie dürften jetzt eine rudimentäre Vorstellung davon haben, was sich hinter einigen der Funktionen von Xcode verbirgt. In den folgenden Abschnitten werden einige Funktionen vertiefend besprochen.

1.5 Vorlagen in Xcode

Nach dieser Einführung wird es Zeit, sich etwas mit den in Xcode enthaltenen Vorlagen zur Erstellung von Apps zu beschäftigen. Eine App muss nämlich (analog zur anderen Entwicklungswerkzeugen) nicht komplett neu entwickelt werden. Xcode stellt Vorlagen bereit, mit denen sich auf Knopfdruck das Gerüst für einen bestimmten Typ von Anwendung erstellen lässt.

Bevor allerdings die Vorlagen zur Erstellung von Apps vorgestellt werden, besprechen wir einen für uns besonders interessanten Vorlagentyp, der seit Xcode 6 existiert: den Playground.

1.5.1 Schnellstart: Hallo Playground

Playground ist ein Typ von Vorlage, der mit Swift eingeführt wurde und auch nur mit Swift als Sprache funktioniert. Mit der Playground-Vorlage wird auch kein Gerüst für eine Anwendung erzeugt, sondern ein »Bereich«, um schnell und direkt Swift-Code ausprobieren zu können. Diese Umgebung ähnelt sicherlich ein wenig den früheren Basic-Interpretern. Startet man Xcode, so gibt es zwei Möglichkeiten, die Playground-Vorlage aufzurufen.

Im Welcome to Xcode-Dialog gibt es direkt einen entsprechenden Bereich Get startet with a playground, um einen neuen Playground anzulegen. Klickt man in den entsprechenden Bereich, so wird man aufgefordert, eine Bezeichnung einzugeben sowie zu entscheiden, ob der Playground in Verbindung mit iOS oder macOS angelegt werden soll. Nach Betätigung des Next-Buttons muss man sich noch entscheiden, in welchem Verzeichnis der neue Playground gespeichert werden soll. Ein Klick auf den Create-Button öffnet dann das Playground-Formular.