Share via


Xamarin.iOS'ta dosya sistemi erişimi

iOS dosya sistemine erişmek için Xamarin.iOS ve System.IO .NET Temel Sınıf Kitaplığı'ndaki (BCL) sınıfları kullanabilirsiniz. File sınıfı, dosyaları oluşturmanıza, silmenize ve okumanıza olanak tanır ve Directory sınıfı dizinlerin içeriğini oluşturmanıza, silmenize veya numaralandırmanıza olanak tanır. Ayrıca, dosya işlemleri (dosya içinde sıkıştırma veya konum araması gibi) üzerinde daha fazla denetim sağlayan alt sınıfları da kullanabilirsiniz Stream .

iOS, bir uygulamanın verilerinin güvenliğini korumak ve kullanıcıları kötü huylu uygulamalardan korumak için bir uygulamanın dosya sistemiyle yapabilecekleri konusunda bazı kısıtlamalar uygular. Bu kısıtlamalar, bir uygulamanın dosyalara , tercihlere, ağ kaynaklarına, donanıma vb. erişimini sınırlayan bir dizi kural olan Uygulama Korumalı Alanı'nın bir parçasıdır. Bir uygulama, giriş dizininde (yüklü konum) dosyaları okumak ve yazmakla sınırlıdır; başka bir uygulamanın dosyalarına erişemiyor.

iOS'un dosya sistemine özgü bazı özellikleri de vardır: bazı dizinler yedeklemeler ve yükseltmelerle ilgili özel işlem gerektirir ve uygulamalar da dosyaları birbirleriyle ve Dosyalar uygulamasıyla (iOS 11'den beri) ve iTunes aracılığıyla paylaşabilir.

Bu makalede, iOS dosya sisteminin özellikleri ve kısıtlamaları ele alınmaktadır ve bazı basit dosya sistemi işlemlerini yürütmek için Xamarin.iOS'un nasıl kullanılacağını gösteren örnek bir uygulama yer almaktadır:

Bazı basit dosya sistemi işlemlerini yürüten iOS örneği

Genel dosya erişimi

Xamarin.iOS, iOS'ta dosya sistemi işlemleri için .NET System.IO sınıflarını kullanmanıza olanak tanır.

Aşağıdaki kod parçacıkları bazı yaygın dosya işlemlerini göstermektedir. Bunların tümünü aşağıdaki SampleCode.cs dosyasında, bu makalenin örnek uygulamasında bulabilirsiniz.

Dizinlerle çalışma

Bu kod, uygulamanızın yürütülebilir dosyasının konumu olan geçerli dizindeki ("./" parametresi tarafından belirtilen) alt dizinleri numaralandırır. Çıkışınız, uygulamanızla birlikte dağıtılan tüm dosya ve klasörlerin listesi olur (hata ayıklarken konsol penceresinde görüntülenir).

var directories = Directory.EnumerateDirectories("./");
foreach (var directory in directories) {
      Console.WriteLine(directory);
}

Dosyaları okuma

Metin dosyasını okumak için yalnızca tek bir kod satırına ihtiyacınız vardır. Bu örnek, Uygulama Çıktısı penceresinde bir metin dosyasının içeriğini görüntüler.

var text = File.ReadAllText("TestData/ReadMe.txt");
Console.WriteLine(text);

XML serileştirme

Ad alanının tamamıyla System.Xml çalışmak bu makalenin kapsamı dışında olsa da, şu kod parçacığı gibi bir StreamReader kullanarak dosya sisteminden xml belgesinin seri durumdan kolayca çıkarabilirsiniz:

using (TextReader reader = new StreamReader("./TestData/test.xml")) {
      XmlSerializer serializer = new XmlSerializer(typeof(MyObject));
      var xml = (MyObject)serializer.Deserialize(reader);
}

Daha fazla bilgi için System.Xml ve serileştirme belgelerine bakın. Bağlayıcıdaki Xamarin.iOS belgelerine bakın; genellikle seri hale getirmek istediğiniz sınıflara özniteliğini eklemeniz [Preserve] gerekir.

Dosya ve dizin oluşturma

