SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
Swift Школа 
Сергей Пронин 
Empatika
План 
• iOS8 - Введение в CloudKit 
• Практика CloudKit 
• iOS8 - Size Classes
CloudKit
CloudKit 
• Обёртка для доступа напрямую к iCloud 
• Кроссплатформенная поддержка (iOS / Mac OS) 
• Доступ к iCloud аккаунтам 
• Структурированные и файловые данные 
• Только “транспорт” - не хранение
Структуры данных 
• Контейнер - CKContainer 
• База данных - CKDatabase 
• Запись - CKRecord 
• Зона данных - CKZone 
• ID записи - CKRecordID 
• Отношения - CKReference 
• Неструктурированные данные - CKAsset
CKContainer 
• Один на приложение 
• Инкапсуляция данных (public / private для юзера) 
• Можно передавать другим приложениям 
• Управляется через админку
CKDatabase
Public Private 
Данные Общие данные Только для юзера 
Аккаунт Только для записи Обязательно 
Квота Разработчик Пользователи
CKRecord 
• Структурированные данные 
• Пары ключ-значение 
• Схема данных формируется на ходу
Допустимые типы 
NSString -> String 
NSNumber -> Int, Double, Float, Bool 
NSData 
NSDate 
CLLocation 
CKReference 
CKAsset 
NSArray [ * ]
CKRecordZone
CKRecordID 
class CKRecordID : … { 
convenience init(recordName: String!) 
init(recordName: String!, zoneID: CKRecordZoneID!) 
var recordName: String! { get } 
var zoneID: CKRecordZoneID! { get } 
} 
• Можно создать самому либо автоматически 
• Полностью нормализованы - содержат информацию о 
местонахождении записи
CKReference 
var person = CKRecord(recordType: "Person") 
var city = CKRecord(recordType: "City") 
var reference = 
CKReference(record: city, action: .None) 
person.setObject(reference, forKey: "hometown")
CKAsset 
• Неструктурированные данные 
• У юзера хранятся на диске 
• Являются полями CKRecord
CKReference 
var person = CKRecord(recordType: "Person") 
var passport = CKAsset(fileURL: passportFileURL) 
person["passport"] = passport
Практика CloudKit
Size Classes
Structure 
До iOS 8 
Device type 
Interface Orientation 
Size 
iOS 8 и позже 
Traits and trait collections 
Size
Trait collection 
class UITraitCollection : NSObject, NSCopying, NSSecureCoding, NSCoding { 
func containsTraitsInCollection(trait: UITraitCollection!) -> Bool 
init(traitsFromCollections traitCollections: [AnyObject]!) -> 
UITraitCollection 
init(userInterfaceIdiom idiom: UIUserInterfaceIdiom) -> UITraitCollection 
var userInterfaceIdiom: UIUserInterfaceIdiom { get } 
init(displayScale scale: CGFloat) -> UITraitCollection 
var displayScale: CGFloat { get } 
init(horizontalSizeClass: UIUserInterfaceSizeClass) -> UITraitCollection 
var horizontalSizeClass: UIUserInterfaceSizeClass { get } 
init(verticalSizeClass: UIUserInterfaceSizeClass) -> UITraitCollection 
var verticalSizeClass: UIUserInterfaceSizeClass { get } 
}
HorizontalSizeClass 
Горизонтальная спецификация 
VerticalSizeClass 
Вертикальная спецификация 
UserInterfaceIdiom 
Тип устройства 
DisplayScale 
Масштаб экрана
x-sizeClass Regular 
y-sizeClass Regular 
idiom Pad 
scale 1.0
x-sizeClass Regular 
y-sizeClass Regular 
idiom Pad 
scale 1.0
x-sizeClass Compact 
y-sizeClass Regular 
idiom Phone 
scale 2.0
x-sizeClass Compact 
y-sizeClass Compact 
idiom Phone 
scale 2.0
x-sizeClass Regular 
y-sizeClass Regular 
idiom Pad 
scale 1.0 
+ 
x-sizeClass Compact
x-sizeClass Regular 
y-sizeClass Regular 
idiom Pad 
scale 1.0 
+ x-sizeClass Compact 
@interface UIViewController <UITraitEnvironment> 
! 
- (void)setOverrideTraitCollection: forChildViewController: 
! 
- (UITraitCollection *)overrideTraitCollectionForChildViewController: 
! 
@end
Кто обладает свойством trait collection 
1. UIScreen 
2. UIWindow 
3. UIViewController 
4. UIView

