Aracılığıyla paylaş


İzlenecek yol: iOS Swift kitaplığını bağlama

Önemli

Şu anda Xamarin platformunda özel bağlama kullanımını araştırıyoruz. Gelecekteki geliştirme çalışmalarını bilgilendirmek için lütfen bu ankete katılın.

Xamarin, mobil geliştiricilerin Visual Studio ve C# kullanarak platformlar arası yerel mobil deneyimler oluşturmasını sağlar. iOS platform SDK'sı bileşenlerini kutudan çıkararak kullanabilirsiniz. Ancak çoğu durumda, bu platform için geliştirilen ve Xamarin'in bağlamalar aracılığıyla yapmanızı sağladığı üçüncü taraf SDK'ları da kullanmak istiyorsunuz. Xamarin.iOS uygulamanıza bir üçüncü taraf Objective-C çerçevesi eklemek için uygulamalarınızda kullanabilmeniz için önce bunun için bir Xamarin.iOS bağlaması oluşturmanız gerekir.

iOS platformu, anadili ve araçlarıyla birlikte sürekli gelişmektedir ve Swift şu anda iOS geliştirme dünyasının en dinamik alanlarından biridir. Swift'e Objective-C geçirilmiş olan ve bize yeni zorluklarla karşı karşıya olan bir dizi üçüncü taraf SDK vardır. Swift bağlama işlemi ile Objective-Cbenzer olsa da, AppStore tarafından kabul edilebilir bir Xamarin.iOS uygulamasını başarıyla derlemek ve çalıştırmak için ek adımlar ve yapılandırma ayarları gerektirir.

Bu belgenin amacı, bu senaryoyu ele almak için üst düzey bir yaklaşımın ana hatlarını oluşturmak ve basit bir örnekle birlikte ayrıntılı bir adım adım kılavuz sağlamaktır.

Background

Swift ilk olarak Apple tarafından 2014'te tanıtıldı ve şimdi hızla büyüyen üçüncü taraf çerçeveler tarafından benimsenen sürüm 5.1'de. Swift çerçevesini bağlamak için birkaç seçeneğiniz vardır ve bu belgede, oluşturulan arabirim üst bilgisini kullanarak Objective-C yaklaşım özetlenmektedir. Üst bilgi, bir çerçeve oluşturulduğunda Xcode araçları tarafından otomatik olarak oluşturulur ve yönetilen dünyadan Swift dünyasına iletişim kurmanın bir yolu olarak kullanılır.

Önkoşullar

Bu kılavuzu tamamlamak için şunları yapmanız gerekir:

Yerel kitaplık oluşturma

İlk adım, üst bilgisinin etkinleştirildiği yerel bir Swift Framework Objective-C oluşturmaktır. Çerçeve genellikle üçüncü taraf bir geliştirici tarafından sağlanır ve üst bilgi şu dizinde pakete eklenmiş durumdadır: FrameworkName.framework>/Headers/<FrameworkName-Swift.h>.<

Bu üst bilgi, Xamarin.iOS bağlama meta verilerini oluşturmak ve Swift çerçevesi üyelerini kullanıma sunan C# sınıfları oluşturmak için kullanılacak genel arabirimleri kullanıma sunar. Üst bilgi yoksa veya tamamlanmamış bir genel arabirime sahipse (örneğin, sınıfları/üyeleri görmüyorsanız) iki seçeneğiniz vardır:

  • Swift kaynak kodunu güncelleştirerek üst bilgiyi oluşturun ve gerekli üyeleri özniteliğiyle @objc işaretleyin
  • Ortak arabirimi denetlediğiniz ve temel alınan çerçeveye yapılan tüm çağrıları ara sunucu olarak kullandığınız bir ara sunucu çerçevesi oluşturun

Bu öğreticide, her zaman kullanılamayan üçüncü taraf kaynak koduna daha az bağımlılığı olduğu için ikinci yaklaşım açıklanmaktadır. İlk yaklaşımdan kaçınmanın bir diğer nedeni de gelecekteki çerçeve değişikliklerini desteklemek için gereken ek çabadır. Üçüncü taraf kaynak koduna değişiklik eklemeye başladıktan sonra, bu değişiklikleri desteklemek ve gelecekteki her güncelleştirmeyle birleştirmek sizin sorumluluğundadır.

