Apps für iOS 9 professionell entwickeln - Sauberen Code schreiben mit Objective-C und Swift. Stabile Apps programmieren. Techniken & Methoden von Grund auf verstehen

Thomas Sillmann

Apps für iOS 9 professionell entwickeln

Sauberen Code schreiben mit Objective-C und Swift. Stabile Apps programmieren. Techniken & Methoden von Grund auf verstehen

2015

722 Seiten

Format: PDF, ePUB, Online Lesen

E-Book: €  35,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446445536

 

Vorwort

22

1 Über iOS

26

1.1 Was ist iOS?

26

1.1.1 iOS und OS X

27

1.1.2 Besonderheiten der iOS-Plattform

27

1.2 iOS für Entwickler

28

1.2.1 Hardware für Entwickler

29

1.2.2 Software für Entwickler

30

1.2.3 Das Apple Developer Program

31

1.3 Der Aufbau von iOS

33

1.3.1 Die vier Schichten von iOS

33

1.4 Die perfekte iOS-App

35

1.4.1 Apple Human Interface Guidelines

36

2 Die Programmiersprache – Objective-C

38

2.1 Über Objective-C und objektorientierte Programmierung

38

2.2 Grundlagen der Programmierung

39

2.2.1 Objekte

39

2.2.2 Primitive Datentypen

40

2.2.3 Variablen

41

2.2.4 Operatoren

42

2.2.5 Abfragen und Schleifen

43

2.2.6 Kommentare

47

2.3 Aufbau einer Klasse

48

2.3.1 Die Header-Datei

48

2.3.2 Die Implementation-Datei

50

2.3.3 Los geht’s: Unsere erste Klasse!

51

2.4 Methoden

55

2.4.1 Aufbau von Methoden

55

2.4.2 Methoden in Header- und Implementation-Dateien einer Klasse

57

2.4.3 Implementierung von Methoden

58

2.4.4 Methoden aufrufen

61

2.4.5 Klassen- und Instanzmethoden

62

2.5 Instanzvariablen

63

2.6 Properties

64

2.6.1 Aufbau einer Property

65

2.6.2 Die Punktnotation

67

2.6.3 Optionen

68

2.6.4 Direktzugriff auf Properties

69

2.6.5 Setter und Getter überschreiben

71

2.7 Konstanten

74

2.7.1 Deklaration von Konstanten

74

2.8 Namenskonventionen

75

2.8.1 Klassen

75

2.8.2 Methoden

76

2.8.3 Properties

76

2.9 Strukturen

76

2.9.1 enum

77

2.9.2 typedef

77

2.10 Initialisierung von Objekten

78

2.10.1 alloc und init

79

2.10.2 Zeiger

81

2.11 init im Detail

82

2.11.1 Erstellen mehrerer init-Methoden

84

2.11.2 Designated Initializer

85

2.12 Vererbung

87

2.12.1 Methoden der Superklasse überschreiben

89

2.13 Kategorien

91

2.13.1 Aufbau von Kategorien

91

2.13.2 Kategorien in Xcode erstellen

92

2.14 Erweiterungen

94

2.14.1 Aufbau von Erweiterungen

94

2.14.2 Erweiterungen innerhalb der Implementation-Datei

95

2.14.3 Erweiterungen in Xcode erstellen

96

2.15 Protokolle

97

2.15.1 Aufbau von Protokollen

98

2.15.2 Zuweisen eines Protokolls zu einer Klasse

99

2.15.3 Vererbung in Protokollen

99

2.15.4 Protokolle in Xcode erstellen

100

2.16 #import und @class

101

2.16.1 #import

101

2.16.2 @class

102

2.17 Blöcke

104

2.17.1 Ja zu Blöcken!

104

2.17.2 Was sind Blöcke?

104

2.17.3 Aufbau eines Blocks

105

2.17.4 Blockvariablen

109

2.17.5 Globale Blöcke

109

2.18 Singletons

110

3 Der Neue im Club – Swift

114

3.1 Programmierst du noch oder swifst du schon?

114

3.1.1 Über Swift

114

