Aracılığıyla paylaş


Xamarin.iOS'ta CloudKit

CloudKit çerçevesi, iCloud'a erişen uygulamaların geliştirilmesini kolaylaştırır. Bu, uygulama verilerinin ve varlık haklarının alınmasının yanı sıra uygulama bilgilerini güvenli bir şekilde depolamayı içerir. Bu kit, kişisel bilgileri paylaşmadan iCloud kimlikleriyle uygulamalara erişime izin vererek kullanıcılara bir anonimlik katmanı sağlar.

Geliştiriciler istemci tarafı uygulamalarına odaklanabilir ve iCloud'un sunucu tarafı uygulama mantığı yazma gereksinimini ortadan kaldırmasına izin verebilir. CloudKit kimlik doğrulaması, özel ve genel veritabanları ile yapılandırılmış veri ve varlık depolama hizmetleri sağlar.

Gereksinimler

Bu makalede sunulan adımları tamamlamak için aşağıdakiler gereklidir:

  • Xcode ve iOS SDK – Apple'ın Xcode ve iOS 8 API'lerinin geliştiricinin bilgisayarına yüklenmesi ve yapılandırılması gerekir.
  • Mac için Visual Studio – Mac için Visual Studio en son sürümü kullanıcı cihazında yüklenip yapılandırılmalıdır.
  • iOS 8 Cihazı – Test için iOS 8'in en son sürümünü çalıştıran bir iOS cihazı.

CloudKit nedir?

CloudKit, geliştiriciye iCloud Sunucuları'na erişim vermenin bir yoludur. Hem iCloud Drive hem de iCloud Fotoğraf Kitaplığı için temel sağlar. CloudKit hem macOS hem de iOS cihazlarında desteklenir.

CloudKit hem macOS hem de iOS cihazlarında nasıl desteklenir?

CloudKit, iCloud Hesabı altyapısını kullanır. Cihazda bir iCloud Hesabında oturum açmış bir kullanıcı varsa CloudKit, kullanıcıyı tanımlamak için kimliğini kullanır. Kullanılabilir hesap yoksa sınırlı salt okunur erişim sağlanır.

CloudKit hem genel hem de özel veritabanları kavramını destekler. Genel veritabanları, kullanıcının erişimi olan tüm verilerin "çorbasını" sağlar. Özel veritabanları, belirli bir kullanıcıya bağlı özel verileri depolamaya yöneliktir.

CloudKit hem yapılandırılmış hem de toplu verileri destekler. Büyük dosya aktarımlarını sorunsuz bir şekilde işleyebilme özelliğine sahiptir. CloudKit, büyük dosyaları arka planda iCloud Sunucularına verimli bir şekilde aktararak geliştiricinin diğer görevlere odaklanmasını sağlar.

Not

CloudKit'in bir Aktarım Teknolojisi olduğunu unutmayın. Herhangi bir kalıcılık sağlamaz; yalnızca bir uygulamanın sunuculardan verimli bir şekilde bilgi gönderip almasını sağlar.

Bu yazıdan itibaren Apple başlangıçta CloudKit'i hem bant genişliği hem de depolama kapasitesinde yüksek bir sınır ile ücretsiz olarak sunuyor. Büyük bir kullanıcı tabanına sahip daha büyük projeler veya uygulamalar için Apple, uygun fiyatlı bir fiyatlandırma ölçeği sağlanacağı konusunda ipucu verdi.

Xamarin uygulamasında CloudKit'i etkinleştirme

Bir Xamarin uygulamasının CloudKit çerçevesini kullanabilmesi için uygulamanın Özelliklerle Çalışma ve Yetkilendirmelerle Çalışma kılavuzlarında ayrıntılı olarak doğru bir şekilde sağlanması gerekir.

CloudKit'e erişmek için Entitlements.plist dosyasının iCloud'ı etkinleştirme, Anahtar-değer depolama ve CloudKit izinlerini içermesi gerekir.

Örnek uygulama

Örnek uygulama, CloudKit'in Xamarin ile nasıl kullanılacağını gösterir. Aşağıdaki adımlarda örneğin nasıl yapılandırılması gösterilmektedir; yalnızca CloudKit için gerekenlerin ötesinde ek ayarlar gerektirir:

  1. Projeyi Mac için Visual Studio veya Visual Studio'da açın.
  2. Çözüm Gezgini Info.plist dosyasını açın ve Paket Tanımlayıcısı'nın sağlama kurulumunun bir parçası olarak oluşturulan Uygulama Kimliği'nde tanımlananla eşleştiğinden emin olun.
  3. Info.plist dosyasının en altına kadar aşağı kaydırın ve Etkin Arka Plan Modları, Konum Güncelleştirmeler ve Uzak Bildirimler'i seçin.
  4. Çözümde iOS projesine sağ tıklayın ve Seçenekler'i seçin.
  5. iOS Paket İmzalama'yı seçin, yukarıda oluşturulan Geliştirici Kimliği ve Sağlama Profili'ni seçin.
  6. Entitlements.plist dosyasının iCloud'ı etkinleştir, Anahtar-değer depolama ve CloudKit'i içerdiğinden emin olun.
  7. Uygulama için Ubiquity Kapsayıcısının mevcut olduğundan emin olun. Örnek: iCloud.com.your-company.CloudKitAtlas
  8. Dosyadaki değişiklikleri kaydedin.

Bu ayarlar hazır olduğunda örnek uygulama artık CloudKit Framework API'lerinin yanı sıra arka plan, konum ve bildirim hizmetlerine erişmeye hazırdır.

CloudKit API'ye genel bakış

CloudKit'i bir Xamarin iOS uygulamasında uygulamadan önce, bu makale aşağıdaki konuları içerecek olan CloudKit Framework'ün temellerini ele alacaktır:

  1. Kapsayıcılar – iCloud iletişimlerinin yalıtılmış siloları.
  2. Veritabanları – Genel ve özel uygulamalar tarafından kullanılabilir.
  3. Kayıtlar – Yapılandırılmış verilerin CloudKit'e ve CloudKit'ten taşındığı mekanizma.
  4. Kayıt Bölgeleri : Kayıt gruplarıdır.
  5. Kayıt Tanımlayıcıları – Tamamen normalleştirilir ve kaydın belirli konumunu temsil eder.
  6. Başvuru : Belirli bir Veritabanı içindeki ilgili Kayıtlar arasında üst-alt ilişki sağlar.
  7. Varlıklar – Büyük, yapılandırılmamış verilerin dosyasının iCloud'a yüklenmesine ve belirli bir Kayıtla ilişkilendirilmesine izin verin.

Kapsayıcılar

iOS cihazında çalışan belirli bir uygulama her zaman bu cihazdaki diğer uygulamalar ve hizmetlerle birlikte çalışır. İstemci cihazında uygulama bir şekilde siloya dönüştürülecek veya korumalı hale getirilecek. Bazı durumlarda, bu değişmez bir korumalı alandır ve bazı durumlarda uygulama yalnızca kendi bellek alanında çalışır.