Örneğin, bu öğreticide Gigya Swift SDK'sı için bir bağlama oluşturulur:

  1. Xcode'u açın ve Xamarin.iOS kodu ile üçüncü taraf Swift çerçevesi arasında ara sunucu olacak yeni Swift çerçevesi oluşturun. Dosya > Yeni Proje'ye > tıklayın ve sihirbaz adımlarını izleyin:

    xcode create framework project

    xcode name framework project

  2. Geliştirici web sitesinden Gigya xcframework'i indirin ve paketi açın. Yazma sırasında en son sürüm Gigya Swift SDK 1.5.3'tür

  3. Proje dosyaları gezgininden SwiftFrameworkProxy'yi ve ardından Genel sekmesini seçin

  4. Gigya.xcframework paketini Sürükleyip Genel sekmesinin altındaki Xcode Frameworks and Libraries listesine bırakın. Çerçeveyi eklerken Gerekirse öğeleri kopyala seçeneğini işaretleyin:

    xcode copy framework

    Swift çerçevesinin projeye eklendiğini doğrulayın, aksi takdirde aşağıdaki seçenekler kullanılamaz.

  5. Ekleme seçeneğinin belirlendiğinden emin olun. Bu seçenek daha sonra el ile denetlenecektir:

    xcode donotembed option

  6. Çerçeveye sahip Swift kitaplıklarını içeren Her Zaman Swift Standart Kitaplıklarını Ekle Ayarlar Oluştur seçeneğinin Hayır olarak ayarlandığından emin olun. Daha sonra swift dylibs'nin son pakete dahil olduğu el ile kontrol edilir:

    xcode always embed false option

  7. Bit Kodunu Etkinleştir seçeneğinin Hayır olarak ayarlandığından emin olun. Şu andan itibaren Xamarin.iOS Bitcode içermezken Apple aynı mimarileri desteklemek için tüm kitaplıkları gerektirir:

    xcode enable bitcode false option

    Aşağıdaki terminal komutunu çerçevede çalıştırarak, sonuçta elde edilen çerçevede Bitcode seçeneğinin devre dışı bırakıldığını doğrulayabilirsiniz:

    otool -l SwiftFrameworkProxy.framework/SwiftFrameworkProxy | grep __LLVM
    

    Çıkış boş olmalıdır, aksi takdirde belirli yapılandırmanız için proje ayarlarını gözden geçirmek istersiniz.

  8. Oluşturulan arabirim Üst Bilgi Adı seçeneğinin Objective-C etkinleştirildiğinden ve bir üst bilgi adı belirttiğinden emin olun. Varsayılan ad FrameworkName-Swift.h'dir><:

    xcode objectice-c header enabled option

    İpucu

    Bu seçenek kullanılamıyorsa, önce aşağıda açıklandığı gibi projeye bir .swift dosya eklediğinizden emin olun, ardından öğesine dönün Build Settings ve ayar bulunabilir olmalıdır.

  9. İstenen yöntemleri kullanıma sunun ve öznitelikle @objc işaretleyin ve aşağıda tanımlanan ek kuralları uygulayın. Çerçeveyi bu adım olmadan oluşturursanız, oluşturulan Objective-C üst bilgi boş olur ve Xamarin.iOS Swift çerçevesi üyelerine erişemez. Yeni bir Swift dosyası SwiftFrameworkProxy.swift oluşturup aşağıdaki kodu tanımlayarak temel alınan Gigya Swift SDK'sı için başlatma mantığını kullanıma sunma:

    import Foundation
    import UIKit
    import Gigya
    
    @objc(SwiftFrameworkProxy)
    public class SwiftFrameworkProxy : NSObject {
    
        @objc
        public func initFor(apiKey: String) -> String {
            Gigya.sharedInstance().initFor(apiKey: apiKey)
            let gigyaDomain = Gigya.sharedInstance().config.apiDomain
            let result = "Gigya initialized with domain: \(gigyaDomain)"
            return result
        }
    }
    

    Yukarıdaki kodla ilgili birkaç önemli not:

    • Gigya Modülü burada özgün üçüncü taraf Gigya SDK'sından içeri aktarmak, çerçevenin herhangi bir üyesine erişim sağlar.
    • SwiftFrameworkProxy sınıfını @objc bir ad belirterek özniteliğiyle işaretleyin; aksi takdirde gibi _TtC19SwiftFrameworkProxy19SwiftFrameworkProxybenzersiz bir okunamayan ad oluşturulur. Tür adı daha sonra adıyla kullanılacağından açıkça tanımlanmalıdır.
    • proxy sınıfını öğesinden NSObjectdevralır, aksi takdirde üst bilgi dosyasında oluşturulmaz Objective-C .
    • Kullanıma sunulacak tüm üyeleri olarak publicişaretleyin.
  10. Şema derleme yapılandırmasını Hata Ayıkla olan Sürüm olarak değiştirin. Bunu yapmak için Xcode > Hedef > Düzenleme Düzeni iletişim kutusunu açın ve YapılandırmaYı Derle seçeneğini Yayın olarak ayarlayın:

    xcode edit scheme

    xcode edit scheme release

  11. Bu noktada, Çerçeve oluşturulmaya hazırdır. Hem simülatör hem de cihaz mimarileri için çerçeve oluşturun ve ardından çıkışları tek bir ikili çerçeve paketi (.xcframework) olarak birleştirin. Aşağıdaki komutlarla derlemeyi yürütür:

    xcodebuild -project "Swift/SwiftFrameworkProxy/SwiftFrameworkProxy.xcodeproj" archive \
      -scheme "SwiftFrameworkProxy" \
      -configuration Release \
      -archivePath "build/SwiftFrameworkProxy-simulator.xcarchive" \
      -destination "generic/platform=iOS Simulator" \
      -derivedDataPath "build" \
      -IDECustomBuildProductsPath="" -IDECustomBuildIntermediatesPath="" \
      ENABLE_BITCODE=NO \
      SKIP_INSTALL=NO \
      BUILD_LIBRARY_FOR_DISTRIBUTION=YES
    
     xcodebuild -project "Swift/SwiftFrameworkProxy/SwiftFrameworkProxy.xcodeproj" archive \
       -scheme "SwiftFrameworkProxy" \
       -configuration Release \
       -archivePath "build/SwiftFrameworkProxy-ios.xcarchive" \
       -destination "generic/platform=iOS" \
       -derivedDataPath "build" \
       -IDECustomBuildProductsPath="" -IDECustomBuildIntermediatesPath="" \
       ENABLE_BITCODE=NO \
       SKIP_INSTALL=NO \
       BUILD_LIBRARY_FOR_DISTRIBUTION=YES
    

    İpucu

    İkili çerçeveler oluşturma hakkında daha fazla bilgi edinin

    İpucu

    Proje yerine bir çalışma alanınız varsa, çalışma alanını derleyin ve hedefi gerekli bir parametre olarak belirtin. Çalışma alanları için bu dizin proje derlemelerinden farklı olacağı için bir çıkış dizini de belirtmek istiyorsunuz.

    İpucu

    Ayrıca, tüm geçerli mimariler için çerçeveyi oluşturmak için yardımcı betiği kullanabilir veya hedef seçicideki Xcode anahtarlama Simülatörü ve Cihaz'dan oluşturabilirsiniz.

  12. Oluşturulan çerçevelere sahip iki arşiv vardır ve her platform için birer arşiv vardır ve bunları daha sonra Xamarin.iOS bağlama projesine katıştırılacak tek bir ikili çerçeve paketi olarak birleştirir. Her iki mimariyi de birleştiren bir ikili çerçeve paketi oluşturmak için aşağıdaki adımları uygulamanız gerekir. .xcarchive paketi yalnızca bir klasör olduğundan, dosyaları ekleme, kaldırma ve değiştirme gibi tüm işlem türlerini gerçekleştirebilirsiniz:

    • Arşivlerde önceden oluşturulmuş çerçevelerle bir xcframework oluşturun:

      xcodebuild -create-xcframework \
        	-framework "build/SwiftFrameworkProxy-simulator.xcarchive/Products/Library/Frameworks/SwiftFrameworkProxy.framework" \
        	-framework "build/SwiftFrameworkProxy-ios.xcarchive/Products/Library/Frameworks/SwiftFrameworkProxy.framework" \
        	-output "build/SwiftFrameworkProxy.xcframework"
      

    İpucu

    Yalnızca tek bir platformu desteklemek istiyorsanız (örneğin, yalnızca bir cihazda çalıştırabileceğiniz bir uygulama oluşturuyorsanız) .xcframework kitaplığını oluşturma adımını atlayabilir ve daha önce cihaz derlemesinden çıkış çerçevesini kullanabilirsiniz.

    İpucu

    Yukarıdaki tüm adımları otomatikleştiren .xcframework dosyasını oluşturmak için yardımcı betiğini de kullanabilirsiniz.

