Xamarin.iOS'ta CloudKit
CloudKit çerçevesi, iCloud'a erişen uygulamaların geliştirilmesini kolaylaştırıyor. Buna uygulama verilerini ve varlık haklarını alma ve uygulama bilgilerini güvenli bir şekilde depolama dahildir. Bu set, kişisel bilgileri paylaşmadan iCloud kimlikleriyle uygulamalara erişim izni vererek kullanıcılara bir anonimlik katmanı sağlar.
Geliştiriciler istemci tarafı uygulamalarına odaklanabilir ve iCloud'un sunucu tarafı uygulama mantığı yazma ihtiyacının ortadan kaldırılmasını sağlar. CloudKit kimlik doğrulaması, özel ve genel veritabanları, yapılandırılmış veri ve varlık depolama hizmetleri sağlar.
Önemli
Apple, geliştiricilerin Avrupa Birliği'nin (GDPR) Genel Veri Koruma Yönetmeliği araçlar 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'leri, geliştiricinin bilgisayarına yüklerini ve yapılandırılanları içerir.
- Mac için Visual Studio – Uygulamanın en Mac için Visual Studio sürümü kullanıcı cihazına yük olmalı ve yapılandırıldı.
- 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 yolu olarak kullanılır. Hem iCloud Sürücüsü hem de iCloud Fotoğraf Kitaplığı için temel sağlar. CloudKit hem macOS hem de iOS cihazlarda de kullanılabilir.
CloudKit, iCloud Hesabı altyapısını kullanır. Cihazda bir iCloud Hesabında oturum açmış bir kullanıcı varsa, CloudKit bu kullanıcının kimliğini kullanarak kullanıcıyı tanıtır. Hesap yoksa sınırlı salt okunur erişim sağlanır.
CloudKit hem genel hem de özel veritabanı kavramını destekler. Genel veritabanları, kullanıcının erişimi olan tüm veriler için bir "tırs" 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şleme özelliğine sahip. CloudKit, arka planda büyük dosyaları iCloud Sunucularına ve sunucularına verimli bir şekilde aktararak geliştiriciyi diğer görevlere odaklanmaya serbest bırakmıştır.
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 etkili bir şekilde bilgi göndermesi ve almalarına olanak sağlar.
Bu yazının yazmıştır ve Apple başlangıçta CloudKit'i hem bant genişliği hem de depolama kapasitesi üzerinde yüksek sınır ile ücretsiz olarak sağlar. Apple, büyük kullanıcı tabanına sahip daha büyük projeler veya uygulamalar için uygun fiyatlı bir fiyatlandırma ölçeği sağlanacak 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 sağlandı olması gerekir.
CloudKit'e erişmek için Entitlements.plist dosyasında iCloud'uetkinleştir, Anahtar-değer depolamasıve CloudKit izinleri bulun gerekir.
Örnek uygulama
CloudKitAtlas örneği, CloudKit'i Xamarin ile kullanmayı gösteriyor. Aşağıdaki adımlarda örneği yapılandırma adımları gösterilmiştir. Yalnızca CloudKit için gerekenlerin ötesinde ek ayarlar gerekir:
- Projeyi Mac için Visual Studio veya Visual Studio.
- Uygulama Çözüm GezginiInfo.plist dosyasını açın ve Paket Tanımlayıcısı'nın sağlama ayarlaması kapsamında oluşturulan Uygulama Kimliği'nde tanımlananla eş olduğundan emin olun.
- Info.plist dosyasının en altına inin ve Etkin Arka Plan Modları,KonumGüncelleştirmeleri ve Uzaktan Bildirimler'i seçin.
- Çözümde iOS projesine sağ tıklayın ve Seçenekler'i seçin.
- iOS Paket İmzalama'yatıklayın, yukarıda oluşturulan Geliştirici Kimliği ve Sağlama Profili'ne tıklayın.
- Entitlements.plist'iniCloud'uEtkinleştir, Anahtar-değerdepolama ve CloudKit'i dahil olduğundan emin olun.
- Uygulama için Ubiquity Kapsayıcısı'nın mevcut olduğundan emin olun. Örnek:
iCloud.com.your-company.CloudKitAtlas - Dosyadaki değişiklikleri kaydedin.
Bu ayarlar hazır olduğunda, örnek uygulama artık CloudKit Framework API'lerine ve arka plan, konum ve bildirim hizmetlerine erişmeye hazırdır.
CloudKit API'sini genel bakış
CloudKit'i bir Xamarin iOS uygulamasında uygulamadan önce, bu makale CloudKit Framework'ün temellerini ele a almaktadır ve bu konu aşağıdaki konuları içerecektir:
- Kapsayıcılar: iCloud iletişimlerinin yalıtılmış siloları.
- Veritabanları – Genel ve özel, uygulama tarafından kullanılabilir.
- Kayıtlar: Yapılandırılmış verilerin CloudKit'e ve CloudKit'e taşındığı mekanizma.
- Kayıt Bölgeleri: Kayıt gruplarıdır.
- Kayıt Tanımlayıcıları – Tamamen normalleştirilmiştir ve kaydın belirli konumunu temsil ediyor.
- Reference: Verili Bir Veritabanı içindeki ilgili Kayıtlar arasında üst-alt ilişkilerini sağlar.
- Varlıklar : Büyük ve yapılandırılmamış verilerin dosyasının iCloud'a yüklensin ve belirli bir Kayıtla ilişkilendirilsin.
Kapsayıcılar
iOS cihazında çalışan bir uygulama, her zaman bu cihaza bağlı diğer uygulama ve hizmetlerle birlikte çalışıyor. İstemci cihazında uygulama bir şekilde siloya veya korumalı alana atılır. Bazı durumlarda bu değişmez korumalı alandır ve diğerleri ise uygulamanın kendi bellek alanı içinde ç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:
- Güvenlik – Bir uygulama diğer istemci uygulamalarına veya işletim sistemi kendisine müdahaleamaz.
- Kararlılık – İstemci uygulaması kilitleniyorsa diğer işletim sistemi uygulamalarını çıkaramaz.
- Gizlilik– Her istemci uygulaması, cihazda depolanan kişisel bilgilere sınırlı erişime sahip olur.
CloudKit, yukarıda listelenenlerle aynı avantajları sağlamak ve bunları bulut tabanlı bilgilerle çalışmaya uygulamak için tasarlanmıştır:
Uygulamanın cihazda çalışan bire çok olması gibi, uygulamanın iCloud ile iletişimleri de çoka birdir. Bu farklı iletişim silolarının her biri Kapsayıcılar olarak adlandırılan bir alandır.
Kapsayıcılar CloudKit Framework'te sınıfı aracılığıyla açığa CKContainer çıkar. Varsayılan olarak, bir uygulama bir kapsayıcıyla konuşur ve bu kapsayıcı bu uygulamanın verilerini yalıtır. Bu, birkaç uygulamanın bilgileri aynı iCloud hesabında depolaya, ancak bu bilgilerin hiçbir zaman birbirine dahil olmayacak olduğu anlamına gelir.
iCloud verilerini kapsayıcıya almak, CloudKit'in kullanıcı bilgilerini kapsüllesine de olanak sağlar. Bu şekilde, uygulamanın iCloud hesabına ve içinde depolanan kullanıcı bilgilerine sınırlı erişimi olur ve bunların hepsi 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 genelinde geneldir, bu nedenle kapsayıcı yalnızca bir geliştiricinin uygulamalarına değil, tüm Apple geliştiricilerine ve uygulamalarına özel olmalıdır.
Apple, uygulama kapsayıcıları için ad alanı oluştururken ters DNS notasyonu kullanmayı önerir. Örnek: iCloud.com.company-name.application-name
Kapsayıcılar varsayılan olarak bire bir uygulamaya bağlansa da, bunlar uygulamalar arasında paylaştırılır. Bu nedenle birden çok uygulama tek bir Kapsayıcı üzerinde eşgüdüm sağlar. Tek bir uygulama birden çok Kapsayıcıyla da konuşabilirsiniz.
Veritabanları
CloudKit'in birincil işlevlerinden biri, bir uygulamanın veri modelini ve modeli iCloud sunucularına çoğaltmaktı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şturulacak 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, bir kişi topluluğudur.
Kapsayıcının içinde öncelikle genel veritabanı yer alır. Burada tüm genel bilgiler birlikte yer alır. Ayrıca, uygulamanın her kullanıcısı için birkaç ayrı özel veritabanı vardır.
Bir iOS cihazında çalıştırıldıysanız, uygulama yalnızca o anda oturum açmış olan iCloud kullanıcısı için bilgilere erişime sahip olur. Bu nedenle uygulamanın kapsayıcı görünümü aşağıdaki gibi olacaktır:
Yalnızca oturum açmış olan iCloud kullanıcısı ile ilişkili genel veritabanını ve özel veritabanını görebilir.
Veritabanları CloudKit Framework'te sınıfı aracılığıyla açığa CKDatabase çıkar. Her uygulamanın iki veritabanına erişimi vardır: genel veritabanı ve özel veritabanı.
Kapsayıcı, CloudKit'e ilk giriş noktasıdır. Aşağıdaki kod, uygulamanın varsayılan Kapsayıcısı'dan 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:
| Ortak veritabanı | Özel veritabanı | |
|---|---|---|
| Veri türü | Paylaşılan veriler | Geçerli kullanıcının verileri |
| Kotasının | Geliştiricinin kotasına göre hesaba katılmış | Kullanıcının kotasına göre hesaba katılmış |
| Varsayılan Izinler | Dünya genelinde okunabilir | Kullanıcı okunabilir |
| Izinleri Düzenle | kayıt sınıfı düzeyi aracılığıyla iCloud Pano rolleri | Yok |
Kayıtlar
Kapsayıcılar veritabanları ve içindeki veritabanları kayıt. Kayıtlar, yapılandırılmış verilerin CloudKit 'e ve öğesinden taşındığı mekanizmaya sahiptir:
Kayıtlar, CKRecord anahtar-değer çiftlerini sarmalayan sınıf aracılığıyla CloudKit çerçevesinde gösterilir. Bir uygulamadaki bir nesne örneği, CloudKit içindeki bir ile eşdeğerdir CKRecord . Bunlara ek olarak, her biri bir CKRecord nesne sınıfına denk olan bir kayıt türüne sahip olur.
Kayıtlar tam zamanında bir şemaya sahiptir, bu nedenle veriler, işleme için kullanılmadan önce CloudKit 'Te açıklanmıştır. Bu noktadan sonra CloudKit, bilgileri Yorumlar ve kayıt depolama ve alma lojini işler.
CKRecordSınıfı ayrıca çok sayıda meta veri aralığını destekler. Örneğin, bir kayıt oluşturulduğu zaman ve onu oluşturan kullanıcı hakkındaki bilgileri içerir. Bir kayıt, son değiştirilme tarihi ve onu değiştiren kullanıcı hakkındaki bilgileri de içerir.
Kayıtlar bir değişiklik etiketi kavramını içerir. Bu, belirli bir kaydın düzeltmesine ait önceki bir sürümdür. Değişiklik etiketi, istemci ve sunucunun belirli bir kayıt için aynı sürüme sahip olup olmadığını belirlemenin hafif bir yolu olarak kullanılır.
Yukarıda belirtildiği gibi, CKRecords anahtar-değer çiftlerini sarın ve bu şekilde, aşağıdaki veri türleri bir kayıtta depolanabilir:
NSStringNSNumberNSDataNSDateCLLocationCKReferencesCKAssets
Tek değer türlerine ek olarak bir kayıt, yukarıda listelenen türlerden herhangi birinin homojen bir dizisini içerebilir.
Aşağıdaki kod yeni bir kayıt oluşturmak ve bir veritabanında depolamak için 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, kendilerine verilen bir veritabanı içinde yok-kayıt grupları bir kayıt bölgesi içinde birlikte bulunur. Kayıt bölgeleri, geleneksel bir ilişkisel veritabanlarında tablo olarak düşünülebilir:
Verili bir kayıt bölgesi içinde birden çok kayıt ve belirli bir veritabanı içinde birden çok kayıt bölgesi bulunabilir. Her veritabanı varsayılan bir kayıt bölgesi içerir:
Burada kayıtlar varsayılan olarak depolanır. Ayrıca, özel kayıt bölgeleri oluşturulabilir. Kayıt bölgeleri, atomik yürütmelerin 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ğlanmış 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ştirilirler ve kaydın belirli konumunu temsil eder.
- Yabancı bir veritabanındaki bir kaydın benzersiz KIMLIĞINI kayıt adına atayarak, bu kişiler CloudKit içinde depolanmayan yerel veritabanlarını köprülemek için kullanılabilirler.
Geliştiriciler yeni kayıtlar oluşturduklarında, bir kayıt tanımlayıcısı ' nı geçirmeye seçim yapabilir. Bir kayıt tanımlayıcısı belirtilmemişse, otomatik olarak bir UUID oluşturulur ve bu kayda atanır.
Geliştiriciler yeni kayıt tanımlayıcıları oluşturduklarında, her kaydın ait olacağı kayıt bölgesini belirtmeyi seçebilirler. Hiçbiri belirtilmemişse, varsayılan kayıt bölgesi kullanılacaktır.
Kayıt tanımlayıcıları, sınıfı aracılığıyla CloudKit çerçevesinde gösterilir CKRecordID . Aşağıdaki kod yeni bir kayıt tanımlayıcısı oluşturmak için kullanılabilir:
var recordID = new CKRecordID("My Record");
Başvurular
Başvurular, belirli bir veritabanı içindeki ilgili kayıtlar arasında ilişki sağlar:
Yukarıdaki örnekte, alt öğeleri alt öğenin üst kaydın alt kaydı olması için alt öğesidir. Ilişki alt kayıttan üst kayda gider ve geri başvuruolarak adlandırılır.
Başvurular, CloudKit çerçevesinde sınıfı aracılığıyla gösterilir CKReference . Bunlar, iCloud sunucusunun kayıtlar arasındaki ilişkiyi anlamasına izin vermenin bir yoludur.
Başvurular, geçişli silme sonrasında mekanizmayı sağlar. Veritabanından bir üst kayıt silinirse, herhangi bir alt kayıt (bir Ilişkide belirtilen şekilde) otomatik olarak veritabanından silinir.
Not
CloudKit kullanılırken, salgling Işaretçileri bir olasılık. Örneğin, uygulamanın bir kayıt işaretçileri listesi, bir kayıt seçip kayıt için sorulduğu zaman, kayıt artık veritabanında olmayabilir. Bu durumu düzgün bir şekilde işlemek için bir uygulamanın kodlanmış olması gerekir.
Gerekli olmasa da, CloudKit çerçevesiyle çalışırken geri başvuruları tercih edilir. Apple, bu en etkili başvuru türünü yapmak için sisteme ince ayar yapar.
Bir başvuru oluştururken, geliştirici zaten bellekte olan bir kayıt sağlayabilir ya da bir kayıt tanımlayıcısına başvuru oluşturabilir. Bir kayıt tanımlayıcısı kullanılıyorsa ve belirtilen başvuru veritabanında yoksa, bir Salgze Işaretçisi oluşturulur.
Aşağıda, bilinen bir kayda yönelik bir başvuru oluşturma örneği verilmiştir:
var reference = new CKReference(newRecord, new CKReferenceAction());
Varlıklar
Varlıklar, büyük, yapılandırılmamış verilerin bir dosyasının iCloud 'a yüklenmesini ve belirli bir kayıtla ilişkilendirilmesini sağlar:
İstemcisinde, CKRecord iCloud sunucusuna yüklenecek olan dosyayı açıklayan bir oluşturulur. CKAssetDosyası, dosyayı içerecek şekilde oluşturulur ve onu açıklayan kayıtla bağlantılıdır.
dosya sunucuya yüklendiğinde, kayıt veritabanına yerleştirilir ve dosya özel bir toplu Depolama veritabanına kopyalanır. Kayıt Işaretçisi ile karşıya yüklenen dosya arasında bir bağlantı oluşturulur.
Varlıklar, CloudKit çerçevesinde sınıfı aracılığıyla sunulur CKAsset ve büyük ve yapılandırılmamış verileri depolamak için kullanılır. Geliştirici, bellekte büyük, yapılandırılmamış veriler olmasını hiçbir şekilde istemediğinde, varlıklar diskteki dosyalar kullanılarak uygulanır.
Varlıkların kayıtları, bir işaretçi olarak kayıt kullanılarak iCloud 'dan alınmasına izin veren kayıtlara aittir. Bu şekilde, varlığın sahibi olan kayıt silindiğinde sunucu atık olarak varlık toplayabilirler.
CKAssets, Büyük veri dosyalarını işlemek için tasarlanan Apple, varlıkları verimli bir şekilde yüklemek ve indirmek Için CloudKit 'i tasarlamıştır.
Aşağıdaki kod bir varlık oluşturmak ve kayıtla ilişkilendirmek için kullanılabilir:
var fileUrl = new NSUrl("LargeFile.mov");
var asset = new CKAsset(fileUrl);
newRecord ["name"] = asset;
Artık CloudKit içindeki tüm temel nesneleri kapsadık. Kapsayıcılar uygulamalarla ilişkilendirilir ve veritabanları içerir. Veritabanları, kayıt bölgelerinde gruplanmış ve kayıt tanımlayıcılarına göre işaret edilen kayıtları içerir. Üst-alt ilişkileri, başvurular kullanılarak kayıtlar arasında tanımlanır. Son olarak, büyük dosyalar varlıklar kullanılarak karşıya yüklenebilir ve kayıtlarla ilişkilendirilebilir.
CloudKit kullanışlı API 'SI
Apple, CloudKit ile çalışmak için iki farklı API kümesi sunar:
- IŞLETIMSEL API – CloudKit 'in her tek özelliğini sunar. Daha karmaşık uygulamalar için bu API, CloudKit üzerinde ayrıntılı denetim sağlar.
- KULLANıŞLı API – CloudKit özelliklerinin ortak, önceden yapılandırılmış bir alt kümesini sunar. Bir iOS uygulamasına CloudKit işlevselliği dahil etmek için kullanışlı ve kolay erişim çözümü sağlar.
Kullanım kolaylığı API 'SI genellikle çoğu iOS uygulaması için en iyi seçenektir ve Apple bu uygulamayı kullanmaya başlamadan önce önerilir. Bu bölümün geri kalanında aşağıdaki kullanışlı API konuları ele alınacaktır:
- Kayıt kaydediliyor.
- Kayıt getiriliyor.
- Kayıt güncelleştiriliyor.
Ortak Kurulum kodu
CloudKit kullanım API 'SI ile çalışmaya başlamadan önce, bazı standart kurulum kodu gerekir. Uygulamanın dosyasını değiştirerek başlatın AppDelegate.cs ve aşağıdaki gibi görünür:
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, ortak ve özel CloudKit veritabanlarını uygulamanın geri kalanında birlikte çalışmayı kolaylaştırmak için kısayollar olarak kullanıma sunar.
Ardından, aşağıdaki kodu CloudKit kullanacak olan herhangi bir görünüm veya görünüm kapsayıcısına ekleyin:
using CloudKit;
//...
public AppDelegate ThisApp {
get { return (AppDelegate)UIApplication.SharedApplication.Delegate; }
}
Bu, AppDelegate üzerine ulaşmak ve yukarıda oluşturulan ortak ve özel veritabanı kısayollarına erişmek için bir kısayol ekler.
Bu kod söz konusu olduğunda, bir Xamarin iOS 8 uygulamasında CloudKit kullanışlı API 'sini uygulamaya göz atalım.
Kayıt kaydetme
Kayıtlar tartışılırken yukarıda sunulan bir model kullanılarak aşağıdaki kod yeni bir kayıt oluşturur ve bunu ortak veritabanına kaydetmek için kullanışlı API 'yi 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 dikkat etmeniz gereken üç şey:
SaveRecordUygulamasının yöntemini çağırarak,PublicDatabasegeliştiricinin verilerin nasıl gönderildiğini, hangi bölgeden yazıldığını, vb. belirtmek zorunda değildir. Kullanışlı API, bu ayrıntıların tümünün kendisini ele geçiriyor.- Çağrı zaman uyumsuzdur ve başarılı ya da hata ile çağrı tamamlandığında bir geri çağırma yordamı sağlar. Çağrı başarısız olursa, bir hata iletisi sunulacaktır.
- CloudKit yerel depolama/Kalıcılık sağlamıyor; yalnızca bir aktarım ortamıdır. Bu nedenle, kayıt kaydetmek için bir istek yapıldığında, bu, hemen iCloud sunucularına gönderilir.
Not
Mobil ağ iletişimlerinin "kayıplı" doğası nedeniyle, bağlantıların sürekli olarak bırakılmakta veya kesilmekte olduğu durumlarda, CloudKit ile çalışırken geliştiricilerin yapması gereken ilk dikkat edilecek noktalar hata işleme olur.
Kayıt getiriliyor
İCloud sunucusunda oluşturulmuş ve başarıyla depolanan bir kayıt ile, 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 zaman uyumsuzdur, basittir ve harika hata işleme gerektirir.
Kayıt güncelleştiriliyor
İCloud 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) {
...
}
});
}
});
FetchRecordPublicDatabase Çağrısı başarılı olursa, öğesinin yöntemi döndürür CKRecord . Ardından uygulama kaydı değiştirir ve SaveRecord değişiklikleri veritabanına geri yazmak için yeniden çağırır.
Bu bölüm, bir uygulamanın CloudKit kullanışlı API 'siyle çalışırken kullanacağı tipik döngüyü göstermiştir. Uygulama, kayıt kayıtlarını 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 makalede, bir uygulamanın tüm nesne modelini, her çalışışınızda iCloud sunucularından depolama ve alma hakkında bakmış oluyordu. Bu yaklaşım az miktarda veri ve çok küçük bir kullanıcı tabanı ile birlikte çalışarak, bilgi miktarı ve/veya kullanıcı tabanı arttıkça iyi ölçeklenmez.
Büyük veri, küçük cihaz
Daha popüler bir uygulama, veritabanında daha fazla veri ve bu, cihazdaki tüm verilerin bir önbelleğinin olması durumunda olur. Bu sorunu gidermek için aşağıdaki teknikler kullanılabilir:
- Büyük verileri bulutta saklayın – CloudKit büyük verileri verimli bir şekilde işleyecek şekilde tasarlanmıştır.
- İstemci yalnızca bu verilerin bir dilimini görüntülemesi gerekir . belirli bir zamanda herhangi bir görevi işlemek için gereken en az veri miktarını getir.
- İstemci görünümleri değişebilir . her kullanıcı farklı tercihleri içerdiğinden, görüntülenmekte olan 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, görüş açısından odaklanmak için sorguları kullanır – sorgular, kullanıcının bulutta 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 daha büyük veri kümesinin küçük bir alt kümesini seçmesine izin verir. Sorgular, CloudKit çerçevesinde sınıfı aracılığıyla gösterilir CKQuery .
Sorgu üç farklı şeyi birleştirir: bir kayıt türü ( RecordType ), koşul ( NSPredicate ) ve isteğe bağlı olarak bir sıralama tanımlayıcısı ( NSSortDescriptors ). CloudKit çoğunu destekler NSPredicate .
Desteklenen koşullar
CloudKit, sorgularla çalışırken aşağıdaki türlerini destekler NSPredicates :
Adın bir değişkende depolanan bir değere eşit olduğu eşleşen kayıtlar:
NSPredicate.FromFormat(string.Format("name = '{0}'", recordName))Anahtarın derleme zamanında bilmek zorunda olmaması için, bir dinamik anahtar değerini temel alarak eşleştirmeye izin verir:
NSPredicate.FromFormat(string.Format("{0} = '{1}'", key, value))Kayıt değerinin verilen değerden büyük olduğu eşleşen kayıtlar:
NSPredicate.FromFormat(string.Format("start > {0}", (NSDate)date))Kaydın konumunun verilen konumun 100 ölçümlerinde bulunduğ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));CloudKit, simgeleştirilmiş aramayı destekler. Bu çağrı için bir diğeri için olmak üzere iki belirteç oluşturulur
aftersession. Bu, bu iki belirteci içeren bir kayıt döndürür:NSPredicate.FromFormat(string.Format("ALL tokenize({0}, 'Cdl') IN allTokens", "after session"))CloudKit, işleci kullanılarak birleştirilmiş bileşik koşulların kullanılmasını destekler
AND.NSPredicate.FromFormat(string.Format("start > {0} AND name = '{1}'", (NSDate)date, recordName))
Sorgu oluşturma
Aşağıdaki kod bir CKQuery Xamarin iOS 8 uygulamasında oluşturmak için kullanılabilir:
var recordName = "MyRec";
var predicate = NSPredicate.FromFormat(string.Format("name = '{0}'", recordName));
var query = new CKQuery("CloudRecords", predicate);
İlk olarak, yalnızca verilen bir adla eşleşen kayıtları seçmek için bir koşul oluşturur. Ardından, belirtilen kayıt türünün, koşulla eşleşen kayıtlarını seçmesini sağlayacak 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 bunu ortak veritabanına karşı yürütür. Hiçbir kayıt bölgesi belirtilmediğinden, tüm bölgeler aranır. Herhangi bir hata oluştuysa, CKRecords sorgunun parametreleriyle eşleşen bir dizisi döndürülür.
Sorgular hakkında düşünmenin yolu, yoklamaları ve büyük veri kümelerinde dilimlerde harika bir yoldur. Ancak sorgular, aşağıdaki nedenlerden dolayı büyük, genellikle statik veri kümelerinde iyi uygun değildir:
- Cihaz pili ömrü için bozuktur.
- Ağ trafiği için bozuktur.
- Kullanıcı deneyimi için bozuktur, çünkü görtikleri bilgiler uygulamanın veritabanını yokladığı sıklık ile sınırlıdır. Bir değişiklik yapıldığında kullanıcılar bugün anında iletme bildirimleri bekler.
Abonelikler
Büyük, genellikle statik veri kümeleri ile ilgilenirken, sorgu istemci cihazında gerçekleştirilmemelidir, istemci adına sunucuda çalıştırılmalıdır. Sorgu arka planda çalışmalıdır ve geçerli cihaz ya da başka bir cihaz tarafından aynı veritabanına dokunduğunda her tek kayıt kaydedildikten sonra yürütülmesi gerekir.
Son olarak, sunucu tarafı sorgu çalıştırıldığında veritabanına bağlı her cihaza bir anında iletme bildirimi gönderilmesi gerekir.
Abonelikler, CloudKit çerçevesinde sınıfı aracılığıyla sunulur CKSubscription . Bir kayıt türü ( RecordType ), bir koşul ( NSPredicate ) ve bir Apple Anında İletilen Bildirim ( Push ) birleştirir.
Not
CloudKit gönderimleri, gönderinin gerçekleşmesinin nedeni gibi CloudKit 'e özgü bilgileri içeren bir yük içerdiklerinden biraz daha uzlandı.
Abonelikler nasıl çalışır?
C# kodunda abonelik uygulamadan önce, aboneliklerin nasıl çalıştığı hakkında hızlı bir genel bakış ele alalım:
Yukarıdaki grafik tipik abonelik sürecini aşağıdaki gibi gösterir:
- İstemci cihaz, aboneliğin tetikleyeceği koşullar kümesini içeren yeni bir abonelik ve tetikleyici gerçekleştiğinde gönderilecek bir anında Iletme bildirimi oluşturur.
- Abonelik, mevcut abonelikler koleksiyonuna eklendiği veritabanına gönderilir.
- İkinci bir cihaz yeni bir kayıt oluşturur ve bu kaydı veritabanına kaydeder.
- Veritabanı, yeni kaydın herhangi bir koşullarından biriyle eşleşip eşleşmediğini görmek için abonelik listesinde arar.
- Bir eşleşme bulunursa, aboneliğin tetiklenmesi neden olan kayıtla ilgili bilgilerle aboneliği kaydeden cihaza anında Iletme bildirimi gönderilir.
Bu bilgilerle birlikte bir Xamarin iOS 8 uygulamasında abonelik oluşturmaya bakalım.
Abonelikler oluşturma
Aşağıdaki kod bir abonelik oluşturmak için 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 tetiklemek için koşulu sağlayan bir koşul oluşturur. Daha sonra, aboneliği belirli bir kayıt türüne karşı oluşturur ve tetikleyicinin test edildiğinde seçeneğini ayarlar. Son olarak, abonelik tetiklendiğinde gerçekleşecek bildirimin türünü tanımlar ve aboneliği buna ekler.
Abonelikler kaydediliyor
Abonelik oluşturulduktan sonra, aşağıdaki kod veritabanına kaydedilir:
// Save the subscription to the database
ThisApp.PublicDatabase.SaveSubscription(subscription, (s, err) => {
// Was there an error?
if (err != null) {
}
});
Kullanışlı API 'yi kullanarak, çağrı zaman uyumsuz, basittir ve kolay hata işleme sağlar.
Anında iletme bildirimlerini işleme
Geliştirici daha önce Apple Anında Iletme bildirimleri (AP 'ler) kullanıyorsa, CloudKit tarafından oluşturulan bildirimlerle ilgili işlem tanıdık gelmelidir.
İçinde, AppDelegate.csReceivedRemoteNotification sınıfını 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 'e, bir CloudKit bildirimine ilişkin UserInfo ayrıştırmasına sorar. Daha sonra, bilgi uyarı hakkında ayıklanır. Son olarak, bildirim türü test edilir ve bildirim buna göre işlenir.
Bu bölümde, Yukarıda Sorgular ve Abonelikler kullanılarak sunulan Büyük Veri, Küçük Cihaz sorununun nasıl yanıt ver soruları gösterilmektedir. 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 da olduğu gibi CloudKit, mevcut iCloud altyapısının üzerine inşa edilmiştir. Aşağıdaki bölüm, hesapların CloudKit API'sini kullanarak bir geliştiriciye nasıl açık olduğunu ayrıntılı olarak ele almaktadır.
Kimlik Doğrulaması
Kullanıcı hesaplarıyla ilgilenmek için dikkat edilmesi gereken ilk nokta kimlik doğrulamasıdır. CloudKit, cihazda oturum açmış olan iCloud kullanıcısı aracılığıyla kimlik doğrulamasını destekler. Kimlik doğrulaması arka perde arkasında sürer ve iOS tarafından işleniyor. Bu şekilde geliştiricilerin hiçbir zaman kimlik doğrulaması uygulama ayrıntıları konusunda endişelenmesi gerekmzz. Yalnızca kullanıcının oturum açtığını test etmek için testtedir.
Kullanıcı hesap bilgileri
CloudKit geliştiriciye aşağıdaki kullanıcı bilgilerini sağlar:
- Identity: kullanıcıyı benzersiz olarak tanımlamanın bir yolu.
- Meta veriler: Kullanıcılar hakkında bilgi kaydedebilme ve alma olanağı.
- Gizlilik– Tüm bilgiler gizlilik bilincine sahip bir idarede ele alınan bir iştir. Kullanıcı kabul olmadığı sürece hiçbir şey açık değildir.
- Discovery: Kullanıcılara aynı uygulamayı kullanan arkadaşlarını bulma olanağı verir.
Şimdi bu konulara ayrıntılı olarak bakacağı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:
Bir kullanıcının cihaz ve CloudKit Kapsayıcısı içindeki tüm belirli Kullanıcı Özel Veritabanları üzerinde çalışan bir istemci uygulaması vardır. İstemci uygulaması bu belirli kullanıcılardan biri ile bağlantılı olacak. Bu, cihazda yerel olarak iCloud'da oturum açmış olan kullanıcıya dayalıdır.
Bu iCloud'dan geliyor olduğundan, Kullanıcı Bilgileri'nin zengin bir destek deposu vardır. iCloud aslında Kapsayıcıyı barındırır ve kullanıcılar arasında ilişki olabilir. Yukarıdaki grafikte, iCloud hesabı geçerli user@icloud.com istemciye bağlı olan kullanıcı.
Kapsayıcı temelinde, benzersiz, rastgele oluşturulmuş bir Kullanıcı Kimliği oluşturulur ve kullanıcının iCloud hesabıyla (e-posta adresi) ilişkilendirilmiştir. 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ın farklı CloudKit Kapsayıcıları'nda bağlı olduğundan farklı Kullanıcı Kimlikleri olur.
Aşağıdaki kod, cihazda o anda oturum açmış olan iCloud kullanıcısı için 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ış olan kullanıcının kimliğini sağlamalarını istiyor. Bu bilgiler iCloud Sunucusundan geliyorsa, çağrı zaman uyumsuzdur ve hata işleme gereklidir.
Meta veri
CloudKit'te her kullanıcının bunları açıklayan belirli Meta Verileri vardır. Bu Meta Veriler CloudKit Kaydı olarak temsil eder:
Kapsayıcının belirli bir kullanıcısı için Özel Veritabanı'nın içine bakarak 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 olmak kaydı olan çok sayıda Kullanıcı Kaydı vardır. Bunlardan biri, o anda oturum açmış olan kullanıcının Kayıt Kimliği ile eşleşen bir kayıt kimliğine sahip olur.
Genel Veritabanındaki Kullanıcı Kayıtları dünya tarafından okunabilir. Bunlar, çoğu zaman sıradan bir Kayıt olarak kabul edilir ve türüne CKRecordTypeUserRecord sahipler. 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ı'nın yukarıda eriştiğimiz kimliğin kullanıcı için Kullanıcı Kaydını geri dönmesini istiyor. Bu bilgiler iCloud Sunucusundan geliyorsa, çağrı zaman uyumsuzdur ve hata işleme gereklidir.
Gizlilik
CloudKit, varsayılan olarak oturum açmış olan kullanıcının gizliliğini korumak için tasarlandı. Kullanıcıyla ilgili hiçbir kişisel bilgi varsayılan olarak açığa çıkar. Uygulamanın kullanıcı hakkında sınırlı bilgi gerektirmesi gereken bazı durumlar vardır.
Bu gibi durumlarda uygulama, kullanıcının bu bilgileri ifşası için istekte olabilir. Kullanıcıya hesap bilgilerini açığa çıkarmayı kabul etmek isteyen bir iletişim kutusu görüntülenir.
Bulma
Kullanıcının uygulamaya kullanıcı hesabı bilgilerine sınırlı erişim iznini kabul etti olarak kabul ettiysak, uygulamanın diğer kullanıcıları tarafından keşfedilebilir:
İstemci uygulaması bir Kapsayıcı ile, Kapsayıcı ise kullanıcı bilgilerine erişmek için iCloud'dan söz ediliyor. Kullanıcı bir e-posta adresi sağlar ve Bulma, kullanıcı hakkında bilgi almak için kullanılabilir. İsteğe bağlı olarak, kullanıcıyla ilgili bilgileri bulmak için Kullanıcı Kimliği de kullanılabilir.
CloudKit ayrıca Adres Defteri'nin tamamını sorgular ve şu anda oturum açmış olan iCloud kullanıcılarının arkadaşı olan tüm kullanıcılar hakkında bilgi bulmanın bir yolunu sağlar. CloudKit Süreci kullanıcının Kişi Defteri'ne çeker ve e-posta adreslerini kullanarak uygulamanın bu adreslerle aynı olan diğer kullanıcılarını bulup bulamayacaklarını kontrol edin.
Bu, uygulamanın erişim sağlamadan veya kullanıcıdan kişi erişimi onaylaması istemeden kullanıcının Kişi Kitabından faydalanmalarına olanak sağlar. Hiçbir zaman, uygulamanın erişimine açık olan iletişim bilgileri yalnızca CloudKit süreci tarafından kullanılabilir.
Özetle, Kullanıcı Bulma için kullanılabilen üç farklı giriş türü vardır:
- Kullanıcı Kaydı Kimliği – Bulma, o anda CloudKit kullanıcıda 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ğlar ve bulma için kullanılabilir.
- Kişi Kitabı – Kullanıcının adres defteri, kişilerinde listelenen e-posta adresiyle aynı e-posta adresine sahip uygulama kullanıcılarını bulmak için kullanılabilir.
Kullanıcı Bulma aşağıdaki bilgileri dönecektir:
- 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 olan kullanıcılar için döndürülür.
Aşağıdaki kod, cihazda iCloud'da oturum açmış olan kullanıcıyla ilgili bilgileri keşfeder:
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 kitabındaki 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ğlanmış olduğu kullanıcı hesabına dört ana erişim alanı ele almaktadır. Kullanıcının Kimliğini ve Meta Verilerini almaktan, CloudKit'te yerleşik gizlilik ilkelerine ve son olarak uygulamanın diğer kullanıcılarını keşfetme ö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. Uygulama bir kayda yeni bir alan ekleyen ve bu kaydı Geliştirme Ortamına kaydeden sunucu şema bilgilerini otomatik olarak ler.
Geliştirici, geliştirme sırasında şemada değişiklik yapmak için bu özelliği kullanabilir ve bu da zamandan tasarruf sağlar. Bir uyarı, bir kayda bir alan eklendikten sonra bu alanla ilişkili veri türünün program aracılığıyla değiştirilenemay olmasıdır. Bir alanın türünü değiştirmek için geliştiricinin CloudKit Panosu'nda alanı silebilir ve yeni türle yeniden eklemesi gerekir.
Geliştirici, uygulamayı dağıtmadan önce CloudKit Panosu'nda şemasını ve verilerini üretim ortamına geçirebilir. Üretim Ortamı'nın üzerinde çalışan sunucu, bir uygulamanın şemayı program aracılığıyla değiştirmesini önler. Geliştirici CloudKit Panosu ile değişiklik yapmaya devam eder ancak Üretim Ortamı'nda bir kayda alan ekleme girişiminde bulunarak hatalarla sonuçlanabilirsiniz.
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ı gereklidir.
CloudKit özellikli bir uygulamayı gönderme
CloudKit kullanan bir uygulamayı göndermeden önce, Üretim CloudKit Ortamını hedeflemek üzere yapılandırılması gerekir, yoksa uygulama Apple tarafından reddedilir.
Şunları yapın:
Ma Visual Studio için yayın iOS cihazı içinuygulamayı derle:
Derleme menüsünde Arşiv'iseçin:
Arşiv oluşturulur ve şu Mac için Visual Studio:
Xcode'ı başlatma.
Pencere menüsünde Düzenleyici'yiseçin:
Uygulamanın arşivini seçin ve dışarı aktar... düğmesine tıklayın:
Dışarı aktarma için bir yöntem seçin ve İleri düğmesine tıklayın:
Açılan listeden geliştirme ekibini seçin ve Seç düğmesine tıklayın:
Açılan listeden Üretim ' ı seçin ve İleri düğmesine tıklayın:
Ayarı gözden geçirin ve dışarı aktar düğmesine tıklayın:
Elde edilen uygulama dosyasını oluşturmak için bir konum seçin
.ipa.
işlem, uygulamayı doğrudan iTunes Bağlan göndermeye benzer, dışa aktarma yerine gönder. .. düğmesine tıklamanız yeterlidir. Düzenleyici penceresinde bir arşiv seçildikten sonra.
CloudKit ne zaman kullanılır?
Bu makalede gördüğünüz gibi CloudKit, bir uygulamanın iCloud sunucularından bilgi depolaması ve alması için kolay bir yol sağlar. Bu şekilde, CloudKit yok veya var olan araçların veya çerçevelerin hiçbirini kullanımdan kaldıramıyordu.
Uygulama alanları
Aşağıdaki kullanım örnekleri, geliştiricinin belirli bir iCloud çerçevesini veya teknolojisini ne zaman kullanacağınızı karar vermesine yardımcı olmalıdır:
- iCloud Key-Value Store – zaman uyumsuz veri miktarını güncel tutar ve uygulama tercihleriyle çalışmaya yönelik harika bir yoldur. Ancak, çok az miktarda bilgi için kısıtlanmıştır.
- ICloud Drive – mevcut ICloud belgeleri API 'lerinin üzerine kurulmuştur ve yapılandırılmamış verileri dosya sisteminden eşitlemek için basıt bir API sağlar. Mac OS X üzerinde tam çevrimdışı önbellek sağlar ve belge merkezli uygulamalar için harika olur.
- ICloud çekirdek verileri : kullanıcının tüm cihazları arasında verilerin çoğaltılmasını sağlar. Veriler, tek kullanıcılı ve özel, yapılandırılmış verilerin eşitlenmiş şekilde tutulması için harika.
- CloudKit : hem yapı hem de toplu olarak ortak veri sağlar ve hem büyük veri kümesini hem de büyük yapılandırılmamış dosyaları işleyebilir. Kullanıcının iCloud hesabına bağlı ve istemciye yönlendirilmiş veri aktarımı sağlar.
Bu kullanım örneklerini aklınızda tutarak, geliştirici, hem geçerli gerekli uygulama işlevselliğini hem de gelecekteki büyüme için iyi ölçeklenebilirlik sağlamak üzere doğru iCloud teknolojisini seçer.
Özet
Bu makale, CloudKit API 'sine hızlı bir giriş kapsamına sahiptir. CloudKit 'i kullanmak için bir Xamarin iOS uygulamasını sağlamayı ve yapılandırmayı göstermiştir. CloudKit kullanışlı API 'sinin özelliklerini kapsamıştır. Sorgular ve abonelikler kullanılarak ölçeklenebilirlik için bir CloudKit etkin uygulamanın nasıl tasarlanacağını göstermektedir. Son olarak, CloudKit tarafından bir uygulamaya sunulan kullanıcı hesabı bilgilerini göstermiştir.





















