Xamarin.iOS'ta iOS uzantıları

iOS videoda Uzantı oluşturma

iOS 8'de sunulan uzantılar, iOS tarafından Bildirim Merkezi'nde olduğu gibi standart bağlamlar içinde sunulan, kullanıcının özel giriş gerçekleştirmesini istenen özel klavye türleri veya Uzantı'nın özel etki filtreleri sağlaya bir fotoğrafı düzenleme gibi diğer bağlamlar olarak UIViewControllers özeldir. UIViewControllers

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ılmıştır) ve konak uygulamasında belirli bir Uzantı Noktasından etkinleştirilir. Ayrıca mevcut sistem işlevlerine ek olarak kullanılamayacakları için yüksek performanslı, zayıf ve sağlam olması gerekir.

Uzantı noktaları

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

iOS 10 ve iOS 12'ye ek uzantı noktaları eklendi. Desteklenen tüm türlerin tablolarını iOS Uygulama Uzantısı Programlama Kılavuzu'da bulabilirsiniz.

Sınırlamalar

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

Evrensel sınırlamalar:

Tek tek sınırlamalar için bkz. Apple'ın Uygulama Uzantısı Programlama Kılavuzu.

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

Uzantılar kapsayıcı uygulamasından dağıtılır ve bu uygulama da uygulama aracılığıyla App Store. 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ını etkinleştirmesi gerekir. Fotoğraf gönderirken Paylaşım Uzantısı'nın etkinleştirilmesi gibi kullanım sırasında başkaları da etkinleştirilir.

Uzantının (kullanıcının Uzantı Noktası ile karşılaştığı) kullanılan uygulama, yürütülürken Uzantıyı barındıran uygulama olduğu için Konak uygulaması olarak adlandırılır. Uzantıyı yüken uygulama, Kapsayıcı uygulamasıdırçünkü yüklenirken Uzantıyı içeren uygulamadır.

Kapsayıcı uygulaması genellikle uzantıyı açıklar ve kullanıcıya uzantıyı etkinleştirme sürecinde yol açıklar.

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

Uygulama uzantılarını çalıştırmaya için bellek sınırları, ön plan uygulamasına uygulanan bellek sınırlardan ö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ı herhangi bir sorun olmadan yürütabilirsiniz. Ancak aynı uzantıyı bir cihazda çalıştırmanız, uzantının kilitlenmesi veya sistem tarafından agresif bir şekilde sonlandırılma gibi beklenmeyen sonuçlara neden olabilir. Bu nedenle, cihazı göndermeden önce uzantıyı bir cihazda derlemeyi ve test edin.

Kapsayıcı projesine ve başvurulan tüm uzantılara aşağıdaki ayarların uygulandığını emin olun:

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

Uzantı yaşam döngüsü

Uzantı, tek bir UIViewController kadar basit veya birden çok kullanıcı arabirimi ekranı içeren daha karmaşık Uzantılar olabilir. Kullanıcı bir Uzantı Noktasıyla karşılaştığında (örneğin, bir görüntüyü paylaştığınızda), o Uzantı Noktası için kayıtlı Uzantılar'dan seçim yapma fırsatına sahip olur.

Uygulamanın Uzantılarından birini seçerse, uygulamanın örneği örülerek normal Görünüm Denetleyicisi UIViewController yaşam döngüsü başlar. Ancak, kullanıcı kendileriyle etkileşim kurduğunda askıya alınmış ancak genel olarak sonlandırılmamıştır 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ın, sonuçlarla zaman uyumsuz geri çağırmalar alan işlemleri vardır. Bu geri çağırmalar arka plan iş parçacıklarında yürütülür ve Uzantı bunu göz önünde bulundurmalıdır; örneğin, kullanıcı arabirimini güncelleştirmek isteyen NSObject.InvokeOnMainThread kullanarak. Diğer ayrıntılar için aşağıdaki Konak Uygulamasıyla İletişim Kurma bölümüne bakın.

