Xamarin.iOS'ta iOS uzantıları

iOS'ta Uzantı oluşturma videosu

iOS 8'de tanıtıldığı gibi uzantılar, UIViewControllers iOS tarafından Bildirim Merkezi gibi standart bağlamlar içinde, kullanıcı tarafından özelleştirilmiş giriş gerçekleştirmesi istenen özel klavye türleri veya Uzantının özel efekt filtreleri sağlayabildiği bir fotoğrafı düzenleme gibi diğer bağlamlar olarak sunulan özelleştirilmiştir.

Tüm Uzantılar bir Kapsayıcı uygulamasıyla birlikte yüklenir (her iki öğe de 64 bit Birleşik API'ler kullanılarak yazılır) ve bir Konak uygulamasındaki belirli bir Uzantı Noktasından etkinleştirilir. Ve mevcut sistem işlevlerine ek olarak kullanılacağından, yüksek performanslı, yalın ve sağlam olmalıdır.

Uzantı noktaları

Type Açıklama Uzantı Noktası Konak Uygulaması
Eylem Belirli bir medya türü için özel düzenleyici veya görüntüleyici com.apple.ui-services Tümü
Belge Sağlayıcısı Uygulamanın uzak belge deposu kullanmasına izin verir com.apple.fileprovider-ui UIDocumentPickerViewController kullanan uygulamalar
Klavye Alternatif klavyeler com.apple.keyboard-service Tümü
Fotoğraf Düzenleme Fotoğraf işleme ve düzenleme com.apple.photo-editing Photos.app düzenleyicisi
Paylaş Sosyal ağlarla, mesajlaşma hizmetleriyle vb. veri paylaşır. com.apple.share-services Tümü
Bugün Bugün ekranında veya Bildirim Merkezi'nda görünen "Pencere Öğeleri" com.apple.widget-extensions Bugün ve Bildirim Merkezi

iOS 10 ve iOS 12'de ek uzantı noktaları eklendi. Desteklenen tüm türlerin tam tablosunu iOS Uygulama Uzantısı Programlama Kılavuzu'nda bulabilirsiniz.

Sınırlamalar

Uzantıların bir dizi sınırlaması vardır ve bu sınırlamaların bazıları her tür için evrenseldir (örneğin, hiçbir Uzantı türü kameralara veya mikrofonlara erişemez), diğer Uzantı türlerinin kullanımlarıyla ilgili belirli sınırlamaları olabilir (örneğin, parolalar gibi güvenli veri giriş alanları için özel klavyeler kullanılamaz).

Evrensel sınırlamalar şunlardır:

  • Sistem Durumu Seti ve Olay Seti KULLANıCı Arabirimi Çerçeveleri kullanılamaz
  • Uzantılar genişletilmiş arka plan modlarını kullanamaz
  • Uzantılar cihazın kameralarına veya mikrofonlarına erişemez (ancak mevcut medya dosyalarına erişebilirler)
  • Uzantılar Hava Bırakma verilerini alamaz (hava damlası yoluyla veri iletebilirler)
  • UIActionSheet ve UIAlertView kullanılamıyor; uzantılar UIAlertController kullanmalıdır
  • UIApplication'ın birkaç üyesi kullanılamıyor: UIApplication.SharedApplication, UIApplication.OpenUrl, UIApplication.BeginIgnoringInteractionEvents ve UIApplication.EndIgnoringInteractionEvents
  • iOS, Bugünün uzantılarında 16 MB bellek kullanım sınırı uygular.
  • Varsayılan olarak klavye uzantılarının ağa erişimi yoktur. Xamarin.iOS hata ayıklamanın çalışması için ağ erişimi gerektirdiğinden bu, cihazda hata ayıklamayı etkiler (kısıtlama simülatörde uygulanmaz). Projenin Info.plist Yesdosyasındaki Requests Open Access değeri olarak ayarlayarak ağ erişimi istemek mümkündür. Klavye uzantısı sınırlamaları hakkında daha fazla bilgi için lütfen Apple'ın Özel Klavye Kılavuzu'na bakın.

Bireysel sınırlamalar için lütfen Apple'ın Uygulama Uzantısı Programlama Kılavuzu'na bakın.

Uzantıları dağıtma, yükleme ve çalıştırma

Uzantılar bir kapsayıcı uygulamasının içinden dağıtılır ve app Store aracılığıyla gönderilir ve dağıtılır. Uygulamayla dağıtılan Uzantılar bu noktada yüklenir, ancak kullanıcının her Uzantıyı açıkça etkinleştirmesi gerekir. Farklı uzantı türleri farklı şekillerde etkinleştirilir; birkaçı kullanıcının Ayarlar uygulamasına gidip bunları oradan etkinleştirmesini gerektirir. Diğerleri, fotoğraf gönderirken Paylaşım Uzantısını etkinleştirme gibi kullanım noktasında etkinleştirilir.

Uzantının kullanıldığı uygulama (kullanıcının Uzantı Noktası ile karşılaştığı yer) yürütürken Uzantıyı barındıran uygulama olduğundan Konak uygulaması olarak adlandırılır. Uzantı'yı yükleyen uygulama, yüklendiğinde Uzantıyı içeren uygulama olduğundan Kapsayıcı uygulamasıdır.

Kapsayıcı uygulaması genellikle uzantıyı açıklar ve kullanıcıya etkinleştirme işleminde yol gösterir.

Uzantıların hatalarını ayıklama ve sürüm sürümleri

Uygulama uzantılarını çalıştırmaya yönelik bellek sınırları, ön plan uygulamasına uygulanan bellek sınırlarından önemli ölçüde daha düşüktür. iOS çalıştıran simülatörlerde uzantılara daha az kısıtlama uygulanır ve uzantınızı sorunsuz bir şekilde yürütebilirsiniz. Ancak aynı uzantının bir cihazda çalıştırılması, uzantının kilitlenmesi veya sistem tarafından agresif bir şekilde sonlandırılması gibi beklenmeyen sonuçlara yol açabilir. Bu nedenle, bir cihazı göndermeden önce uzantıyı derleyip test ettiğinizden emin olun.

Kapsayıcı projesine ve başvuruda bulunan tüm uzantılara aşağıdaki ayarların uygulandığından emin olmalısınız:

  1. Yayın yapılandırmasında bir uygulama paketi oluşturun.
  2. iOS Derleme projesi ayarlarında Bağlayıcı davranışı seçeneğini Yalnızca Çerçeve SDK'larını Bağla veya Tümünü Bağla olarak ayarlayın.
  3. iOS Hata Ayıklama projesi ayarlarında Hata ayıklamayı etkinleştir ve Profil oluşturmayı etkinleştir seçeneğinin işaretini kaldırın.

Uzantı yaşam döngüsü

Uzantı, tek bir UIViewController veya birden çok kullanıcı arabirimi ekranı sunan daha karmaşık Uzantılar kadar basit olabilir. Kullanıcı bir Uzantı Noktası ile karşılaştığında (örneğin, bir görüntüyü paylaşırken), söz konusu Uzantı Noktası için kaydedilen Uzantılar arasından seçim yapma fırsatına sahip olur.

Uygulamanızın Uzantılarından birini seçerse, UIViewController uygulama örneği başlatılır ve normal Görünüm Denetleyicisi yaşam döngüsü başlar. Ancak, askıya alınan ancak kullanıcı etkileşimini tamamladığında genel olarak sonlandırılmayan normal bir uygulamanın aksine Uzantılar yüklenir, yürütülür ve sonra tekrar tekrar sonlandırılır.

Uzantılar bir NSExtensionContext nesnesi aracılığıyla Konak uygulamalarıyla iletişim kurabilir. Bazı Uzantılar, sonuçlarla birlikte zaman uyumsuz geri çağırmalar alan işlemlere sahiptir. Bu geri çağırmalar arka plan iş parçacıklarında yürütülür ve Uzantı bunu dikkate almalıdır; örneğin, kullanıcı arabirimini güncelleştirmek istiyorlarsa NSObject.InvokeOnMainThread kullanarak. Daha fazla ayrıntı için aşağıdaki Konak Uygulaması ile İletişim kurma bölümüne bakın.

Varsayılan olarak, Uzantılar ve kapsayıcı uygulamaları birlikte yüklenmesine rağmen iletişim kuramıyor. Bazı durumlarda Kapsayıcı uygulaması, Uzantı yüklendikten sonra amacına hizmet verilen boş bir "gönderim" kapsayıcısıdır. Ancak, koşullar gerektirdiğinde Kapsayıcı uygulaması ve Uzantı ortak bir alandan kaynakları paylaşabilir. Buna ek olarak, Bir Today Uzantısı Kapsayıcı uygulamasından bir URL açmasını isteyebilir. Bu davranış Olay Geri Sayım Pencere Öğesi'nde gösterilir.

Uzantı oluşturma

Uzantılar (ve Kapsayıcı uygulamaları) 64 bit ikili dosyalar olmalı ve Xamarin.iOS Birleşik API'leri kullanılarak derlenmelidir. Uzantı geliştirirken çözümleriniz en az iki proje içerir: kapsayıcı uygulaması ve kapsayıcının sağladığı her Uzantı için bir proje.

Kapsayıcı uygulaması proje gereksinimleri

Uzantıyı yüklemek için kullanılan Kapsayıcı uygulaması aşağıdaki gereksinimlere sahiptir:

  • Uzantı projesine bir başvuru tutmalıdır.
  • Uzantı yüklemenin bir yolunu sağlamaktan başka bir şey sağlamasa bile tam bir uygulama olmalıdır (başarıyla başlatılabilmeli ve çalıştırabilmelidir).
  • Uzantı projesinin Paket Tanımlayıcısı için temel bir Paket Tanımlayıcısı olmalıdır (daha fazla ayrıntı için aşağıdaki bölüme bakın).

Uzantı projesi gereksinimleri

Ek olarak, Uzantının projesi aşağıdaki gereksinimlere sahiptir:

  • Kapsayıcı uygulamasının Paket Tanımlayıcısı ile başlayan bir Paket Tanımlayıcısı olmalıdır. Örneğin, Kapsayıcı uygulamasının Paket Tanımlayıcısı com.myCompany.ContainerAppvarsa Uzantının tanımlayıcısı şöyle com.myCompany.ContainerApp.MyExtensionolabilir:

    Paket tanımlayıcıları

  • dosyasında uygun bir değerle (örneğincom.apple.widget-extension, Bir Bugün Bildirim Merkezi pencere öğesi için) anahtarını NSExtensionPointIdentifiertanımlaması Info.plist gerekir.

  • Ayrıca dosyasındaki NSExtensionMainStoryboard anahtarı veya NSExtensionPrincipalClass anahtarı Info.plist uygun bir değerle tanımlaması gerekir:

    • Uzantı ( NSExtensionMainStoryboard eksi .storyboard) için ana kullanıcı arabirimini sunan Görsel Taslak adını belirtmek için anahtarını kullanın. Örneğin, Main dosya için Main.storyboard .
    • NSExtensionPrincipalClass Uzantı başlatıldığında başlatılacak sınıfı belirtmek için anahtarını kullanın. Değerin, kayıt değerinizle UIViewControllereşleşmesi gerekir:

    Asıl sınıf kaydı

Belirli uzantı türlerinin ek gereksinimleri olabilir. Örneğin, bir Today veya Notification Center Uzantısının asıl sınıfı INCWidgetProviding uygulamalıdır.

Önemli

Projenizi Mac için Visual Studio tarafından sağlanan Uzantılar şablonlarından birini kullanarak başlatırsanız, bu gereksinimlerin çoğu (tümü değilse) şablon tarafından sizin için otomatik olarak sağlanır ve karşılanır.

İzlenecek yol

Aşağıdaki kılavuzda, yıl içinde kalan gün sayısını ve gün sayısını hesaplayan bir bugün pencere öğesi oluşturacaksınız:

Yıl içinde kalan gün sayısını ve gün sayısını hesaplayan bir örnek Bugün pencere öğesi

Çözümü oluşturma

Gerekli çözümü oluşturmak için aşağıdakileri yapın:

  1. İlk olarak, yeni bir iOS, Tek Görünüm Uygulaması projesi oluşturun ve İleri düğmesine tıklayın:

    İlk olarak, yeni bir iOS, Tek Görünüm Uygulaması projesi oluşturun ve İleri düğmesine tıklayın

  2. Projeyi TodayContainer çağırın ve İleri düğmesine tıklayın:

    Projeyi TodayContainer olarak çağırın ve İleri düğmesine tıklayın

  3. Proje Adı ve ÇözümAdı değerlerini doğrulayın ve Oluştur düğmesine tıklayarak çözümü oluşturun:

    Proje Adı ve ÇözümAdı'nı doğrulayın ve çözümü oluşturmak için Oluştur düğmesine tıklayın

  4. Ardından, Çözüm Gezgini Çözüm'e sağ tıklayın ve Bugün Uzantısı şablonundan yeni bir iOS Uzantısı projesi ekleyin:

    Ardından, Çözüm Gezgini Çözüme sağ tıklayın ve Bugün Uzantısı şablonundan yeni bir iOS Uzantısı projesi ekleyin

  5. Projeyi DaysRemaining çağırın ve İleri düğmesine tıklayın:

    Projeyi DaysRemaining olarak çağırın ve İleri düğmesine tıklayın

  6. Projeyi gözden geçirin ve oluştur düğmesine tıklayarak oluşturun:

    Projeyi gözden geçirin ve oluştur düğmesine tıklayarak oluşturun

Sonuçta elde edilen Çözümde artık burada gösterildiği gibi iki proje olmalıdır:

Sonuçta elde edilen Çözümde artık burada gösterildiği gibi iki proje olmalıdır

Uzantı kullanıcı arabirimi oluşturma

Ardından, Bugün pencere öğesiniz için arabirimi tasarlamanız gerekir. Bu, görsel taslak kullanılarak veya kodda kullanıcı arabirimi oluşturularak yapılabilir. Her iki yöntem de aşağıda ayrıntılı olarak ele alınacaktır.

Görsel taslakları kullanma

Görsel Taslak ile kullanıcı arabirimi oluşturmak için aşağıdakileri yapın:

  1. Çözüm Gezgini, Uzantı projesinin Main.storyboard dosyasına çift tıklayarak düzenlemek üzere açın:

    Düzenlemek üzere açmak için Uzantı projeleri Main.storyboard dosyasına çift tıklayın

  2. Kullanıcı arabirimine şablona göre otomatik olarak eklenen Etiketi seçin ve Özellikler Gezgini'nin Pencere Öğesi sekmesinde Adı TodayMessage verin:

    Kullanıcı arabirimine şablona göre otomatik olarak eklenen Etiketi seçin ve Özellikler Gezgini'nin Pencere Öğesi sekmesinde Bugünİleti Adını verin

  3. Değişiklikleri Görsel Taslak'a kaydedin.

Kod kullanma

Kodda kullanıcı arabirimi oluşturmak için aşağıdakileri yapın:

  1. Çözüm Gezgini DaysRemaining projesini seçin, yeni bir sınıf ekleyin ve şunu çağırınCodeBasedViewController:

    DaysRemaining projesini seçin, yeni bir sınıf ekleyin ve CodeBasedViewController olarak adlandırın

  2. Yeniden Çözüm Gezgini, uzantıyı düzenlemek üzere açmak için Uzantının Info.plist dosyasına çift tıklayın:

    Düzenlemek üzere açmak için Extensions Info.plist dosyasına çift tıklayın

  3. Kaynak Görünümü 'nü seçin (ekranın alt kısmından) ve düğümü açınNSExtension:

    Ekranın alt kısmından Kaynak Görünümü'nü seçin ve NSExtension düğümünü açın

  4. NSExtensionMainStoryboard anahtarını kaldırın ve değerine CodeBasedViewControllersahip bir NSExtensionPrincipalClass ekleyin:

    NSExtensionMainStoryboard anahtarını kaldırın ve CodeBasedViewController değerine sahip bir NSExtensionPrincipalClass ekleyin

  5. Değişikliklerinizi kaydedin.

Ardından, dosyayı düzenleyin CodeBasedViewController.cs ve aşağıdaki gibi görünmesini sağlayın:

using System;
using Foundation;
using UIKit;
using NotificationCenter;
using CoreGraphics;

namespace DaysRemaining
{
  [Register("CodeBasedViewController")]
  public class CodeBasedViewController : UIViewController, INCWidgetProviding
  {
    public CodeBasedViewController ()
    {
    }

    public override void ViewDidLoad ()
    {
      base.ViewDidLoad ();

      // Add label to view
      var TodayMessage = new UILabel (new CGRect (0, 0, View.Frame.Width, View.Frame.Height)) {
        TextAlignment = UITextAlignment.Center
      };

      View.AddSubview (TodayMessage);

      // Insert code to power extension here...

    }
  }
}

değerinin [Register("CodeBasedViewController")] yukarıdaki için belirttiğiniz değerle NSExtensionPrincipalClass eşleşdiğini unutmayın.

Uzantıyı kodlama

Kullanıcı Arabirimi oluşturulduktan sonra veya dosyasını açın TodayViewController.cs (yukarıdaki Kullanıcı Arabirimini oluşturmak için kullanılan yöntemi temel alarak), ViewDidLoad yöntemini değiştirin ve aşağıdaki gibi görünmesini CodeBasedViewController.cs sağlayın:

public override void ViewDidLoad ()
{
  base.ViewDidLoad ();

  // Calculate the values
  var dayOfYear = DateTime.Now.DayOfYear;
  var leapYearExtra = DateTime.IsLeapYear (DateTime.Now.Year) ? 1 : 0;
  var daysRemaining = 365 + leapYearExtra - dayOfYear;

  // Display the message
  if (daysRemaining == 1) {
    TodayMessage.Text = String.Format ("Today is day {0}. There is one day remaining in the year.", dayOfYear);
  } else {
    TodayMessage.Text = String.Format ("Today is day {0}. There are {1} days remaining in the year.", dayOfYear, daysRemaining);
  }
}

Kod tabanlı Kullanıcı Arabirimi yöntemini kullanıyorsanız, açıklamasını yukarıdaki yeni kodla değiştirin // Insert code to power extension here... . Temel uygulamayı çağırdıktan (ve kod tabanlı sürüm için bir Etiket ekledikten) sonra bu kod, yılın gününü ve kalan gün sayısını almak için basit bir hesaplama yapar. Ardından ileti, kullanıcı arabirimi tasarımında oluşturduğunuz Etikette (TodayMessage) görüntülenir.

Bu işlemin normal uygulama yazma işlemine ne kadar benzer olduğunu unutmayın. Uzantılar UIViewController arka plan modlarına sahip olmaması ve kullanıcı bunları kullanmayı bitirdiğinde askıya alınmaması dışında, uzantılar uygulamadaki Görünüm Denetleyicisi ile aynı yaşam döngüsüne sahiptir. Bunun yerine, Uzantılar gerektiği gibi tekrar tekrar başlatılır ve ayrılmaz.

Kapsayıcı uygulaması kullanıcı arabirimi oluşturma

Bu izlenecek yol için kapsayıcı uygulaması uzantıyı göndermek ve yüklemek için bir yöntem olarak kullanılır ve kendi işlevselliğini sağlamaz. TodayContainer Main.storyboard dosyasını düzenleyin ve Uzantının işlevini ve nasıl yükleneceğini tanımlayan bir metin ekleyin:

TodayContainers Main.storyboard dosyasını düzenleyin ve Extensions işlevini ve nasıl yükleneceğini tanımlayan bazı metinler ekleyin

Değişiklikleri Görsel Taslak'a kaydedin.

Uzantıyı test etme

Uzantınızı iOS Simülatörü'nde test etmek için TodayContainer uygulamasını çalıştırın. Kapsayıcının ana görünümü görüntülenir:

Kapsayıcılar ana görünümü görüntülenir

Ardından Simülatör'de Giriş düğmesine basın, ekranın üst kısmından aşağı doğru çekerek Bildirim Merkezi'ni açın, Bugün sekmesini seçin ve Düzenle düğmesine tıklayın:

Simülatör'de Giriş düğmesine basın, ekranın üst kısmından aşağı doğru çekerek Bildirim Merkezi'ni açın, Bugün sekmesini seçin ve Düzenle düğmesine tıklayın

DaysRemaining Uzantısını Bugün görünümüne ekleyin ve Bitti düğmesine tıklayın:

DaysRemaining Uzantısını Bugün görünümüne ekleyin ve Bitti düğmesine tıklayın

Yeni pencere öğesi Bugün görünümüne eklenir ve sonuçlar görüntülenir:

Yeni pencere öğesi Bugün görünümüne eklenir ve sonuçlar görüntülenir

Konak uygulamasıyla iletişim kurma

Yukarıda oluşturduğunuz örnek Bugün Uzantısı, ana bilgisayar uygulamasıyla ( Bugün ekranı) iletişim kurmaz. Bunu yaptıysa, veya CodeBasedViewController sınıflarının TodayViewController ExtensionContext özelliğini kullanır.

Konak uygulamalarından veri alacak Uzantılar için veriler, Uzantı'nın ExtensionContext öğesinin InputItems özelliğinde depolanan bir NSExtensionItem nesneleri dizisi biçimindedir. UIViewController

Fotoğraf Düzenleme uzantıları gibi diğer Uzantılar, kullanıcının kullanımı tamamlayan veya iptal edenleri ayırt edebilir. Bu, ExtensionContext özelliğinin CompleteRequest ve CancelRequest yöntemleri aracılığıyla konak uygulamasına geri işaretlenir.

Daha fazla bilgi için lütfen Apple'ın Uygulama Uzantısı Programlama Kılavuzu'na bakın.

Üst uygulamayla iletişim kurma

Uygulama Grubu, farklı uygulamaların (veya bir uygulamanın ve uzantılarının) paylaşılan dosya depolama konumuna erişmesine izin verir. Uygulama Grupları şu veriler için kullanılabilir:

Daha fazla bilgi için Lütfen Özelliklerle Çalışma belgelerimizin Uygulama Grupları bölümüne bakın.

MobileCoreServices

Uzantılarla çalışırken, uygulama, diğer uygulamalar ve/veya hizmetler arasında değiştirilen verileri oluşturmak ve işlemek için Tekdüzen Tür Tanımlayıcısı (UTI) kullanın.

Statik sınıf, MobileCoreServices.UTType Apple'ın kUTType... tanımlarıyla ilgili aşağıdaki yardımcı özellikleri tanımlar:

  • kUTTypeAlembic - Alembic
  • kUTTypeAliasFile - AliasFile
  • kUTTypeAliasRecord - AliasRecord
  • kUTTypeAppleICNS - AppleICNS
  • kUTTypeAppleProtectedMPEG4Audio - AppleProtectedMPEG4Audio
  • kUTTypeAppleProtectedMPEG4Video - AppleProtectedMPEG4Video
  • kUTTypeAppleScript - AppleScript
  • kUTTypeApplication - Application
  • kUTTypeApplicationBundle - ApplicationBundle
  • kUTTypeApplicationFile - ApplicationFile
  • kUTTypeArchive - Archive
  • kUTTypeAssemblyLanguageSource - AssemblyLanguageSource
  • kUTTypeAudio - Audio
  • kUTTypeAudioInterchangeFileFormat - AudioInterchangeFileFormat
  • kUTTypeAudiovisualContent - AudiovisualContent
  • kUTTypeAVIMovie - AVIMovie
  • kUTTypeBinaryPropertyList - BinaryPropertyList
  • kUTTypeBMP - BMP
  • kUTTypeBookmark - Bookmark
  • kUTTypeBundle - Bundle
  • kUTTypeBzip2Archive - Bzip2Archive
  • kUTTypeCalendarEvent - CalendarEvent
  • kUTTypeCHeader - CHeader
  • kUTTypeCommaSeparatedText - CommaSeparatedText
  • kUTTypeCompositeContent - CompositeContent
  • kUTTypeConformsToKey - ConformsToKey
  • kUTTypeContact - Contact
  • kUTTypeContent - Content
  • kUTTypeCPlusPlusHeader - CPlusPlusHeader
  • kUTTypeCPlusPlusSource - CPlusPlusSource
  • kUTTypeCSource - CSource
  • kUTTypeData - Database
  • kUTTypeDelimitedText - DelimitedText
  • kUTTypeDescriptionKey - DescriptionKey
  • kUTTypeDirectory - Directory
  • kUTTypeDiskImage - DiskImage
  • kUTTypeElectronicPublication - ElectronicPublication
  • kUTTypeEmailMessage - EmailMessage
  • kUTTypeExecutable - Executable
  • kUTExportedTypeDeclarationsKey - ExportedTypeDeclarationsKey
  • kUTTypeFileURL - FileURL
  • kUTTypeFlatRTFD - FlatRTFD
  • kUTTypeFolder - Folder
  • kUTTypeFont - Font
  • kUTTypeFramework - Framework
  • kUTTypeGIF - GIF
  • kUTTypeGNUZipArchive - GNUZipArchive
  • kUTTypeHTML - HTML
  • kUTTypeICO - ICO
  • kUTTypeIconFileKey - IconFileKey
  • kUTTypeIdentifierKey - IdentifierKey
  • kUTTypeImage - Image
  • kUTImportedTypeDeclarationsKey - ImportedTypeDeclarationsKey
  • kUTTypeInkText - InkText
  • kUTTypeInternetLocation - InternetLocation
  • kUTTypeItem - Item
  • kUTTypeJavaArchive - JavaArchive
  • kUTTypeJavaClass - JavaClass
  • kUTTypeJavaScript - JavaScript
  • kUTTypeJavaSource - JavaSource
  • kUTTypeJPEG - JPEG
  • kUTTypeJPEG2000 - JPEG2000
  • kUTTypeJSON - JSON
  • kUTType3dObject - k3dObject
  • kUTTypeLivePhoto - LivePhoto
  • kUTTypeLog - Log
  • kUTTypeM3UPlaylist - M3UPlaylist
  • kUTTypeMessage - Message
  • kUTTypeMIDIAudio - MIDIAudio
  • kUTTypeMountPoint - MountPoint
  • kUTTypeMovie - Movie
  • kUTTypeMP3 - MP3
  • kUTTypeMPEG - MPEG
  • kUTTypeMPEG2TransportStream - MPEG2TransportStream
  • kUTTypeMPEG2Video - MPEG2Video
  • kUTTypeMPEG4 - MPEG4
  • kUTTypeMPEG4Audio - MPEG4Audio
  • kUTTypeObjectiveCPlusPlusSource - ObjectiveCPlusPlusSource
  • kUTTypeObjectiveCSource - ObjectiveCSource
  • kUTTypeOSAScript - OSAScript
  • kUTTypeOSAScriptBundle - OSAScriptBundle
  • kUTTypePackage - Package
  • kUTTypePDF - PDF
  • kUTTypePerlScript - PerlScript
  • kUTTypePHPScript - PHPScript
  • kUTTypePICT - PICT
  • kUTTypePKCS12 - PKCS12
  • kUTTypePlainText - PlainText
  • kUTTypePlaylist - Playlist
  • kUTTypePluginBundle - PluginBundle
  • kUTTypePNG - PNG
  • kUTTypePolygon - Polygon
  • kUTTypePresentation - Presentation
  • kUTTypePropertyList - PropertyList
  • kUTTypePythonScript - PythonScript
  • kUTTypeQuickLookGenerator - QuickLookGenerator
  • kUTTypeQuickTimeImage - QuickTimeImage
  • kUTTypeQuickTimeMovie - QuickTimeMovie
  • kUTTypeRawImage - RawImage
  • kUTTypeReferenceURLKey - ReferenceURLKey
  • kUTTypeResolvable - Resolvable
  • kUTTypeRTF - RTF
  • kUTTypeRTFD - RTFD
  • kUTTypeRubyScript - RubyScript
  • kUTTypeScalableVectorGraphics - ScalableVectorGraphics
  • kUTTypeScript - Script
  • kUTTypeShellScript - ShellScript
  • kUTTypeSourceCode - SourceCode
  • kUTTypeSpotlightImporter - SpotlightImporter
  • kUTTypeSpreadsheet - Spreadsheet
  • kUTTypeStereolithography - Stereolithography
  • kUTTypeSwiftSource - SwiftSource
  • kUTTypeSymLink - SymLink
  • kUTTypeSystemPreferencesPane - SystemPreferencesPane
  • kUTTypeTabSeparatedText - TabSeparatedText
  • kUTTagClassFilenameExtension - TagClassFilenameExtension
  • kUTTagClassMIMEType - TagClassMIMEType
  • kUTTypeTagSpecificationKey - TagSpecificationKey
  • kUTTypeText - Text
  • kUTType3DContent - ThreeDContent
  • kUTTypeTIFF - TIFF
  • kUTTypeToDoItem - ToDoItem
  • kUTTypeTXNTextAndMultimediaData - TXNTextAndMultimediaData
  • kUTTypeUniversalSceneDescription - UniversalSceneDescription
  • kUTTypeUnixExecutable - UnixExecutable
  • kUTTypeURL - URL
  • kUTTypeURLBookmarkData - URLBookmarkData
  • kUTTypeUTF16ExternalPlainText - UTF16ExternalPlainText
  • kUTTypeUTF16PlainText - UTF16PlainText
  • kUTTypeUTF8PlainText - UTF8PlainText
  • kUTTypeUTF8TabSeparatedText - UTF8TabSeparatedText
  • kUTTypeVCard - VCard
  • kUTTypeVersionKey - VersionKey
  • kUTTypeVideo - Video
  • kUTTypeVolume - Volume
  • kUTTypeWaveformAudio - WaveformAudio
  • kUTTypeWebArchive - WebArchive
  • kUTTypeWindowsExecutable - WindowsExecutable
  • kUTTypeX509Certificate - X509Certificate
  • kUTTypeXML - XML
  • kUTTypeXMLPropertyList - XMLPropertyList
  • kUTTypeXPCService - XPCService
  • kUTTypeZipArchive - ZipArchive

Aşağıdaki örneğe bakın:

using MobileCoreServices;
...

NSItemProvider itemProvider = new NSItemProvider ();
itemProvider.LoadItem(UTType.PropertyList ,null, (item, err) => {
    if (err == null) {
        NSDictionary results = (NSDictionary )item;
        NSString baseURI =
results.ObjectForKey("NSExtensionJavaScriptPreprocessingResultsKey");
    }
});

Daha fazla bilgi için Lütfen Özelliklerle Çalışma belgelerimizin Uygulama Grupları bölümüne bakın.

Önlemler ve dikkat edilmesi gerekenler

Uzantılar, uygulamalardan çok daha az kullanılabilir belleğe sahiptir. Bu kullanıcıların hızlı bir şekilde ve kullanıcıya ve barındırdıkları uygulamaya en az sayıda yetkisiz erişimle gerçekleştirmesi beklenir. Ancak Uzantı, kullanıcının uzantının geliştiricisini veya ait olduğu Kapsayıcı uygulamasını tanımlamasına olanak sağlayan markalı bir kullanıcı arabirimine sahip olan kullanım uygulamasına ayırt edici, kullanışlı bir işlev de sağlamalıdır.

Bu sıkı gereksinim göz önünde bulundurulduğunda, yalnızca performans ve bellek tüketimi için kapsamlı bir şekilde test edilmiş ve iyileştirilmiş Uzantılar dağıtmanız gerekir.

Özet

Bu belgede Uzantılar, ne oldukları, Uzantı Noktalarının türü ve iOS tarafından bir Uzantıya uygulanan bilinen sınırlamalar ele alınmıştır. Uzantılar ve Uzantı yaşam döngüsü oluşturma, dağıtma, yükleme ve çalıştırma konuları ele alınmıştı. Görsel Taslaklar veya kod kullanarak pencere öğesinin kullanıcı arabirimini oluşturmanın iki yolunu gösteren basit bir Bugün pencere öğesi oluşturma adım adım kılavuzunu sağladı. iOS Simülatörü'nde bir uzantının nasıl test yapılacağını gösterdi. Son olarak, Konak Uygulaması ile iletişim kurma ve bir uzantı geliştirirken alınması gereken birkaç önlem ve dikkat edilmesi gerekenler kısaca ele alınmıştır.