Cover

Inhalt

Titelei

Impressum

Inhalt

Widmung

Vorwort

Danksagung

1 Über iOS

1.1 Was ist iOS?

1.1.1 iOS und macOS

1.1.2 Besonderheiten der iOS-Plattform

1.2 iOS für Entwickler

1.2.1 Hardware für Entwickler

1.2.2 Software für Entwickler

1.2.3 Das Apple Developer Program

1.3 Der Aufbau von iOS

1.3.1 Die vier Schichten von iOS

1.4 Die perfekte iOS-App

1.4.1 iOS Human Interface Guidelines

2 Die (bisherige) Programmiersprache ‒ Objective-C

2.1 Über Objective-C und objektorientierte Programmierung

2.2 Grundlagen der Programmierung

2.2.1 Objekte

2.2.2 Primitive Datentypen

2.2.3 Variablen

2.2.4 Operatoren

2.2.5 Abfragen und Schleifen

2.2.6 Kommentare

2.3 Aufbau einer Klasse

2.3.1 Die Header-Datei

2.3.2 Die Implementation-Datei

2.3.3 Los geht’s: Unsere erste Klasse!

2.4 Methoden

2.4.1 Aufbau von Methoden

2.4.2 Methoden in Header- und Implementation-Dateien einer Klasse

2.4.3 Implementierung von Methoden

2.4.4 Methoden aufrufen

2.4.5 Klassen- und Instanzmethoden

2.5 Instanzvariablen

2.6 Properties

2.6.1 Aufbau einer Property

2.6.2 Die Punktnotation

2.6.3 Optionen

2.6.4 Direktzugriff auf Properties

2.6.5 Setter und Getter überschreiben

2.7 Konstanten

2.7.1 Deklaration von Konstanten

2.8 Namenskonventionen

2.8.1 Klassen

2.8.2 Methoden

2.8.3 Properties

2.9 Strukturen

2.9.1 enum

2.9.2 typedef

2.10 Initialisierung von Objekten

2.10.1 alloc und init

2.10.2 Zeiger

2.11 init im Detail

2.11.1 Erstellen eigener init-Methoden

2.11.2 Designated Initializer

2.12 Vererbung

2.12.1 Methoden der Superklasse überschreiben

2.13 Kategorien

2.13.1 Aufbau von Kategorien

2.13.2 Kategorien in Xcode erstellen

2.13.3 Verwenden von Kategorien

2.14 Erweiterungen

2.14.1 Aufbau von Erweiterungen

2.14.2 Erweiterungen innerhalb der Implementation-Datei

2.14.3 Erweiterungen in Xcode erstellen

2.15 Protokolle

2.15.1 Aufbau von Protokollen

2.15.2 Zuweisen eines Protokolls zu einer Klasse

2.15.3 Vererbung in Protokollen

2.15.4 Protokolle in Xcode erstellen

2.16 #import und @class

2.16.1 #import

2.16.2 @class

2.17 Blöcke

2.17.1 Was sind Blöcke?

2.17.2 Aufbau eines Blocks

2.17.3 Zuweisen eines Blocks zu einer Variablen

2.17.4 Nutzen eines Blocks als Parameter einer Methode

2.17.5 Blöcke als Properties

2.17.6 Blockvariablen

2.17.7 Globale Blöcke

2.18 Singletons

3 Der Neue im Club ‒ Swift

3.1 Programmierst du noch oder swifst du schon?

3.1.1 Über Swift

3.1.2 Voraussetzungen zur Nutzung von Swift

3.1.3 Swift und Objective-C

3.1.4 Playgrounds

3.2 Grundlagen der Programmierung

3.2.1 Swift Standard Library und Fundamental Types

3.2.2 Variablen und Konstanten

3.2.3 Operatoren

3.2.4 Abfragen und Schleifen

3.2.5 Kommentare

3.2.6 print

3.3 Fundamental Types und Swift Standard Library im Detail

3.3.1 Strings

3.3.2 Arrays

3.3.3 Dictionaries

3.3.4 Any und AnyObject

3.4 Aufbau einer Klasse

3.4.1 Erstellen einer Instanz einer Klasse

3.4.2 Zugriff auf Eigenschaften einer Klasse

3.5 Methoden

3.5.1 Methoden mit Rückgabewert

3.5.2 Methoden mit Parametern

3.5.3 Local und External Parameter Names

3.5.4 Methodennamen in Swift

3.5.5 Aufruf von Methoden einer Klasse

3.5.6 Zugriff auf andere Eigenschaften und Methoden einer Klasse

3.5.7 Klassen- und Instanzmethoden

