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

Swift School #3

  • 1.
    Swift Школа СергейПронин Empatika
  • 2.
    План • iOS8- Введение в CloudKit • Практика CloudKit • iOS8 - Size Classes
  • 3.
  • 5.
    CloudKit • Обёрткадля доступа напрямую к iCloud • Кроссплатформенная поддержка (iOS / Mac OS) • Доступ к iCloud аккаунтам • Структурированные и файловые данные • Только “транспорт” - не хранение
  • 6.
    Структуры данных •Контейнер - CKContainer • База данных - CKDatabase • Запись - CKRecord • Зона данных - CKZone • ID записи - CKRecordID • Отношения - CKReference • Неструктурированные данные - CKAsset
  • 7.
    CKContainer • Одинна приложение • Инкапсуляция данных (public / private для юзера) • Можно передавать другим приложениям • Управляется через админку
  • 8.
  • 9.
    Public Private ДанныеОбщие данные Только для юзера Аккаунт Только для записи Обязательно Квота Разработчик Пользователи
  • 10.
    CKRecord • Структурированныеданные • Пары ключ-значение • Схема данных формируется на ходу
  • 11.
    Допустимые типы NSString-> String NSNumber -> Int, Double, Float, Bool NSData NSDate CLLocation CKReference CKAsset NSArray [ * ]
  • 12.
  • 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
  • 17.
  • 18.
  • 19.
    Structure До iOS8 Device type Interface Orientation Size iOS 8 и позже Traits and trait collections Size
  • 20.
    Trait collection classUITraitCollection : 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-sizeClassRegular idiom Pad scale 1.0
  • 23.
    x-sizeClass Regular y-sizeClassRegular idiom Pad scale 1.0
  • 24.
    x-sizeClass Compact y-sizeClassRegular idiom Phone scale 2.0
  • 25.
    x-sizeClass Compact y-sizeClassCompact idiom Phone scale 2.0
  • 26.
    x-sizeClass Regular y-sizeClassRegular idiom Pad scale 1.0 + x-sizeClass Compact
  • 27.
    x-sizeClass Regular y-sizeClassRegular 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