Bir istemci uygulamasını alıp diğer istemcilerden ayırarak çalıştırma kavramı çok güçlüdür ve aşağıdaki avantajları sağlar:

  1. Güvenlik : Bir uygulama diğer istemci uygulamalarına veya işletim sisteminin kendisine müdahale edemez.
  2. Kararlılık – İstemci uygulaması kilitleniyorsa işletim sisteminin diğer uygulamalarını çıkaramaz.
  3. Gizlilik – Her istemci uygulaması, cihazda depolanan kişisel bilgilere sınırlı erişime sahiptir.

CloudKit, yukarıdakilerle aynı avantajları sağlayacak ve bunları bulut tabanlı bilgilerle çalışmaya uygulayacak şekilde tasarlanmıştır:

CloudKit uygulamaları kapsayıcıları kullanarak iletişim kurar

Aynı uygulamanın cihazda çalışan çok sayıdan biri olması gibi, uygulamanın iCloud ile iletişimleri de bire birdir. Bu farklı iletişim silolarının her birine Kapsayıcı adı verilir.

Kapsayıcılar, sınıfı aracılığıyla CloudKit Framework'te kullanıma sunulur CKContainer . Varsayılan olarak, bir uygulama bir kapsayıcıyla konuşur ve bu kapsayıcı söz konusu uygulama için verileri ayrıştırır. Bu, birkaç uygulamanın bilgileri aynı iCloud hesabına depolayabileceğiniz, ancak bu bilgilerin hiçbir zaman birbirine karışamayacağı anlamına gelir.

iCloud verilerinin kapsayıcıya alınmış olması, CloudKit'in kullanıcı bilgilerini kapsüllemesini de sağlar. Bu şekilde uygulama, iCloud hesabına ve içinde depolanan kullanıcı bilgilerine sınırlı erişime sahip olurken, kullanıcının gizliliğini ve güvenliğini korumaya devam eder.

Kapsayıcılar, uygulamanın geliştiricisi tarafından WWDR portalı üzerinden tam olarak yönetilir. Kapsayıcının ad alanı tüm Apple geliştiricileri arasında geneldir, bu nedenle kapsayıcı yalnızca belirli bir geliştiricinin uygulamaları için değil, tüm Apple geliştiricileri ve uygulamaları için de benzersiz olmalıdır.

Apple, uygulama kapsayıcıları için ad alanı oluştururken ters DNS gösterimi kullanılmasını önerir. Örnek: iCloud.com.company-name.application-name

Kapsayıcılar varsayılan olarak belirli bir uygulamaya bire bir bağlı olsa da uygulamalar arasında paylaşılabilir. Böylece birden çok uygulama tek bir Kapsayıcı üzerinde eşgüdüm sağlayabilir. Tek bir uygulama birden çok Kapsayıcı ile de konuşabilir.

Veritabanları

CloudKit'in birincil işlevlerinden biri, bir uygulamanın iCloud sunucularına kadar modelleyen veri modelini ve çoğaltmasını almaktır. Bazı bilgiler onu oluşturan kullanıcıya yöneliktir, diğer bilgiler ise bir kullanıcı tarafından genel kullanım için oluşturulabilecek genel verilerdir (restoran incelemesi gibi) veya geliştiricinin uygulama için yayımladığı bilgiler olabilir. Her iki durumda da, hedef kitle yalnızca tek bir kullanıcı değil, aynı zamanda bir insan topluluğudur.

CloudKit Kapsayıcı Diyagramı

Kapsayıcının içinde, ilk ve en önemlisi genel veritabanıdır. Burası tüm genel bilgilerin ve ortaklaşmaların bulunduğu yerdir. Ayrıca, uygulamanın her kullanıcısı için ayrı ayrı birkaç özel veritabanı vardır.

Bir iOS cihazında çalışırken, uygulama yalnızca şu anda oturum açmış olan iCloud kullanıcısının bilgilerine erişebilir. Bu nedenle uygulamanın kapsayıcı görünümü aşağıdaki gibi olacaktır:

Kapsayıcının uygulamalar görünümü

Yalnızca şu anda oturum açmış olan iCloud kullanıcısı ile ilişkilendirilmiş genel veritabanını ve özel veritabanını görebilir.

Veritabanları, sınıfı aracılığıyla CloudKit Framework'te kullanıma sunulur CKDatabase . Her uygulamanın iki veritabanına erişimi vardır: ortak veritabanı ve özel veritabanı.

Kapsayıcı, CloudKit'e ilk giriş noktasıdır. Aşağıdaki kod, uygulamanın varsayılan Kapsayıcısından genel ve özel veritabanına erişmek için kullanılabilir:

using CloudKit;
//...

public CKDatabase PublicDatabase { get; set; }
public CKDatabase PrivateDatabase { get; set; }
//...

// Get the default public and private databases for
// the application
PublicDatabase = CKContainer.DefaultContainer.PublicCloudDatabase;
PrivateDatabase = CKContainer.DefaultContainer.PrivateCloudDatabase;

Veritabanı türleri arasındaki farklar şunlardır:

Genel Veritabanı Özel Veritabanı
Veri Türü Paylaşılan Veriler Geçerli Kullanıcının Verileri
Kota Geliştirici Kotasında hesaba eklenmiştir Kullanıcı Kotası'nda hesaba hesaba girdi
Varsayılan İzinler Dünya Okunabilir Kullanıcı Tarafından Okunabilir
İzinleri Düzenleme Kayıt sınıfı düzeyi aracılığıyla iCloud Pano Rolleri Yok

Kayıtlar

Kapsayıcılar veritabanlarını barındırır ve veritabanlarının içinde kayıtlar bulunur. Kayıtlar, yapılandırılmış verilerin CloudKit'e ve CloudKit'ten taşındığı mekanizmadır:

Kapsayıcılar veritabanlarını barındırır ve veritabanlarının içinde kayıtlar bulunur

CloudKit Framework'te anahtar-değer çiftlerini sarmalayan sınıfı aracılığıyla CKRecord kayıtlar kullanıma sunulur. Bir uygulamadaki bir nesnenin örneği, CloudKit'teki ile CKRecord eşdeğerdir. Buna ek olarak, her CKRecord biri bir nesnenin sınıfına eşdeğer bir kayıt türüne sahiptir.

Kayıtların tam zamanında bir şeması vardır, bu nedenle veriler işlenmek üzere teslim edilmeden önce CloudKit'e açıklanır. Bu noktadan itibaren CloudKit bilgileri yorumlayacak ve kaydı depolama ve alma lojistığını ele alacaktır.

CKRecord sınıfı, çok çeşitli meta verileri de destekler. Örneğin, bir kayıt ne zaman oluşturulduğu ve onu oluşturan kullanıcı hakkında bilgi içerir. Kayıt ayrıca en son ne zaman değiştirildiği ve değiştiren kullanıcı hakkındaki bilgileri içerir.

Kayıtlar, Değişiklik Etiketi'ni içerir. Bu, belirli bir kaydın düzeltmesinin önceki bir sürümüdür. Değişiklik Etiketi, istemcinin ve sunucunun belirli bir kaydın aynı sürümüne sahip olup olmadığını belirlemenin basit bir yolu olarak kullanılır.

