131
Введение в разработку мобильных приложений для iOS Дударев Михаил, Mihteh Lab.

Введение в разработку для iOS

Embed Size (px)

Citation preview

Page 1: Введение в разработку для iOS

Введение в разработку мобильных приложений для iOSДударев Михаил, Mihteh Lab.

Page 2: Введение в разработку для iOS
Page 3: Введение в разработку для iOS
Page 4: Введение в разработку для iOS

iPhone

Page 5: Введение в разработку для iOS
Page 6: Введение в разработку для iOS

2014

2014

2013

2013

2012

2011

2010

2009

2008

2007

Page 7: Введение в разработку для iOS

6+ (2

014)

6 (20

14)

5S (2

013)

5C (2

013)

5 (20

12)

4S (2

011)

4 (20

10)

3GS (2

009)

3G (2

008)

2G (2

007)

2015

Page 8: Введение в разработку для iOS

25,71

51,43

77,14

102,86

128,57

154,29

180

2007 2008 2009 2010 2011 2012 2013 2014

169,22

150,26

125,05

72,29

39,99

20,7311,63

1,39

Продажи iPhone по всему мирумлн. единиц

© Statista, 2015Источник: Apple

Page 9: Введение в разработку для iOS

Фрагментация моделей устройств на Android

Источник: OpenSignal, 2014

18769 устройств

Page 10: Введение в разработку для iOS

4S (2

011)

5 (20

12)

5S (2

013)

5C (2

013)

6 (20

14)

6+ (2

014)

Так или иначе поддерживают iOS 8Актуальные модели iPhone

Page 11: Введение в разработку для iOS

iPad

Page 12: Введение в разработку для iOS

2 (20

11)

3rd G

en.

(2012

)Mini

(2012

)4th

Gen

.

(2012

)Air

(2013

)Mini

2

(2013

)Air 2

(2014

)Mini

3

(2014

)

Так или иначе поддерживают iOS 8Актуальные модели

Page 13: Введение в разработку для iOS

Доля рынка iPad по всему миру

Источник: IDC, 2015

Другие 66,2%

iPad 33,8%

Другие 72,4%

iPad 27,6%

2013 2014

Page 14: Введение в разработку для iOS

iOS

Page 15: Введение в разработку для iOS

iOS ~ iPhone Operating System

Page 16: Введение в разработку для iOS
Page 17: Введение в разработку для iOS

2007

2014

2008 20

0920

1020

1120

1220

1320

15

• iCloud• ARC• Storyboards• Core Image• Core Bluetooth

• Auto-Layout• In-App Purchase• Collection Views

• UI Redesign• 64 bit• P2P

• Swift• CloudKit• TestFlight• Extensions• Handoff• HealthKit• WatchKit

Page 18: Введение в разработку для iOS

Официальные данныепо состоянию на 02.02.2015

Источники: Apple

iOS

Page 19: Введение в разработку для iOS

Официальные данныепо состоянию на 02.02.2015

5.0

4.44.3

4.2.x

4.1.x4.0.3-4.0.42.2-2.3.7

Источники: Apple, Google

iOS Android

Page 20: Введение в разработку для iOS

10

20

30

40

50

60

70

80

90

100

3Q '11 3Q '12 3Q '13 3Q '14

27,6 8,6 2,3

1,2

2

3,6

2,9

13,8

14,412,8 11,7

57,4

74,981,2 84,4

Доля iOS на рынке мобильных ОС% от количества проданных устройств

Android

iOSДругие

Источник: IDC

Page 21: Введение в разработку для iOS

App Store

Page 22: Введение в разработку для iOS

200 000

400 000

600 000

800 000

1 000 000

1 200 000

1 400 000

Июль

2008

Сентябрь

2008

Апрель

2009

Июль

2009

Ноябрь

2009

Март

2010

Июнь

2010

Октябрь 2

010

Январь

2011

Июнь

2011

Октябрь 2

011

Март

2012

Июнь

2012

Сентябрь

2012

Январь

2013

Май 2

013

Июнь

2013

Октябрь 2

013

Июнь

2014

Сентябрь

2014

800 3 00035 00065 000100 000150 000