3.5.8 Verändern von Parametern einer Methode mittels inout

3.6 Closures

3.6.1 Closures als Variablen und Konstanten

3.6.2 Closures als Parameter für Methoden

3.6.3 Kurzschreibweise für Closures als Parameter von Methoden

3.7 Properties

3.7.1 Computed Properties

3.7.2 Property Observers

3.7.3 Type Properties

3.8 Vererbung

3.8.1 Überschreiben von Eigenschaften und Methoden der Superklasse

3.8.2 Zugriff auf Eigenschaften und Methoden der Superklasse

3.9 Optionals

3.9.1 Deklaration von Optionals

3.9.2 Zugriff auf Optionals

3.10 Initialisierung

3.10.1 Schreiben von Initializern

3.10.2 Designated und Convenience Initializer

3.10.3 Initializer und Vererbung

3.10.4 Deinitialisierung

3.11 Type Casting

3.11.1 Typ prüfen

3.11.2 Downcasting

3.12 Enumerations

3.12.1 Zusätzliche Werte in Membern einer Enumeration speichern

3.13 Structures

3.14 Generics

3.14.1 Generic Function

3.14.2 Generic Type

3.15 Error Handling Model

3.16 Extensions

3.17 Protocols

3.17.1 Protocol Type

3.18 Access Control

4 Grundlagen der iOS-Entwicklung

4.1 Foundation-Framework

4.1.1 Die wichtigsten Klassen aus dem Foundation-Framework und ihre Funktionen

4.2 UIKit-Framework

4.3 Speicherverwaltung

4.4 Besonderheiten von Objective-C

4.4.1 Kurzschreibweisen zum Erstellen von Objekten

4.4.2 Vergleichen der Werte von verschiedenen Objekten

4.4.3 Schlüsselwörter zum Zusammenspiel mit Optionals

4.5 Besonderheiten von Swift

4.5.1 Zusammenspiel zwischen Fundamental Types und Foundation-Framework-Klassen

4.5.2 Playgrounds im Detail

4.6 Objective-C und Swift vereint

4.6.1 Objective-C-Code in Swift verwenden

4.6.2 Swift-Code in Objective-C verwenden

4.7 NSError

4.7.1 Eigene Methode mit NSError-Parameter erstellen

4.8 Dokumentation

4.8.1 Besonderheiten bei Methoden

4.8.2 Doxygen-Dokumentation in Xcode

4.9 Nebenläufigkeit mit Grand Central Dispatch

4.9.1 Parallel laufenden Code erstellen

4.10 Grundlegende Struktur einer App

4.10.1 main.m

4.10.2 Info.plist

4.10.3 App Delegate

4.11 Lebenszyklus einer iOS-App

4.11.1 Start einer App

4.11.2 Lebenszyklus einer App

4.11.3 Die Methoden des App Delegate

4.11.4 Start der App

4.12 Tipps für die tägliche Arbeit

4.12.1 Die netten Kleinigkeiten . . .

4.12.2 Fast Enumeration in Objective-C

4.12.3 Type Casting in Objective-C

4.12.4 Xcode-Beispielprojekte

5 Die Entwicklungsumgebung ‒ Xcode

5.1 Willkommen bei Xcode!

5.1.1 Was ist Xcode?

5.1.2 Interface Builder und Xcode ‒ endlich vereint!

5.2 Arbeiten mit Xcode

5.2.1 Dateien und Formate eines Xcode-Projekts

5.2.2 Umgang mit Dateien und Ordnern in Xcode

5.3 Der Aufbau von Xcode

5.3.1 Die Toolbar

5.3.2 Die Navigation Area

5.3.3 Die Editor Area

5.3.4 Die Utilities Area

5.3.5 Die Debug Area

5.4 Einstellungen in Xcode

5.4.1 Anpassen von Xcode

5.4.2 General

5.4.3 Accounts

5.4.4 Behaviors

5.4.5 Navigation

5.4.6 Fonts & Colors

5.4.7 Text Editing

5.4.8 Key Bindings

5.4.9 Source Control

5.4.10 Components

5.4.11 Locations

5.5 Projekteinstellungen

5.5.1 Grundlagen

5.5.2 Einstellungen am Projekt

5.5.3 Einstellungen am Target

5.5.4 Einstellungen am Scheme

5.6 Grafiken und Asset-Bundles

5.7 Lokalisierung mit Localizable.strings

5.7.1 Grundlagen

5.7.2 NSLocalizedString

5.7.3 Erstellen der Localizable.strings-Datei

5.7.4 Localized String mit Parameter

5.7.5 Alle Localized Strings automatisch auslesen

5.8 Der iOS-Simulator