Meta verileri hazırlama

Şu anda, oluşturulan arabirim üst bilgisine Objective-C sahip .xcframework bir Xamarin.iOS bağlaması tarafından tüketilmeye hazır olmalıdır. Sonraki adım, bağlama projesi tarafından C# sınıfları oluşturmak için kullanılan API tanımı arabirimlerini hazırlamaktır. Bu tanımlar, Objective Sharpie aracı ve oluşturulan üst bilgi dosyası tarafından el ile veya otomatik olarak oluşturulabilir. Meta verileri oluşturmak için Sharpie kullanın:

  1. Resmi indirme web sitesinden en son Objective Sharpie aracını indirin ve sihirbazı izleyerek yükleyin. Yükleme tamamlandıktan sonra sharpie komutunu çalıştırarak bunu doğrulayabilirsiniz:

    sharpie -v
    
  2. Sharpie ve otomatik olarak oluşturulan Objective-C üst bilgi dosyasını kullanarak meta veriler oluşturun:

    sharpie bind --sdk=iphoneos16.4 --output="XamarinApiDef" --namespace="Binding" --scope="build/SwiftFrameworkProxy.xcframework/ios-arm64/SwiftFrameworkProxy.framework/Headers/" "build/SwiftFrameworkProxy.xcframework/ios-arm64/SwiftFrameworkProxy.framework/Headers/SwiftFrameworkProxy-Swift.h"
    

    Çıkış, oluşturulan meta veri dosyasını yansıtır: ApiDefinitions.cs. Bu dosyayı yerel başvurularla birlikte bir Xamarin.iOS bağlama projesine eklemek üzere sonraki adıma kaydedin:

    Parsing 1 header files...
    Binding...
        [write] ApiDefinitions.cs
    

    Araç, kullanıma sunulan Objective-C her üye için aşağıdaki koda benzer şekilde C# meta verileri oluşturur. Gördüğünüz gibi, insan tarafından okunabilir bir biçimi ve basit üyeleri eşlemesi olduğundan el ile tanımlanabilir:

    [Export ("initForApiKey:")]
    string InitForApiKey (string apiKey);
    

    İpucu

    Üst bilgi adı için varsayılan Xcode ayarlarını değiştirdiyseniz üst bilgi dosyası adı farklı olabilir. Varsayılan olarak , -Swift soneki olan bir projenin adına sahiptir. Çerçeve paketinin headers klasörüne giderek dosyayı ve adını her zaman deleyebilirsiniz.

    İpucu

    Otomasyon işleminin bir parçası olarak, .xcframework oluşturulduktan sonra meta verileri otomatik olarak oluşturmak için yardımcı betiğini kullanabilirsiniz.