3.1.2 Voraussetzungen zur Nutzung von Swift

114

3.1.3 Swift und Objective-C

115

3.1.4 Playgrounds

115

3.2 Grundlagen der Programmierung

117

3.2.1 Fundamental Types

117

3.2.2 Variablen und Konstanten

118

3.2.3 Operatoren

120

3.2.4 Abfragen und Schleifen

121

3.2.5 Kommentare

127

3.2.6 print

128

3.3 Fundamental Types im Detail

130

3.3.1 Strings

130

3.3.2 Arrays

133

3.3.3 Dictionaries

139

3.3.4 Any und AnyObject

142

3.4 Aufbau einer Klasse

142

3.4.1 Erstellen einer Instanz einer Klasse

145

3.4.2 Zugriff auf Eigenschaften einer Klasse

145

3.5 Methoden

146

3.5.1 Methodenmit Rückgabewert

147

3.5.2 Methoden mit Parametern

148

3.5.3 Local und External Parameter Names

151

3.5.4 Aufruf von Methoden einer Klasse

153

3.5.5 Zugriff auf andere Eigenschaften und Methoden einer Klasse

154

3.5.6 Klassen- und Instanzmethoden

155

3.6 Properties

157

3.6.1 Computed Properties

157

3.6.2 Property Observers

160

3.6.3 Type Properties

161

3.7 Vererbung

162

3.7.1 Überschreiben von Eigenschaften und Methoden der Superklasse

164

3.7.2 Zugriff auf Eigenschaften und Methoden der Superklasse

165

3.8 Optionals

166

3.8.1 Deklaration von Optionals

166

3.8.2 Zugriff auf Optionals

167

3.9 Initialisierung

170

3.9.1 Schreiben von Initializern

171

3.9.2 Designated und Convenience Initializer

175

3.9.3 Initializer und Vererbung

176

3.9.4 Deinitialisierung

178

3.10 Type Casting

179

3.10.1 Typ prüfen

179

3.10.2 Downcasting

181

3.11 Enumerations

183

3.11.1 Zusätzliche Werte in Member einer Enumeration speichern

184

3.12 Structures

186

3.13 Error Handling Model

187

3.14 Extensions

189

3.15 Protocols

190

3.15.1 Protocol Type

191

3.16 Access Control

193

4 Programmierung für iOS

196

4.1 Grundlagen

196

4.2 Foundation Framework

196

4.2.1 Die wichtigsten Klassen aus dem Foundation Framework und ihre Funktionen

197

4.3 UIKit Framework

201

4.4 Speicherverwaltung mit ARC

202

4.5 Besonderheiten von Objective-C

205

4.5.1 Kurzschreibweisen zum Erstellen von Objekten

206

4.5.2 Vergleichen der Werte von verschiedenen Objekten

208

4.5.3 Schlüsselwörter zum Zusammenspiel mit Optionals

209

4.6 Besonderheiten von Swift

210

4.6.1 Zusammenspiel zwischen Fundamental Types und Foundation-Framework-Klassen

210

4.6.2 Playgrounds im Detail

211

4.7 Objective-C und Swift vereint

215

4.7.1 Objective-C-Code in Swift verwenden

215

4.7.2 Swift-Code in Objective-C verwenden

216

4.8 NSError

217

4.8.1 Eigene Methode mit NSError-Parameter erstellen

218

4.9 Doxygen-Dokumentation

219

4.9.1 Besonderheiten bei Methoden

221

4.9.2 Doxygen-Dokumentation in Xcode

222

4.10 Nebenläufigkeit mit Grand Central Dispatch

223

4.10.1 Parallel laufenden Code erstellen

224

4.11 Grundlegende Struktur einer App

226

4.11.1 main.m

226

4.11.2 Info.plist

226

4.11.3 App Delegate

227

4.12 Lebenszyklus einer iOS-App

228

4.12.1 Start einer App

228

4.12.2 Lebenszyklus einer App

229

4.12.3 Die Methoden des App Delegate

230

4.12.4 Start der App

231

4.13 Tipps für die tägliche Arbeit

233

4.13.1 Die netten Kleinigkeiten .?.?.