Yukarıda belirtildiği gibi anahtar-değer CKRecords çiftlerini sarmala ve bu nedenle aşağıdaki veri türleri bir kayıtta depolanabilir:

  1. NSString
  2. NSNumber
  3. NSData
  4. NSDate
  5. CLLocation
  6. CKReferences
  7. CKAssets

Tek değer türlerine ek olarak, bir kayıt yukarıdaki listelenen türlerden herhangi birinin homojen dizisini içerebilir.

Yeni bir kayıt oluşturmak ve bir veritabanında depolamak için aşağıdaki kod kullanılabilir:

using CloudKit;
//...

private const string ReferenceItemRecordName = "ReferenceItems";
//...

var newRecord = new CKRecord (ReferenceItemRecordName);
newRecord ["name"] = (NSString)nameTextField.Text;
await CloudManager.SaveAsync (newRecord);

Kayıt bölgeleri

Kayıtlar belirli bir veritabanında tek başına mevcut değildir; kayıt grupları bir Kayıt Bölgesi içinde birlikte bulunur. Kayıt Bölgeleri, geleneksel ilişkisel veritabanlarında Tablolar olarak düşünülebilir:

Kayıt grupları bir Kayıt Bölgesi içinde birlikte bulunur

Belirli bir Kayıt Bölgesi içinde birden çok kayıt ve belirli bir veritabanında birden çok Kayıt Bölgesi olabilir. Her veritabanı bir Varsayılan Kayıt Bölgesi içerir:

Her veritabanı bir Varsayılan Kayıt Bölgesi ve Özel Bölge içerir

Kayıtların varsayılan olarak depolandığı yerdir. Ayrıca, Özel Kayıt Bölgeleri oluşturulabilir. Kayıt Bölgeleri, Atomik İşlemelerin ve Değişiklik İzleme yapıldığı temel ayrıntı düzeyini temsil eder.

Kayıt tanımlayıcıları

Kayıt Tanımlayıcıları, hem istemci tarafından sağlanan Kayıt Adı'nı hem de kaydın bulunduğu bölgeyi içeren bir tanımlama grubu olarak temsil edilir. Kayıt Tanımlayıcıları aşağıdaki özelliklere sahiptir:

  • Bunlar istemci uygulaması tarafından oluşturulur.
  • Bunlar tamamen normalleştirilir ve kaydın belirli konumunu temsil eder.
  • Yabancı veritabanındaki bir kaydın Benzersiz Kimliği kayıt adına atanarak, CloudKit içinde depolanmayan yerel veritabanlarına köprü oluşturmak için kullanılabilir.

Geliştiriciler yeni kayıtlar oluşturduğunda Kayıt Tanımlayıcısı geçirmeyi seçebilir. Kayıt Tanımlayıcısı belirtilmezse, otomatik olarak bir UUID oluşturulur ve kayda atanır.

Geliştiriciler yeni Kayıt Tanımlayıcıları oluşturduğunuzda, her kaydın ait olacağı Kayıt Bölgesini belirtmeyi seçebilir. Hiçbiri belirtilmezse, Varsayılan Kayıt Bölgesi kullanılır.

Kayıt Tanımlayıcıları, sınıfı aracılığıyla CloudKit Framework'te kullanıma sunulur CKRecordID . Yeni bir Kayıt Tanımlayıcısı oluşturmak için aşağıdaki kod kullanılabilir:

var recordID =  new CKRecordID("My Record");

Başvurular

Başvurular, belirli bir Veritabanı içindeki ilgili Kayıtlar arasında ilişkiler sağlar:

Başvurular, belirli bir Veritabanı içindeki ilgili Kayıtlar arasında ilişkiler sağlar

Yukarıdaki örnekte, Üst Öğe, Üst kaydın alt kaydı olması için Alt Öğelere sahip olur. İlişki, alt kayıttan üst kayda geçer ve Geri Başvurusu olarak adlandırılır.

CloudKit Framework'te başvurular sınıfı aracılığıyla kullanıma sunulur CKReference . Bunlar, iCloud sunucusunun kayıtlar arasındaki ilişkiyi anlamasına izin vermenin bir yoludur.

Başvurular, Geçişli Silmelerin arkasındaki mekanizmayı sağlar. Üst kayıt veritabanından silinirse, tüm alt kayıtlar (İlişkide belirtildiği gibi) veritabanından da otomatik olarak silinir.

Not

CloudKit kullanırken sarkan İşaretçiler mümkündür. Örneğin, uygulama bir kayıt işaretçisi listesi getirip bir kayıt seçtikten sonra kaydı istediğinde, kayıt artık veritabanında bulunmayabilir. Bu durumu düzgün bir şekilde işlemek için bir uygulama kodlanmalıdır.

Gerekli olmasa da, CloudKit Framework ile çalışırken Geri Başvuruları tercih edilir. Apple, bunu en verimli başvuru türü yapmak için sistemi hassas bir şekilde ayarlamıştır.

Başvuru oluştururken, geliştirici zaten bellekte olan bir kayıt sağlayabilir veya Kayıt Tanımlayıcısı'na başvuru oluşturabilir. Kayıt Tanımlayıcısı kullanılıyorsa ve belirtilen başvuru veritabanında yoksa, Bir Sallama İşaretçisi oluşturulur.

Aşağıda, bilinen bir Kayıtta başvuru oluşturma örneği verilmiştir:

var reference = new CKReference(newRecord, new CKReferenceAction());

Varlıklar

Varlıklar, büyük ve yapılandırılmamış verilerden oluşan bir dosyanın iCloud'a yüklenmesine ve belirli bir Kayıtla ilişkilendirilmesine olanak sağlar:

Varlıklar, büyük ve yapılandırılmamış verilerden oluşan bir dosyanın iCloud'a yüklenmesine ve belirli bir Kayıtla ilişkilendirilmesine olanak sağlar

İstemcide, iCloud sunucusuna yüklenecek dosyayı açıklayan bir CKRecord oluşturulur. CKAsset dosyası içerecek şekilde oluşturulur ve dosyayı açıklayan kayda bağlanır.

Dosya sunucuya yüklendiğinde, kayıt veritabanına yerleştirilir ve dosya özel bir Toplu Depolama veritabanına kopyalanır. Kayıt İşaretçisi ile karşıya yüklenen dosya arasında bir bağlantı oluşturulur.

Varlıklar, sınıfı aracılığıyla CKAsset CloudKit Framework'te kullanıma sunulur ve büyük, yapılandırılmamış verileri depolamak için kullanılır. Geliştirici hiçbir zaman bellekte büyük ve yapılandırılmamış verilere sahip olmak istemediği için Varlıklar, diskteki dosyalar kullanılarak uygulanır.

Varlıklar kayıtlara aittir ve bu da varlıkların iCloud'dan kayıt işaretçisi olarak alınmasına olanak tanır. Bu şekilde, Varlığın sahibi olan kayıt silindiğinde sunucu Varlıkları Çöp Toplayabilir.

CKAssets Büyük veri dosyalarının işlenmesi amaçlandığından, Apple CloudKit'i Varlıkları verimli bir şekilde karşıya yükleyip indirmek için tasarladı.