Bağlama kitaplığı oluşturma

Sonraki adım, Visual Studio bağlama şablonunu kullanarak bir Xamarin.iOS bağlama projesi oluşturmak, gerekli meta verileri, yerel başvuruları eklemek ve sonra da tüketilebilir bir kitaplık oluşturmak için projeyi oluşturmaktır:

  1. Mac için Visual Studio açın ve yeni bir Xamarin.iOS bağlama kitaplığı projesi oluşturun, bu örnekte SwiftFrameworkProxy.Binding adını verin ve sihirbazı tamamlayın. Xamarin.iOS bağlama şablonu şu yolda bulunur: iOS > Kitaplık > Bağlama Kitaplığı:

    visual studio create binding library

  2. Tamamen Objective Sharpie aracı tarafından oluşturulan meta verilerle değiştirileceğinden mevcut meta veri dosyasını ApiDefinition.cs silin.

  3. Önceki adımlardan birinde Sharpie tarafından oluşturulan meta verileri kopyalayın, özellikler penceresinde şu Derleme Eylemini seçin: ApiDefinitions.cs dosyası için ObjBindingApiDefinition ve StructsAndEnums.cs dosyası için ObjBindingCoreSource:

    visual studio project structure metadata

    Meta verilerin kendisi, C# dilini kullanarak kullanıma sunulan Objective-C her sınıfı ve üyeyi açıklar. C# bildirimiyle birlikte özgün Objective-C üst bilgi tanımını da görebilirsiniz:

    // @interface SwiftFrameworkProxy : NSObject
    [BaseType (typeof(NSObject))]
    interface SwiftFrameworkProxy
    {
        // -(NSString * _Nonnull)initForApiKey:(NSString * _Nonnull)apiKey __attribute__((objc_method_family("none"))) __attribute__((warn_unused_result));
        [Export ("initForApiKey:")]
        string InitForApiKey (string apiKey);
    }
    

    Geçerli bir C# kodu olsa da, olduğu gibi kullanılmaz, bunun yerine Xamarin.iOS araçları tarafından bu meta veri tanımına dayalı C# sınıfları oluşturmak için kullanılır. Sonuç olarak, SwiftFrameworkProxy arabirimi yerine Xamarin.iOS kodunuz tarafından örneği oluşturulabilen aynı ada sahip bir C# sınıfı elde edersiniz. Bu sınıf meta verileriniz tarafından tanımlanan yöntemleri, özellikleri ve diğer üyeleri alır. Bu üyeleri C# biçiminde çağıracaksınız.

  4. Daha önce oluşturulan ikili çerçeve paketine ve bu çerçevenin her bağımlılığına yerel bir başvuru ekleyin. Bu durumda, bağlama projesine hem SwiftFrameworkProxy hem de Gigya çerçevesi yerel başvurularını ekleyin:

    • Yerel çerçeve başvuruları eklemek için bulucuyu açın ve çerçeveleri içeren klasöre gidin. Çerçeveleri Çözüm Gezgini Yerel Başvurular konumuna sürükleyip bırakın. Alternatif olarak, Yerel Başvurular klasöründeki bağlam menüsü seçeneğini kullanabilir ve çerçeveleri aramak ve eklemek için Yerel Başvuru Ekle'ye tıklayabilirsiniz:

    visual studio project structure native references

    • Her yerel başvurunun özelliklerini güncelleştirin ve üç önemli seçeneği işaretleyin:

      • Akıllı Bağlantıyı Ayarla = true
      • Zorla Yüklemeyi Ayarla = false
      • Özgün çerçeveleri oluşturmak için kullanılan Çerçevelerin listesini ayarlayın. Bu durumda her çerçevenin yalnızca iki bağımlılığı vardır: Foundation ve UIKit. Bunu Çerçeveler alanına ayarlayın:

      visual studio nativeref proxy options

      Belirteceğiniz ek bağlayıcı bayraklarınız varsa, bunları bağlayıcı bayrakları alanında ayarlayın. Bu durumda boş tutun.

    • Gerektiğinde ek bağlayıcı bayrakları belirtin. Bağladığınız kitaplık yalnızca Objective-C API'leri kullanıma sunarken dahili olarak Swift kullanıyorsa aşağıdaki gibi sorunlar görüyor olabilirsiniz:

      error MT5209 : Native linking error : warning: Auto-Linking library not found for -lswiftCore
      error MT5209 : Native linking error : warning: Auto-Linking library not found for -lswiftQuartzCore
      error MT5209 : Native linking error : warning: Auto-Linking library not found for -lswiftCoreImage
      

      Bağlama projesinin yerel kitaplık özelliklerinde Bağlayıcı Bayrakları'na aşağıdaki değerlerin eklenmesi gerekir:

      L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator/ -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos -Wl,-rpath -Wl,@executable_path/Frameworks
      

      İlk iki seçenek ( -L ... olanlar), yerel derleyiciye swift kitaplıklarını nerede bulacağını söyler. Yerel derleyici, doğru mimariye sahip olmayan kitaplıkları yoksayar, yani hem simülatör kitaplıkları hem de cihaz kitaplıkları için aynı anda konumu geçirmek mümkündür, böylece hem simülatör hem de cihaz derlemeleri için çalışır (bu yollar yalnızca iOS için doğrudur; tvOS ve watchOS için güncelleştirilmeleri gerekir). Bunun bir dezavantajı, bu yaklaşımın doğru Xcode'un /Application/Xcode.app içinde olmasını gerektirmesidir. Bağlama kitaplığının tüketicisinde farklı bir konumda Xcode varsa bu işlem çalışmaz. Alternatif çözüm, yürütülebilir projenin iOS Derleme seçeneklerindeki (--gcc_flags -L... -L... ) ek mtouch bağımsız değişkenlerine bu seçenekleri eklemektir. Üçüncü seçenek, yerel bağlayıcının yürütülebilir dosyadaki swift kitaplıklarının konumunu depolamasını sağlar, böylece işletim sistemi bunları bulabilir.

  5. Son eylem, kitaplığı oluşturmak ve derleme hatası olmadığından emin olmaktır. Genellikle Objective Sharpie tarafından üretilen bağlama meta verilerinin [Verify] özniteliğiyle ek açıklama eklendiğini göreceksiniz. Bu öznitelikler, Objective Sharpie'nin bağlamayı özgün Objective-C bildirimle karşılaştırarak doğru şeyi yaptığını doğrulamanız gerektiğini gösterir (ilişkili bildirimin üzerindeki bir açıklamada sağlanacaktır). Özniteliğiyle işaretlenmiş üyeler hakkında daha fazla bilgi edinmek için aşağıdaki bağlantıyı kullanabilirsiniz. Proje oluşturulduktan sonra bir Xamarin.iOS uygulaması tarafından kullanılabilir.