225 000300 000

350 000425 000

500 000585 000

650 000700 000

800 000850 000

900 000

1 000 000

1 200 000

1 300 000

Общее количество доступных приложений на сентябрь 2014

© Statista, 2015Источник: Apple

Page 23: Введение в разработку для iOS

10

20

30

40

50

60

70

80

90

Июль

2008

Сентябрь

2008

Апрель

2009

Июль

2009

Январь

2010

Апрель

2010

Июль

2010

Сентябрь

2010

Октябрь 2

010

Январь

2011

Июнь

2011

Июль

2011

Октябрь 2

011

Март

2012

Июнь

2012

Сентябрь

2012

Январь

2013

Май 2

013

Октябрь 2

013

Январь

2014

Октябрь 2

014

0,01 0,1 1 1,5 3 4 5 6,5 710

14 1518

2530

3540

50

60

75

85

Общее количество загрузок приложений из App Storeпо состоянию на октябрь 2014, млрд. единиц

© Statista, 2015Источники: Apple, TechCrunch

Page 24: Введение в разработку для iOS

GamesEducationBusinessLifestyle

EntertainmentUtilitiesTravelBooksMusic

ProductivityHealth and Fitness

SportsReference

Photo and VideoNews

FinanceFood and Drink

MedicalSocial Networking

Navigation

0 2,2 4,4 6,6 8,8 11 13,2 15,4 17,6 19,8 22 1,2

2,0 2,1 2,3 2,4 2,4 2,5 2,5 2,7 2,7 2,8 3,1

4,0 4,6

5,1 6,9

8,2 9,9 10,1

21,1

Самые популярные категории в App Store, январь 2015

© Statista, 2015

%, подсчитанный от количества приложений

Источник: PocketGamer.biz

Page 25: Введение в разработку для iOS

Базовый инструментарий

Page 26: Введение в разработку для iOS

Любой компьютер Mac

Среда разработки Xcode

Комплект средств разработки для iOS (SDK)

Опционально: iPhone / iPad / iPod Touch

Базовый инструментарий

Page 27: Введение в разработку для iOS

Любой компьютер Mac

Page 28: Введение в разработку для iOS

Любой компьютер Mac

Page 29: Введение в разработку для iOS

Любой компьютер Mac

Page 30: Введение в разработку для iOS

Любой компьютер Mac

Page 31: Введение в разработку для iOS

Хакинтош?Не рекомендуется

Page 32: Введение в разработку для iOS

RubyMotion Xamarin PhoneGap / CordovaXcode

Page 33: Введение в разработку для iOS

RubyMotion Xamarin PhoneGap / CordovaXcode

Ruby C# HTML/CSS/JSObjC/Swift

$15-25в месяц

$25-83в месяц

БесплатноБесплатно

Page 34: Введение в разработку для iOS

Native App Web App

Page 35: Введение в разработку для iOS

Среда разработки Xcode

Page 36: Введение в разработку для iOS

Xcode

Simulator

Interface Builder

Instruments

Page 37: Введение в разработку для iOS

Работа с кодом

Page 38: Введение в разработку для iOS

Interface Builder

Page 39: Введение в разработку для iOS

Связывание элементов интерфейса с кодом

Page 40: Введение в разработку для iOS

Storyboards

Page 41: Введение в разработку для iOS

Autolayout

NSLayoutConstraint

Page 42: Введение в разработку для iOS

Интеграция с системой контроля версий (GIT)

Page 43: Введение в разработку для iOS

Unit-тестирование

Page 44: Введение в разработку для iOS

Continuous Integration

Page 45: Введение в разработку для iOS

Simulator

Resizable

Fixed

Page 46: Введение в разработку для iOS

Средства отладки

Точка остановки

Потребляемы

е ресурсы

, потоки

Значения переменных, отладочная консоль

Page 47: Введение в разработку для iOS

Инструменты Xcode

Page 48: Введение в разработку для iOS

AppCode?Сперва попробуйте Xcode

Page 49: Введение в разработку для iOS

Размеры и разрешение экранов

Page 50: Введение в разработку для iOS

Фрагментация размеров экранов устройств на Android

Источник: OpenSignal, 2014