Bir Varlık oluşturmak ve bunu Kayıt ile ilişkilendirmek için aşağıdaki kod kullanılabilir:

var fileUrl = new NSUrl("LargeFile.mov");
var asset = new CKAsset(fileUrl);
newRecord ["name"] = asset;

CloudKit içindeki tüm temel nesneleri ele aldık. Kapsayıcılar uygulamalarla ilişkilendirilir ve Veritabanları içerir. Veritabanları, Kayıt Bölgeleri olarak gruplandırılmış ve Kayıt Tanımlayıcılarına göre işaret edilen Kayıtlar içerir. Üst-alt ilişkiler, Başvurular kullanılarak Kayıtlar arasında tanımlanır. Son olarak, varlıklar kullanılarak büyük dosyalar karşıya yüklenebilir ve Kayıtlar ile ilişkilendirilebilir.

CloudKit Convenience API

Apple, CloudKit ile çalışmak için iki farklı API kümesi sunar:

  • operasyonel API – CloudKit'in her bir özelliğini sunar. Daha karmaşık uygulamalar için bu API, CloudKit üzerinde ayrıntılı denetim sağlar.
  • Convenience API – CloudKit özelliklerinin ortak, önceden yapılandırılmış bir alt kümesini sunar. Bir iOS uygulamasına CloudKit işlevselliğini dahil eden kullanışlı ve kolay bir erişim çözümü sağlar.

Convenience API genellikle çoğu iOS uygulaması için en iyi seçenektir ve Apple bununla başlamayı önerir. Bu bölümün geri kalanında aşağıdaki Convenience API konuları ele alınacaktır:

  • Kayıt Kaydediliyor.
  • Kayıt Getiriliyor.
  • Kaydı Güncelleştirme.

Ortak kurulum kodu

CloudKit Convenience API'sini kullanmaya başlamadan önce bazı standart kurulum kodları gerekir. Uygulamanın AppDelegate.cs dosyasını değiştirerek başlayın ve aşağıdaki gibi görünmesini sağlayın:

using System;
using System.Collections.Generic;
using System.Linq;
using Foundation;
using UIKit;
using CloudKit;

namespace CloudKitAtlas
{
    [Register ("AppDelegate")]
    public partial class AppDelegate : UIApplicationDelegate
    {
        public override UIWindow Window { get; set;}
        public CKDatabase PublicDatabase { get; set; }
        public CKDatabase PrivateDatabase { get; set; }

        public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
        {
            application.RegisterForRemoteNotifications ();

            // Get the default public and private databases for
            // the application
            PublicDatabase = CKContainer.DefaultContainer.PublicCloudDatabase;
            PrivateDatabase = CKContainer.DefaultContainer.PrivateCloudDatabase;

            return true;
        }

        public override void RegisteredForRemoteNotifications (UIApplication application, NSData deviceToken)
        {
            Console.WriteLine ("Registered for Push notifications with token: {0}", deviceToken);
        }

        public override void FailedToRegisterForRemoteNotifications (UIApplication application, NSError error)
        {
            Console.WriteLine ("Push subscription failed");
        }

        public override void ReceivedRemoteNotification (UIApplication application, NSDictionary userInfo)
        {
            Console.WriteLine ("Push received");
        }
    }
}

Yukarıdaki kod, genel ve özel CloudKit veritabanlarını, uygulamanın geri kalanında çalışmayı kolaylaştırmak için kısayollar olarak kullanıma sunar.

Ardından, CloudKit'i kullanacak herhangi bir görünüm veya görünüm kapsayıcısına aşağıdaki kodu ekleyin:

using CloudKit;
//...

public AppDelegate ThisApp {
    get { return (AppDelegate)UIApplication.SharedApplication.Delegate; }
}

Bu, öğesine ulaşmak ve yukarıda oluşturulan genel ve özel veritabanı kısayollarına erişmek için AppDelegate bir kısayol ekler.

Bu kod uygulandığında CloudKit Convenience API'sini bir Xamarin iOS 8 uygulamasında uygulama konusuna göz atalım.

Kayıt kaydetme

Kayıtlar tartışılırken yukarıda gösterilen deseni kullanarak, aşağıdaki kod yeni bir kayıt oluşturur ve Bunu genel veritabanına kaydetmek için Convenience API'sini kullanır:

private const string ReferenceItemRecordName = "ReferenceItems";
...

// Create a new record
var newRecord = new CKRecord (ReferenceItemRecordName);
newRecord ["name"] = (NSString)nameTextField.Text;

// Save it to the database
ThisApp.PublicDatabase.SaveRecord(newRecord, (record, err) => {
    // Was there an error?
    if (err != null) {
        ...
    }
});

Yukarıdaki kod hakkında dikkate almak gereken üç şey:

  1. geliştiricinin SaveRecordPublicDatabaseyöntemini çağırarak verilerin nasıl gönderileceğini, hangi Bölgeye yazıldığını vb. belirtmesi gerekmez. Convenience API bu ayrıntıların tümünü kendisi üstleniyor.
  2. Çağrı zaman uyumsuzdur ve çağrı tamamlandığında başarılı veya başarısız bir geri çağırma yordamı sağlar. Çağrı başarısız olursa bir hata iletisi sağlanır.
  3. CloudKit yerel depolama/kalıcılık sağlamaz; yalnızca bir aktarım ortamıdır. Bu nedenle, bir Kaydı kaydetme isteğinde bulunulduğunda, hemen iCloud sunucularına gönderilir.

Not

Bağlantıların sürekli olarak bırakıldığı veya kesildiği mobil ağ iletişimlerinin "kayıp" yapısı nedeniyle, cloudkit ile çalışırken geliştiricinin yapması gereken ilk noktalardan biri hata işlemedir.

Kayıt getirme

Kaydın oluşturulduğu ve iCloud sunucusunda başarıyla depolandığı için, kaydı almak için aşağıdaki kodu kullanın:

// Create a record ID and fetch the record from the database
var recordID = new CKRecordID("MyRecordName");
ThisApp.PublicDatabase.FetchRecord(recordID, (record, err) => {
    // Was there an error?
    if (err != null) {
        ...
    }
});

Kaydı kaydederken olduğu gibi yukarıdaki kod da zaman uyumsuz, basit ve büyük hata işleme gerektirir.

Kaydı güncelleştirme

iCloud sunucularından bir Kayıt getirildikten sonra, Kaydı değiştirmek ve değişiklikleri veritabanına geri kaydetmek için aşağıdaki kod kullanılabilir:

// Create a record ID and fetch the record from the database
var recordID = new CKRecordID("MyRecordName");
ThisApp.PublicDatabase.FetchRecord(recordID, (record, err) => {
    // Was there an error?
    if (err != null) {

    } else {
        // Modify the record
        record["name"] = (NSString)"New Name";

        // Save changes to database
        ThisApp.PublicDatabase.SaveRecord(record, (r, e) => {
            // Was there an error?
            if (e != null) {
                 ...
            }
        });
    }
});