5.8.1 Grundlagen

5.8.2 Funktionen und Möglichkeiten des Simulators

5.8.3 Performance und Einschränkungen des Simulators

5.9 Dokumentation

5.9.1 Nichts geht über die Dokumentation!

5.9.2 Das Documentation-Window

5.9.3 Direktes Aufrufen der Dokumentation aus Xcode heraus

5.10 Devices

5.11 Organizer

5.12 Debugging in Xcode

5.12.1 Was ist Debugging?

5.12.2 Die Debug Area

5.12.3 Die Arbeit mit dem Debugger ‒ NSLog und Breakpoints

5.12.4 Debug Navigator

5.13 Refactoring

5.13.1 Grundlagen

5.13.2 Refactoring-Funktionen in Xcode

5.14 Instruments

5.14.1 Über Instruments

5.14.2 Nächste Schritte

5.15 Tipps für die tägliche Arbeit

5.15.1 Man lernt immer was dazu!

5.15.2 Code Snippets

5.15.3 Open Quickly

5.15.4 Caller einer Methode feststellen

5.15.5 Speicherorte für Ordner und Dateien ändern

5.15.6 Shortcuts für die Navigation Area

5.15.7 Run Without Building

5.15.8 Clean Build

6 MVC ‒ Model-View-Controller

6.1 MVC . . . was?

6.2 MVC in der Praxis

6.3 Kommunikation zwischen Model und Controller

6.3.1 Key-Value-Observing

6.3.2 Notifications

6.4 Kommunikation zwischen View und Controller

6.4.1 Target-Action

6.4.2 Delegation

7 Die Vielfalt der (View-)Controller

7.1 Alles beginnt mit einem View-Controller . . .

7.2 UIViewController ‒ die Mutter aller View-Controller

7.2.1 Wichtige Methoden von UIViewController

7.2.2 UIView ‒ fester Bestandteil eines jeden UIViewControllers

7.3 View-Controller-Hierarchien

7.4 View-Controller erstellen mit dem Interface Builder

7.4.1 View-Controller mit NIB-File

7.5 Storyboards

7.5.1 Über Storyboards

7.5.2 Das Storyboard-Projekt

7.5.3 Die Klasse UIStoryboard

7.5.4 Segues

7.5.5 Zugriff über den App Delegate

7.5.6 Quo vadis ‒ Storyboard oder NIB-File?

7.6 Auto Layout

7.6.1 Setzen und Konfigurieren von Constraints

7.6.2 Constraints bearbeiten und weiter anpassen

7.6.3 „Optimale“ Constraints automatisch setzen lassen

7.7 UIViewController und seine Subklassen

7.7.1 UINavigationController

7.7.2 UITabBarController

7.7.3 UITableViewController

7.7.4 UICollectionViewController

7.7.5 UISplitViewController

8 Views erstellen und gestalten

8.1 Über Views in iOS

8.2 UIView ‒ die Mutter aller Views

8.3 Arbeiten mit UIView

8.3.1 Programmatisches Erstellen einer UIView

8.3.2 View-Hierarchien

8.3.3 Weiterführendes zu UIView

8.4 Views erstellen mit dem Interface Builder

8.4.1 Grundlagen

8.4.2 View-Klasse mit NIB-File erstellen

8.4.3 Beliebiges NIB-File laden und verwenden

8.4.4 NIB-File nachträglich erstellen

8.4.5 Unterschiedliche NIB-Files für iPhone und iPad erstellen

8.5 Die wichtigsten Views und ihre Funktionen

8.5.1 Grundlagen

8.5.2 UILabel

8.5.3 UIButton

8.5.4 UISwitch

8.5.5 UISegmentedControl

8.5.6 UITextField

8.5.7 UIImageView

8.5.8 UIPickerView

8.5.9 UIDatePicker

8.5.10 UIWebView

8.5.11 UIMapView

8.5.12 UIScrollView

8.5.13 UITextView

8.5.14 UITableView

8.5.15 UICollectionView

8.5.16 Wichtig und unerlässlich: die Dokumentation!

8.5.17 Views und der Interface Builder

8.6 Die Grundlage gut gestalteter Views

9 Das Model und die Datenhaltung

9.1 Die Logik Ihrer App

9.2 Benutzereinstellungen sichern und nutzen

9.2.1 Über UserDefaults

9.2.2 Standardeinstellungen festlegen

9.3 Zugriff auf das Dateisystem

9.3.1 Das Dateisystem von iOS

9.3.2 FileManager

9.3.3 File-Sharing-Funktion nutzen

9.4 Core Data

9.4.1 Datenbankverwaltung mit Core Data