Bu örnek, dosyaları ve dizinleri oluşturabildiğimiz Belgeler klasörüne erişmek için sınıfının nasıl kullanılacağını Environment gösterir.

var documents =
 Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
var filename = Path.Combine (documents, "Write.txt");
File.WriteAllText(filename, "Write this text into a file");

Dizin oluşturmak benzer bir işlemdir:

var documents =
 Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
var directoryname = Path.Combine (documents, "NewDirectory");
Directory.CreateDirectory(directoryname);

Daha fazla bilgi için bkz . System.IO API başvurusu.

JSON Seri Hale Getir

Json.NET, Xamarin.iOS ile çalışan ve NuGet üzerinde kullanılabilen yüksek performanslı bir JSON çerçevesidir. Mac için Visual Studio'da NuGet Ekle'yi kullanarak NuGet paketini uygulama projenize ekleyin:

NuGet paketini uygulama projesine ekleme

Ardından serileştirme/seri durumdan çıkarma için veri modeli olarak davranacak bir sınıf ekleyin (bu örnekte Account.cs):

using System;
using System.Collections.Generic;
using Foundation; // for Preserve attribute, which helps serialization with Linking enabled

namespace FileSystem
{
    [Preserve]
    public class Account
    {
        public string Email { get; set; }
        public bool Active { get; set; }
        public DateTime CreatedDate { get; set; }
        public List<string> Roles { get; set; }

        public Account() {
        }
    }
}

Son olarak sınıfının bir örneğini Account oluşturun, json verilerine serileştirin ve bir dosyaya yazın:

// Create a new record
var account = new Account(){
    Email = "monkey@xamarin.com",
    Active = true,
    CreatedDate = new DateTime(2015, 5, 27, 0, 0, 0, DateTimeKind.Utc),
    Roles = new List<string> {"User", "Admin"}
};

// Serialize object
var json = JsonConvert.SerializeObject(account, Newtonsoft.Json.Formatting.Indented);

// Save to file
var documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
var filename = Path.Combine (documents, "account.json");
File.WriteAllText(filename, json);

.NET uygulamasında json verileriyle çalışma hakkında daha fazla bilgi için Json.NET'in belgelerine bakın.

Özel hususlar

Xamarin.iOS ile .NET dosya işlemleri arasındaki benzerliklere rağmen, iOS ve Xamarin.iOS bazı önemli yollarla .NET'ten farklıdır.

Proje dosyalarını çalışma zamanında erişilebilir hale getirme

Varsayılan olarak, projenize bir dosya eklerseniz dosya son derlemeye eklenmez ve bu nedenle uygulamanız tarafından kullanılamaz. Derlemeye bir dosya eklemek için, dosyayı İçerik adlı özel bir derleme eylemiyle işaretlemeniz gerekir.

Bir dosyayı eklemek üzere işaretlemek için, dosyalara sağ tıklayın ve Mac için Visual Studio Eylem > İçeriği Oluştur'u seçin. Ayrıca, dosyanın Özellikler sayfasında Derleme Eylemi'ni de değiştirebilirsiniz.

Büyük/küçük harfe duyarlı

iOS dosya sisteminin büyük/küçük harfe duyarlı olduğunu anlamak önemlidir. Büyük/küçük harf duyarlılığı, dosya ve dizin adlarınızın tam olarak eşleşmesi gerektiği anlamına gelir; README.txt ve readme.txt farklı dosya adları olarak kabul edilir.

Bu durum, Windows dosya sistemi hakkında daha fazla bilgi sahibi olan ve büyük/küçük harfe duyarlı olmayan .NET geliştiricileri için kafa karıştırıcı olabilir. Dosyalar, DOSYALAR ve dosyalar aynı dizine başvurur.

Uyarı

iOS Simülatörü büyük/küçük harfe duyarlı DEĞİlDİ. Dosya adı kasanız dosyanın kendisi ile koddaki başvurular arasında farklılık gösteriyorsa kodunuz simülatörde çalışmaya devam edebilir ancak gerçek bir cihazda başarısız olur. Bu, iOS geliştirmesi sırasında gerçek bir cihazı erken ve sık sık dağıtmanın ve test etmenin önemli nedenlerinden biridir.

