Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

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

Mikhail Dudarev

February 07, 2015
Tweet

Other Decks in Programming

Transcript

  1. 6+ (2014) 6 (2014) 5S (2013) 5C (2013) 5 (2012)

    4S (2011) 4 (2010) 3G S (2009) 3G (2008) 2G (2007) 2015
  2. 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
  3. 4S (2011) 5 (2012) 5S (2013) 5C (2013) 6 (2014)

    6+ (2014) Так или иначе поддерживают iOS 8 Актуальные модели iPhone
  4. 2 (2011) 3rd G en. (2012) M ini (2012) 4th

    G en. (2012) Air (2013) M ini 2 (2013) Air 2 (2014) M ini 3 (2014) Так или иначе поддерживают iOS 8 Актуальные модели
  5. iOS

  6. 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
  7. Официальные данные по состоянию на 02.02.2015 5.0 4.4 4.3 4.2.x

    4.1.x 4.0.3-4.0.4 2.2-2.3.7 Источники: Apple, Google iOS Android
  8. 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
  9. 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
  10. 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
  11. 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
  12. Любой компьютер Mac Среда разработки Xcode Комплект средств разработки для

    iOS (SDK) Опционально: iPhone / iPad / iPod Touch Базовый инструментарий
  13. RubyMotion Xamarin PhoneGap / Cordova Xcode Ruby C# HTML/CSS/JS ObjC/Swift

    $15-25 в месяц $25-83 в месяц Бесплатно Бесплатно
  14. 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
  15. 1242×2208* пикселей 1080×1920 пикселей 5.5 дюйма 414×736 точек @3x физическое

    разрешение дисплея виртуальное разрешение дисплея iPhone 6 Plus
  16. 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
  17. Objective-C Появился в 1983 году под влиянием Smalltalk Объектно-ориентированное расширение

    языка C Используется преимущественно в разработке для Mac и iOS Впервые серьезно был использован в 1988 году для ОС NextStep Вызов метода = отправка сообщения объекту [receiver message]; Сообщения могут перенаправляться другим объектам Актуальной на сегодня является версия Objective-C 2.0 Нередко критикуется за синтаксис и многословность Все объекты передаются по указателю NSObject *object = [[NSObject alloc] init];
  18. #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"]; …
  19. Swift Был представлен в июне 2014 года на конференции WWDC

    Может использоваться в комбинации с Objective-C, C и C++ Допускает как ООП, так и функциональное программирование Актуальной на сегодня версией является 1.1 Значительно более лаконичен, чем Objective-C Полностью совместим со всеми фреймворками из iOS SDK Строго типизированный язык Переменные обязательно должны быть инициализированы Поддерживает обобщенное программирование, типизированные коллекции, перегрузку операторов, выведение типов и др.
  20. 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") …
  21. #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
  22. Импорт из Swift в Objective-C Используется автоматически генерируемый заголовок #import

    "Project-Bridging-Header.h" В данный заголовок попадают классы или протоколы Swift, наследуемые от NSObject или специально отмеченные @objc Некоторые элементы нельзя экспортировать, например: • Дженерики • Кортежи • Enums • Структуры • Функции высшего порядка • Глобальные переменные Не рекомендуется импортировать Swift в заголовки .h Objective-c, так как это может привести к зацикливанию. Используйте @class.
  23. Импорт из Objective-C в Swift Используется редактируемый вручную Objective-C Bridging

    Header Прописанные в нем заголовки становятся доступны в Swift-файлах В Build Settings > Swift Compiler > Code Generation > Objective-C Bridging Header должен быть правильно указан путь к файлу Самостоятельно указывать директиву импорта не нужно
  24. Интерфейс и взаимодействие с пользователем Графика, аудио и видео Фундаментальные

    классы и сервисы Системный уровень Cocoa Touch Core Services Core OS Media Hardware Hardware
  25. 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
  26. 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
  27. 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) Работа с сетью, работа с файлами и др.
  28. Core Services Core OS Media Cocoa Touch Системный уровень (окружение

    ядра, драйверы и др.) Безопасность (Touch ID, связка ключей, сертификаты и др.) Работа с внешними аксессуарами через Bluetooth Конфигурирование VPN-туннелей Многое другое
  29. Модель Контроллер Вид Представляет сущности ваших данных и манипулирует ими

    Например, классы Song или Album Занимается отрисовкой графического интерфейса (UIView и все его наследники) Например, класс AlbumView Является посредником между моделями и видами, координирующим их работу. Он реагирует на поведение пользователя, получает данные из моделей и отображает их с помощью видов
  30. Таблица Контроллер таблицы - tableView:cellForRowAtIndexPath: - numberOfSectionsInTableView: - tableView:numberOfRowsInSection: -

    tableView:titleForHeaderInSection: - tableView:heightForRowAtIndexPath: - tableView:viewForHeaderInSection: - tableView:willSelectRowAtIndexPath: … Запросы к делегату / источнику данных
  31. Стандартные виды (фреймворк UIKit) Table View MapKit View Text View

    Image View Scroll View Collection View Web View и другие…
  32. View Controller Page View Controller Collection View Controller Table View

    Controller Navigation View Controller Tab Bar Controller Split View Controller Стандартные контроллеры видов (фреймворк UIKit)
  33. View Controller Page View Controller Collection View Controller Table View

    Controller Navigation View Controller Tab Bar Controller Split View Controller Стандартные контроллеры видов (фреймворк UIKit) и другие…
  34. Аккаунт разработчика Тестирование на устройстве Доступ к форуму разработчиков Apple

    Загрузка бета-версий Xcode, iOS и др. Возможность публикации приложений в AppStore
  35. Официальное руководство по дизайну интерфейсов “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”
  36. Дополнительные источники информации Ежемесячный журнал, посвященный лучшим практикам 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) и другие…
  37. “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