Page 51: Введение в разработку для iOS
Page 52: Введение в разработку для iOS

3.5 дюйма 4 дюйма 4.7 дюйма 5.5 дюйма

640×960пикселей

640×1136пикселей

750×1334пикселей

1242×2208*пикселей

320×480точек

320×568точек

375×667точек

414×736точек

@2x @2x @2x @3x

Page 53: Введение в разработку для iOS

1242×2208*пикселей

5.5 дюйма414×736точек@3x

виртуальное разрешение

дисплея

iPhone 6 Plus

Page 54: Введение в разработку для iOS

1242×2208*пикселей

1080×1920пикселей

5.5 дюйма414×736точек@3x

физическоеразрешениедисплея

виртуальное разрешение

дисплея

iPhone 6 Plus

Page 55: Введение в разработку для iOS

Графические активы @1x, @2x, @3x

Page 56: Введение в разработку для iOS

7.9 дюйма 9.7 дюйма 7.9 дюйма 9.7 дюйма

768×1024пикселей

768×1024пикселей

1536×2048пикселей

1536×2048*пикселей

768×1024точек

768×1024точек

768×1024точек

768×1024точек

@1x @1x @2x @2x

Page 57: Введение в разработку для iOS

Языки программирования

Page 58: Введение в разработку для iOS

Objective-C

Page 59: Введение в разработку для iOS

Objective-C

Появился в 1983 году под влиянием Smalltalk

Объектно-ориентированное расширение языка C

Используется преимущественно в разработке для Mac и iOS

Впервые серьезно был использован в 1988 году для ОС NextStep

Вызов метода = отправка сообщения объекту

[receiver message];

Сообщения могут перенаправляться другим объектам

Актуальной на сегодня является версия Objective-C 2.0

Нередко критикуется за синтаксис и многословность

Все объекты передаются по указателю

NSObject *object = [[NSObject alloc] init];

Page 60: Введение в разработку для iOS

#import <Foundation/Foundation.h> @interface Person : NSObject @property NSString *name; - (void)sayHelloWithName:(NSString *)name; @end

#import “Person.h" @implementation Person - (void)sayHelloWithName:(NSString *)name { NSLog(@"Hello, %@! My name is %@.", name, self.name); } @end

Пример кода

#import “Person.h" … Person *person = [[Person alloc] init]; person.name = @"Mikhail"; [person sayHelloWithName:@“GDG"]; …

Page 61: Введение в разработку для iOS

Swift

Page 62: Введение в разработку для iOS

Swift

Был представлен в июне 2014 года на конференции WWDC

Может использоваться в комбинации с Objective-C, C и C++

Допускает как ООП, так и функциональное программирование

Актуальной на сегодня версией является 1.1

Значительно более лаконичен, чем Objective-C

Полностью совместим со всеми фреймворками из iOS SDK

Строго типизированный язык

Переменные обязательно должны быть инициализированы

Поддерживает обобщенное программирование, типизированные коллекции, перегрузку операторов, выведение типов и др.

Page 63: Введение в разработку для iOS

import UIKit

class Person : NSObject {

let name : NSString init(name : NSString) { self.name = name super.init() } func sayHelloWithName(NSString) { NSLog("Hello, \(name)! My name is \(self.name).") } }

Пример кода

… let person = Person(name: "Mikhail") person.sayHelloWithName("GDG") …

Page 64: Введение в разработку для iOS

#import <Foundation/Foundation.h> @property NSString *name; @interface Person : NSObject - (void)sayHelloWithName:(NSString *)name; @end

#import “Person.h" @implementation Person - (void)sayHelloWithName:(NSString *)name { NSLog(@"Hello, %@! My name is %@.”, name, self.name); } @end

#import “Person.h" … Person *person = [[Person alloc] init]; person.name = @"Mikhail"; [person sayHelloWithName:@“GDG"]; …

Objective-C

import UIKit

class Person : NSObject { let name : NSString init(name : NSString) { self.name = name super.init() } func sayHelloWithName(NSString) { NSLog("Hello, \(name)! My name is \(self.name).") } }

… let person = Person(name: "Mikhail") person.sayHelloWithName("GDG") …