233

4.13.2 Fast Enumeration in Objective-C

234

4.13.3 Type Casting in Objective-C

234

4.13.4 Xcode-Beispielprojekte

235

5 Die Entwicklungsumgebung – Xcode

236

5.1 Willkommen bei Xcode!

236

5.1.1 Was ist Xcode?

237

5.1.2 Interface Builder und Xcode – endlich vereint!

237

5.2 Arbeiten mit Xcode

238

5.2.1 Dateien und Formate eines Xcode-Projekts

238

5.2.2 Umgang mit Dateien und Ordnern in Xcode

243

5.3 Der Aufbau von Xcode

246

5.3.1 Die Toolbar

246

5.3.2 Die Navigation Area

248

5.3.3 Die Editor Area

252

5.3.4 Die Utilities Area

254

5.3.5 Die Debug Area

255

5.4 Einstellungen in Xcode

256

5.4.1 Anpassen von Xcode

256

5.4.2 General

256

5.4.3 Accounts

257

5.4.4 Behaviors

258

5.4.5 Navigation

258

5.4.6 Fonts & Colors

259

5.4.7 Text Editing

260

5.4.8 Key Bindings

260

5.4.9 Source Control

261

5.4.10 Downloads

262

5.4.11 Locations

262

5.5 Projekteinstellungen

263

5.5.1 Grundlagen

263

3.5.2 Einstellungen am Projekt

265

5.5.2 Einstellungen am Target

268

5.5.3 Einstellungen am Scheme

274

5.6 Grafiken und Asset-Bundles

277

5.7 Lokalisierung mit Localizable.strings

279

5.7.1 Grundlagen

279

5.7.2 NSLocalizedString

279

5.7.3 Erstellen der Localizable.strings-Datei

280

5.7.4 Localized String mit Parameter

282

5.7.5 Alle Localized Strings automatisch auslesen

283

5.8 Der iOS-Simulator

284

5.8.1 Grundlagen

284

5.8.2 Funktionen und Möglichkeiten des Simulators

284

5.8.3 Performance und Einschränkungen des Simulators

288

5.9 Dokumentation

288

5.9.1 Nichts geht über die Dokumentation!

288

5.9.2 Das Documentation-Window

290

5.9.3 Direktes Aufrufen der Dokumentation aus Xcode heraus

293

5.10 Devices

294

5.11 Organizer

296

5.12 Projects

299

5.13 Debugging in Xcode

300

5.13.1 Grundlagen – über das Debugging

300

5.13.2 Die Debug Area

300

5.13.3 Die Arbeit mit dem Debugger – NSLog und Breakpoints

302

5.13.4 Debug Navigator

310

5.14 Refactoring

311

5.14.1 Grundlagen

311

5.14.2 Refactoring-Funktionen in Xcode

312

5.15 Instruments

314

5.15.1 Über Instruments

314

5.15.2 Nächste Schritte

317

5.16 Tipps für die tägliche Arbeit

318

5.16.1 Man lernt immer was dazu!

318

5.16.2 Code Snippets

318

5.16.3 Open Quickly

319

5.16.4 Caller einer Methode feststellen

320

5.16.5 Speicherorte für Ordner und Dateien ändern

321

5.16.6 Shortcuts für die Navigation Area

321

5.16.7 Run Without Building

322

5.16.8 Clean Build

322

6 MVC – Model-View-Controller

324

6.1 MVC?.?.?. was?

324

6.2 MVC in der Praxis

326

6.3 Kommunikation zwischen Model und Controller

326

6.3.1 Key-Value-Observing

327

6.3.2 Notifications

333

6.4 Kommunikation zwischen View und Controller

335

6.4.1 Target-Action

335

6.4.2 Delegates

337

7 Die Vielfalt der (View-)Controller

340

7.1 Alles beginnt mit einem View- Controller .?.?.

340

7.2 UIViewController – die Mutter aller View-Controller

342

7.2.1 Wichtige Methoden von UIViewController

343

7.2.2 UIView – fester Bestandteil eines jeden UIViewControllers

347

7.3 View-Controller-Hierarchien