Bağlama kitaplığını kullanma

Son adım, Xamarin.iOS bağlama kitaplığını bir Xamarin.iOS uygulamasında kullanmaktır. Yeni bir Xamarin.iOS projesi oluşturun, bağlama kitaplığına başvuru ekleyin ve Gigya Swift SDK'sını etkinleştirin:

  1. Xamarin.iOS projesi oluşturun. Başlangıç noktası olarak iOS > Uygulaması > Tek Görünüm Uygulamasını kullanabilirsiniz:

    visual studio app new

  2. Hedef projeye veya daha önce oluşturulan .dll bağlama projesi başvurusu ekleyin. Bağlama kitaplığını normal bir Xamarin.iOS kitaplığı olarak değerlendirin:

    visual studio app refs

  3. Uygulamanın kaynak kodunu güncelleştirin ve başlatma mantığını Gigya SDK'yı etkinleştiren birincil ViewController'a ekleyin

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();
        var proxy = new SwiftFrameworkProxy();
        var result = proxy.InitForApiKey("APIKey");
        System.Diagnostics.Debug.WriteLine(result);
    }
    
  4. BtnLogin adlı bir düğme oluşturun ve bir kimlik doğrulama akışını etkinleştirmek için aşağıdaki düğme tıklama işleyicisini ekleyin:

    private void btnLogin_Tap(object sender, EventArgs e)
    {
        _proxy.LoginWithProvider(GigyaSocialProvidersProxy.Instagram, this, (result, error) =>
        {
            // process your login result here
        });
    }
    
  5. Uygulamayı çalıştırın, hata ayıklama çıkışında şu satırı görmeniz gerekir: Gigya initialized with domain: us1.gigya.com. Kimlik doğrulama akışını etkinleştirmek için düğmeye tıklayın:

    swift proxy result