Swift

Page 65: Введение в разработку для iOS

Swift + Objective-Cв рамках одного проекта

Page 66: Введение в разработку для iOS

Правило #1:Внутри одного файла языки не смешиваются

Правило #2:Имена классов не должны совпадать

Page 67: Введение в разработку для iOS

Импорт из Swift в Objective-C

Используется автоматически генерируемый заголовок#import "Project-Bridging-Header.h"

В данный заголовок попадают классы или протоколы Swift, наследуемые от NSObject или специально отмеченные @objc

Некоторые элементы нельзя экспортировать, например:• Дженерики• Кортежи• Enums• Структуры• Функции высшего порядка• Глобальные переменные

Не рекомендуется импортировать Swift в заголовки .h Objective-c,так как это может привести к зацикливанию. Используйте @class.

Page 68: Введение в разработку для iOS

Импорт из Objective-C в Swift

Используется редактируемый вручную Objective-C Bridging Header

Прописанные в нем заголовки становятся доступны в Swift-файлах

В Build Settings > Swift Compiler > Code Generation > Objective-C Bridging Header должен быть правильно указан путь к файлу

Самостоятельно указывать директиву импорта не нужно

Page 69: Введение в разработку для iOS

Резюме

Page 70: Введение в разработку для iOS

iOS Software Development Kit (SDK)

Page 71: Введение в разработку для iOS

Cocoa Touch

Core Services

Core OS

Media

Hardware

Page 72: Введение в разработку для iOS

Интерфейс и взаимодействиес пользователем

Графика, аудио и видео

Фундаментальныеклассы и сервисы

Системныйуровень

Cocoa Touch

Core Services

Core OS

Media

HardwareHardware

Page 73: Введение в разработку для iOS

Cocoa Touch

Core Services

Core OS

Media

Hardware

Page 74: Введение в разработку для iOS

Core ServicesCore OS

Media

Распознавание жестов (UIGestureRecognizer и подклассы)

Стандартные виды (UILabel, UIButton, UITextView и др.)Средства для проектирования UI (Storyboards, Auto Layout)

Системные контроллеры видов (Message UI, EventKit UI и др.)

Локальные и Push-уведомленияМногозадачность ОС (разрешения на работу в фоне)

Стандартные контроллеры (UINavigationViewController и др.)Фреймворки UIKit, MapKit, Message UI, Address Book UI и др.

Cocoa Touch

Page 75: Введение в разработку для iOS

Cocoa Touch

Core Services

Core OS

Media

Hardware

Page 76: Введение в разработку для iOS

Cocoa Touch

Core Services

Core OS

Media

Hardware

Page 77: Введение в разработку для iOS

Core ServicesCore OS

ГрафикаCore Graphics, Quartz Core, Core TextSceneKit, SpriteKit, OpenGL ES, GLKit, MetalPhotos, Core ImageАудиоMedia Player, AV Foundation, OpenAL, Core AudioВидеоAVKit, AV Foundation, Core Video

MediaCocoa Touch

Page 78: Введение в разработку для iOS

Cocoa Touch

Core Services

Core OS

Media

Page 79: Введение в разработку для iOS

Cocoa Touch

Core Services

Core OS

Media

Hardware

Page 80: Введение в разработку для iOS

Core Services

Core OS

MediaCocoa Touch

Коллекции (NSArray, NSDictionary, NSSet и др.)Различные сервисы (Core Location, Core Motion, CloudKit и др.)

Фундаментальные фреймворки (Foundation, Core Foundation)Базовый класс для наследования (NSObject)NSString, NSNumber, NSData, NSDate, NSURL и др.

Технологии многопоточный работы (GCD)Технология хранения и управления данными (Core Data)

Работа с сетью, работа с файлами и др.

Page 81: Введение в разработку для iOS

Cocoa Touch

Core Services

Core OS

Media

Hardware

Page 82: Введение в разработку для iOS

Cocoa Touch

Core Services

Core OS

Media

Hardware

Page 83: Введение в разработку для iOS

Core ServicesCore OS

MediaCocoa Touch

Системный уровень (окружение ядра, драйверы и др.)

