Прочитан на второй встрече сообщества GDG Krasnodar, посвященной мобильной разработке.
Presented at the second meeting of the GDG Krasnodar's community, that was focused on "Mobile Development".
26. Любой компьютер Mac
Среда разработки Xcode
Комплект средств разработки для iOS (SDK)
Опционально: iPhone / iPad / iPod Touch
Базовый инструментарий
59. Objective-C
Появился в 1983 году под влиянием Smalltalk
Объектно-ориентированное расширение языка C
Используется преимущественно в разработке для Mac и iOS
Впервые серьезно был использован в 1988 году для ОС NextStep
Вызов метода = отправка сообщения объекту
[receiver message];
Сообщения могут перенаправляться другим объектам
Актуальной на сегодня является версия Objective-C 2.0
Нередко критикуется за синтаксис и многословность
Все объекты передаются по указателю
NSObject *object = [[NSObject alloc] init];
60. #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"];
…
62. Swift
Был представлен в июне 2014 года на конференции WWDC
Может использоваться в комбинации с Objective-C, C и C++
Допускает как ООП, так и функциональное программирование
Актуальной на сегодня версией является 1.1
Значительно более лаконичен, чем Objective-C
Полностью совместим со всеми фреймворками из iOS SDK
Строго типизированный язык
Переменные обязательно должны быть инициализированы
Поддерживает обобщенное программирование, типизированные
коллекции, перегрузку операторов, выведение типов и др.
63. 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")
…
64. #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
67. Импорт из Swift в Objective-C
Используется автоматически генерируемый заголовок
#import "Project-Bridging-Header.h"
В данный заголовок попадают классы или протоколы Swift,
наследуемые от NSObject или специально отмеченные @objc
Некоторые элементы нельзя экспортировать, например:
• Дженерики
• Кортежи
• Enums
• Структуры
• Функции высшего порядка
• Глобальные переменные
Не рекомендуется импортировать Swift в заголовки .h Objective-c,
так как это может привести к зацикливанию. Используйте @class.
68. Импорт из Objective-C в Swift
Используется редактируемый вручную Objective-C Bridging Header
Прописанные в нем заголовки становятся доступны в Swift-файлах
В Build Settings > Swift Compiler > Code Generation > Objective-C
Bridging Header должен быть правильно указан путь к файлу
Самостоятельно указывать директиву импорта не нужно
74. 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
77. 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
80. 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)
Работа с сетью, работа с файлами и др.
83. Core Services
Core OS
Media
Cocoa Touch
Системный уровень (окружение ядра, драйверы и др.)
Безопасность (Touch ID, связка ключей, сертификаты и др.)
Работа с внешними аксессуарами через Bluetooth
Конфигурирование VPN-туннелей
Многое другое
88. Модель Контроллер Вид
Представляет
сущности ваших
данных и
манипулирует ими
Например, классы
Song или Album
Занимается отрисовкой
графического интерфейса
(UIView и все его
наследники)
Например, класс
AlbumView
Является посредником
между моделями и
видами, координирующим
их работу.
Он реагирует на
поведение пользователя,
получает данные из
моделей и отображает их
с помощью видов
124. Аккаунт разработчика
Тестирование на устройстве
Доступ к форуму разработчиков Apple
Загрузка бета-версий Xcode, iOS и др.
Возможность публикации приложений в AppStore
128. Официальное руководство по дизайну интерфейсов
“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”
129. Дополнительные источники информации
Ежемесячный журнал, посвященный лучшим практикам
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)
и другие…
130. “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