9.4.2 Wie funktioniert Core Data?

9.4.3 Die Klassen und Bestandteile von Core Data

9.4.4 Aufbau eines Standard-Core Data Stacks

9.4.5 Der Core Data-Editor

9.4.6 Erstellen eines neuen Managed-Objects

9.4.7 Löschen eines Managed-Objects

9.4.8 Laden von Managed-Objects

9.4.9 Was kommt als Nächstes?

10 Local und Push Notifications

10.1 Was sind Notifications?

10.2 Registrieren von Notification Types

10.3 Registrieren von Notification Categories und Actions

10.3.1 Erstellen einer Action

10.3.2 Erstellen einer Kategorie

10.3.3 Registrieren von Kategorien

10.3.4 Reagieren auf eine Action

10.4 Local Notifications

10.4.1 Konfiguration des Alerts

10.4.2 Konfiguration des Sounds

10.4.3 Konfiguration des Badge Values

10.4.4 Konfiguration von Audio, Bildern und Videos

10.4.5 Speichern zusätzlicher Informationen in einer Local Notification

10.4.6 Festlegen des Ausführungsereignisses

10.4.7 Erstellen von Notification Requests

10.4.8 Registrieren von Local Notifications im System

10.4.9 Abbrechen bereits registrierter Local Notifications

10.4.10 Reagieren auf den Erhalt einer Notification bei aktiver App

10.5 Push Notifications

10.5.1 Versand von Push Notifications

10.5.2 Erstellen einer Push Notification

10.5.3 Quality of Service

11 Extensions

11.1 Verfügbare Typen von Extensions

11.2 Erstellen von Extensions in Xcode

11.3 Funktionsweise einer Extension

11.4 Wichtige Klassen und Objekte

11.5 Unterstützte Dateitypen für Share- und Action-Extensions festlegen

11.6 Action Extension

11.6.1 Action mit User Interface

11.6.2 Action ohne User Interface

11.7 Content Blocker Extension

11.7.1 Konfiguration eines Content Blockers

11.7.2 Aktualisieren eines Content Blockers

11.7.3 Die Klasse ContentBlockerRequestHandler

11.8 Custom Keyboard

11.8.1 Erstellen eines Custom Keyboards

11.8.2 Arbeiten mit der Klasse UIInputViewController

11.8.3 Bearbeiten und Setzen von Text

11.8.4 Mehrsprachige Keyboards

11.9 Document Provider

11.9.1 Document Provider-Extension

11.9.2 File Provider

11.9.3 Document Provider aufrufen

11.10 iMessage Extension

11.10.1 Aufbau und Funktionsweise der iMessage Extension

11.10.2 Entwicklung einer iMessage Extension

11.11 Intents Extension

11.11.1 Domains und Intents

11.11.2 Bestandteile einer Intents Extension

11.11.3 Funktionsweise einer Intents Extension

11.11.4 Übersicht über verfügbare Intents

11.11.5 Voraussetzungen zur Verwendung von Siri in einer Intents Extension

11.11.6 Erweitern von Siris Vokabular

11.11.7 Testen einer Intents Extension

11.12 Intents UI Extension

11.12.1 Vorbereitung der Intents UI Extension

11.12.2 Konfiguration des View-Controllers

11.12.3 Default-Layout bei Maps und Messaging deaktivieren

11.13 Notification Content Extension

11.13.1 UNNotificationContentExtension

11.13.2 Konfiguration der Info.plist-Datei

11.14 Notification Service Extension

11.15 Photo Editing Extension

11.15.1 Festlegen der unterstützten Typen zur Bearbeitung

11.16 Share Extension

11.17 Shared Links Extension

11.17.1 Erstellen eines NSExtensionItem

11.17.2 NSExtensionItem als Shared Link bereitstellen

11.18 Sticker Pack Extension

11.18.1 Erstellen einer Sticker Pack Extension

11.18.2 Komplexere Sticker Pack Extensions erstellen

11.19 Today Extension

11.19.1 Today Extension testen

11.20 Watch App

11.21 App Groups

11.21.1 Registrieren einer App Group im Apple Developer Portal

11.21.2 Registrieren einer App Group innerhalb einer App

11.21.3 Zugriff auf eine App Group

12 App-Entwicklung für die Apple Watch

12.1 Apples neues großes Ding: Die Apple Watch

12.2 Möglichkeiten, Einschränkungen, Unterschiede

12.3 Das WatchKit SDK

12.3.1 WKInterfaceController

12.3.2 WKInterfaceObject

12.3.3 WKExtensionDelegate

12.3.4 Weitere Klassen

12.4 Aufbau und Funktionsweise von Apple Watch-Apps