Безопасность (Touch ID, связка ключей, сертификаты и др.)

Работа с внешними аксессуарами через Bluetooth

Конфигурирование VPN-туннелей

Многое другое

Page 84: Введение в разработку для iOS

Cocoa Touch

Core Services

Core OS

Media

Hardware

Page 85: Введение в разработку для iOS

Cocoa Touch

Core Services

Core OS

Media

Hardware

Page 86: Введение в разработку для iOS

Основные паттерны

Page 87: Введение в разработку для iOS

Паттерн “Model-View-Controller” (MVC)

Page 88: Введение в разработку для iOS

Модель Контроллер Вид

Представляет сущности ваших

данных и манипулирует ими

Например, классы Song или Album

Занимается отрисовкой графического интерфейса

(UIView и все его наследники)

Например, класс AlbumView

Является посредником между моделями и

видами, координирующим их работу.

Он реагирует на поведение пользователя,

получает данные из моделей и отображает их

с помощью видов

Page 89: Введение в разработку для iOS

IBOutlet

Target-Action

ВидМодель

Контроллер

Delegate /

Datasource

Not

ifica

tions

/ K

VC

Page 90: Введение в разработку для iOS

Паттерн “Делегирование”

Page 91: Введение в разработку для iOS

Таблица

Page 92: Введение в разработку для iOS

Таблица Контроллертаблицы

Page 93: Введение в разработку для iOS

Таблица Контроллертаблицы

.h @property IBOutlet UITableView *tableView;

.m [self.tableView setDelegate:self]; [self.tableView setDataSource:self];

Page 94: Введение в разработку для iOS

Таблица Контроллертаблицы

- tableView:cellForRowAtIndexPath: - numberOfSectionsInTableView: - tableView:numberOfRowsInSection: - tableView:titleForHeaderInSection: - tableView:heightForRowAtIndexPath: - tableView:viewForHeaderInSection: - tableView:willSelectRowAtIndexPath: …

Запросы к делегату / источнику данных

Page 95: Введение в разработку для iOS

Паттерн “Target-Action”

Page 96: Введение в разработку для iOS

Action Target

Сообщение о событии

Page 97: Введение в разработку для iOS

1. Какое-либо действие пользователя.

Action

Page 98: Введение в разработку для iOS

2. Сообщение о событии для объекта-получателя.

Page 99: Введение в разработку для iOS

3. Выполнение действия получателем сообщения.

Target

Page 100: Введение в разработку для iOS

Пример

Page 101: Введение в разработку для iOS

Произошел сброс настроек!

Кнопка

Пользователь нажал на кнопку

Сценарий:

Page 102: Введение в разработку для iOS

Кнопка

Controller-restoreDefaults:

Page 103: Введение в разработку для iOS

Кнопка

Controller-restoreDefaults:

-addTarget:action:forControlEvents:

EVENT = TouchUpInside TARGET = Controller ACTION = restoreDefaults:

Page 104: Введение в разработку для iOS

-addTarget:action:forControlEvents:

Произошел сброс настроек!

Кнопка

Controller-restoreDefaults:

UIControlEventTouchUpInside

EVENT = TouchUpInside TARGET = Controller ACTION = restoreDefaults:

Page 105: Введение в разработку для iOS

Cocoa Touch

Page 106: Введение в разработку для iOS

Стандартные виды(фреймворк UIKit)

Page 107: Введение в разработку для iOS

Стандартные виды(фреймворк UIKit)

Page 108: Введение в разработку для iOS

Стандартные виды(фреймворк UIKit)

Table

View

Map

Kit V

iew

Text

View

Imag

e Vi

ew

Scro

ll View

Colle

ction

View

Web

View

Page 109: Введение в разработку для iOS

Стандартные виды(фреймворк UIKit)

Table

View

Map

Kit V

iew

Text

View

Imag

e Vi

ew

Scro

ll View

Colle

ction

View

Web

View

и другие…

Page 110: Введение в разработку для iOS

Стандартные элементы управления(фреймворк UIKit)

Page 111: Введение в разработку для iOS

Стандартные элементы управления(фреймворк UIKit)

Button Text Field Segment Control

Switch Stepper Slider

