LoginSignup
12
12

More than 5 years have passed since last update.

[iOS] CloudKit Storageを使ってファイルを配信する

Last updated at Posted at 2014-09-17

CloudKitを使ってPublic Dataなファイルをアプリに配信してみる。

(1) プロジェクト設定で、Project->CapabilitiesのiCloudをONに。

(2) iCloud Dashboardで、Record Typeを作る。名前などはなんでもいいが、Attribute Type=Assetのフィールドをひとつ作る。フィールド名もなんでもいいが、ここではfileとする。

(3) Public Data->Dafault Zoneで上記で作ったRecord Typeのレコードを作成する。fileフィールドにファイルをアップロードする。レコードのIDをコピーしておく。

(4) アプリで上記のレコードをダウンロードする。

普通に書くとこんな感じ。"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"の部分は(3)でコピーしたレコードIDに置き換える。

@import CloudKit; 
CKContainer *defaultContainer =[CKContainer defaultContainer];
CKDatabase *publicDatabase = [defaultContainer publicCloudDatabase];
CKRecordID *wellKnownID = [[CKRecordID alloc] initWithRecordName:@"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"];

[publicDatabase fetchRecordWithID:wellKnownID
          completionHandler:^(CKRecord *fetchedParty, NSError *error) {
    NSLog(@"erorr : %@", error);                     
   CKAsset *asset = fetchedParty[@"file"];

   // asset.fileURL.pathにファイルがダウンロードされてる
   NSLog(@"%@", asset.fileURL.path);                        
}];

上記のコードだと優先度低で実行される。優先度を上げたければ、CKFetchRecordsOperationを使えばいい。

CKFetchRecordsOperation * op = [[CKFetchRecordsOperation alloc] initWithRecordIDs:@[wellKnownID]];
op.queuePriority = NSOperationQueuePriorityVeryHigh;
op.perRecordProgressBlock = ^(CKRecordID * recordId, double progress) {
        NSLog(@"progress : %lf", progress);
};
op.perRecordCompletionBlock = ^(CKRecord *fetchedParty, CKRecordID * recordId,  NSError *error) {
    NSLog(@"erorr : %@", error);                      
    CKAsset *asset = fetchedParty[@"file"];
    NSLog(@"%@", asset.fileURL.path);
};

[publicDatabase addOperation:op];

制限など

Start with:
- Storage
- 5GB for assets
- 50MB for database

Data Transfer
- 25MB/day for assets
- 250KB/day for database

Grow with every user:
- Storage
-- 100MB for assets
-- 1MB for database
- Data Transfer
-- 0.5MB/user for assets
-- 5KB/user for database

Free up to:
- Storage
-- 1PB for assets
-- 10TB for database

Data Transfer
- 5TB/day for assets
- 50GB/day for database

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12