Uzantılar ve kapsayıcı uygulamaları birlikte yüklenmiş olmasına rağmen varsayılan olarak iletişim kuramayabilirsiniz. Bazı durumlarda, Kapsayıcı uygulaması temelde Uzantı yüklendikten sonra amacına hizmet edilen boş bir "gönderim" kapsayıcısıdır. Ancak koşullar gereği Kapsayıcı uygulaması ve Uzantı ortak bir alandan kaynakları paylaşabilir. Buna ek olarak, Today Uzantısı Kapsayıcı uygulamasından bir URL açmasını da talep ediyor olabilir. Bu davranış Olay Geri Sayımı Pencere Öğesinde gösterilir.

Uzantı oluşturma

Uzantıların (ve kapsayıcı uygulamalarının) 64 bit ikili dosyalar olması ve Xamarin.iOS Birleşik API'leri kullanılarak yerleşik olması gerekir. Uzantı geliştirmede çö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 sürdürmesi gerekir.
  • Uzantı yüklemenin bir yolunu sağlamaktan başka bir şey yapmadı olsa bile tam bir uygulama (başarıyla başlatıla ve çalıştıra çalışması gerekir) olması gerekir.
  • Uzantı projesinin Paket Tanımlayıcısı için temel olan 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

Ayrıca, 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ı varsa com.myCompany.ContainerApp Uzantının tanımlayıcısı com.myCompany.ContainerApp.MyExtension olabilir:

    Paket tanımlayıcıları

  • dosyasında uygun bir değerle (örneğin, Bir Today Notification Center pencere öğesi için) anahtarını NSExtensionPointIdentifiercom.apple.widget-extensionNSExtensionPointIdentifierInfo.plist tanımlaması gerekir.

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

    • Uzantının NSExtensionMainStoryboard ana kullanıcı arabirimini (eksi) sunan Storyboard adını belirtmek için anahtarını .storyboard kullanın. Örneğin, Main dosyası Main.storyboard için.
    • Uzantı NSExtensionPrincipalClass başlatılırken başlatacak sınıfı belirtmek için anahtarını kullanın. Değerin, değerinizin Register değeriyle eşleşmesi gerekir:

    Asıl sınıf kaydı

Belirli uzantı türlerinin ek gereksinimleri olabilir. Örneğin, bir bugün veya Notification Center uzantısının Principal sınıfının INCWidgetProvidinguygulaması gerekir.

Önemli

projenizi Mac için Visual Studio tarafından sunulan uzantılar şablonlarından birini kullanarak başlatırsanız, çoğu (tümü yoksa), bu gereksinimler bu gereksinimlerin sizin için otomatik olarak sağlandığı ve karşılanacaktır.

Kılavuz

Aşağıdaki izlenecek yolda, yılda kalan gün ve gün sayısını hesaplayan bir örnek pencere öğesi oluşturacaksınız:

Bir tarih ve yılda kalan gün sayısını hesaplayan bir örnek 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 bir görünüm uygulama projesi oluşturun ve İleri düğmesine tıklayın:

    İlk olarak, yeni bir iOS, tek bir görünüm uygulama projesi oluşturun ve Ileri düğmesine tıklayın

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

    Project TodayContainer öğesini çağırın ve Ileri düğmesine tıklayın

  3. Project adı ve solutionname ' i doğrulayıp çözümü oluşturmak için oluştur düğmesine tıklayın:

    Project adı ve solutionname 'i doğrulayıp çözümü oluşturmak için oluştur düğmesine tıklayın

  4. Sonra, Çözüm Gezginiçözüme sağ tıklayın ve bugün uzantı şablonundan yeni bir iOS uzantı projesi ekleyin:

    Sonra, Çözüm Gezgini çözüme sağ tıklayın ve bugün uzantı şablonundan yeni bir iOS uzantı projesi ekleyin

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

    Kalan projeyi çağırın ve Ileri 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ç olarak, burada gösterildiği gibi, şu anda iki proje olmalıdır:

Sonuç olarak, burada gösterildiği gibi, artık iki proje olmalıdır

Uzantı Kullanıcı arabirimi oluşturma

