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
Yes
dosyasındakiRequests 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:
- Yayın yapılandırmasında bir uygulama paketi oluşturun.
- 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.
- 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.ContainerApp
varsa Uzantının tanımlayıcısı şöylecom.myCompany.ContainerApp.MyExtension
olabilir:dosyasında uygun bir değerle (örneğin
com.apple.widget-extension
, Bir Bugün Bildirim Merkezi pencere öğesi için) anahtarınıNSExtensionPointIdentifier
tanımlamasıInfo.plist
gerekir.Ayrıca dosyasındaki
NSExtensionMainStoryboard
anahtarı veyaNSExtensionPrincipalClass
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çinMain.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ğerinizleUIViewController
eşleşmesi gerekir:
- Uzantı (
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:
Çözümü oluşturma
Gerekli çözümü oluşturmak için aşağıdakileri yapın:
İlk olarak, yeni bir iOS, Tek Görünüm Uygulaması projesi oluşturun ve İleri düğmesine tıklayın:
Projeyi
TodayContainer
çağırın ve İleri düğmesine tıklayın:Proje Adı ve ÇözümAdı değerlerini doğrulayın ve Oluştur düğmesine tıklayarak çözümü oluşturun:
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:
Projeyi
DaysRemaining
çağırın ve İleri düğmesine tıklayın: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:
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:
Çözüm Gezgini, Uzantı projesinin
Main.storyboard
dosyasına çift tıklayarak düzenlemek üzere açın:Kullanıcı arabirimine şablona göre otomatik olarak eklenen Etiketi seçin ve Özellikler Gezgini'nin Pencere Öğesi sekmesinde Adı
TodayMessage
verin:Değişiklikleri Görsel Taslak'a kaydedin.
Kod kullanma
Kodda kullanıcı arabirimi oluşturmak için aşağıdakileri yapın:
Çözüm Gezgini DaysRemaining projesini seçin, yeni bir sınıf ekleyin ve şunu çağırın
CodeBasedViewController
:Yeniden Çözüm Gezgini, uzantıyı düzenlemek üzere açmak için Uzantının
Info.plist
dosyasına çift tıklayın:Kaynak Görünümü 'nü seçin (ekranın alt kısmından) ve düğümü açın
NSExtension
:NSExtensionMainStoryboard
anahtarını kaldırın ve değerineCodeBasedViewController
sahip birNSExtensionPrincipalClass
ekleyin: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:
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:
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:
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:
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:
- ayarlar'ı Apple Watch.
- Paylaşılan NSUserDefaults.
- Paylaşılan Dosyalar.
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.