348

7.4 View-Controller erstellen mit dem Interface Builder

350

7.4.1 View-Controller mit Nib-File

351

7.5 Storyboards

382

7.5.1 Über Storyboards

382

7.5.2 Das Storyboard-Projekt

383

7.5.3 Die Klasse UIStoryboard

392

7.5.4 Segues

394

7.5.5 Zugriff über den App Delegate

397

7.5.6 Quo vadis – Storyboard oder Nib-File?

398

7.6 Auto Layout

399

7.6.1 Setzen und Konfigurieren von Constraints

400

7.6.2 Constraints bearbeiten und weiter anpassen

401

7.6.3 „Optimale“ Constraints automatisch setzen lassen

403

7.7 UIViewController und seine Subklassen

404

7.7.1 UINavigationController

404

7.7.2 UITabBarController

410

7.7.3 UITableViewController

414

7.7.4 UICollectionViewController

421

7.7.5 UISplitViewController

423

8 Views erstellen und gestalten

426

8.1 Über Views in iOS

426

8.2 UIView – die Mutter aller Views

426

8.3 Arbeiten mit UIView

427

8.3.1 Programmatisches Erstellen einer UIView

427

8.3.2 View-Hierarchien

429

8.3.3 Weiterführendes zu UIView

433

8.4 Views erstellen mit dem Interface Builder

434

8.4.1 Grundlagen

434

8.4.2 View-Klasse mit Nib-File erstellen

435

8.4.3 Beliebiges Nib-File laden und verwenden

439

8.4.4 Nib-File nachträglich erstellen

440

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

442

8.5 Die wichtigsten Views und ihre Funktionen

444

8.5.1 Grundlagen

444

8.5.2 UILabel

444

8.5.3 UIButton

444

8.5.4 UISwitch

445

8.5.5 UISegmentedControl

445

8.5.6 UITextField

445

8.5.7 UIImageView

446

8.5.8 UIAlertView

446

8.5.9 UIActionSheet

448

8.5.10 UIPickerView

448

8.5.11 UIDatePicker

449

8.5.12 UIWebView

449

8.5.13 UIMapView

450

8.5.14 UIScrollView

450

8.5.15 UITextView

451

8.5.16 UITableView

452

8.5.17 UICollectionView

452

8.5.18 Wichtig und unerlässlich: die Dokumentation!

452

8.5.19 Views und der Interface Builder

453

8.6 Die Grundlage gut gestalteter Views

453

9 Das Model und die Datenhaltung

456

9.1 Die Logik Ihrer App

456

9.2 Benutzereinstellungen sichern und nutzen

457

9.2.2 Über NSUserDefaults

457

9.2.3 Standardeinstellungen festlegen

459

9.2.4 NSUserDefaults zurücksetzen

460

9.3 Zugriff auf das Dateisystem

460

9.3.1 Das Dateisystem von iOS

460

9.3.2 NSFileManager

461

9.3.3 File-Sharing-Funktion nutzen

468

9.4 Core Data

469

9.4.1 Datenbankverwaltung mit Core Data

469

9.4.2 Wie funktioniert Core Data?

470

9.4.3 Die Klassen und Bestandteile von Core Data

471

9.4.4 Aufbau eines Standard-Core Data Stacks

472

9.4.5 Der Core Data-Editor

475

9.4.6 Erstellen eines neuen Managed-Objects

483

9.4.7 Löschen eines Managed-Objects

484

9.4.8 Laden von Managed-Objects

484

9.4.9 Was kommt als Nächstes?

485

10 Local und Push Notifications

486

10.1 Was sind Notifications?

486

10.2 Registrieren von Notification Types

488

10.3 Registrieren von Notification Categories und Actions

490

10.3.1 Erstellen einer Action

491

10.3.2 Erstellen einer Kategorie

492

10.3.3 Reagieren auf eine Action

494

10.4 Local Notifications

496

10.4.1 Festlegen des Ausführungstermins

497

10.4.2 Konfiguration des Alerts

498

10.4.3 Konfiguration des Sounds

500

10.4.4 Konfiguration des Badge Values