Mais conteúdo relacionado

Semelhante a Swift School #3

#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...
#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...
#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...e-Legion
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseCocoaHeads
 
Ios workshop-fs
Ios workshop-fsIos workshop-fs
Ios workshop-fsivgeniya
 
Клиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhoneКлиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhonePavel Bashmakov
 
Cocoa Networking
Cocoa NetworkingCocoa Networking
Cocoa Networkingguest57eb8a
 
iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKitNoveo
 
2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭOleg Parinov
 
Cache administration tool report - rus-1
Cache administration tool   report - rus-1Cache administration tool   report - rus-1
Cache administration tool report - rus-1ivanshmidt
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorDevGAMM Conference
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиГлеб Тарасов
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)Noveo
 
Расширяем горизонты с помощью iCloud
Расширяем горизонты с помощью iCloudРасширяем горизонты с помощью iCloud
Расширяем горизонты с помощью iCloudru_Parallels
 
MBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, ParallelsMBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, Parallelse-Legion
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 

Semelhante a Swift School #3 (20)

Libraries
LibrariesLibraries
Libraries
 
Libraries
LibrariesLibraries
Libraries
 
#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...
#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...
#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap Database
 
Ios workshop-fs
Ios workshop-fsIos workshop-fs
Ios workshop-fs
 
Squeek 1
Squeek 1Squeek 1
Squeek 1
 
Клиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhoneКлиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhone
 
Cocoa Networking
Cocoa NetworkingCocoa Networking
Cocoa Networking
 
iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKit
 
2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ
 
Cache administration tool report - rus-1
Cache administration tool   report - rus-1Cache administration tool   report - rus-1
Cache administration tool report - rus-1
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at Vizor
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
NFX
NFXNFX
NFX
 
Расширяем горизонты с помощью iCloud
Расширяем горизонты с помощью iCloudРасширяем горизонты с помощью iCloud
Расширяем горизонты с помощью iCloud
 
MBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, ParallelsMBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, Parallels
 
Jsfwdays 2013-2
Jsfwdays 2013-2Jsfwdays 2013-2
Jsfwdays 2013-2
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 

Mais de Sergey Pronin

App in the Air Internship 2018
App in the Air Internship 2018App in the Air Internship 2018
App in the Air Internship 2018Sergey Pronin
 
Things you might have missed from CoreData
Things you might have missed from CoreDataThings you might have missed from CoreData
Things you might have missed from CoreDataSergey Pronin
 
Департамент Программной Инженерии
Департамент Программной ИнженерииДепартамент Программной Инженерии
Департамент Программной ИнженерииSergey Pronin
 
Mera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-CMera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-CSergey Pronin
 
Empatika Design Hours
Empatika Design HoursEmpatika Design Hours
Empatika Design HoursSergey Pronin
 
Greenfield Feedback Squeek
Greenfield Feedback SqueekGreenfield Feedback Squeek
Greenfield Feedback SqueekSergey Pronin
 

Mais de Sergey Pronin (15)

App in the Air Internship 2018
App in the Air Internship 2018App in the Air Internship 2018
App in the Air Internship 2018
 
Things you might have missed from CoreData
Things you might have missed from CoreDataThings you might have missed from CoreData
Things you might have missed from CoreData
 
Департамент Программной Инженерии
Департамент Программной ИнженерииДепартамент Программной Инженерии
Департамент Программной Инженерии
 
Mera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-CMera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-C
 
Swift School #4
Swift School #4Swift School #4
Swift School #4
 
Swift School #2
Swift School #2Swift School #2
Swift School #2
 
Swift School #1
Swift School #1Swift School #1
Swift School #1
 
Empatika Design Hours
Empatika Design HoursEmpatika Design Hours
Empatika Design Hours
 
Greenfield Feedback Squeek
Greenfield Feedback SqueekGreenfield Feedback Squeek
Greenfield Feedback Squeek
 
Squeek School #8
Squeek School #8Squeek School #8
Squeek School #8
 
Squeek School #7
Squeek School #7Squeek School #7
Squeek School #7
 
Squeek school #6
Squeek school #6Squeek school #6
Squeek school #6
 
Squeek School #5
Squeek School #5Squeek School #5
Squeek School #5
 