Yol ayırıcısı

iOS, yol ayırıcısı olarak eğik çizgi '/' kullanır (windows'tan farklıdır ve ters eğik çizgi '\' kullanılır).

Bu kafa karıştırıcı fark nedeniyle, belirli bir yol ayırıcısını System.IO.Path.Combine sabit kodlamak yerine geçerli platforma göre ayarlanan yöntemini kullanmak iyi bir uygulamadır. Bu, kodunuzu diğer platformlara daha taşınabilir hale getiren basit bir adımdır.

Uygulama korumalı alanı

Uygulamanızın dosya sistemine (ve ağ ve donanım özellikleri gibi diğer kaynaklara) erişimi güvenlik nedeniyle sınırlıdır. Bu kısıtlama, Uygulama Korumalı Alanı olarak bilinir. Dosya sistemi açısından, uygulamanız kendi giriş dizininde dosya ve dizin oluşturma ve silme ile sınırlıdır.

Giriş dizini, dosya sisteminde uygulamanızın ve tüm verilerinin depolandığı benzersiz bir konumdur. Uygulamanız için giriş dizininin konumunu seçemez (veya değiştiremezsiniz); ancak iOS ve Xamarin.iOS, içindeki dosyaları ve dizinleri yönetmek için özellikler ve yöntemler sağlar.

Uygulama paketi

Uygulama Paketi, uygulamanızı içeren klasördür. Dizin adına .app soneki eklenerek diğer klasörlerden ayırt edilir. Uygulama paketiniz yürütülebilir dosyanızı ve projeniz için gerekli tüm içeriği (dosyalar, görüntüler vb.) içerir.

Mac OS'ta uygulama paketinize göz attığınızda, diğer dizinlerde gördüğünüzden farklı bir simgeyle görünür (ve .app soneki gizlenir); ancak bu yalnızca işletim sisteminin farklı görüntülendiği normal bir dizindir.

Örnek kodun uygulama paketini görüntülemek için Mac için Visual Studio'da projeye sağ tıklayın ve Bulucu'da Göster'i seçin. Ardından bir uygulama simgesi bulmanız gereken bölme/ dizine gidin (aşağıdaki ekran görüntüsüne benzer).

Bu ekran görüntüsüne benzer bir uygulama simgesi bulmak için bin dizininde gezinin

Bu simgeye sağ tıklayın ve Uygulama Paketi dizininin içeriğine göz atmak için Paket İçeriğini Göster'i seçin. İçerikler, burada gösterildiği gibi normal bir dizinin içeriği gibi görünür:

Uygulama paketinin içeriği

Uygulama paketi, test sırasında simülatöre veya cihazınıza yüklenen pakettir ve sonuç olarak App Store'a dahil edilmesi için Apple'a gönderilen pakettir.

Uygulama dizinleri

Uygulamanız bir cihaza yüklendiğinde, işletim sistemi uygulamanız için bir giriş dizini oluşturur ve uygulama kök dizininde kullanılabilecek bir dizi dizin oluşturur. iOS 8'den bu yana, kullanıcı tarafından erişilebilen dizinler uygulama kökünde DEĞİlDİr , bu nedenle uygulama paketinin yollarını kullanıcı dizinlerinden türetemezsiniz (veya tam tersi).

Bu dizinler, yollarını belirleme ve amaçları aşağıda listelenmiştir:

 

Dizin Açıklama
[ApplicationName].app/ iOS 7 ve önceki sürümlerde bu, uygulamanızın yürütülebilir dosyasının ApplicationBundle depolandığı dizindir. Uygulamanızda oluşturduğunuz dizin yapısı bu dizinde bulunur (örneğin, Mac için Visual Studio projenizde Kaynaklar olarak işaretlediğiniz resimler ve diğer dosya türleri).

Uygulama Paketinizin içindeki içerik dosyalarına erişmeniz gerekiyorsa, bu dizinin yolu özelliği aracılığıyla NSBundle.MainBundle.BundlePath kullanılabilir.
Belge/ Kullanıcı belgelerini ve uygulama veri dosyalarını depolamak için bu dizini kullanın.

Bu dizinin içeriği iTunes dosya paylaşımı aracılığıyla kullanıcının kullanımına sunulabiliyor (varsayılan olarak devre dışı bırakılıyor olsa da). Kullanıcıların bu dosyalara erişmesine izin vermek için Info.plist dosyasına bir UIFileSharingEnabled Boole anahtarı ekleyin.

Bir uygulama dosya paylaşımını hemen etkinleştirmese bile, kullanıcılarınızdan gizlenmesi gereken dosyaları bu dizine yerleştirmekten kaçınmanız gerekir (paylaşmak istemediğiniz sürece veritabanı dosyaları gibi). Hassas dosyalar gizli kaldığı sürece, dosya paylaşımı gelecekteki bir sürümde etkinleştirildiyse bu dosyalar kullanıma sunulmaz (ve iTunes tarafından taşınmaz, değiştirilmez veya silinmez).

Uygulamanızın Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments) Belgeler dizinine giden yolu almak için yöntemini kullanabilirsiniz.

