Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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ındakiRequests Open Accessdeğ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.ContainerAppvarsa Uzantının tanımlayıcısı şöylecom.myCompany.ContainerApp.MyExtensionolabilir:
dosyasında uygun bir değerle (örneğin
com.apple.widget-extension, Bir Bugün Bildirim Merkezi pencere öğesi için) anahtarınıNSExtensionPointIdentifiertanımlamasıInfo.plistgerekir.Ayrıca dosyasındaki
NSExtensionMainStoryboardanahtarı veyaNSExtensionPrincipalClassanahtarıInfo.plistuygun bir değerle tanımlaması gerekir:- Uzantı (
NSExtensionMainStoryboardeksi.storyboard) için ana kullanıcı arabirimini sunan Görsel Taslak adını belirtmek için anahtarını kullanın. Örneğin,Maindosya içinMain.storyboard. NSExtensionPrincipalClassUzantı başlatıldığında başlatılacak sınıfı belirtmek için anahtarını kullanın. Değerin, kayıt değerinizleUIViewControllereş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.storyboarddosyası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ı
TodayMessageverin: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.plistdosyası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:NSExtensionMainStoryboardanahtarını kaldırın ve değerineCodeBasedViewControllersahip birNSExtensionPrincipalClassekleyin: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:
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-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 Ö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.


