12.4.1 iPhone-App

12.4.2 WatchKit Extension

12.4.3 WatchKit App

12.4.4 Verbindung von WatchKit Extension und WatchKit App

12.4.5 Notification Scene

12.4.6 Complications

12.5 Erstellen einer WatchKit App mitsamt WatchKit Extension

12.5.1 Dateien der WatchKit Extension

12.5.2 Dateien der WatchKit App

12.5.3 Ausführen und Testen der Apple Watch-App

12.6 Lebenszyklus einer WatchKit App

12.7 Der WKInterfaceController im Detail

12.7.1 Initialisierung

12.7.2 Activation Events

12.7.3 Setzen des Titels

12.7.4 Ein- und Ausblenden von Interface-Controllern

12.7.5 Umsetzen eines Navigation Stacks

12.7.6 Reaktion auf Storyboard-Events

12.7.7 Weitere Attribute

12.7.8 Weitere Funktionen von WKInterfaceController

12.8 Arbeiten mit dem Interface-Storyboard einer WatchKit App

12.8.1 Erstellen und Konfigurieren eines WKInterfaceController

12.8.2 Hinzufügen und Konfigurieren von Interface-Elementen

12.8.3 Positionierung und Anordnung von Interface-Elementen

12.8.4 Ändern der Größe von Interface-Elementen

12.8.5 Unterschiedliche Konfigurationen für verschiedene Apple Watch-Größen

12.8.6 Gruppierung von Interface-Elementen mittels WKInterfaceGroup

12.8.7 Verbindung von Storyboard und Code

12.8.8 Zusammenfassen mehrerer Interface-Controller zu einem page-based Interface

12.8.9 Erstellen und Konfigurieren von Segues

12.9 Erstellen von Tabellen

12.9.1 Hinzufügen einer Tabelle im Storyboard

12.9.2 Konfiguration einer Zelle

12.9.3 Konfiguration einer Tabelle

12.9.4 Verwenden verschiedener Zellen in einer Tabelle

12.9.5 Zellen hinzufügen und entfernen

12.9.6 Direkt zu einer bestimmten Zelle scrollen

12.9.7 Aktuelle Anzahl an Zellen auslesen

12.9.8 Auf die Auswahl einer Zelle reagieren

12.9.9 Segues von Zellen einer Tabelle über das Storyboard konfigurieren

12.10 Erstellen von Menüs

12.10.1 Erstellen eines Menüs im Storyboard

12.10.2 Erstellen eines Menüs im Code

12.10.3 Fazit: Menüerstellung im Storyboard oder im Code?

12.10.4 Mischen von Menüpunkten aus Storyboard und Code

12.11 Eingabe von Text

12.12 Notification Scene

12.12.1 Short-Look und Long-Look Interface

12.12.2 Long-Look Interface im Detail

12.12.3 Erstellen eigener Notification Scenes

12.12.4 Testen einer Notification Scene

12.13 Complications

12.13.1 Was sind Complications?

12.13.2 Das ClockKit Framework

12.13.3 Aufbau und Bestandteile von Complications

12.13.4 Vorbereiten des eigenen Projekts

12.13.5 Entwicklung einer Complication

12.13.6 Bereitstellen der Complication mittels CLKComplicationDataSource

12.14 Kommunikation und Datenaustausch zwischen iOS und watchOS

12.14.1 Watch Connectivity

12.15 Was sonst noch zu sagen und zu beachten ist

13 Tests

13.1 Unit-Tests

13.1.1 Aufbau und Funktionsweise von Unit-Tests

13.1.2 Aufbau einer Test-Case-Klasse

13.1.3 Neue Test-Case-Klasse erstellen

13.1.4 Ausführen von Unit-Tests

13.1.5 Was sollte ich eigentlich testen?

13.2 Performance-Tests

13.3 UI-Tests

13.3.1 Klassen für UI-Tests

13.3.2 Aufbau von UI-Test-Klassen

13.3.3 Automatisches Erstellen von UI-Tests

13.3.4 Einsatz von UI-Tests

13.4 Test-Driven Development

14 Versionierung

14.1 Über Versionskontrolle

14.2 Basisfunktionen und -begriffe von Git

14.2.1 Begriffe

14.2.2 Funktionen

14.3 Source Control in Xcode

14.4 Version Editor und Source Control

15 Veröffentlichung im App Store

15.1 Zertifikate, Provisioning Profiles und Ihre App

15.1.1 Certificates, IDs & Profiles

15.1.2 Erstellen von . . .

15.2 Testen auf dem eigenen Endgerät

15.2.1 Setzen des Teams