Squeek school 4
Squeek school 4Squeek school 4
Squeek school 4
 
Squeek School #3
Squeek School #3Squeek School #3
Squeek School #3
 

Swift School #3

  • 1. Swift Школа Сергей Пронин Empatika
  • 2. План • iOS8 - Введение в CloudKit • Практика CloudKit • iOS8 - Size Classes
  • 4.
  • 5. CloudKit • Обёртка для доступа напрямую к iCloud • Кроссплатформенная поддержка (iOS / Mac OS) • Доступ к iCloud аккаунтам • Структурированные и файловые данные • Только “транспорт” - не хранение
  • 6. Структуры данных • Контейнер - CKContainer • База данных - CKDatabase • Запись - CKRecord • Зона данных - CKZone • ID записи - CKRecordID • Отношения - CKReference • Неструктурированные данные - CKAsset
  • 7. CKContainer • Один на приложение • Инкапсуляция данных (public / private для юзера) • Можно передавать другим приложениям • Управляется через админку
  • 9. Public Private Данные Общие данные Только для юзера Аккаунт Только для записи Обязательно Квота Разработчик Пользователи
  • 10. CKRecord • Структурированные данные • Пары ключ-значение • Схема данных формируется на ходу
  • 11. Допустимые типы NSString -> String NSNumber -> Int, Double, Float, Bool NSData NSDate CLLocation CKReference CKAsset NSArray [ * ]
  • 13. CKRecordID class CKRecordID : … { convenience init(recordName: String!) init(recordName: String!, zoneID: CKRecordZoneID!) var recordName: String! { get } var zoneID: CKRecordZoneID! { get } } • Можно создать самому либо автоматически • Полностью нормализованы - содержат информацию о местонахождении записи
  • 14. CKReference var person = CKRecord(recordType: "Person") var city = CKRecord(recordType: "City") var reference = CKReference(record: city, action: .None) person.setObject(reference, forKey: "hometown")
  • 15. CKAsset • Неструктурированные данные • У юзера хранятся на диске • Являются полями CKRecord
  • 16. CKReference var person = CKRecord(recordType: "Person") var passport = CKAsset(fileURL: passportFileURL) person["passport"] = passport
  • 19. Structure До iOS 8 Device type Interface Orientation Size iOS 8 и позже Traits and trait collections Size
  • 20. Trait collection class UITraitCollection : NSObject, NSCopying, NSSecureCoding, NSCoding { func containsTraitsInCollection(trait: UITraitCollection!) -> Bool init(traitsFromCollections traitCollections: [AnyObject]!) -> UITraitCollection init(userInterfaceIdiom idiom: UIUserInterfaceIdiom) -> UITraitCollection var userInterfaceIdiom: UIUserInterfaceIdiom { get } init(displayScale scale: CGFloat) -> UITraitCollection var displayScale: CGFloat { get } init(horizontalSizeClass: UIUserInterfaceSizeClass) -> UITraitCollection var horizontalSizeClass: UIUserInterfaceSizeClass { get } init(verticalSizeClass: UIUserInterfaceSizeClass) -> UITraitCollection var verticalSizeClass: UIUserInterfaceSizeClass { get } }
  • 21. HorizontalSizeClass Горизонтальная спецификация VerticalSizeClass Вертикальная спецификация UserInterfaceIdiom Тип устройства DisplayScale Масштаб экрана
  • 22. x-sizeClass Regular y-sizeClass Regular idiom Pad scale 1.0
  • 23. x-sizeClass Regular y-sizeClass Regular idiom Pad scale 1.0
  • 24. x-sizeClass Compact y-sizeClass Regular idiom Phone scale 2.0
  • 25. x-sizeClass Compact y-sizeClass Compact idiom Phone scale 2.0
  • 26. x-sizeClass Regular y-sizeClass Regular idiom Pad scale 1.0 + x-sizeClass Compact
  • 27. x-sizeClass Regular y-sizeClass Regular idiom Pad scale 1.0 + x-sizeClass Compact @interface UIViewController <UITraitEnvironment> ! - (void)setOverrideTraitCollection: forChildViewController: ! - (UITraitCollection *)overrideTraitCollectionForChildViewController: ! @end
  • 28. Кто обладает свойством trait collection 1. UIScreen 2. UIWindow 3. UIViewController 4. UIView