Ardından, bugün pencere öğesi için arabirimi tasarlamanız gerekir. Bu, film şeridi kullanılarak veya kodda Kullanıcı arabirimi oluşturularak yapılabilir. Her iki yöntem de ayrıntılı olarak ele alınacaktır.

Görsel taslakları kullanma

Kullanıcı arabirimini bir görsel taslağa göre oluşturmak için aşağıdakileri yapın:

  1. Çözüm Gezgini, düzenlenmek üzere açmak için uzantı projesinin dosyasına çift tıklayın :

    Uzantı projeleri ana. görsel taslak dosyasına çift tıklayarak dosyayı düzenlenmek üzere açın

  2. Şablona göre Kullanıcı arabirimine otomatik olarak eklenen etiketi seçin ve Özellikler Gezgini'nin pencere öğesi sekmesinde adı verin:

    Şablona göre Kullanıcı arabirimine otomatik olarak eklenen etiketi seçin ve Özellikler Gezgini 'nin pencere öğesi sekmesinde TodayMessage adını verin

  3. Değişiklikleri görsel taslağa kaydedin.

Kod kullanma

Kodda Kullanıcı arabirimini oluşturmak için aşağıdakileri yapın:

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

    Yeni bir sınıf ekleyin ve bu projeyi yeniden seçin CodeBasedViewController

  2. Yeniden Çözüm Gezgini, uzantının dosyasını çift tıklatarak düzenlenmek üzere açın:

    Uzantılar Info. plist dosyasına çift tıklayarak dosyayı düzenlenmek üzere açın

  3. Kaynak görünümünü seçin (ekranın altından) ve düğümü açın:

    Ekranın altından kaynak görünümünü seçin ve Nsextenma düğümünü açın

  4. Anahtarı kaldırın NSExtensionMainStoryboard ve NSExtensionPrincipalClass değeri ile ekleyin CodeBasedViewController :

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

  5. Yaptığınız değişiklikleri kaydedin.

Sonra, 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...

    }
  }
}

Bunun, [Register("CodeBasedViewController")] yukarıda belirtilen değerle eşleştiğini unutmayın NSExtensionPrincipalClass .

Uzantıyı kodlama

Kullanıcı arabirimi oluşturulduğunda, TodayViewController.cs veya CodeBasedViewController.cs dosyasını açın (yukarıdaki Kullanıcı arabirimini oluşturmak için kullanılan yöntemi temel alarak), TodayViewController.cs yöntemini değiştirin ve aşağıdaki gibi görünmesini 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, // Insert code to power extension here... yorumu yukarıdaki yeni kodla değiştirin. Temel uygulamayı çağırdıktan sonra (ve kod tabanlı sürüm için bir etiket ekledikten), bu kod yılın gününü ve kaç gün kaldığını almak için basit bir hesaplama yapar. Ardından, iletiyi TodayMessage Kullanıcı arabirimi tasarımında oluşturduğunuz etikette () görüntüler.

Bu işlemin ne kadar benzer olduğunu, normal bir uygulama yazma işlemine nasıl benzediğine göz atın. Bir uzantının, bir UIViewController uygulamadaki görünüm denetleyicisiyle aynı yaşam döngüsüne sahip olması dışında, uzantılar arka plan modlarına sahip değildir ve Kullanıcı bunları kullanmayı bitirdiğinde askıya alınmaz. Bunun yerine, uzantılar tekrar tekrar başlatılır ve gerektiği şekilde ayrılır.

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

Bu kılavuzda, kapsayıcı uygulaması yalnızca uzantıyı göndermek ve yüklemek için bir yöntem olarak kullanılır ve kendi işlevleri 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 ana. görsel taslak dosyasını düzenleyin ve uzantılar işlevini tanımlayan bir metin ekleyin ve nasıl yükleneceğine

Değişiklikleri görsel taslağa kaydedin.

Uzantıyı test etme

Uzantınızı iOS Benzeticisinde 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

Sonra, benzeticide giriş düğmesine basın, ekranın en üstünden aşağı doğru çekin ve Bildirim merkeziniaçın, bugün sekmesini seçin ve Düzenle düğmesine tıklayın:

Simülatör 'daki giriş düğmesine basın, ekranın en üstünden aşağı doğru çekin ve bildirim merkezini açın, bugün sekmesini seçin ve Düzenle düğmesine tıklayın

Şu anda, Devysremaining uzantısını bugün görünümüne ekleyin ve bitti düğmesine tıklayın:

Şu anda, Devysremaining 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 eklenecektir ve sonuçlar görüntülenir:

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

Konak uygulamayla iletişim kurma

Yukarıda oluşturduğunuz örnekteki örnek, ana bilgisayar uygulamasıyla ( bugün ekran) iletişim kurmaz. Olsaydı, veya sınıflarının ExtensionContext özelliğini kullanır CodeBasedViewController .

Ana bilgisayar uygulamalarından veri alacak uzantılar için veriler, uzantının ExtensionContext 'In ınputıtems özelliğinde depolanan nsextensionıtem nesnelerinin bir dizisidir .

Fotoğraf düzenlemesi uzantıları gibi diğer uzantılar, kullanımı tamamlayan veya iptal eden kullanıcı arasında ayrım gösterebilir. Bu, ExtensionContext özelliğinin tamamlananequest ve CancelRequest yöntemleri aracılığıyla konak uygulamasına geri bildirilecektir.

Daha fazla bilgi için lütfen Apple 'ın uygulama uzantısı programlama kılavuzunabakın.

Üst uygulamayla iletişim kurma

Bir uygulama grubu, farklı uygulamaların (ya da bir uygulamanın ve uzantılarının) paylaşılan bir dosya depolama konumuna erişmesine izin verir. Uygulama grupları, şu gibi veriler için kullanılabilir:

Daha fazla bilgi için lütfen yetenekler Ile çalıştımızın belge grupları bölümüne bakın.

MobileCoreServices

Uzantılarla çalışırken, uygulama, diğer uygulamalar ve/veya hizmetler arasında değiş tokuş edilen verileri oluşturmak ve işlemek için bir Tekdüzen tür tanımlayıcısı (UTı) kullanın.

MobileCoreServices.UTTypeStatik sınıf, Apple tanımları ile ilgili aşağıdaki yardımcı özellikleri tanımlar kUTType... :

  • 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 yetenekler Ile çalıştımızın belge grupları bölümüne bakın.

Önlemler ve değerlendirmeler

Uzantılar, uygulamalar tarafından kullanılabilir önemli ölçüde daha az belleğe sahiptir. Bunlar hızlı bir şekilde ve Kullanıcı ve barındırdıkları uygulama için en az yetkisiz erişim ile gerçekleştirmeleri beklenir. Bununla birlikte, bir uzantı, kullanıcının, uzantının ait olduğu geliştirici veya kapsayıcı uygulamasını belirlemesine izin veren markalı bir kullanıcı arabirimi ile, tüketen uygulamaya farklı, yararlı bir işlev de sağlamalıdır.

Bu sıkı gereksinim verildiğinde, yalnızca kapsamlı bir şekilde sınanmış ve performans ve bellek tüketimi için iyileştirilmiş uzantıları dağıtmanız gerekir.

Özet

Bu belgede kapsanan uzantılar, ne oldukları, uzantı noktaları türü ve iOS tarafından bir uzantıya uygulanan bilinen sınırlamalar vardır. Uzantıları ve uzantı yaşam döngüsünü oluşturma, dağıtma, yükleme ve çalıştırma konusunda ele alınmıştır. Görsel taslak veya kod kullanarak pencere öğesinin Kullanıcı arabirimini oluşturmanın iki yolunu gösteren basit bir bugün pencere öğesi oluşturmaya yönelik bir yönergeler sağladı. Bir uzantının iOS Benzeticisinde nasıl test alınacağını gösterdi. Son olarak, ana bilgisayar uygulamasıyla iletişim kurarak ve bir uzantı geliştirirken alınması gereken birkaç önlem ve dikkat edilecek noktalar kısaca ele alınmıştır.