15.2.2 Auswahl Ihres iOS-Geräts

15.3 iTunes Connect und Veröffentlichung im App Store

15.3.1 Vorbereiten der App in iTunes Connect

15.3.2 Upload der App in den App Store

15.3.3 Wie geht es weiter?

Thomas Sillmann

Apps für iOS 10
professionell entwickeln

Sauberen Code schreiben mit Swi! 3 und Objective-C
Stabile Apps für iPhone und iPad programmieren
Techniken und Methoden von Grund auf verstehen

Der Autor:

Thomas Sillmann, Aschaffenburg
www.thomassillmann.de

Alle in diesem Buch enthaltenen Informationen, Verfahren und Darstellungen wurden nach bestem Wissen zusammengestellt und mit Sorgfalt getestet. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grund sind die im vorliegenden Buch enthaltenen Informationen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor und Verlag übernehmen infolgedessen keine juristische Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen – oder Teilen davon – entsteht.

Ebenso übernehmen Autor und Verlag keine Gewähr dafür, dass beschriebene Verfahren usw. frei von Schutzrechten Dritter sind. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Buch berechtigt deshalb auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen­ und Markenschutz­Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.

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.

Dieses Werk ist urheberrechtlich geschützt. Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Buches, oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form (Fotokopie, Mikrofilm oder ein anderes Verfahren) – auch nicht für Zwecke der Unterrichtsgestaltung – reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden.

Lektorat: Sylvia Hasselbach
Copyediting: Walter Saumweber, Ratingen
Herstellung: Irene Weilhart
Umschlagdesign: Marc Müller-Bremer, München, www.rebranding.de
Umschlagrealisation: Stephan Rönigk

Print-ISBN 978-3-446-45073-8
E-Pub-ISBN 978-3-446-45250-3

Verwendete Schriften: SourceSansPro und SourceCodePro (Lizenz)
CSS-Version: 1.0

Font License Zurück zum Impressum

Copyright 2010, 2012, 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

Widmung

Für meinen Vater, Ernst Sillmann.

„Bis zum Mond und wieder zurück haben wir uns lieb.“

Vorwort

iOS ist und bleibt für Entwickler ein spannendes Feld, nicht zuletzt, da Apple mit dem App Store einen Weg geschaffen hat, mit dem auch einzelne Entwickler Software für einen internationalen Markt verbreiten können, ohne dass sie sich um Dinge wie Bezahlsysteme, Abrechnungen und Download Gedanken machen müssen. Ich selbst habe mich aufgrund dessen vor über fünf Jahren für die iOS-Entwicklung begeistern lassen und habe bis heute nichts von der Faszination für diese spannende und innovative Plattform verloren.

Beim Einstieg in die iOS-Entwicklung habe ich eines aber schmerzlich vermisst: einen einfachen, übersichtlichen und professionellen Einstieg. Ich habe mich mit viel Literatur auseinandergesetzt, war in vielen Foren unterwegs und habe schlicht und einfach viel ausprobiert. Da vieles von diesen Anfängen aber sehr umständlich oder im Nachhinein betrachtet sogar gänzlich falsch war, hat mich das viel Zeit und Lehrgeld gekostet. Und ich habe mir oft gewünscht, man hätte mich von Beginn an an die Hand genommen und mir nicht nur gezeigt, wie ich Apps für iOS entwickle, sondern wie ich gute und professionelle Apps entwickle, welche Besonderheiten, Best Practices und Design Patterns es gibt und wie ich effektiv und effizient mit der Entwicklungsumgebung arbeiten kann. Und dieser Wunsch hat den Grundstein für dieses Buch gelegt.

Dieses Buch vermittelt Ihnen alle essenziellen Grundlagen und Kenntnisse über die Entwicklung für iOS. Angefangen bei der Vorstellung des Betriebssystems selbst geht es weiter über die Programmiersprachen Objective-C und Swift, deren Struktur und jeweiligen Besonderheiten und all das, was sie ausmacht. Danach rückt die eigentliche Entwicklung für iOS in den Fokus. Sie erfahren alles über die wichtigsten Frameworks von Apple für die App-Entwicklung und lernen typische Best Practices kennen. Besonders wichtig ist hier auch die Vorstellung der Dokumentation, die für Sie als App-Entwickler Bestandteil Ihrer täglichen Arbeit sein wird. Denn letztlich beherbergt die Apple-Dokumentation alle Antworten auf die Fragen, wie Sie bestimmte Probleme in der iOS-Entwicklung angehen und welche Möglichkeiten Ihnen die einzelnen Frameworks von Apple liefern.

