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

Preview:

Citation preview

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

iPhone

2014

2014

2013

2013

2012

2011

2010

2009

2008

2007

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

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

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

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

18769 устройств

4S (2

011)

5 (20

12)

5S (2

013)

5C (2

013)

6 (20

14)

6+ (2

014)

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

iPad

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Актуальные модели

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

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

Другие 66,2%

iPad 33,8%

Другие 72,4%

iPad 27,6%

2013 2014

iOS

iOS ~ iPhone Operating System

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

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

Источники: Apple

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

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

App Store

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

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

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

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

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

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

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

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

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

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

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

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

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

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

RubyMotion Xamarin PhoneGap / CordovaXcode

RubyMotion Xamarin PhoneGap / CordovaXcode

Ruby C# HTML/CSS/JSObjC/Swift

$15-25в месяц

$25-83в месяц

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

Native App Web App

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

Xcode

Simulator

Interface Builder

Instruments

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

Interface Builder

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

Storyboards

Autolayout

NSLayoutConstraint

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

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

Continuous Integration

Simulator

Resizable

Fixed

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

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

Потребляемы

е ресурсы

, потоки

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

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

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

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

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

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

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

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

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

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

дисплея

iPhone 6 Plus

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

1080×1920пикселей

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

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

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

дисплея

iPhone 6 Plus

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

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

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

Objective-C

Objective-C

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

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

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

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

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

[receiver message];

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

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

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

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

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

#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"]; …

Swift

Swift

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

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

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

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

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

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

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

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

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

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") …

#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

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

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

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

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

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

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

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

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

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

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

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

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

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

Резюме

iOS Software Development Kit (SDK)

Cocoa Touch

Core Services

Core OS

Media

Hardware

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

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

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

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

Cocoa Touch

Core Services

Core OS

Media

HardwareHardware

Cocoa Touch

Core Services

Core OS

Media

Hardware

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

Cocoa Touch

Core Services

Core OS

Media

Hardware

Cocoa Touch

Core Services

Core OS

Media

Hardware

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

Cocoa Touch

Core Services

Core OS

Media

Cocoa Touch

Core Services

Core OS

Media

Hardware

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)

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

Cocoa Touch

Core Services

Core OS

Media

Hardware

Cocoa Touch

Core Services

Core OS

Media

Hardware

Core ServicesCore OS

MediaCocoa Touch

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

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

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

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

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

Cocoa Touch

Core Services

Core OS

Media

Hardware

Cocoa Touch

Core Services

Core OS

Media

Hardware

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

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

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

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

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

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

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

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

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

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

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

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

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

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

IBOutlet

Target-Action

ВидМодель

Контроллер

Delegate /

Datasource

Not

ifica

tions

/ K

VC

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

Таблица

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

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

.h @property IBOutlet UITableView *tableView;

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

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

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

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

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

Action Target

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

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

Action

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

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

Target

Пример

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

Кнопка

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

Сценарий:

Кнопка

Controller-restoreDefaults:

Кнопка

Controller-restoreDefaults:

-addTarget:action:forControlEvents:

EVENT = TouchUpInside TARGET = Controller ACTION = restoreDefaults:

-addTarget:action:forControlEvents:

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

Кнопка

Controller-restoreDefaults:

UIControlEventTouchUpInside

EVENT = TouchUpInside TARGET = Controller ACTION = restoreDefaults:

Cocoa Touch

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

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

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

Table

View

Map

Kit V

iew

Text

View

Imag

e Vi

ew

Scro

ll View

Colle

ction

View

Web

View

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

Table

View

Map

Kit V

iew

Text

View

Imag

e Vi

ew

Scro

ll View

Colle

ction

View

Web

View

и другие…

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

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

Button Text Field Segment Control

Switch Stepper Slider

и другие…

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

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

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)

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)

и другие…

Примеры

Image View

Label

Slider

Button

Примеры

Примеры

NavigationView Controller

TableView Controller

Tab BarView Controller

Примеры

Примеры

Примеры

Примеры

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

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

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

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

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

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

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

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

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

Официальное руководство по дизайну интерфейсов“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”

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

Ежемесячный журнал, посвященный лучшим практикам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)и другие…

“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

Спасибо за внимание!Email: mikejd@mikejd.comTwitter: @m1kejd

Recommended