Bu dizinin içeriği iTunes tarafından yedeklenir.
Kitaplığı/ Kitaplık dizini, veritabanı veya uygulama tarafından oluşturulan diğer dosyalar gibi doğrudan kullanıcı tarafından oluşturulmayan dosyaları depolamak için iyi bir yerdir. Bu dizinin içeriği hiçbir zaman iTunes aracılığıyla kullanıcıya gösterilmez.

Kitaplık'ta kendi alt dizinlerinizi oluşturabilirsiniz; ancak, burada Tercihler ve Önbellekler de dahil olmak üzere bilmeniz gereken sistem tarafından oluşturulmuş bazı dizinler zaten vardır.

Bu dizinin içeriği (Caches alt dizini hariç) iTunes tarafından yedeklenir. Kitaplıkta oluşturduğunuz özel dizinler yedeklenir.
Kitaplık/Tercihler/ Uygulamaya özgü tercih dosyaları bu dizinde depolanır. Bu dosyaları doğrudan oluşturmayın. Bunun yerine sınıfını NSUserDefaults kullanın.

Bu dizinin içeriği iTunes tarafından yedeklenir.
Kitaplık/Önbellekler/ Caches dizini, uygulamanızın çalışmasına yardımcı olabilecek ancak kolayca yeniden oluşturulabilen veri dosyalarını depolamak için iyi bir yerdir. Uygulamanın gerektiğinde bu dosyaları oluşturup silmesi ve gerekirse bu dosyaları yeniden oluşturabilmesi gerekir. iOS 5 bu dosyaları da silebilir (düşük depolama koşullarında), ancak uygulama çalışırken bunu yapmaz.

Bu dizinin içeriği iTunes tarafından YEDEKLENMİYOR, bu da kullanıcı bir cihazı geri yüklerse mevcut olmayacakları ve uygulamanızın güncelleştirilmiş bir sürümü yüklendikten sonra mevcut olmayacakları anlamına gelir.

Örneğin, uygulamanızın ağa bağlanamama olasılığına karşı, iyi bir çevrimdışı deneyim sağlamak üzere verileri veya dosyaları depolamak için Önbellekler dizinini kullanabilirsiniz. Uygulama, ağ yanıtlarını beklerken bu verileri hızla kaydedip alabilir, ancak yedeklenmesi gerekmez ve geri yükleme veya sürüm güncelleştirmesinin ardından kolayca kurtarılabilir veya yeniden oluşturulabilir.
Tmp/ Uygulamalar, yalnızca kısa bir süre için gereken geçici dosyaları bu dizinde depolayabilir. Alandan tasarruf etmek için dosyalar artık gerekli olmadığında silinmelidir. Bir uygulama çalışmadığında işletim sistemi de bu dizinden dosyaları silebilir.

Bu dizinin içeriği iTunes tarafından yedekLENMEDİ.

Örneğin, tmp dizini kullanıcıya görüntülenmek üzere indirilen geçici dosyaları (Twitter avatarları veya e-posta ekleri gibi) depolamak için kullanılabilir, ancak bunlar görüntülendikten sonra silinebilir (ve gelecekte gerekirse yeniden indirilebilir).