Nach der Vorstellung der Plattform und der Programmiersprache(n) geht es weiter mit der Entwicklungsumgebung Xcode, mit der wir unsere Apps für iOS entwickeln. Dabei war es mir besonders wichtig, den genauen Aufbau und die Struktur hinter Xcode vorzustellen sowie alle spannenden Möglichkeiten und Kniffe aufzuzeigen, die Xcode Ihnen bietet und Ihre tägliche Arbeit erleichtern. Auch der Umgang mit Grafiken oder die Lokalisierung Ihrer Anwendung sowie Debugging und Refactoring habe ich in dieses Kapitel mit aufgenommen.

Bis zu diesem Punkt habe ich mich rein mit den essenziellen Grundlagen beschäftigt und ich finde es wichtig, dass auch Sie diese Grundlagen verinnerlicht und verstanden haben, denn sie sind die Grundpfeiler für gute und erfolgreiche Apps. Dazu abschließend folgt im sechsten Kapitel die Vorstellung von MVC ‒ Model-View-Controller. Dabei handelt es sich um eines der wichtigsten Design-Patterns in iOS und ist essenziell für die App-Entwicklung. Aufgrund dessen widme ich MVC ein eigenes Kapitel, stelle es im Detail vor und erkläre, wie und warum Sie es in Ihren eigenen Apps anwenden sollen.

Anschließend geht es im Speziellen um die Entwicklung für iOS und die Nutzung der Funktionen und Frameworks für Apple, unterteilt auf die drei Bereiche Controller, View und Model aus dem MVC-Pattern. Auch in diesen Kapiteln geht es darum, die grundlegenden Besonderheiten zu erläutern und aufzuzeigen, wie Sie mit den einzelnen Elementen arbeiten und diese in Ihren eigenen Apps verwenden. Sie lernen die wichtigsten Elemente aus den jeweiligen Bereichen kennen und erfahren, wie Sie selbstständig mit ihnen arbeiten können und worauf bei der jeweiligen Verwendung zu achten ist. Mit diesem Wissen gewappnet sind Sie imstande, sich selbst in neue Frameworks, Technologien und Themen anhand der Apple-Dokumentation einzuarbeiten und selbstständig Probleme zu lösen. Und genau das ist es, was einen guten und professionellen iOS-Entwickler ausmacht.

Kapitel 10 setzt sich im Detail mit den sogenannten Local und Push Notifications auseinander, die es Ihnen erlauben, Nachrichten aus Ihren Apps an Ihre Nutzer zu senden. Im darauffolgenden Kapitel erstelle ich Ihnen ergänzend dazu dann Extensions vor, die uns Entwicklern ganz neue und innovative Möglichkeiten an die Hand geben, unsere Apps zu erweitern und über das gesamte iOS-System heraus zugänglich zu machen.

Im Anschluss daran widme ich ein eigenes und umfangreiches Kapitel der Entwicklung für die Apple Watch. Die Apple Watch ist die neue spannende Plattform in Apples Ökosystem und ist ‒ was die grundsätzliche App-Entwicklung betrifft ‒ in vielen Dingen recht ähnlich zur iOS-Plattform. Da eine Apple Watch-App immer eine iPhone-App voraussetzt, war es nur passend, auch die Entwicklung für die Apple Watch in diesem Buch im Detail zu beleuchten und zu zeigen, wie Sie Ihre eigenen iPhone-Apps um ein Pendant für die Apple Watch erweitern können. Sie lernen alle Möglichkeiten und Einschränkungen kennen und werden so in die Lage versetzt, selbst mit der Entwicklung eigener Apple Watch-Apps zu beginnen.

Anschließend folgen die Themen Tests und Versionsverwaltung mit Git, die in jeder neuen Xcode-Version mehr und mehr in die Entwicklungsumgebung integriert und unterstützt werden. Ich zeige Ihnen dabei, was Unit-Tests sind, warum Sie sie in Ihren Apps verwenden sollten, wie Sie Unit-Tests schreiben und wie Sie Xcode in Sachen Unit-Tests unterstützt und Ihnen unter die Arme greift. Auch UI-Tests finden dabei Beachtung. Bei der Versionsverwaltung mit Git erfahren Sie alles über die integrierten Funktionen zur Arbeit mit Git in Xcode und wie Sie Änderungen im Code verfolgen und nachvollziehen können.

Zu guter Letzt geht es noch ‒ wie könnte es anders sein? ‒ um die Veröffentlichung Ihrer Apps im App Store und die integrierten Tools in Xcode, die Ihnen bei diesem Prozess unter die Arme greifen. Insbesondere erfahren Sie hier etwas über die Erstellung und Verwaltung Ihrer Apps in Apples Developer Program.