Tebrikler! Başarıyla bir Xamarin.iOS uygulaması ve Swift çerçevesi kullanan bir bağlama kitaplığı oluşturdunuz. Yukarıdaki uygulama iOS 12.2+ üzerinde başarıyla çalıştırılacaktır çünkü bu iOS sürümünden başlayarak Apple ABI kararlılığını kullanıma sunar ve 12.2+ sürümünden itibaren her iOS Swift çalışma zamanı kitaplıklarını içerir ve bu kitaplıklar uygulamanızı Swift 5.1+ ile derlenmiş olarak çalıştırmak için kullanılabilir. Önceki iOS sürümleri için destek eklemeniz gerekiyorsa, gerçekleştirmeniz gereken birkaç adım daha vardır:

  1. iOS 12.1 ve öncesi için destek eklemek için çerçevenizi derlemek için kullanılan belirli Swift dylibs'leri göndermek istiyorsunuz. Gerekli kitaplıkları IPA'nızla işlemek ve kopyalamak için Xamarin.iOS.SwiftRuntimeSupport NuGet paketini kullanın. Hedef projenize NuGet başvurusunu ekleyin ve uygulamayı yeniden oluşturun. Başka adım gerekmez, NuGet paketi derleme işlemiyle birlikte yürütülen belirli görevleri yükler, gerekli Swift dylibs'lerini belirler ve bunları son IPA ile paketler.

  2. Uygulamayı uygulama mağazasına göndermek için, IPA dosyasını ve SwiftSupport klasör dylibs'lerini AppStore tarafından kabul edilecek şekilde güncelleştiren Xcode ve distribute seçeneğini kullanmak istiyorsunuz:

    ○ Uygulamayı arşivle. Mac için Visual Studio menüsünde Yayımlama için Arşiv Oluştur'a > tıklayın:

    visual studio archive for publishing

    Bu eylem projeyi oluşturur ve dağıtım için Xcode tarafından erişilebilen Düzenleyici'ye ulaşır.

    ○ Xcode ile dağıt. Xcode'ı açın ve Pencere > Düzenleyicisi menü seçeneğine gidin:

    visual studio archives

    Önceki adımda oluşturulan arşivi seçin ve Uygulamayı Dağıt düğmesine tıklayın. Uygulamayı AppStore'a yüklemek için sihirbazı izleyin.

  3. Bu adım isteğe bağlıdır, ancak uygulamanızın iOS 12.1 ve önceki sürümlerde ve 12.2'de çalışabildiğini doğrulamak önemlidir. Test Bulutu ve UITest çerçevesi yardımıyla bunu yapabilirsiniz. UiTest projesi ve uygulamayı çalıştıran temel bir UI testi oluşturun:

    • Bir UITest projesi oluşturun ve Xamarin.iOS uygulamanız için yapılandırın:

      visual studio uitest new

      İpucu

      UiTest projesi oluşturma ve bunu uygulamanız için yapılandırma hakkında daha fazla bilgiyi aşağıdaki bağlantıdan bulabilirsiniz.

    • Uygulamayı çalıştırmak ve Swift SDK özelliklerinden bazılarını kullanmak için temel bir test oluşturun. Bu test uygulamayı etkinleştirir, oturum açmayı dener ve ardından iptal düğmesine basar:

      [Test]
      public void HappyPath()
      {
          app.WaitForElement(StatusLabel);
          app.WaitForElement(LoginButton);
          app.Screenshot("App loaded.");
          Assert.AreEqual(app.Query(StatusLabel).FirstOrDefault().Text, "Gigya initialized with domain: us1.gigya.com");
      
          app.Tap(LoginButton);
          app.WaitForElement(GigyaWebView);
          app.Screenshot("Login activated.");
      
          app.Tap(CancelButton);
          app.WaitForElement(LoginButton);
          app.Screenshot("Login cancelled.");
      }
      

      İpucu

      UITests çerçevesi ve UI Otomasyonu hakkında daha fazla bilgiyi aşağıdaki bağlantıdan edinebilirsiniz.

    • Uygulama merkezinde bir iOS uygulaması oluşturun, testi çalıştırmak için yeni bir cihaz kümesiyle yeni bir test çalıştırması oluşturun:

      visual studio app center new

      İpucu

      Aşağıdaki bağlantıdan AppCenter Test Bulutu hakkında daha fazla bilgi edinin.

    • Appcenter CLI'yi yükleme

      npm install -g appcenter-cli
      

      Önemli

      v6.3 veya sonraki bir düğümün yüklü olduğundan emin olun

    • Aşağıdaki komutu kullanarak testi çalıştırın. Ayrıca appcenter komut satırınızın şu anda oturum açmış olduğundan emin olun.

      appcenter test run uitest --app "Mobile-Customer-Advisory-Team/SwiftBinding.iOS" --devices a7e7cb50 --app-path "Xamarin.SingleView.ipa" --test-series "master" --locale "en_US" --build-dir "Xamarin/Xamarin.SingleView.UITests/bin/Debug/"
      
    • Sonucu doğrulayın. AppCenter portalında Uygulama Testi Testi > çalıştırmalarına > gidin:

      visual studio appcenter uitest result

      İstediğiniz test çalıştırmasını seçip sonucu doğrulayın:

      visual studio appcenter uitest runs

Xamarin.iOS bağlama kitaplığı aracılığıyla yerel swift çerçevesi kullanan temel bir Xamarin.iOS uygulaması geliştirdiniz. Örnek, seçilen çerçeveyi kullanmak için basit bir yol sağlar ve gerçek uygulamada daha fazla API'yi kullanıma sunmanız ve bu API'ler için meta veriler hazırlamanız gerekir. Meta veri oluşturmak için betik, çerçeve API'leri için gelecekteki değişiklikleri basitleştirir.