FetchRecord yöntemiPublicDatabase, çağrının başarılı olup olmadığını döndürürCKRecord. Uygulama daha sonra Kaydı değiştirir ve değişiklikleri veritabanına geri yazmak için yeniden çağırır SaveRecord .

Bu bölümde, bir uygulamanın CloudKit Convenience API ile çalışırken kullanacağı tipik döngü gösterilmiştir. Uygulama Kayıtları iCloud'a kaydeder, bu kayıtları iCloud'dan alır, Kayıtları değiştirir ve bu değişiklikleri iCloud'a geri kaydeder.

Ölçeklenebilirlik için tasarlama

Şimdiye kadar bu makale, bir uygulamanın nesne modelinin tamamını iCloud sunucularından depolamayı ve almayı inceledi. Bu yaklaşım az miktarda veri ve çok küçük bir kullanıcı tabanıyla iyi çalışsa da, bilgi miktarı ve/veya kullanıcı tabanı arttığında iyi ölçeklendirilmemektedir.

Büyük veri, küçük cihaz

Bir uygulama ne kadar popüler olursa, veritabanında o kadar fazla veri olur ve cihazda söz konusu verilerin tamamının önbelleğine sahip olmak o kadar az uygulanabilir olur. Bu sorunu çözmek için aşağıdaki teknikler kullanılabilir:

  • Büyük verileri Bulutta tut – CloudKit, büyük verileri verimli bir şekilde işlemek için tasarlanmıştır.
  • İstemci bu verilerin yalnızca bir dilimini görüntülemelidir– Belirli bir zamanda herhangi bir görevi işlemek için gereken en düşük veri miktarını aşağı getirin.
  • İstemci görünümleri değişebilir – Her kullanıcının farklı tercihleri olduğundan, görüntülenen veri dilimi kullanıcıdan kullanıcıya değişebilir ve kullanıcının belirli bir dilimin bireysel görünümü farklı olabilir.
  • İstemci, bakış açısına odaklanmak için sorguları kullanır: Sorgular, kullanıcının Bulut içinde bulunan daha büyük bir veri kümesinin küçük bir alt kümesini görüntülemesine olanak tanır.

Sorgular

Yukarıda belirtildiği gibi sorgular, geliştiricinin Bulutta bulunan büyük veri kümesinin küçük bir alt kümesini seçmesine olanak sağlar. CloudKit Framework'te sorgular sınıfı aracılığıyla kullanıma sunulur CKQuery .

Sorgu üç farklı şeyi birleştirir: Kayıt Türü ( RecordType), Koşul ( NSPredicate) ve isteğe bağlı olarak Sıralama Tanımlayıcısı ( NSSortDescriptors). CloudKit çoğu destekler NSPredicate.

Desteklenen koşul

CloudKit, Sorgularla çalışırken aşağıdaki türlerini NSPredicates destekler:

  1. Adın bir değişkende depolanan değere eşit olduğu Eşleşen Kayıtlar:

    NSPredicate.FromFormat(string.Format("name = '{0}'", recordName))
    
  2. Eşleştirmenin dinamik anahtar değerine dayalı olmasına izin verir, böylece anahtarın derleme zamanında bilinmesi gerekmez:

    NSPredicate.FromFormat(string.Format("{0} = '{1}'", key, value))
    
  3. Kaydın değerinin verilen değerden daha büyük olduğu Eşleşen Kayıtlar:

    NSPredicate.FromFormat(string.Format("start > {0}", (NSDate)date))
    
  4. Kaydın konumunun belirtilen konumdan 100 metre içinde olduğu Eşleşen Kayıtlar:

    var location = new CLLocation(37.783,-122.404);
    var predicate = NSPredicate.FromFormat(string.Format("distanceToLocation:fromLocation(Location,{0}) < 100", location));
    
  5. CloudKit, belirteçli aramayı destekler. Bu çağrı, biri için ve diğeri için aftersessioniki belirteç oluşturur. Bu iki belirteci içeren bir Kayıt döndürür:

    NSPredicate.FromFormat(string.Format("ALL tokenize({0}, 'Cdl') IN allTokens", "after session"))
    
  6. CloudKit, işleci kullanılarak AND birleştirilen bileşik önkoşulları destekler.

    NSPredicate.FromFormat(string.Format("start > {0} AND name = '{1}'", (NSDate)date, recordName))
    

Sorgu oluşturma

Xamarin iOS 8 uygulamasında oluşturmak CKQuery için aşağıdaki kod kullanılabilir:

var recordName = "MyRec";
var predicate = NSPredicate.FromFormat(string.Format("name = '{0}'", recordName));
var query = new CKQuery("CloudRecords", predicate);

İlk olarak, yalnızca belirli bir adla eşleşen kayıtları seçmek için bir Koşul oluşturur. Ardından Koşul ile eşleşen belirtilen Kayıt Türündeki Kayıtlar'ı seçecek bir sorgu oluşturur.

Sorgu gerçekleştirme

Sorgu oluşturulduktan sonra, sorguyu gerçekleştirmek ve döndürülen kayıtları işlemek için aşağıdaki kodu kullanın:

var recordName = "MyRec";
var predicate = NSPredicate.FromFormat(string.Format("name = {0}", recordName));
var query = new CKQuery("CloudRecords", predicate);

ThisApp.PublicDatabase.PerformQuery(query, CKRecordZone.DefaultRecordZone().ZoneId, (NSArray results, NSError err) => {
    // Was there an error?
    if (err != null) {
       ...
    } else {
        // Process the returned records
        for(nint i = 0; i < results.Count; ++i) {
            var record = (CKRecord)results[i];
        }
    }
});

Yukarıdaki kod, yukarıda oluşturulan sorguyu alır ve Genel Veritabanı'na karşı yürütür. Kayıt Bölgesi belirtilmediğinden tüm bölgelerde arama yapılır. Hata oluşmazsa, sorgunun parametreleriyle eşleşen bir dizisi CKRecords döndürülür.

Sorgular hakkında düşünmenin yolu, bunların yoklama olması ve büyük veri kümelerini dilimleme konusunda harika olmasıdır. Ancak aşağıdaki nedenlerden dolayı sorgular büyük ve çoğunlukla statik veri kümeleri için uygun değildir:

  • Bunlar cihaz pil ömrü için kötü.
  • Bunlar ağ trafiği için kötü.
  • Gördükleri bilgiler uygulamanın veritabanını ne sıklıkta yokladığıyla sınırlı olduğundan kullanıcı deneyimi açısından kötüdür. Günümüzde kullanıcılar bir şey değiştiğinde anında iletme bildirimleri bekler.

Abonelikler

Büyük ve çoğunlukla statik veri kümeleriyle ilgilenirken, sorgu istemci cihazında gerçekleştirilmemelidir, istemcinin adına sunucuda çalıştırılmalıdır. Sorgu arka planda çalıştırılmalıdır ve geçerli cihaz veya aynı veritabanına dokunan başka bir cihaz tarafından her kayıt kaydedildikten sonra yürütülmelidir.

Son olarak, sunucu tarafı sorgusu çalıştırıldığında veritabanına bağlı her cihaza bir anında iletme bildirimi gönderilmelidir.