и другие…

Page 112: Введение в разработку для iOS

Стандартные контроллеры видов(фреймворк UIKit)

Page 113: Введение в разработку для iOS

Стандартные контроллеры видов(фреймворк UIKit)

Page 114: Введение в разработку для iOS

View

Con

trolle

r

Page

View

Con

trolle

r

Colle

ction

View

Con

trolle

r

Table

View

Con

trolle

rNa

vigat

ion V

iew C

ontro

ller

Tab

Bar C

ontro

ller

Split

View

Con

trolle

r

Стандартные контроллеры видов(фреймворк UIKit)

Page 115: Введение в разработку для iOS

View

Con

trolle

r

Page

View

Con

trolle

r

Colle

ction

View

Con

trolle

r

Table

View

Con

trolle

rNa

vigat

ion V

iew C

ontro

ller

Tab

Bar C

ontro

ller

Split

View

Con

trolle

r

Стандартные контроллеры видов(фреймворк UIKit)

и другие…

Page 116: Введение в разработку для iOS

Примеры

Page 117: Введение в разработку для iOS

Image View

Label

Slider

Button

Примеры

Page 118: Введение в разработку для iOS

Примеры

NavigationView Controller

TableView Controller

Tab BarView Controller

Page 119: Введение в разработку для iOS

Примеры

Page 120: Введение в разработку для iOS

Примеры

Page 121: Введение в разработку для iOS

Примеры

Page 122: Введение в разработку для iOS

Примеры

Page 123: Введение в разработку для iOS

Аккаунт разработчика

Page 124: Введение в разработку для iOS

Аккаунт разработчика

Тестирование на устройстве

Доступ к форуму разработчиков Apple

Загрузка бета-версий Xcode, iOS и др.

Возможность публикации приложений в AppStore

Page 125: Введение в разработку для iOS

Стандартная программа для разработчиков$99 / год

Page 126: Введение в разработку для iOS

Корпоративная программа для разработчиков$299 / год

Page 127: Введение в разработку для iOS

Студенческая программа для разработчиковБесплатно*

Page 128: Введение в разработку для iOS

Официальное руководство по дизайну интерфейсов“iOS Human Interface Guidelines”

Серия “Swift Programming Series”Книга 1: “The Swift Programming Language”Книга 2: “Using Swift with Cocoa and Objective-C”

Правила проверки приложений при публикации в AppStore“App Store Review Guidelines”

Обновленный стэнфордский курс по разработке для iOS“Developing iOS 8 Apps with Swift”

Книги Мэтта Ньюбурга“iOS 7 Programming Fundamentals” (начальный уровень)“Programming iOS 8: Dive Deep into Views, View Controllers, and Frameworks” (продвинутый уровень, не для начинающих)

Книги и материалы для изученияКраткий вводный курс от Apple“Start Developing iOS Apps Today”

Page 129: Введение в разработку для iOS

Дополнительные источники информации

Ежемесячный журнал, посвященный лучшим практикамhttp://objc.io

Библиотека Apple для iOS-разработчиков“iOS Developer Library”

Тематические разделы на Хабрахабрhttp://habrahabr.ru/hub/ios_dev (и другие)

Ответы на возникающие вопросы можно получить на Stackoverflowhttp://stackoverflow.com (обратите внимание на пользователя BBum)

Форум разработчиков Apple (требуется аккаунт разработчика)https://devforums.apple.com

Различные тематические сайты, персональные страницы и блоги:NSBlog (https://www.mikeash.com/pyblog)NSHipster (http://nshipster.com)и другие…

Page 130: Введение в разработку для iOS

“It’s easy to get started, it's hard work to get good. If you're interested, and put the time in, you can probably get good. But a lot of people come in with the impression that there

are all these learning resources etc, and you just go through the Stanford lectures (or whatever) and that's it.

The reality is it takes a long time.

If you look at people who are really good at iOS, I think you will find that they still devote a lot of time to continuously learning new things. You have to adopt the mindset that

there is a continuous process of learning.”

— Drew Crawford, sealedabstract.com

Page 131: Введение в разработку для iOS

Спасибо за внимание!Email: [email protected]: @m1kejd