501

10.4.5 Speichern zusätzlicher Informationen in einer Local Notification

501

10.4.6 Registrieren von Local Notifications im System

502

10.4.7 Abbrechen bereits registrierter Local Notifications

503

10.4.8 Reagieren auf Feuern und Auswahl einer Local Notification

503

10.5 Push Notifications

504

10.5.1 Versand von Push Notifications

505

10.5.2 Erstellen einer Push Notification

509

10.5.3 Qualitiy of Service

511

11 Extensions

512

11.1 Verfügbare Typen von Extensions

512

11.2 Erstellen von Extensions in Xcode

514

11.3 Aufbau einer Extension

517

11.4 Funktionsweise einer Extension

517

11.5 Wichtige Klassen und Objekte

518

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

519

11.7 Today

521

11.7.1 Today-Extension testen

523

11.8 Share

524

11.9 Action

525

11.9.1 Action mit User Interface

525

11.9.2 Action ohne User Interface

526

11.10 Photo Editing

527

11.10.1 Festlegen der unterstützten Typen zur Bearbeitung

531

11.11 Document Provider

532

11.11.1 Document Provider-Extension

533

11.11.2 File Provider-Extension

536

11.11.3 Document Provider aufrufen

538

11.12 Custom Keyboard

540

11.12.1 Erstellen eines Custom Keyboards

540

11.12.2 Arbeit mit der Klasse UIInputViewController

540

11.12.3 Bearbeiten und Setzen von Text

542

11.12.4 Mehrsprachige Keyboards

543

11.13 Content Blocker

544

11.13.1 Konfiguration eines Content Blockers

545

11.13.2 Aktualisieren eines Content Blockers

548

11.13.3 Die Klasse ActionRequestHandler

548

11.14 Shared Links

549

11.14.1 Erstellen eines NSExtensionItem

551

11.14.2 NSExtensionItem als Shared Link bereitstellen

552

11.15 Watch App

553

11.16 App Groups

553

11.16.1 Registrieren einer App Group im Apple Developer Portal

553

11.16.2 Registrieren einer App Group innerhalb einer App

555

11.16.3 Zugriff auf eine App Group

555

12 App-Entwicklung für die Apple Watch

558

12.1 Apples neues großes Ding: Die Apple Watch

558

12.2 Möglichkeiten, Einschränkungen, Unterschiede

559

12.3 Das WatchKit SDK

561

12.3.1 WKInterfaceController

561

12.3.2 WKInterfaceObject

562

12.3.3 WKExtensionDelegate

563

12.3.4 Weitere Klassen

563

12.4 Aufbau und Funktionsweise von Apple Watch-Apps

563

12.4.1 iPhone-App

564

12.4.2 WatchKit Extension

564

12.4.3 WatchKit App

564

12.4.4 Verbindung von WatchKit Extension und WatchKit App

565

12.4.5 Notification Scene und Glance Scene

565

12.4.6 Complications

566

12.5 Erstellen einer WatchKit App mitsamt WatchKit Extension

566

12.5.1 Dateien der WatchKit Extension

569

12.5.2 Dateien der WatchKit App

569

12.5.3 Ausführen und Testen der Apple Watch-App

570

12.6 Lebenszyklus einer WatchKit App

571

12.7 Der WKInterfaceController im Detail

573

12.7.1 Initialisierung

573

12.7.2 Activation Events

574

12.7.3 Setzen des Titels

575

12.7.4 Ein- und Ausblenden von Interface-Controllern

575

12.7.5 Umsetzen eines Navigation Stacks

577

12.7.6 Reaktion auf Storyboard-Events

578

12.7.7 Weitere Attribute

579

12.7.8 Weitere Funktionen von WKInterfaceController

580

12.8 Arbeiten mit dem Interface-Storyboard einer WatchKit App

580

12.8.1 Erstellen und Konfigurieren eines WKInterfaceController

581

12.8.2 Hinzufügen und Konfigurieren von Interface-Elementen

582

12.8.3 Positionierung und Anordnung von Interface-Elementen

583

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

584

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

586