Abonelikler, sınıfı aracılığıyla CloudKit Framework'te CKSubscription kullanıma sunulur. Kayıt Türü ( RecordType), Koşul ( NSPredicate) ve Apple Anında İletme Bildirimini ( Push) birleştirir.

Not

CloudKit gönderimleri, göndermenin neden olduğu gibi CloudKit'e özgü bilgileri içeren bir yük içerdiğinden biraz artırılır.

Abonelikler nasıl çalışır?

C# kodunda Abonelik'i uygulamadan önce aboneliklerin nasıl çalıştığına hızlı bir genel bakış yapalım:

Aboneliklerin çalışma şekline genel bakış

Yukarıdaki grafik, tipik abonelik işlemini aşağıdaki gibi gösterir:

  1. İstemci cihaz, aboneliği tetikleyecek koşullar kümesini ve tetikleyici gerçekleştiğinde gönderilecek anında iletme bildirimini içeren yeni bir Abonelik oluşturur.
  2. Abonelik, mevcut aboneliklerin koleksiyonuna eklendiği Veritabanına gönderilir.
  3. İkinci bir cihaz yeni bir Kayıt oluşturur ve bu kaydı Veritabanına kaydeder.
  4. Veritabanı, yeni Kaydın herhangi bir koşulla eşleşip eşleşmediğini görmek için Abonelikler listesini arar.
  5. Bir eşleşme bulunursa, Anında İletme Bildirimi, Tetiklenen Kayıt hakkındaki bilgilerle Aboneliği kaydeden cihaza gönderilir.

Bu bilgiyle birlikte, Xamarin iOS 8 uygulamasında Abonelik oluşturma konusuna göz atalım.

Abonelik oluşturma

Abonelik oluşturmak için aşağıdaki kod kullanılabilir:

// Create a new subscription
DateTime date;
var predicate = NSPredicate.FromFormat(string.Format("start > {0}", (NSDate)date));
var subscription = new CKSubscription("RecordType", predicate, CKSubscriptionOptions.FiresOnRecordCreation);

// Describe the type of notification
var notificationInfo = new CKNotificationInfo();
notificationInfo.AlertLocalizationKey = "LOCAL_NOTIFICATION_KEY";
notificationInfo.SoundName = "ping.aiff";
notificationInfo.ShouldBadge = true;

// Attach the notification info to the subscription
subscription.NotificationInfo = notificationInfo;

İlk olarak, Aboneliği tetikleme koşulunu sağlayan bir Koşul oluşturur. Ardından, aboneliği belirli bir Kayıt Türüne göre oluşturur ve tetikleyicinin test edildiğinde seçeneğini ayarlar. Son olarak, Abonelik tetiklendiğinde gerçekleşecek bildirim türünü tanımlar ve Aboneliği ekler.

Abonelikleri kaydetme

Abonelik oluşturulduktan sonra aşağıdaki kod bunu Veritabanına kaydeder:

// Save the subscription to the database
ThisApp.PublicDatabase.SaveSubscription(subscription, (s, err) => {
    // Was there an error?
    if (err != null) {

    }
});

Convenience API'sini kullanarak çağrı zaman uyumsuz, basit ve kolay hata işleme sağlar.

Anında iletme bildirimlerini işleme

Geliştirici daha önce Apple Anında İletme Bildirimleri 'ni (APS) kullandıysa CloudKit tarafından oluşturulan Bildirimlerle ilgilenme süreci tanıdık olmalıdır.

içinde AppDelegate.cssınıfını ReceivedRemoteNotification aşağıdaki gibi geçersiz kılın:

public override void ReceivedRemoteNotification (UIApplication application, NSDictionary userInfo)
{
    // Parse the notification into a CloudKit Notification
    var notification = CKNotification.FromRemoteNotificationDictionary (userInfo);

    // Get the body of the message
    var alertBody = notification.AlertBody;

    // Was this a query?
    if (notification.NotificationType == CKNotificationType.Query) {
        // Yes, convert to a query notification and get the record ID
        var query = notification as CKQueryNotification;
        var recordID = query.RecordId;
    }
}

Yukarıdaki kod, CloudKit'in userInfo dosyasını bir CloudKit Bildiriminde ayrıştırmasını ister. Ardından, uyarı hakkında bilgiler ayıklanır. Son olarak, bildirim türü test edilir ve bildirim uygun şekilde işlenir.

Bu bölümde, Sorgular ve Abonelikler kullanılarak yukarıda sunulan Büyük Veri, Küçük Cihaz sorununun nasıl yanıtlandığını gösterilmiştir. Uygulama büyük verilerini bulutta bırakır ve bu veri kümesine görünümler sağlamak için bu teknolojileri kullanır.

CloudKit kullanıcı hesapları

Bu makalenin başında belirtildiği gibi CloudKit, mevcut iCloud altyapısının üzerine kurulmuştur. Aşağıdaki bölümde, hesapların CloudKit API'sini kullanan bir geliştiricinin kullanımına nasıl sunulduğu ayrıntılı olarak ele alınacaktır.

Kimlik Doğrulaması

Kullanıcı hesaplarıyla ilgilenirken ilk dikkate alınacak nokta kimlik doğrulamasıdır. CloudKit, cihazda şu anda oturum açmış olan iCloud kullanıcısı aracılığıyla kimlik doğrulamasını destekler. Kimlik doğrulaması arka planda gerçekleşir ve iOS tarafından işlenir. Bu şekilde, geliştiricilerin kimlik doğrulamasını uygulama ayrıntıları konusunda endişelenmesi gerekmez. Yalnızca kullanıcının oturum açmış olup olmadığını test ederler.

Kullanıcı hesabı bilgileri

CloudKit, geliştiriciye aşağıdaki kullanıcı bilgilerini sağlar:

  • Kimlik : Kullanıcıyı benzersiz bir şekilde tanımlamanın bir yoludur.
  • Meta Veriler : Kullanıcılar hakkında bilgi kaydetme ve alma olanağı.
  • Gizlilik – Tüm bilgiler, gizlilik bilincine sahip bir kuruluşta ele alınır. Kullanıcı kabul etmediği sürece hiçbir şey açığa çıkmaz.
  • Bulma – Kullanıcılara aynı uygulamayı kullanan arkadaşlarını bulma olanağı sağlar.

Şimdi bu konulara ayrıntılı olarak göz atacağız.

Kimlik

Yukarıda belirtildiği gibi CloudKit, uygulamanın belirli bir kullanıcıyı benzersiz olarak tanımlaması için bir yol sağlar:

Belirli bir kullanıcıyı benzersiz olarak identifing

Bir kullanıcının cihazlarında çalışan bir istemci uygulaması ve CloudKit Kapsayıcısı içindeki belirli Tüm Kullanıcı Özel Veritabanları vardır. İstemci uygulaması bu belirli kullanıcılardan birine bağlanacak. Bu, cihazda yerel olarak iCloud'da oturum açmış olan kullanıcıyı temel alır.

