O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

1.325 visualizações

Publicada em

Прочитан на второй встрече сообщества GDG Krasnodar, посвященной мобильной разработке.

Presented at the second meeting of the GDG Krasnodar's community, that was focused on "Mobile Development".

Publicada em: Educação
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

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

  1. 1. Введение в разработку мобильных приложений для iOS Дударев Михаил, Mihteh Lab.
  2. 2. iPhone
  3. 3. 2014 2014 2013 2013 2012 2011 2010 2009 2008 2007
  4. 4. 6+ (2014) 6 (2014) 5S (2013) 5C (2013) 5 (2012) 4S (2011) 4 (2010) 3G S (2009) 3G (2008) 2G (2007) 2015
  5. 5. 5,71 1,43 7,14 2,86 8,57 4,29 180 2007 2008 2009 2010 2011 2012 2013 2014 169,22 150,26 125,05 72,29 39,99 20,73 11,63 1,39 Продажи iPhone по всему миру млн. единиц © Statista, 2015Источник: Apple
  6. 6. Фрагментация моделей устройств на Android Источник: OpenSignal, 2014 18769 устройств
  7. 7. 4S (2011) 5 (2012) 5S (2013) 5C (2013) 6 (2014) 6+ (2014) Так или иначе поддерживают iOS 8 Актуальные модели iPhone
  8. 8. iPad
  9. 9. 2 (2011) 3rd G en. (2012) M ini(2012) 4th G en. (2012) Air(2013) M ini2 (2013) Air2(2014) M ini3 (2014) Так или иначе поддерживают iOS 8 Актуальные модели
  10. 10. Доля рынка iPad по всему миру Источник: IDC, 2015 Другие 66,2% iPad 33,8% Другие 72,4% iPad 27,6% 2013 2014
  11. 11. iOS
  12. 12. iOS ~ iPhone Operating System
  13. 13. 2007 2014 2008 2009 2010 2011 2012 2013 2015 • 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
  14. 14. Официальные данные по состоянию на 02.02.2015 Источники: Apple iOS
  15. 15. Официальные данные по состоянию на 02.02.2015 5.0 4.4 4.3 4.2.x 4.1.x4.0.3-4.0.4 2.2-2.3.7 Источники: Apple, Google iOS Android
  16. 16. 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,4 12,8 11,7 57,4 74,9 81,2 84,4 Доля iOS на рынке мобильных ОС % от количества проданных устройств Android iOS Другие Источник: IDC
  17. 17. App Store
  18. 18. 200 000 400 000 600 000 800 000 1 000 000 1 200 000 1 400 000 И ю ль 2008 С ентябрь 2008 Апрель 2009 И ю ль 2009 Н оябрь 2009 М арт 2010И ю нь 2010 О ктябрь 2010 Я нварь 2011 И ю нь 2011 О ктябрь 2011 М арт 2012И ю нь 2012 С ентябрь 2012 Я нварь 2013 М ай 2013И ю нь 2013 О ктябрь 2013 И ю нь 2014 С ентябрь 2014 800 3 000 35 000 65 000 100 000 150 000 225 000 300 000 350 000 425 000 500 000 585 000 650 000 700 000 800 000 850 000 900 000 1 000 000 1 200 000 1 300 000 Общее количество доступных приложений на сентябрь 2014 © Statista, 2015Источник: Apple
  19. 19. 10 20 30 40 50 60 70 80 90 И ю ль 2008 С ентябрь 2008 Апрель 2009 И ю ль 2009 Я нварь 2010 Апрель 2010 И ю ль 2010 С ентябрь 2010 О ктябрь 2010 Я нварь 2011 И ю нь 2011 И ю ль 2011 О ктябрь 2011 М арт 2012 И ю нь 2012 С ентябрь 2012 Я нварь 2013 М ай 2013 О ктябрь 2013 Я нварь 2014 О ктябрь 2014 0,01 0,1 1 1,5 3 4 5 6,5 7 10 14 15 18 25 30 35 40 50 60 75 85 Общее количество загрузок приложений из App Store по состоянию на октябрь 2014, млрд. единиц © Statista, 2015Источники: Apple, TechCrunch
  20. 20. Games Education Business Lifestyle Entertainment Utilities Travel Books Music Productivity Health and Fitness Sports Reference Photo and Video News Finance Food and Drink Medical Social 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
  21. 21. Базовый инструментарий
  22. 22. Любой компьютер Mac Среда разработки Xcode Комплект средств разработки для iOS (SDK) Опционально: iPhone / iPad / iPod Touch Базовый инструментарий
  23. 23. Любой компьютер Mac
  24. 24. Любой компьютер Mac
  25. 25. Любой компьютер Mac
  26. 26. Любой компьютер Mac
  27. 27. Хакинтош? Не рекомендуется
  28. 28. RubyMotion Xamarin PhoneGap / CordovaXcode
  29. 29. RubyMotion Xamarin PhoneGap / CordovaXcode Ruby C# HTML/CSS/JSObjC/Swift $15-25 в месяц $25-83 в месяц БесплатноБесплатно
  30. 30. Native App Web App
  31. 31. Среда разработки Xcode
  32. 32. Xcode Simulator Interface Builder Instruments
  33. 33. Работа с кодом
  34. 34. Interface Builder
  35. 35. Связывание элементов интерфейса с кодом
  36. 36. Storyboards
  37. 37. Autolayout NSLayoutConstraint
  38. 38. Интеграция с системой контроля версий (GIT)
  39. 39. Unit-тестирование
  40. 40. Continuous Integration
  41. 41. Simulator Resizable Fixed
  42. 42. Средства отладки Точкаостановки Потребляемыересурсы,потоки Значения переменных, отладочная консоль
  43. 43. Инструменты Xcode
  44. 44. AppCode? Сперва попробуйте Xcode
  45. 45. Размеры и разрешение экранов
  46. 46. Фрагментация размеров экранов устройств на Android Источник: OpenSignal, 2014
  47. 47. 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
  48. 48. 1242×2208* пикселей 5.5 дюйма 414×736 точек @3x виртуальное разрешение дисплея iPhone 6 Plus
  49. 49. 1242×2208* пикселей 1080×1920 пикселей 5.5 дюйма 414×736 точек @3x физическое разрешение дисплея виртуальное разрешение дисплея iPhone 6 Plus
  50. 50. Графические активы @1x, @2x, @3x
  51. 51. 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
  52. 52. Языки программирования
  53. 53. Objective-C
  54. 54. Objective-C Появился в 1983 году под влиянием Smalltalk Объектно-ориентированное расширение языка C Используется преимущественно в разработке для Mac и iOS Впервые серьезно был использован в 1988 году для ОС NextStep Вызов метода = отправка сообщения объекту [receiver message]; Сообщения могут перенаправляться другим объектам Актуальной на сегодня является версия Objective-C 2.0 Нередко критикуется за синтаксис и многословность Все объекты передаются по указателю NSObject *object = [[NSObject alloc] init];
  55. 55. #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"]; …
  56. 56. Swift
  57. 57. Swift Был представлен в июне 2014 года на конференции WWDC Может использоваться в комбинации с Objective-C, C и C++ Допускает как ООП, так и функциональное программирование Актуальной на сегодня версией является 1.1 Значительно более лаконичен, чем Objective-C Полностью совместим со всеми фреймворками из iOS SDK Строго типизированный язык Переменные обязательно должны быть инициализированы Поддерживает обобщенное программирование, типизированные коллекции, перегрузку операторов, выведение типов и др.
  58. 58. 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") …
  59. 59. #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
  60. 60. Swift + Objective-C в рамках одного проекта
  61. 61. Правило #1: Внутри одного файла языки не смешиваются Правило #2: Имена классов не должны совпадать
  62. 62. Импорт из Swift в Objective-C Используется автоматически генерируемый заголовок #import "Project-Bridging-Header.h" В данный заголовок попадают классы или протоколы Swift, наследуемые от NSObject или специально отмеченные @objc Некоторые элементы нельзя экспортировать, например: • Дженерики • Кортежи • Enums • Структуры • Функции высшего порядка • Глобальные переменные Не рекомендуется импортировать Swift в заголовки .h Objective-c, так как это может привести к зацикливанию. Используйте @class.
  63. 63. Импорт из Objective-C в Swift Используется редактируемый вручную Objective-C Bridging Header Прописанные в нем заголовки становятся доступны в Swift-файлах В Build Settings > Swift Compiler > Code Generation > Objective-C Bridging Header должен быть правильно указан путь к файлу Самостоятельно указывать директиву импорта не нужно
  64. 64. Резюме
  65. 65. iOS Software Development Kit (SDK)
  66. 66. Cocoa Touch Core Services Core OS Media Hardware
  67. 67. Интерфейс и взаимодействие с пользователем Графика, аудио и видео Фундаментальные классы и сервисы Системный уровень Cocoa Touch Core Services Core OS Media HardwareHardware
  68. 68. Cocoa Touch Core Services Core OS Media Hardware
  69. 69. Core Services Core 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
  70. 70. Cocoa Touch Core Services Core OS Media Hardware
  71. 71. Cocoa Touch Core Services Core OS Media Hardware
  72. 72. Core Services Core OS Графика Core Graphics, Quartz Core, Core Text SceneKit, SpriteKit, OpenGL ES, GLKit, Metal Photos, Core Image Аудио Media Player, AV Foundation, OpenAL, Core Audio Видео AVKit, AV Foundation, Core Video Media Cocoa Touch
  73. 73. Cocoa Touch Core Services Core OS Media
  74. 74. Cocoa Touch Core Services Core OS Media Hardware
  75. 75. Core Services Core OS Media Cocoa Touch Коллекции (NSArray, NSDictionary, NSSet и др.) Различные сервисы (Core Location, Core Motion, CloudKit и др.) Фундаментальные фреймворки (Foundation, Core Foundation) Базовый класс для наследования (NSObject) NSString, NSNumber, NSData, NSDate, NSURL и др. Технологии многопоточный работы (GCD) Технология хранения и управления данными (Core Data) Работа с сетью, работа с файлами и др.
  76. 76. Cocoa Touch Core Services Core OS Media Hardware
  77. 77. Cocoa Touch Core Services Core OS Media Hardware
  78. 78. Core Services Core OS Media Cocoa Touch Системный уровень (окружение ядра, драйверы и др.) Безопасность (Touch ID, связка ключей, сертификаты и др.) Работа с внешними аксессуарами через Bluetooth Конфигурирование VPN-туннелей Многое другое
  79. 79. Cocoa Touch Core Services Core OS Media Hardware
  80. 80. Cocoa Touch Core Services Core OS Media Hardware
  81. 81. Основные паттерны
  82. 82. Паттерн “Model-View-Controller” (MVC)
  83. 83. Модель Контроллер Вид Представляет сущности ваших данных и манипулирует ими Например, классы Song или Album Занимается отрисовкой графического интерфейса (UIView и все его наследники) Например, класс AlbumView Является посредником между моделями и видами, координирующим их работу. Он реагирует на поведение пользователя, получает данные из моделей и отображает их с помощью видов
  84. 84. IB O utlet Target-Action ВидМодель Контроллер D elegate / D atasource Notifications/KVC
  85. 85. Паттерн “Делегирование”
  86. 86. Таблица
  87. 87. Таблица Контроллер таблицы
  88. 88. Таблица Контроллер таблицы .h @property IBOutlet UITableView *tableView; .m [self.tableView setDelegate:self]; [self.tableView setDataSource:self];
  89. 89. Таблица Контроллер таблицы - tableView:cellForRowAtIndexPath: - numberOfSectionsInTableView: - tableView:numberOfRowsInSection: - tableView:titleForHeaderInSection: - tableView:heightForRowAtIndexPath: - tableView:viewForHeaderInSection: - tableView:willSelectRowAtIndexPath: … Запросы к делегату / источнику данных
  90. 90. Паттерн “Target-Action”
  91. 91. Action Target Сообщение о событии
  92. 92. 1. Какое-либо действие пользователя. Action
  93. 93. 2. Сообщение о событии для объекта-получателя.
  94. 94. 3. Выполнение действия получателем сообщения. Target
  95. 95. Пример
  96. 96. Произошел сброс настроек! Кнопка Пользователь нажал на кнопку Сценарий:
  97. 97. Кнопка Controller -restoreDefaults:
  98. 98. Кнопка Controller -restoreDefaults: -addTarget:action:forControlEvents: EVENT = TouchUpInside TARGET = Controller ACTION = restoreDefaults:
  99. 99. -addTarget:action:forControlEvents: Произошел сброс настроек! Кнопка Controller -restoreDefaults: UIControlEventTouchUpInside EVENT = TouchUpInside TARGET = Controller ACTION = restoreDefaults:
  100. 100. Cocoa Touch
  101. 101. Стандартные виды (фреймворк UIKit)
  102. 102. Стандартные виды (фреймворк UIKit)
  103. 103. Стандартные виды (фреймворк UIKit) TableView MapKitView TextView ImageView ScrollView CollectionView WebView
  104. 104. Стандартные виды (фреймворк UIKit) TableView MapKitView TextView ImageView ScrollView CollectionView WebView и другие…
  105. 105. Стандартные элементы управления (фреймворк UIKit)
  106. 106. Стандартные элементы управления (фреймворк UIKit) Button Text Field Segment Control Switch Stepper Slider и другие…
  107. 107. Стандартные контроллеры видов (фреймворк UIKit)
  108. 108. Стандартные контроллеры видов (фреймворк UIKit)
  109. 109. ViewController PageViewController CollectionViewController TableViewControllerNavigationViewController TabBarController SplitViewController Стандартные контроллеры видов (фреймворк UIKit)
  110. 110. ViewController PageViewController CollectionViewController TableViewControllerNavigationViewController TabBarController SplitViewController Стандартные контроллеры видов (фреймворк UIKit) и другие…
  111. 111. Примеры
  112. 112. Image View Label Slider Button Примеры
  113. 113. Примеры Navigation View Controller Table View Controller Tab Bar View Controller
  114. 114. Примеры
  115. 115. Примеры
  116. 116. Примеры
  117. 117. Примеры
  118. 118. Аккаунт разработчика
  119. 119. Аккаунт разработчика Тестирование на устройстве Доступ к форуму разработчиков Apple Загрузка бета-версий Xcode, iOS и др. Возможность публикации приложений в AppStore
  120. 120. Стандартная программа для разработчиков $99 / год
  121. 121. Корпоративная программа для разработчиков $299 / год
  122. 122. Студенческая программа для разработчиков Бесплатно*
  123. 123. Официальное руководство по дизайну интерфейсов “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”
  124. 124. Дополнительные источники информации Ежемесячный журнал, посвященный лучшим практикам http://objc.io Библиотека Apple для iOS-разработчиков “iOS Developer Library” Тематические разделы на Хабрахабр http://habrahabr.ru/hub/ios_dev (и другие) Ответы на возникающие вопросы можно получить на Stackoverflow http://stackoverflow.com (обратите внимание на пользователя BBum) Форум разработчиков Apple (требуется аккаунт разработчика) https://devforums.apple.com Различные тематические сайты, персональные страницы и блоги: NSBlog (https://www.mikeash.com/pyblog) NSHipster (http://nshipster.com) и другие…
  125. 125. “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
  126. 126. Спасибо за внимание! Email: mikejd@mikejd.com Twitter: @m1kejd

×