Xamarin. iOS 'da dosya sistemi erişimi

Örnek indir Örneği indirin

System.IOİOS dosya sistemine erişmek Için Xamarin. iOS ve sınıfları System.IO kullanabilirsiniz. FileSınıfı, dosyaları oluşturmanızı, silmenizi ve okumanızı sağlar ve Directory sınıfı, dizinlerin içeriğini oluşturmanıza, silmenize veya listelemenizi sağlar. StreamDosya işlemleri üzerinde daha fazla denetim (örneğin, bir dosya içinde sıkıştırma veya konum arama) sağlayabilen alt sınıfları da kullanabilirsiniz.

iOS, bir uygulamanın, uygulamanın verilerinin güvenliğini korumak ve kullanıcıları malant uygulamalardan korumak için dosya sistemiyle neler yapabileceğini belirlemek için bazı kısıtlamalar getirir. Bu kısıtlamalar, uygulamanın dosya, Tercihler, ağ kaynakları, donanım vb. erişimini sınırlayan bir kural kümesi olan uygulama korumalı alanının bir parçasıdır. Bir uygulama, ana dizini (yüklü konum) içinde dosyaları okumak ve yazmak için sınırlıdır; başka bir uygulamanın dosyalarına erişemez.

iOS Ayrıca bazı dosya sistemine özgü özelliklere sahiptir: bazı dizinler, yedeklemelere ve yükseltmelere göre özel bir işleme gerektirir ve uygulamalar da dosyaları birbirleriyle ve dosyalar uygulamasıyla (iOS 11 ' den itibaren) ve iTunes aracılığıyla paylaşabilir.

Bu makalede iOS dosya sisteminin özellikleri ve kısıtlamaları anlatılmakta ve bazı basit dosya sistemi işlemlerini yürütmek için Xamarin. iOS kullanmayı gösteren örnek bir uygulama yer almaktadır:

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

Genel dosya erişimi

Xamarin. iOS, System.IO iOS üzerinde dosya sistemi işlemleri için .NET sınıflarını kullanmanıza olanak sağlar.

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

Dizinler ile çalışma

Bu kod, geçerli dizindeki ("./" parametresi ile belirtilen) alt dizinleri sıralar ve bu, uygulamanızın yürütülebilir dosyasının konumudur. Çıktınız, uygulamanızla birlikte dağıtılan tüm dosya ve klasörlerin bir listesi olacaktır (hata ayıklarken konsol penceresinde görüntülenir).

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

Dosyaları okuma

Bir metin dosyasını okumak için yalnızca tek bir kod satırına ihtiyacınız vardır. Bu örnek, uygulama çıkışı 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

Tüm ad alanı ile çalışmak System.Xml Bu makalenin kapsamının ötesinde, bu kod parçacığı gibi bir StreamReader kullanarak BIR XML belgesinin dosya sisteminden kolayca serisini kaldırabilirsiniz:

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ştirmebelgelerine bakın. Bağlayıcı üzerindeki Xamarin. iOS belgelerine bakın; genellikle, seri hale getirmek istediğiniz sınıflara özniteliği eklemeniz gerekir.

Dosyalar ve dizinler oluşturma

Bu örnek, Environment dosya ve Dizin oluşturduğumuz Belgeler klasörüne erişmek için sınıfının nasıl kullanılacağını 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 getiriliyor

JSON.net , Xamarin. iOS ile birlikte çalışarak ve NuGet kullanılabilir olan yüksek PERFORMANSLı bir JSON çerçevesidir. Mac için Visual Studio ekleme NuGet kullanarak uygulama projenize NuGet paketini ekleyin:

NuGet paketini uygulamalar projesine ekleme

Ardından, serileştirme/seri durumdan çıkarma için veri modeli olarak davranacak bir sınıf ekleyin (Bu durumda 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 oluşturun Account , bunu 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);

Bir .NET uygulamasında JSON verileriyle çalışma hakkında daha fazla bilgi için bkz. JSON. NET ' in belgeleri.

Özel Konular

Xamarin. iOS ve .NET dosya işlemleri arasındaki benzerlikler, iOS ve Xamarin. iOS, bazı önemli yollarla .NET 'ten farklıdır.

Çalışma zamanında proje dosyalarını erişilebilir hale getirme

Varsayılan olarak, projenize bir dosya eklerseniz, bu, son derlemeye eklenmez ve bu nedenle uygulamanız için kullanılamaz. Derlemeye bir dosya eklemek için, onu Içerik olarak adlandırılan özel bir yapı eylemiyle işaretlemeniz gerekir.

bir dosyayı eklemek üzere işaretlemek için, dosya (lar) a sağ tıklayın ve Mac için Visual Studio derleme eylemi içeriği ' ni seçin. Ayrıca, dosyanın Özellikler sayfasındaki derleme eylemini de değiştirebilirsiniz.

Büyük/küçük harf duyarlılığı

İOS dosya sistemi 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 ( README.txt eşleşmelidir ve readme.txt farklı dosya adları olarak kabul edileceği anlamına gelir.

bu, büyük/küçük harfe duyarsızdosyalar, dosyalarve dosyalar aynı dizine başvurabileceği Windows dosya sistemine daha tanıdık olan .net geliştiricileri için kafa karıştırıcı olabilir.

Uyarı

İOS simülatörü, büyük/küçük harfe duyarlı DEĞILDIR. Dosya adının büyük/küçük harf büyüklüğü, dosyanın kendisi arasında ve kodda buna yapılan başvurular arasında farklılık gösterdiğinde, kodunuz simülatör 'de hala çalışabilir, ancak gerçek bir cihazda başarısız olur. Bu, gerçek bir cihazı daha erken ve genellikle iOS geliştirme sırasında dağıtma ve test etme açısından önemli olan nedenlerinden biridir.

Yol ayırıcısı

iOS, yol ayırıcı olarak eğik çizgi '/' kullanır (' \ ' ters eğik çizgiyi kullanan Windows farklıdır).

Bu kafa farklılığı nedeniyle, System.IO.Path.Combine belirli bir yol ayırıcısını sabit bir şekilde yazmak yerine geçerli platform için ayarlayan 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 erişimi (ve ağ ve donanım özellikleri gibi diğer kaynaklar) güvenlik nedenleriyle 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.

Ana Dizin, uygulamanızın ve tüm verilerinin depolandığı dosya sisteminde benzersiz bir konumdur. Uygulamanızın giriş dizininin konumunu seçemezsiniz (veya değiştiremezsiniz). Ancak iOS ve Xamarin. iOS, içindeki dosya ve dizinleri yönetmeye yönelik özellikler ve yöntemler sağlar.

Uygulama paketi

Uygulama paketi , uygulamanızı içeren klasördür. . App son ekinin dizin adına eklendiğinden, diğer klasörlerden ayırt edilir. Uygulama paketleriniz, çalıştırılabilir dosyanızı ve tüm içeriği (dosyalar, görüntüler, vb.) içerir projeniz için gereklidir.

Mac OS ' de uygulama paketlerinize gözattığınızda, diğer dizinlerde görenden farklı bir simgeyle görüntülenir (ve . app suffix gizlenir); Ancak, yalnızca işletim sisteminin farklı şekilde görüntülendiği normal bir dizindir.

örnek koda ait uygulama paketini görüntülemek için Mac için Visual Studio ' de projeye sağ tıklayın ve Finder 'da açığa çıkar' ı seçin. Ardından bir uygulama simgesi (aşağıdaki ekran görüntüsüne benzer şekilde) bulacağınız bin/ dizine gidin.

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 gitmek için paket Içeriğini göster ' i seçin. İçerik, burada gösterildiği gibi normal bir dizinin içeriği gibi görünür:

Uygulama paketi içeriği

Uygulama paketi, test sırasında simülatörde veya cihazınızda yüklü değildir ve sonuçta App Store 'a eklenmek üzere Apple 'a gönderilir.

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 dizini içinde kullanılabilecek bir dizi dizin oluşturur. İOS 8 ' den itibaren, Kullanıcı tarafından erişilebilen dizinler uygulama kökünde olmadığından , uygulama paketi için yolları Kullanıcı dizinlerinden türetemez veya tersi de geçerlidir.

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

 

Dizin Description
[ApplicationName]. app/ İOS 7 ve önceki sürümlerdebu, uygulamanızın yürütülebilir dosyasının depolandığı dizindir. uygulamanızda oluşturduğunuz dizin yapısı bu dizinde (örneğin, Mac için Visual Studio projenizde kaynak olarak işaretlediğiniz görüntüler ve diğer dosya türleri) bulunur.

Uygulama paketinizdeki içerik dosyalarına erişmeniz gerekiyorsa, bu dizinin yolu özelliği aracılığıyla kullanılabilir NSBundle.MainBundle.BundlePath .
Belgelerini 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ı tarafından kullanılabilir hale getirilebilir (varsayılan olarak devre dışı bırakılmış olsa da). UIFileSharingEnabledKullanıcıların bu dosyalara erişmesine izin vermek Için Info. plist dosyasına bir Boole anahtarı ekleyin.

Bir uygulama dosya paylaşımını hemen etkinleştirmese de, bu dizindeki kullanıcılarınızın gizlenmesi gereken (veritabanı dosyaları gibi) dosyaları yerleştirmekten kaçınmalısınız. Gizli dosyalar gizli kaldığı sürece bu dosyalar, sonraki sürümlerde dosya paylaşımı etkinleştirilmişse, bu dosyalar gösterilmez (ve muhtemelen büyük olasılıkla taşınır, değiştirilebilir veya silinir).

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

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

Kitaplığı 'nda kendi alt dizinlerinizi oluşturabilirsiniz; Ancak, burada, Tercihler ve önbellekler dahil olmak üzere dikkat etmeniz gereken sistem tarafından oluşturulmuş bazı dizinler vardır.

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

Bu dizinin içeriği iTunes tarafından yedeklenir.
Kitaplık/önbellekler/ Önbellekler 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 bu dosyaları gerektiği şekilde oluşturup silmesi ve gerekirse bu dosyaları yeniden oluşturması gerekir. iOS 5 bu dosyaları da silebilir (düşük depolama durumları altında), ancak uygulama çalışırken bunu yapamayacak.

Bu dizinin içeriği iTunes tarafından yedeklenmez, bu, Kullanıcı bir cihazı geri yüklerse mevcut olmayacağı anlamına gelir ve uygulamanızın güncelleştirilmiş bir sürümü yüklendikten sonra bulunmayabilir.

Örneğin, uygulamanızın ağa bağlanamaması durumunda, 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ızlı bir şekilde kaydedebilir ve alabilir, ancak yedeklenmek ve geri yükleme ya da sürüm güncelleştirmesinden sonra kolayca kurtarılabilmesini veya yeniden oluşturulması gerekmez.
klasörüne Uygulamalar, yalnızca bu dizinde kısa bir süre için gerekli olan geçici dosyaları saklayabilir. Alanı korumak için, artık gerekli olmadığında dosyaların silinmesi gerekir. İşletim sistemi, bir uygulama çalışmadığı zaman bu dizindeki dosyaları da silebilir.

Bu dizinin içeriği iTunes tarafından yedeklenmez.

Ö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 görüntülendiklerinde silinebilir (ve gelecekte gerekliyse yeniden indirilir).

Bu ekran görüntüsünde, dizin yapısı bir bulucu penceresinde gösterilmektedir:

Bu ekran görüntüsünde, dizin yapısı bir bulucu penceresinde gösterilmektedir

Diğer dizinlere programlama yoluyla erişme

Önceki dizin ve dosya örnekleri Documents dizine erişti. 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);

CachesVe tmp dizinlerinin yolları şöyle 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, Dosya uygulaması (iOS için, kullanıcının iCloud 'da dosyalarını görüp bunlarla etkileşime girmesini ve bunu destekleyen herhangi bir uygulama tarafından depolanmasını sağlayan bir dosya tarayıcısı) kullanıma sunmuştur. Kullanıcının uygulamanızdaki dosyalara doğrudan erişmesine izin vermek için, Info. plist dosyasında yeni bir Boole anahtarı oluşturun ve true Şu şekilde ayarlayın:

Info. plist içinde Lssupportsopeningdocumentsınplace ayarlayın

Uygulamanın Belgeler dizini artık dosyalar uygulamasında göz atmaya sunulacaktır. dosyalar uygulamasında iPhone ' a gidin ve paylaşılan dosyaları olan her bir uygulama görünür olur. Aşağıdaki ekran görüntüleri, dosya sistemi örnek uygulamasının nasıl göründüğünü göstermektedir:

iOS 11 dosyaları uygulamasıiPhone dosyalarıörnek uygulama dosyalarına gözatamıyorum

Kullanıcı ile iTunes aracılığıyla dosya paylaşma

Kullanıcılar Info.plistInfo.plistUIFileSharingEnabled , burada gösterildiği gibi, UIFileSharingEnabled görünümünde iTunes Sharing () girişini destekleyen bir uygulamayı düzenleyerek ve oluşturarak uygulamanızın belgeler dizinindeki dosyalara erişebilirler:

Uygulamayı ekleme iTunes Sharing özelliğini destekliyor

Cihaz bağlandığında ve Kullanıcı sekmeyi seçtiğinde bu dosyalara iTunes 'da erişilebilir Apps . Ö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ünde, iTunes aracılığıyla paylaşılan seçili uygulamadaki dosyalar gösterilir

Kullanıcılar, bu dizindeki en üst düzey öğelere iTunes aracılığıyla erişebilir. Tüm alt dizinlerin içeriğini göremez (ancak bunları kendi bilgisayarlarına kopyalayabilir veya silebilir). Örneğin, GoodReader sayesinde PDF ve EPUB dosyaları, kullanıcıların iOS cihazlarında okuyabilmeleri için uygulamayla paylaşılabilir.

Belge klasörünün içeriğini değiştiren kullanıcılar, dikkatli olmadıklarında sorunlara yol açabilir. Uygulamanız bunu dikkate almalıdır ve Belgeler klasörünün zararlı güncelleştirmelerine dayanıklı olmalıdır.

Bu makalede örnek kod, belgeler klasöründe ( SampleCode. cs) hem bir dosya hem de bir klasör oluşturur ve Info. plist dosyasında dosya paylaşımını mümkün bir şekilde sunar. Bu ekran görüntüsünde, bunların iTunes 'da nasıl göründüğü gösterilmektedir:

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 simgelerin nasıl ayarlanacağı hakkında bilgi için görüntülerle çalışma makalesine başvurun.

UIFileSharingEnabledAnahtar yanlış veya yoksa, dosya paylaşımı varsayılan olarak, devre dışı bırakılır ve kullanıcılar belge dizininizle etkileşime giremeyecektir.

Yedekleme ve geri yükleme

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

  • [ApplicationName]. app – imzalandığından bu dizine yazma yapmayın, bu nedenle yüklemeden sonra değişmeden kalmalıdır. Bu, kodınızdan erişebileceğiniz kaynakları içerebilir, ancak uygulama yeniden indirilip geri yüklenebildiğinden yedekleme gerektirmez.
  • Kitaplık/önbellekler – önbellek dizini yedeklenmek zorunda olmayan çalışma dosyalarına yöneliktir.
  • tmp – bu dizin, artık gerekli olmadığında oluşturulan ve silinen geçici dosyalar için veya alana Ihtiyaç duyduğunda iOS 'un sildiği dosyalar için kullanılır.

Büyük miktarda verilerin yedeklenmesi uzun sürebilir. Belirli bir belgeyi veya verileri yedeklemeniz gerektiğine karar verirseniz, uygulamanız belge ve kitaplık klasörlerini kullanmalıdır. Ağdan kolayca alınabilecek geçici veriler veya dosyalar için önbellekler ya da tmp dizinini kullanın.

Not

bir cihaz disk alanı üzerinde kritik düzeyde azaldığı zaman iOS bu dosya sistemini temizler. Bu işlem, şu anda çalıştırmayan uygulamaların kitaplık/önbellekler ve TMP klasöründen tüm dosyaları kaldırır.

İOS 5 iCloud yedekleme kısıtlamalarına uymak

Not

Bu ilke ilk olarak iOS 5 (uzun bir süre önce gibi) ile sunulsa da, bu kılavuz bugün uygulamalarla ilgili olmaya devam etmektedir.

Apple, iOS 5 ile ICloud yedekleme işlevselliği sunmuştur. İCloud yedeklemesi etkinleştirildiğinde, uygulamanızın giriş dizinindeki tüm dosyalar (normalde yedeklenmeyen dizinler hariç, örneğin, uygulama paketi, Caches ve tmp ) iCloud sunucularına yedeklenir. Bu özellik, cihazının kaybolması, çalınması veya hasar görmesi durumunda kullanıcıya tüm yedekleme sağlar.

İCloud, her kullanıcıya yalnızca 5 GB boş alan sağladığından ve gereksiz bant genişliğini kullanmaktan kaçınmak için, uygulamaların yalnızca Kullanıcı tarafından oluşturulan gerekli verileri yedeklemesini bekler. iOS verileri Depolama yönergelerine uymak için, aşağıdaki öğelere bağlanarak 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şturulenemez verileri depolayın.
  • Veya içinde kolayca yeniden oluşturulabilen veya yeniden yüklenebilen Library/Cachestmp (yedeklenmeyen ve ' temizlenen ' olabilir) diğer tüm verileri depolayın.
  • Veya klasörü için uygun olabilecek Library/Cachestmp , ancak ' temizlenme ' yapmak istemediğiniz dosyalarınız varsa, bunları başka bir yerde depolayın (gibi Library/YourData ) ve dosyaların iCloud yedekleme bant genişliği ve depolama alanı kullanmasını engellemek için ' yedeklemeyi geri alma ' özniteliğini uygulayın. Bu veriler cihazda hala alan kullandığından, bunu dikkatle yönetmeniz ve mümkün olduğunda silmeniz gerekir.

' Yedeklememe ' özniteliği sınıfı kullanılarak ayarlanır NSFileManager . Sınıfınızın using Foundation ve şunun gibi bir çağrı olduğundan emin olun 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

Ne SetSkipBackupAttribute zaman true olursa olsun, bu dosya yedeklenmez ( Documents Dizin bile). Yöntemini kullanarak özniteliğini sorgulayabilir GetSkipBackupAttribute ve yöntemi ile çağırarak sıfırlayabilirsiniz, SetSkipBackupAttributefalse şöyle olur:

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

İOS uygulamaları ve uygulama uzantıları arasında veri paylaşımı

Uygulama uzantıları, ana bilgisayar uygulamasının bir parçası olarak (içerdiği uygulamaların aksine) çalıştırıldıklarından, verilerin paylaşılması ek çalışma gerekli olacak şekilde otomatik olarak dahil değildir. 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, paylaşılan bir dizine normal iOS sandbox dışında erişebilirler.

Uygulama grubunu yapılandırma

paylaşılan konum, iOS Geliştirme Merkezisertifika, tanımlayıcı profilleri bölümünde yapılandırılan bir uygulama grubukullanılarak yapılandırılır. Bu değere Ayrıca her projenin yetkilendirmeler. plistdosyasında da başvurulmalıdır.

Uygulama grubu oluşturma ve yapılandırma hakkında bilgi için, uygulama grubu özellikleri Kılavuzu ' na bakın.

Dosyalar

İOS uygulaması ve uzantısı ayrıca ortak bir dosya yolu kullanarak dosyaları paylaşabilir (doğru yetkilendirmeler ve sağlama ile düzgün şekilde yapılandırıldıklarında):

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

Grup yolu döndürülürse, 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ü indirildiyse, iOS yeni bir giriş dizini oluşturur ve yeni uygulama paketini bu dizinde depolar. iOS daha sonra aşağıdaki klasörleri uygulama paketlerinizin önceki sürümünden yeni giriş dizininize taşıdır:

  • Belgeler
  • Kitaplık

Diğer dizinler aynı zamanda yeni giriş dizininiz üzerinde de kopyalanabilir, ancak kopyalanmaları garanti edilmez, bu nedenle uygulamanız bu sistem davranışına güvenmemelidir.

Özet

Bu makalede, Xamarin. iOS ile dosya sistemi işlemlerinin diğer herhangi bir .NET uygulamasına benzediği gösteriliyordu. Ayrıca, uygulama korumalı alanı ' nı da kullanıma sunmasının neden olduğu güvenlik etkilerini inceledi. Ardından, bir uygulama paketi kavramını araştırdığından. Son olarak, uygulamanız tarafından kullanılabilen özelleştirilmiş dizinleri ve uygulama yükseltmeleri ve yedeklemeleri sırasında rollerinin açıklanacağını numaralandırmıştır.