Bu iCloud'dan geldiği için, Kullanıcı Bilgilerinin zengin bir destek deposu vardır. iCloud aslında Kapsayıcı'yı barındırdığından, kullanıcılar arasında bağıntı oluşturabilir. Yukarıdaki grafikte, iCloud hesabı user@icloud.com geçerli istemciye bağlı olan kullanıcı.

Kapsayıcı temelinde benzersiz, rastgele oluşturulan bir Kullanıcı Kimliği oluşturulur ve kullanıcının iCloud hesabıyla (e-posta adresi) ilişkilendirilir. Bu Kullanıcı Kimliği uygulamaya döndürülür ve geliştiricinin uygun gördüğü herhangi bir şekilde kullanılabilir.

Not

Aynı iCloud kullanıcısı için aynı cihazda çalışan farklı uygulamalar farklı CloudKit Kapsayıcılarına bağlı olduğundan farklı Kullanıcı Kimliklerine sahip olur.

Aşağıdaki kod, cihazda şu anda oturum açmış olan iCloud kullanıcısının CloudKit kullanıcı kimliğini alır:

public CKRecordID UserID { get; set; }
...

// Get the CloudKit User ID
CKContainer.DefaultContainer.FetchUserRecordId ((recordID, err) => {
    // Was there an error?
    if (err!=null) {
        Console.WriteLine("Error: {0}", err.LocalizedDescription);
    } else {
        // Save user ID
        UserID = recordID;
    }
});

Yukarıdaki kod, CloudKit Kapsayıcısı'nın oturum açmış durumdaki kullanıcının kimliğini sağlamasını ister. Bu bilgiler iCloud Server'dan geldiği için çağrı zaman uyumsuzdur ve hata işleme gereklidir.

Meta veri

CloudKit'teki her kullanıcının bunları tanımlayan belirli Meta Verileri vardır. Bu Meta Veriler CloudKit Kaydı olarak temsil edilir:

CloudKit'teki her kullanıcının bunları açıklayan belirli Meta Verileri vardır

Özel Veritabanı'nın içinde kapsayıcının belirli bir kullanıcısını ararken bu kullanıcıyı tanımlayan bir Kayıt vardır. Genel Veritabanı'nın içinde, Kapsayıcının her kullanıcısı için bir tane olan çok sayıda Kullanıcı Kaydı vardır. Bunlardan biri, şu anda oturum açmış olan kullanıcının Kayıt Kimliği ile eşleşen bir kayıt kimliğine sahip olacaktır.

Genel Veritabanındaki Kullanıcı Kayıtları dünya çapında okunabilir. Çoğunlukla sıradan bir Kayıt olarak kabul edilirler ve bir türe CKRecordTypeUserRecordsahiptirler. Bu kayıtlar sistem tarafından ayrılmıştır ve sorgular için kullanılamaz.

Kullanıcı Kaydına erişmek için aşağıdaki kodu kullanın:

public CKRecord UserRecord { get; set; }
...

// Get the user's record
PublicDatabase.FetchRecord(UserID, (record ,er) => {
    //was there an error?
    if (er != null) {
        Console.WriteLine("Error: {0}", er.LocalizedDescription);
    } else {
        // Save the user record
        UserRecord = record;
    }
});

Yukarıdaki kod, Genel Veritabanından yukarıda erişmiş olduğumuz kimliğe sahip olan kullanıcının Kullanıcı Kaydını döndürmesini ister. Bu bilgiler iCloud Server'dan geldiği için çağrı zaman uyumsuzdur ve hata işleme gereklidir.

Gizlilik

CloudKit, şu anda oturum açmış olan kullanıcının gizliliğini korumak için varsayılan olarak tasarlanmıştır. Kullanıcı hakkında kişisel olarak tanımlayıcı bilgiler varsayılan olarak gösterilmez. Uygulamanın kullanıcı hakkında sınırlı bilgi gerektirdiği bazı durumlar vardır.

Bu gibi durumlarda uygulama, kullanıcının bu bilgileri ifşasını isteyebilir. Kullanıcıya hesap bilgilerini kullanıma sunmayı kabul etmelerini isteyen bir iletişim kutusu sunulur.

Bulma

Kullanıcının, uygulamanın kullanıcı hesabı bilgilerine sınırlı erişim izni vermesine izin vermek için kabul ettiğini varsayarsak, uygulamanın diğer kullanıcıları tarafından bulunabilir:

Bir kullanıcı, uygulamanın diğer kullanıcıları tarafından bulunabilir

İstemci uygulaması bir Kapsayıcı ile konuşuyor ve Kapsayıcı, kullanıcı bilgilerine erişmek için iCloud'dan bahsediyor. Kullanıcı bir e-posta adresi sağlayabilir ve Bulma özelliği kullanıcı hakkında bilgi almak için kullanılabilir. İsteğe bağlı olarak Kullanıcı Kimliği, kullanıcı hakkındaki bilgileri bulmak için de kullanılabilir.

CloudKit ayrıca, tüm Adres Defteri'ni sorgulayarak iCloud'da oturum açmış olan kullanıcının arkadaşı olabilecek tüm kullanıcılar hakkında bilgi bulmanın bir yolunu sağlar. CloudKit İşlemi kullanıcının Kişi Defteri'ni çeker ve e-posta adreslerini kullanarak uygulamanın bu adreslerle eşleşen diğer kullanıcılarını bulup bulamayacağını denetler.

Bu, uygulamanın erişim sağlamadan veya kullanıcıdan kişilere erişimi onaylamasını istemeden kullanıcının Kişi Defteri'ni kullanmasına olanak tanır. Kişi bilgileri hiçbir zaman uygulamanın kullanımına sunulmaz, yalnızca CloudKit İşlemi erişebilir.

Özetlemek gerekirse, Kullanıcı Bulma için kullanılabilecek üç farklı giriş türü vardır:

  • Kullanıcı Kayıt Kimliği – Bulma işlemi, şu anda CloudKit'te oturum açmış olan kullanıcının Kullanıcı Kimliğine göre yapılabilir.
  • Kullanıcı E-posta Adresi – Kullanıcı bir e-posta adresi sağlayabilir ve bulma için kullanılabilir.
  • Kişi Defteri – Kullanıcının adres defteri, kişilerinde listelenen e-posta adresiyle aynı e-posta adresine sahip olan uygulama kullanıcılarını bulmak için kullanılabilir.

Kullanıcı Bulma aşağıdaki bilgileri döndürür:

  • Kullanıcı Kaydı Kimliği - Genel Veritabanındaki bir kullanıcının benzersiz kimliği.
  • Ad ve Soyadı - Genel Veritabanında depolandığı gibi.

Bu bilgiler yalnızca Bulma'ya kabul etmiş kullanıcılar için döndürülür.

Aşağıdaki kod, cihazda iCloud'da oturum açmış olan kullanıcı hakkındaki bilgileri bulur:

public CKDiscoveredUserInfo UserInfo { get; set; }
//...

// Get the user's metadata
CKContainer.DefaultContainer.DiscoverUserInfo(UserID, (info, e) => {
    // Was there an error?
    if (e != null) {
        Console.WriteLine("Error: {0}", e.LocalizedDescription);
    } else {
        // Save the user info
        UserInfo = info;
    }
});