Bu ekran görüntüsü, Bulucu penceresinde dizin yapısını gösterir:

Bu ekran görüntüsü, Bulucu penceresinde dizin yapısını gösterir

Diğer dizinlere program aracılığıyla erişme

Önceki dizin ve dosya örnekleri dizine Documents erişildi. Başka bir dizine yazmak için, burada gösterildiği gibi ".." söz dizimini kullanarak bir yol oluşturmanız gerekir:

var documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
var library = Path.Combine (documents, "..", "Library");
var filename = Path.Combine (library, "WriteToLibrary.txt");
File.WriteAllText(filename, "Write this text into a file in Library");

Dizin oluşturmak benzerdir:

var documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
var library = Path.Combine (documents, "..", "Library");
var directoryname = Path.Combine (library, "NewLibraryDirectory");
Directory.CreateDirectory(directoryname);

ve tmp dizinlerinin Caches yolları şu şekilde oluşturulabilir:

var documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
var cache = Path.Combine (documents, "..", "Library", "Caches");
var tmp = Path.Combine (documents, "..", "tmp");

Dosyalar uygulamasıyla paylaşma

iOS 11, kullanıcının dosyalarını iCloud'da görmesine ve bunlarla etkileşim kurmasına ve onu destekleyen herhangi bir uygulama tarafından depolanmasına olanak tanıyan iOS için bir dosya tarayıcısı olan Dosyalar uygulamasını kullanıma sunar. Kullanıcının uygulamanızdaki dosyalara doğrudan erişmesine izin vermek için Info.plist dosyasında LSSupportsOpeningDocumentsInPlace yeni bir boole anahtarı oluşturun ve burada trueolduğu gibi olarak ayarlayın:

Info.plist'te LSSupportsOpeningDocumentsInPlace'i ayarlama

Uygulamanın Belgeler dizini artık Dosyalar uygulamasında göz atılabilir. Dosyalar uygulamasında i Telefon m'de öğesine gidin ve paylaşılan dosyaları olan her uygulama görünür. Aşağıdaki ekran görüntüleri örnek uygulamanın nasıl göründüğünü gösterir:

iOS 11 Dosyalar uygulamasıi Telefon dosyalarıma göz atınÖrnek uygulama dosyaları

iTunes aracılığıyla kullanıcıyla dosya paylaşma

Kullanıcılar, burada gösterildiği gibi Kaynak görünümünde iTunes paylaşımını (UIFileSharingEnabled) destekleyen bir Uygulamayı düzenleyip Info.plist oluşturarak uygulamanızın Belgeler dizinindeki dosyalara erişebilir:

Uygulamanın eklenmesi iTunes sharing özelliğini destekler

Cihaz bağlandığında ve kullanıcı sekmeyi seçtiğinde bu dosyalara iTunes'da Apps erişilebilir. Örneğin, aşağıdaki ekran görüntüsünde iTunes aracılığıyla paylaşılan seçili uygulamadaki dosyalar gösterilmektedir:

Bu ekran görüntüsü, iTunes aracılığıyla paylaşılan seçili uygulamadaki dosyaları gösterir

Kullanıcılar bu dizindeki en üst düzey öğelere yalnızca iTunes aracılığıyla erişebilir. Herhangi bir alt dizinin içeriğini göremezler (ancak bunları bilgisayarlarına kopyalayabilir veya silebilirler). Örneğin GoodReader ile PDF ve EPUB dosyaları, kullanıcıların iOS cihazlarında okuyabilmesi için uygulamayla paylaşılabilir.

Belgeler klasörünün içeriğini değiştiren kullanıcılar dikkatli olmazlarsa sorunlara neden olabilir. Uygulamanız bunu dikkate almalı ve Belgeler klasörünün yıkıcı güncelleştirmelerine dayanıklı olmalıdır.

Bu makalenin örnek kodu Belgeler klasöründe (SampleCode.cs) hem dosya hem de klasör oluşturur ve Info.plist dosyasında dosya paylaşımını etkinleştirir. Bu ekran görüntüsü, bunların iTunes'da nasıl göründüğünü gösterir:

Bu ekran görüntüsü, dosyaların iTunes'da nasıl göründüğünü gösterir

Uygulama ve oluşturduğunuz özel belge türleri için simgeleri ayarlama hakkında bilgi için Görüntülerle Çalışma makalesine bakın.

UIFileSharingEnabled Anahtar yanlışsa veya yoksa, dosya paylaşımı varsayılan olarak devre dışıdır ve kullanıcılar Belgeler dizininizle etkileşim kuramaz.

Yedekleme ve geri yükleme

Bir cihaz iTunes tarafından yedeklendiğinde, aşağıdaki dizinler dışında uygulamanızın giriş dizininde oluşturulan tüm dizinler kaydedilir:

  • [ApplicationName].app – İmzalı olduğundan ve yüklemeden sonra değişmeden kalması gerektiğinden bu dizine yazmayın. Kodunuzdan erişebileceğiniz kaynaklar içerebilir, ancak uygulamayı yeniden indirerek geri yüklenecekleri için yedekleme gerektirmezler.
  • Kitaplık/Önbellekler – Önbellek dizini, yedeklenmeleri gerekmeyen çalışma dosyalarına yöneliktir.
  • tmp – Bu dizin, artık gerekmediğinde oluşturulan ve silinen geçici dosyalar veya alan gerektiğinde iOS'un sildiği dosyalar için kullanılır.

Büyük miktarda veriyi yedeklemek uzun sürebilir. Belirli bir belgeyi veya veriyi yedeklemeniz gerektiğine karar verirseniz, uygulamanız Belgeler ve Kitaplık klasörlerini kullanmalıdır. Ağdan kolayca alınabilen geçici veriler veya dosyalar için Önbellekler'i veya tmp dizinini kullanın.

Not

Bir cihaz disk alanı kritik ölçüde az olduğunda iOS dosya sistemini 'temizler'. Bu işlem, şu anda çalışmayan uygulamaların Kitaplık/Önbellekler ve tmp klasöründeki tüm dosyaları kaldırır.

iOS 5 iCloud yedekleme kısıtlamalarına uyma

Not

Bu ilke ilk olarak iOS 5 (uzun zaman önce gibi görünüyor) ile tanıtılsa da, rehberlik bugün uygulamalarla hala ilgilidir.

Apple, iOS 5 ile iCloud Backup işlevselliğini tanıttı. iCloud Backup etkinleştirildiğinde, uygulamanızın giriş dizinindeki tüm dosyalar (normalde yedeklenmemiş dizinler hariç, örneğin uygulama paketi Caches, ve tmp) iCloud sunucularına yedeklenir. Bu özellik, cihazının kaybolması, çalınmış olması veya zarar görmesi durumunda kullanıcıya eksiksiz bir yedekleme sağlar.

