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:
- Health Kit ve Event Kit KULLANıCı Arabirimi Çerçeveleri kullanılamıyor
- Uzantılar genişletilmiş arka plan modlarını kullanamaz
- Uzantılar cihazın kameralarına veya mikrofonlarına erişe (mevcut medya dosyalarına erişeseler de)
- Uzantılar Hava Bırakma verileri alamz (Hava Bırakma yoluyla veri ileteseler de)
- UIActionSheet ve UIAlertView kullanılamaz; Uzantıların UIAlertController kullanması gerekir
- 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ı zorlar.
- Varsayılan olarak klavye uzantılarının ağa erişimi yok. Xamarin.iOS hata ayıklamanın çalışması için ağ erişimi gerektirdiği için bu durum cihazda hata ayıklamayı etkiler (kısıtlama simülatörde zorlanmaz). Projenin Info.plist'inde değerini olarak
Requests Open Accessayarerek ağ erişimi isteğinde bulundurabilirsiniz.YesKlavye uzantısı sınırlamaları hakkında daha fazla bilgi için lütfen Apple'ın Özel Klavye Kılavuzu'ne bakın.
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:
- Yayın yapılandırmasında bir uygulama paketi derleme.
- iOS Derleme projesi ayarlarında,Linker davranışı seçeneğini Yalnızca Çerçeve SDK'ları veya Hepsini Bağlama olarak ayarlayın.
- 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.ContainerAppUzantının tanımlayıcısıcom.myCompany.ContainerApp.MyExtensionolabilir:
dosyasında uygun bir değerle (örneğin, Bir Today Notification Center pencere öğesi için) anahtarını
NSExtensionPointIdentifiercom.apple.widget-extensionNSExtensionPointIdentifierInfo.plisttanımlaması gerekir.Ayrıca dosyasındaki anahtarı veya anahtarı uygun bir
NSExtensionPrincipalClassInfo.plistdeğerle tanımlaması gerekir:- Uzantının
NSExtensionMainStoryboardana kullanıcı arabirimini (eksi) sunan Storyboard adını belirtmek için anahtarını.storyboardkullanın. Örneğin,MaindosyasıMain.storyboardiçin. - Uzantı
NSExtensionPrincipalClassbaş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:

- Uzantının
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:
Çözüm oluşturma
Gerekli çözümü oluşturmak için aşağıdakileri yapın:
İlk olarak, yeni bir iOS, tek bir görünüm uygulama projesi oluşturun ve İleri düğmesine tıklayın:
Projeyi çağırın
TodayContainerveTodayContainerdüğ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:
Sonra, Çözüm Gezginiçözüme sağ tıklayın ve bugün uzantı şablonundan yeni bir iOS uzantı projesi ekleyin:
Projeyi çağırın
DaysRemainingveDaysRemainingdüğmesine tıklayın: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:
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:
Çözüm Gezgini, düzenlenmek üzere açmak için uzantı projesinin dosyasına çift tıklayın :
Şablona göre Kullanıcı arabirimine otomatik olarak eklenen etiketi seçin ve Özellikler Gezgini'nin pencere öğesi sekmesinde adı verin:
Değişiklikleri görsel taslağa kaydedin.
Kod kullanma
Kodda Kullanıcı arabirimini oluşturmak için aşağıdakileri yapın:
Çözüm Gezgini, şu şekilde, devysremaining projesini seçin, yeni bir sınıf ekleyin ve çağırın :
Yeniden Çözüm Gezgini, uzantının dosyasını çift tıklatarak düzenlenmek üzere açın:
Kaynak görünümünü seçin (ekranın altından) ve düğümü açın:
Anahtarı kaldırın
NSExtensionMainStoryboardveNSExtensionPrincipalClassdeğeri ile ekleyinCodeBasedViewController: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:
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:
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:
Ş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:
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-AlembickUTTypeAliasFile-AliasFilekUTTypeAliasRecord-AliasRecordkUTTypeAppleICNS-AppleICNSkUTTypeAppleProtectedMPEG4Audio-AppleProtectedMPEG4AudiokUTTypeAppleProtectedMPEG4Video-AppleProtectedMPEG4VideokUTTypeAppleScript-AppleScriptkUTTypeApplication-ApplicationkUTTypeApplicationBundle-ApplicationBundlekUTTypeApplicationFile-ApplicationFilekUTTypeArchive-ArchivekUTTypeAssemblyLanguageSource-AssemblyLanguageSourcekUTTypeAudio-AudiokUTTypeAudioInterchangeFileFormat-AudioInterchangeFileFormatkUTTypeAudiovisualContent-AudiovisualContentkUTTypeAVIMovie-AVIMoviekUTTypeBinaryPropertyList-BinaryPropertyListkUTTypeBMP-BMPkUTTypeBookmark-BookmarkkUTTypeBundle-BundlekUTTypeBzip2Archive-Bzip2ArchivekUTTypeCalendarEvent-CalendarEventkUTTypeCHeader-CHeaderkUTTypeCommaSeparatedText-CommaSeparatedTextkUTTypeCompositeContent-CompositeContentkUTTypeConformsToKey-ConformsToKeykUTTypeContact-ContactkUTTypeContent-ContentkUTTypeCPlusPlusHeader-CPlusPlusHeaderkUTTypeCPlusPlusSource-CPlusPlusSourcekUTTypeCSource-CSourcekUTTypeData-DatabasekUTTypeDelimitedText-DelimitedTextkUTTypeDescriptionKey-DescriptionKeykUTTypeDirectory-DirectorykUTTypeDiskImage-DiskImagekUTTypeElectronicPublication-ElectronicPublicationkUTTypeEmailMessage-EmailMessagekUTTypeExecutable-ExecutablekUTExportedTypeDeclarationsKey-ExportedTypeDeclarationsKeykUTTypeFileURL-FileURLkUTTypeFlatRTFD-FlatRTFDkUTTypeFolder-FolderkUTTypeFont-FontkUTTypeFramework-FrameworkkUTTypeGIF-GIFkUTTypeGNUZipArchive-GNUZipArchivekUTTypeHTML-HTMLkUTTypeICO-ICOkUTTypeIconFileKey-IconFileKeykUTTypeIdentifierKey-IdentifierKeykUTTypeImage-ImagekUTImportedTypeDeclarationsKey-ImportedTypeDeclarationsKeykUTTypeInkText-InkTextkUTTypeInternetLocation-InternetLocationkUTTypeItem-ItemkUTTypeJavaArchive-JavaArchivekUTTypeJavaClass-JavaClasskUTTypeJavaScript-JavaScriptkUTTypeJavaSource-JavaSourcekUTTypeJPEG-JPEGkUTTypeJPEG2000-JPEG2000kUTTypeJSON-JSONkUTType3dObject-k3dObjectkUTTypeLivePhoto-LivePhotokUTTypeLog-LogkUTTypeM3UPlaylist-M3UPlaylistkUTTypeMessage-MessagekUTTypeMIDIAudio-MIDIAudiokUTTypeMountPoint-MountPointkUTTypeMovie-MoviekUTTypeMP3-MP3kUTTypeMPEG-MPEGkUTTypeMPEG2TransportStream-MPEG2TransportStreamkUTTypeMPEG2Video-MPEG2VideokUTTypeMPEG4-MPEG4kUTTypeMPEG4Audio-MPEG4AudiokUTTypeObjectiveCPlusPlusSource-ObjectiveCPlusPlusSourcekUTTypeObjectiveCSource-ObjectiveCSourcekUTTypeOSAScript-OSAScriptkUTTypeOSAScriptBundle-OSAScriptBundlekUTTypePackage-PackagekUTTypePDF-PDFkUTTypePerlScript-PerlScriptkUTTypePHPScript-PHPScriptkUTTypePICT-PICTkUTTypePKCS12-PKCS12kUTTypePlainText-PlainTextkUTTypePlaylist-PlaylistkUTTypePluginBundle-PluginBundlekUTTypePNG-PNGkUTTypePolygon-PolygonkUTTypePresentation-PresentationkUTTypePropertyList-PropertyListkUTTypePythonScript-PythonScriptkUTTypeQuickLookGenerator-QuickLookGeneratorkUTTypeQuickTimeImage-QuickTimeImagekUTTypeQuickTimeMovie-QuickTimeMoviekUTTypeRawImage-RawImagekUTTypeReferenceURLKey-ReferenceURLKeykUTTypeResolvable-ResolvablekUTTypeRTF-RTFkUTTypeRTFD-RTFDkUTTypeRubyScript-RubyScriptkUTTypeScalableVectorGraphics-ScalableVectorGraphicskUTTypeScript-ScriptkUTTypeShellScript-ShellScriptkUTTypeSourceCode-SourceCodekUTTypeSpotlightImporter-SpotlightImporterkUTTypeSpreadsheet-SpreadsheetkUTTypeStereolithography-StereolithographykUTTypeSwiftSource-SwiftSourcekUTTypeSymLink-SymLinkkUTTypeSystemPreferencesPane-SystemPreferencesPanekUTTypeTabSeparatedText-TabSeparatedTextkUTTagClassFilenameExtension-TagClassFilenameExtensionkUTTagClassMIMEType-TagClassMIMETypekUTTypeTagSpecificationKey-TagSpecificationKeykUTTypeText-TextkUTType3DContent-ThreeDContentkUTTypeTIFF-TIFFkUTTypeToDoItem-ToDoItemkUTTypeTXNTextAndMultimediaData-TXNTextAndMultimediaDatakUTTypeUniversalSceneDescription-UniversalSceneDescriptionkUTTypeUnixExecutable-UnixExecutablekUTTypeURL-URLkUTTypeURLBookmarkData-URLBookmarkDatakUTTypeUTF16ExternalPlainText-UTF16ExternalPlainTextkUTTypeUTF16PlainText-UTF16PlainTextkUTTypeUTF8PlainText-UTF8PlainTextkUTTypeUTF8TabSeparatedText-UTF8TabSeparatedTextkUTTypeVCard-VCardkUTTypeVersionKey-VersionKeykUTTypeVideo-VideokUTTypeVolume-VolumekUTTypeWaveformAudio-WaveformAudiokUTTypeWebArchive-WebArchivekUTTypeWindowsExecutable-WindowsExecutablekUTTypeX509Certificate-X509CertificatekUTTypeXML-XMLkUTTypeXMLPropertyList-XMLPropertyListkUTTypeXPCService-XPCServicekUTTypeZipArchive-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.


