Kişi Defteri'ndeki tüm kullanıcıları sorgulamak için aşağıdaki kodu kullanın:

// Ask CloudKit for all of the user's friends information
CKContainer.DefaultContainer.DiscoverAllContactUserInfos((info, er) => {
    // Was there an error
    if (er != null) {
        Console.WriteLine("Error: {0}", er.LocalizedDescription);
    } else {
        // Process all returned records
        for(int i = 0; i < info.Count(); ++i) {
            // Grab a user
            var userInfo = info[i];
        }
    }
});

Bu bölümde, CloudKit'in bir uygulamaya sağlayabilecekleri bir kullanıcının hesabına dört ana erişim alanını ele aldık. Kullanıcının Kimliğini ve Meta Verilerini almaktan CloudKit'e yerleşik gizlilik ilkelerine ve son olarak uygulamanın diğer kullanıcılarını bulma özelliğine kadar.

Geliştirme ve üretim ortamları

CloudKit, bir uygulamanın kayıt türleri ve verileri için ayrı Geliştirme ve Üretim ortamları sağlar. Geliştirme Ortamı, yalnızca geliştirme ekibinin üyeleri tarafından kullanılabilen daha esnek bir ortamdır. Bir uygulama kayda yeni bir alan ekleyip bu kaydı Geliştirme Ortamı'na kaydettiğinde, sunucu şema bilgilerini otomatik olarak güncelleştirir.

Geliştirici, geliştirme sırasında şemada değişiklik yapmak için bu özelliği kullanabilir ve bu da zaman kazandırır. Bir uyarı, bir alan kayda eklendikten sonra bu alanla ilişkilendirilmiş veri türünün program aracılığıyla değiştirilememesidir. Bir alanın türünü değiştirmek için geliştiricinin CloudKit Panosu'ndaki alanı silip yeni türle yeniden eklemesi gerekir.

Geliştirici, uygulamayı dağıtmadan önce CloudKit Panosu'nu kullanarak şemasını ve verilerini üretim ortamına geçirebiliyor. Üretim Ortamı'na karşı çalışırken, sunucu bir uygulamanın şemayı program aracılığıyla değiştirmesini engeller. Geliştirici, CloudKit Panosu'nda değişiklik yapmaya devam edebilir ancak Üretim Ortamı'ndaki bir kayda alan ekleme girişimi hatalara neden olur.

Not

iOS Simülatörü yalnızca Geliştirme Ortamı ile çalışır. Geliştirici bir uygulamayı Üretim Ortamında test etmeye hazır olduğunda fiziksel bir iOS cihazı gerekir.

CloudKit özellikli bir uygulamayı gönderme

CloudKit kullanan bir uygulamayı göndermeden önce, Üretim CloudKit Ortamını hedefleyecek şekilde yapılandırılması gerekir, aksi takdirde uygulama Apple tarafından reddedilir.

Aşağıdakileri yapın:

  1. Ma için Visual Studio'da, uygulamayı Sürüm>iOS Cihazı için derleyin:

    Uygulamayı Yayın için derleme

  2. Oluştur menüsünde Arşivle'yi seçin:

    Arşivle'yi seçin

  3. Arşiv oluşturulur ve Mac için Visual Studio görüntülenir:

    Arşiv oluşturulur ve görüntülenir

  4. Xcode'ı başlatın.

  5. Pencere menüsünde Düzenleyici'yi seçin:

    Düzenleyici'yi seçin

  6. Uygulamanın arşivini seçin ve Dışarı Aktar... düğmesine tıklayın:

    Uygulamanın arşivi

  7. Dışarı aktarmak için bir yöntem seçin ve İleri düğmesine tıklayın:

    Dışarı aktarmak için bir yöntem seçin

  8. Açılan listeden Geliştirme Ekibi'ni seçin ve Seç düğmesine tıklayın:

    Açılan listeden Geliştirme Ekibi'ni seçin

  9. Açılan listeden Üretim'i seçin ve İleri düğmesine tıklayın:

    Açılan listeden Üretim'i seçin

  10. Ayarı gözden geçirin ve Dışarı Aktar düğmesine tıklayın:

    Ayarı gözden geçirin

  11. Sonuçta elde edilen uygulama .ipa dosyasını oluşturmak için bir konum seçin.

İşlem, uygulamayı doğrudan iTunes Bağlan'a göndermek için benzerdir, Dışarı Aktar... yerine Gönder... düğmesine tıklamanız yeterlidir... Düzenleyici penceresinde bir Arşiv seçtikten sonra.

CloudKit ne zaman kullanılır?

Bu makalede gördüğümüz gibi CloudKit, bir uygulamanın iCloud sunucularında bilgileri depolaması ve alması için kolay bir yol sağlar. CloudKit, mevcut araçların veya çerçevelerin hiçbirini kullanımdan kaldırmaz veya kullanımdan kaldırmaz.

Kullanım örnekleri

Aşağıdaki kullanım örnekleri, geliştiricinin belirli bir iCloud çerçevesini veya teknolojisini ne zaman kullaneceğine karar vermesine yardımcı olmalıdır:

  • iCloud Anahtar-Değer Deposu – Zaman uyumsuz olarak az miktarda veriyi güncel tutar ve uygulama tercihleriyle çalışmak için mükemmeldir. Ancak, çok az miktarda bilgi için kısıtlanır.
  • iCloud Drive – Mevcut iCloud Belgeleri API'lerinin üzerine kuruludur ve yapılandırılmamış verileri dosya sisteminden eşitlemek için basit bir API sağlar. Mac OS X'te tam çevrimdışı önbellek sağlar ve belge merkezli uygulamalar için mükemmeldir.
  • iCloud Core Data – Verilerin kullanıcının tüm cihazları arasında çoğaltılmasına izin verir. Veriler tek kullanıcılı ve özel, yapılandırılmış verileri eşitlenmiş tutmak için mükemmeldir.
  • CloudKit : Genel verileri hem yapı hem de toplu olarak sağlar ve hem büyük veri kümesini hem de büyük yapılandırılmamış dosyaları işleyebilecek durumdadır. Kullanıcının iCloud hesabına bağlıdır ve istemci tarafından yönlendirilen veri aktarımı sağlar.

Bu kullanım örneklerini göz önünde bulundurarak, geliştiricinin hem geçerli gerekli uygulama işlevselliğini sağlamak hem de gelecekteki büyüme için iyi bir ölçeklenebilirlik sağlamak için doğru iCloud teknolojisini seçmesi gerekir.

Özet

Bu makalede CloudKit API'sine hızlı bir giriş ele alınmıştır. CloudKit kullanmak için bir Xamarin iOS uygulamasının nasıl sağlanıp yapılandırıldığını göstermiştir. CloudKit Convenience API'sinin özelliklerini ele almıştır. CloudKit özellikli bir uygulamanın Sorgular ve Abonelikler kullanılarak ölçeklenebilirlik için nasıl tasarlandığını gösterir. Son olarak CloudKit tarafından bir uygulamaya sunulan Kullanıcı Hesabı bilgilerini göstermiştir.