12.8.6 Gruppierung von Interface-Elementen mittels WKInterfaceGroup

588

12.8.7 Verbindung von Storyboard und Code

589

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

592

12.8.9 Erstellen und Konfigurieren von Segues

592

12.9 Erstellen von Tabellen

595

12.9.1 Hinzufügen einer Tabelle im Storyboard

595

12.9.2 Konfiguration einer Zelle

596

12.9.3 Konfiguration einer Tabelle

600

12.9.4 Verwenden verschiedener Zellen in einer Tabelle

602

12.9.5 Zellen hinzufügen und entfernen

604

12.9.6 Direkt zu Zelle scrollen

606

12.9.7 Aktuelle Anzahl an Zellen auslesen

606

12.9.8 Auf Auswahl einer Zelle reagieren

606

12.9.9 Segues von Zellen einer Tabelle über das Storyboard konfigurieren

607

12.10 Erstellen von Menüs

609

12.10.1 Erstellen eines Menüs im Storyboard

610

12.10.2 Erstellen eines Menüs im Code

613

12.10.3 Fazit: Menüerstellung im Storyboard oder Code?

616

12.10.4 Mischen von Menüpunkten aus Storyboard und Code

616

12.11 Eingabe von Text

616

12.12 Glance Scene

618

12.12.1 Erstellen einer Glance Scene

620

12.12.2 Lebenszyklus einer Glance Scene

621

12.12.3 Angepasster App-Start mittels Glance Scene

621

12.12.4 Testen einer Glance Scene

623

12.13 Notification Scene

624

12.13.1 Short-Look und Long-Look Interface

624

12.13.2 Long-Look Interface im Detail

625

12.13.3 Erstellen eigener Notification Scenes

626

12.13.4 Reaktion auf Action-Buttons

634

12.13.5 Testen einer Notification Scene

636

12.14 Complications

636

12.14.1 Was sind Complications?

637

12.14.2 Das ClockKit Framework

637

12.14.3 Aufbau und Bestandteile von Complications

637

12.14.4 Vorbereiten des eigenen Projekts

641

12.14.5 Entwicklung einer Complication

642

12.14.6 Bereitstellen der Complication mittels CLKComplicationDataSource

646

12.15 Kommunikation und Datenaustausch zwischen iOS und watchOS

650

12.15.1 WatchConnectivity

651

12.16 Was sonst noch zu sagen und zu beachten ist

656

13 Unit-Tests

658

13.1 Unit-Tests in der iOS-Entwicklung

658

13.1.1 Grundlagen

658

13.1.2 Aufbau und Funktionsweise von Tests

662

13.1.3 Aufbau einer Test-Case-Klasse

664

13.1.4 Neue Test-Case-Klasse erstellen

665

13.1.5 Ausführen von Tests

666

13.1.6 Was sollte ich eigentlich testen?

667

13.2 Performance-Tests

668

13.3 UI-Testing

670

13.3.1 Klassen für UI-Testing

671

13.3.2 Aufbau von UI-Testing-Klassen

673

13.3.3 Erstellen von UI-Tests

674

13.3.4 Einsatz von UI-Tests

674

13.4 Test-Driven Development

675

14 Versionierung mit Git

676

14.1 Über Versionskontrolle

676

14.2 Basisfunktionen und -begriffe von Git

676

14.2.1 Begriffe

676

14.2.2 Funktionen

677

14.3 Source Control in Xcode

678

14.4 Version Editor und Source Control

682

15 Veröffentlichung im App Store

686

15.1 Zertifikate, Provisioning Profiles und Ihre App

686

15.1.1 Certificates, Identifiers & Profiles

688

15.1.2 Erstellen von .?.?.

690

15.2 Testen auf dem eigenen Endgerät

703

15.2.1 Setzen des Teams

703

15.2.2 Auswahl Ihres iOS-Geräts

704

15.3 iTunes Connect und Veröffentlichung im App Store

706

15.3.1 Vorbereiten der App in iTunes Connect

707

15.3.2 Upload der App in den App Store

710

15.3.3 Wie geht es weiter?

712

Index

714

 

© 2009-2024 ciando GmbH