Введение в разработку для iOS
-
Upload
michael-dudarev -
Category
Education
-
view
200 -
download
5
Transcript of Введение в разработку для iOS
Введение в разработку мобильных приложений для 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: [email protected]: @m1kejd