Bei allen diesen Themen soll dieses Buch Sie unterstützen und Ihnen die Grundlagen und das essenzielle Praxiswissen vermitteln und mit auf den Weg geben. Es soll Ihnen nicht Beispielprojekte aufzeigen und deren Verhalten und Eigenschaften erklären (davon gibt es nämlich von Apple selbst mehr als genug), sondern Ihnen das nötige Wissen mitgeben, um Sie in die Lage zu versetzen, Problemstellungen selbstständig zu lösen und zu verstehen, wie Sie gute und professionelle iOS-Apps entwickeln. Denn wenn Sie diesen Status erreicht haben, können Sie darauf aufbauen, experimentieren und eigene spannende und innovative iOS-Projekte umsetzen. Und ich bin gespannt, welche großartigen Apps wir von Ihnen erwarten dürfen.

Ich wünsche Ihnen viel Freude beim Lesen dieses Buches und viel Erfolg mit all Ihren iOS-Projekten.

Thomas Sillmann

ios-buch.thomassillmann.de

Unter dieser Adresse finden Sie zusätzliche Informationen und Services, die ich ergänzend zu diesem Buch anbiete. Dazu gehören vollständige Code-Beispiele und Projekte, anhand derer Sie Ihr erlangtes Wissen testen und vertiefen können, sowie verschiedene Frameworks, die Sie direkt in eigene Projekte integrieren können. Ebenso stelle ich dort Lern-Vieos zur App-Entwicklung bereit und berichte in Blog-Beiträgen über Neuerungen und Aktualisierungen; ein Besuch lohnt sich also. :-)

Danksagung

Für mich als Autor ist es eine ungemeine Freude und ein großartiges Glück, wenn ein Buch wie jenes, das Sie gerade in Händen halten, bereits in einer dritten Auflage erscheint und bereits viele zufriedene Leser gefunden hat. Als die erste Auflage des Buches im Jahr 2014 zu iOS 8 erschien, hätte ich niemals damit gerechnet, zwei Jahre später an einer dritten Auflage zu iOS 10 zu arbeiten. Genau so ist es aber gekommen, und hier sind wir also.

Nachdem ich Ihnen einiges über das Buch an sich und dessen Entstehung und Inhalte erzählt habe, möchte ich diese Stelle nutzen, kurz ein paar ausgewählten Menschen zu danken.

Da wäre Daniel Bocksteger, der all meine bisherigen Bücher rezensierte und mich dabei als Autor immens stolz und glücklich gemacht hat.

Da wäre meine ehemalige Lektorin Sieglinde Schärl vom Hanser Verlag, ohne die ich niemals da wäre, wo ich heute bin und die mich in meiner Tätigkeit als Autor bestärkt und immer aufs Beste unterstützt hat.

Da wäre meine jetzige Lektorin Sylvia Hasselbach, dank der diese dritte Auflage überhaupt erst zustande kam und die das Projekt so erst möglich gemacht hat.

Da wäre Irene Weilhart, die mir bei Fragen und Problemen während der Arbeiten am Manuskript immer zuverlässig, hilfsbereit und schnell zur Seite stand.

Da wäre Walter Saumweber, der dieses Buch so großartig und genau korrigiert hat, um es so fehlerfrei wie nur irgend möglich umzusetzen.

Und natürlich ist da meine Frau Michaela, die in jeder noch so stressigen Phase dieses Buchprojekts hinter mir stand und mir den Rücken stärkte, die meinen Problemen und Sorgen lauscht und immer die richtigen Worte findet, um mich voranzutreiben und den Glauben nicht verlieren zu lassen. Auch wenn es bisweilen finster um mich herum ist, du scheinst immer hell und leuchtest mir den Weg.

Und selbstverständlich sind da Sie, liebe Leserin, lieber Leser. Nur Ihnen habe ich es zu verdanken, heute primär als Autor tätig zu sein und mir damit einen persönlichen Traum zu erfüllen. Ich danke Ihnen für Ihr zahlreiches konstruktives Feedback und die vielen Verbesserungsvorschläge, die ich nach bestem Wissen und Gewissen versuche umzusetzen und in meine Bücher einfließen zu lassen.

Ohne Leser ist ein Autor nichts, und daher danke ich Ihnen von Herzen, das Sie hier bei mir sind und meinen Worten lauschen. Und nun wünsche ich Ihnen viel Spaß und Freude mit dieser dritten Auflage meines iOS-Buches und hoffe, es ist Ihnen ein guter Begleiter und hilft Ihnen bei Ihrer Tätigkeit als App-Entwickler!

1 Über iOS