iCloud her kullanıcıya yalnızca 5 Gb boş alan sağladığından ve gereksiz yere bant genişliği kullanmaktan kaçınmak için Apple, uygulamaların yalnızca kullanıcı tarafından oluşturulan temel verileri yedeklemesini bekler. iOS Veri Depolama Yönergelerine uymak için aşağıdaki öğelere uyarak yedeklenen veri miktarını sınırlamanız gerekir:

  • Belgeler dizininde (yedeklenen) yalnızca kullanıcı tarafından oluşturulan verileri veya başka bir şekilde yeniden oluşturulamayan verileri depolayın.
  • veya içinde Library/Cachestmp kolayca yeniden oluşturulabilen veya yeniden indirilebilen (yedeklenmemiş ve 'temizlenebilir' diğer tüm verileri depolayın.
  • veya tmp klasörüne uygun Library/Caches olabilecek dosyalarınız varsa ancak 'temizlenmek' istemiyorsanız, dosyaları başka bir yerde (örneğinLibrary/YourData) depolayın ve dosyaların iCloud Backup bant genişliğini ve depolama alanını kullanmasını önlemek için 'yedekleme' özniteliğini uygulayın. Bu veriler cihazda yer kaplamaya devam ettiğinden, bunları dikkatli bir şekilde yönetmeniz ve mümkün olduğunda silmeniz gerekir.

'yedekleme' özniteliği sınıfı kullanılarak NSFileManager ayarlanır. Sınıfınızın olduğundan using Foundation emin olun ve şu şekilde arayın SetSkipBackupAttribute :

var documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
var filename = Path.Combine (documents, "LocalOnly.txt");
File.WriteAllText(filename, "This file will never get backed-up. It would need to be re-created after a restore or re-install");
NSFileManager.SetSkipBackupAttribute (filename, true); // backup will be skipped for this file

true Dosyanın depolandığı dizinden (hatta Documents dizinden) bağımsız olarak ne zaman SetSkipBackupAttribute yedeklenmez? yöntemini kullanarak GetSkipBackupAttribute özniteliği sorgulayabilir ve yöntemini ile falseçağırarak SetSkipBackupAttribute şu şekilde sıfırlayabilirsiniz:

NSFileManager.SetSkipBackupAttribute (filename, false); // file will be backed-up

iOS uygulamaları ve uygulama uzantıları arasında veri paylaşma

Uygulama Uzantıları bir konak uygulamasının parçası olarak çalıştığından (bunların içerdiği uygulamadan farklı olarak), verilerin paylaşımı otomatik olarak dahil değildir, bu nedenle ek çalışma gerekir. Uygulama Grupları, iOS'un farklı uygulamaların veri paylaşmasına izin vermek için kullandığı mekanizmadır. Uygulamalar doğru yetkilendirmeler ve sağlama ile düzgün şekilde yapılandırıldıysa, normal iOS korumalı alanının dışında paylaşılan bir dizine erişebilirler.

Uygulama Grubu Yapılandırma

Paylaşılan konum, iOS Geliştirme Merkezi'daki Sertifikalar, Tanımlayıcılar ve Profiller bölümünde yapılandırılan bir Uygulama Grubu kullanılarak yapılandırılır. Bu değere her projenin Entitlements.plist dosyasında da başvurulmalıdır.

Uygulama Grubu oluşturma ve yapılandırma hakkında bilgi için Uygulama Grubu Özellikleri kılavuzuna bakın.

Dosyalar

iOS uygulaması ve uzantı, ortak bir dosya yolu kullanarak da dosya paylaşabilir (doğru yetkilendirmeler ve sağlama ile düzgün yapılandırıldıkları göz önünde bulundurulduğunda):

var FileManager = new NSFileManager ();
var appGroupContainer =FileManager.GetContainerUrl ("group.com.xamarin.WatchSettings");
var appGroupContainerPath = appGroupContainer.Path

Console.WriteLine ("Group Path: " + appGroupContainerPath);

// use the path to create and update files
...

Önemli

Döndürülen Grup Yolu ise null, yetkilendirmelerin ve sağlama profilinin yapılandırmasını denetleyin ve doğru olduklarından emin olun.

Uygulama sürümü güncelleştirmeleri

Uygulamanızın yeni bir sürümü indirildiğinde, iOS yeni bir giriş dizini oluşturur ve yeni Uygulama Paketini içinde depolar. Ardından iOS aşağıdaki klasörleri Uygulama Paketinizin önceki sürümünden yeni giriş dizininize taşır:

  • Belgeler
  • Kitaplığı

Diğer dizinler de kopyalanıp yeni giriş dizininizin altına yerleştirilebilir, ancak kopyalanmaları garanti edilmediğinden uygulamanızın bu sistem davranışına güvenmemesi gerekir.

Özet

Bu makalede, Xamarin.iOS ile dosya sistemi işlemlerinin diğer tüm .NET uygulamalarına benzer olduğu gösterildi. Uygulama Korumalı Alanı'nı da kullanıma sunar ve neden olduğu güvenlik etkilerini inceler. Ardından Uygulama Paketi kavramını inceledi. Son olarak, uygulamanızın kullanabileceği özel dizinleri numaralandırarak uygulama yükseltmeleri ve yedeklemeleri sırasında rollerini açıkladı.