Xamarin ile oluşturulan tvOS uygulamalarında sorun giderme

Bu makale, Xamarin'in tvOS desteğiyle çalışırken karşılaşabileceğiniz bilinen sorunları kapsar.

Bilinen Sorunlar

Xamarin'in tvOS desteğinin geçerli sürümünde aşağıdaki bilinen sorunlar vardır:

  • Mono Framework – Mono 4.3 Cryptography.ProtectedData, Mono 4.2'den gelen verilerin şifresini çözemiyor. Sonuç olarak, korumalı bir NuGet kaynağı yapılandırıldığında NuGet paketleri hatayla Data unprotection failed geri yüklenemeyecektir.
    • Geçici çözüm – Mac için Visual Studio paketleri geri yüklemeyi yeniden denemeden önce parola kimlik doğrulaması kullanan tüm NuGet paket kaynaklarını geri eklemeniz gerekir.
  • Mac için Visual Studio w/ F# Eklentisi – Windows'ta F# Android şablonu oluşturulurken hata oluştu. Bu, Mac'te düzgün çalışmaya devam etmelidir.
  • Xamarin.Mac – Hedef Çerçeve olarak ayarlanmış Xamarin.Mac birleşik şablon projesini Unsupportedçalıştırırken açılır Could not connect to the debugger pencere görüntülenebilir.
    • Olası Geçici Çözüm – Kararlı kanalımızda bulunan Mono framework sürümünü düşürun.
  • Xamarin Visual Studio & Xamarin.iOS – Visual Studio'da WatchKit uygulamaları dağıtılırken hata The file ‘bin\iPhoneSimulator\Debug\WatchKitApp1WatchKitApp.app\WatchKitApp1WatchKitApp’ does not exist görüntülenebilir.

Lütfen GitHub'da bulduğunuz hataları bildirin.

Sorun giderme

Aşağıdaki bölümlerde, xamarin.tvOS ile tvOS 9 kullanırken oluşabilecek bazı bilinen sorunlar ve bu sorunların çözümü listeleniyor:

Geçersiz Yürütülebilir Dosya - Yürütülebilir dosya bit kodu içermiyor

Bir Xamarin.tvOS uygulamasını Apple TV App Store'a göndermeye çalışırken, "Geçersiz Yürütülebilir Dosya - Yürütülebilir dosya bit kodu içermiyor" biçiminde bir hata iletisi alabilirsiniz.

Bu sorunu çözmek için aşağıdakileri yapın:

  1. Mac için Visual Studio Çözüm Gezgini Xamarin.tvOS Proje Dosyanıza sağ tıklayın ve Seçenekler'i seçin.

  2. tvOS Derlemesi'ni seçin ve Yayın yapılandırmasında olduğunuzdan emin olun:

    tvOS Derleme seçeneklerini belirleme

  3. Ek mtouch bağımsız değişkenleri alanına ekleyin --bitcode=asmonly ve Tamam düğmesine tıklayın.

  4. Yayın yapılandırmasında uygulamanızı yeniden oluşturun.

tvOS uygulamanızın Bitcode içerdiğini doğrulama

Xamarin.tvOS Uygulama derlemenizin Bitcode içerdiğini doğrulamak için Terminal uygulamasını açın ve aşağıdakileri girin:

otool -l /path/to/your/tv.app/tv

Çıktıda aşağıdakileri arayın:

Section
  sectname __bundle
   segname __LLVM
      addr 0x0000000100001000
      size 0x000000000000124f
    offset 4096
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0

addr ve size farklı olacaktır, ancak diğer alanlar aynı olmalıdır.

Kullandığınız tüm üçüncü taraf statik () kitaplıklarının tvOS kitaplıklarına (.aiOS kitaplıklarına değil) göre oluşturulduğuna ve bit kodu bilgilerini de içerdiğine emin olmanız gerekir.

Geçerli bit kodu size içeren uygulamalar veya kitaplıklar için , birden büyük olacaktır. Bir kitaplığın bit kodu işaretçisine sahip olabileceği, ancak geçerli bit kodu içermediği bazı durumlar vardır. Örneğin:

Geçersiz Bit Kodu

 $ otool -arch arm64 libLibrary.a | grep __bitcode -A 3
   sect name __bitcode
   segname __LLVM
      add 0x0000000000000670
      size 0x0000000000000001

Geçerli Bit Kodu

$ otool -l -arch arm64 libDownloadableAgent-tvos.a |grep __bitcode -A 3
   sectname __bitcode
   segname __LLVM
      addr 0x000000000001d2d0
      size 0x0000000000045440

Yukarıda listelenen örnekte çalıştırılan iki kitaplık arasındaki farka size dikkat edin. Kitaplık, bu boyut sorununa çözüm olarak bitcode özellikli bir Xcode arşiv derlemesinden (Xcode ayarı ENABLE_BITCODE) oluşturulmalıdır.

Yalnızca arm64 dilimini içeren uygulamaların info.plist içindeki UIRequiredDeviceCapabilities listesinde de "arm64" olması gerekir

Apple TV App Store'a yayın için bir uygulama gönderirken şu biçimde bir hata alabilirsiniz:

"Yalnızca arm64 dilimini içeren uygulamaların info.plist içindeki UIRequiredDeviceCapabilities listesinde de "arm64" olması gerekir"

Bu durumda dosyanızı Info.plist düzenleyin ve aşağıdaki anahtarlara sahip olduğundan emin olun:

<key>UIRequiredDeviceCapabilities</key>
<array>
  <string>arm64</string>
</array>

Uygulamanızı yayın için yeniden derleyip iTunes Bağlan'a yeniden gönderin.

"MTouch" görevi yürütme -- BAŞARISIZ

3. taraf kitaplığı (MonoGame gibi) kullanıyorsanız ve yayın derlemeniz ile biten Task "MTouch" execution -- FAILEDuzun bir hata iletisi dizisiyle başarısız olduysa, Ek dokunma bağımsız değişkenlerinize eklemeyi -gcc_flags="-framework OpenAL" deneyin:

Görev MTouch yürütmesi

Ayrıca Ek dokunma bağımsız değişkenlerine de eklemeniz--bitcode=asmonly, bağlayıcı seçeneklerinizin Tümünü Bağla olarak ayarlanmasını ve temiz bir derleme yapmanız gerekir.

ITMS-90471 hatası. Büyük simgesi eksik

"ITMS-90471 hatası" biçiminde bir ileti alırsanız. Büyük simgesi eksik" ifadesiyle apple TV App Store'a bir Xamarin.tvOS uygulaması göndermeye çalışırken lütfen aşağıdakileri denetleyin:

  1. Uygulama Simgeleri belgelerini kullanarak oluşturduğunuz dosyanıza Assets.car Büyük Simge varlıklarını eklediğinizden emin olun.
  2. Son uygulama paketinize Simgeler ve Görüntülerle Çalışma belgelerinden dosyayı eklediğinizden Assets.car emin olun.

Geçersiz paket – Oyun kumandalarını destekleyen bir uygulama, Apple TV uzaktan kumandasını da desteklemelidir

veya

Geçersiz paket – GameController çerçevesine sahip Apple TV uygulamaları, uygulamanın Info.plist dosyasında GCSupportedGameControllers anahtarını içermelidir

Oyun Kumandaları oyunu geliştirmek ve bir oyuna daldırma hissi sağlamak için kullanılabilir. Ayrıca standart Apple TV arabirimini denetlemek için de kullanılabilir, böylece kullanıcının uzak ve denetleyici arasında geçiş yapmaması gerekir.

Oyun Denetleyicisi desteğine sahip bir Xamarin.tvOS uygulamasını Apple TV App Store'a gönderiyorsanız ve şu şekilde bir hata iletisi alıyorsanız:

"Uygulama adı" için son tesliminizde bir veya daha fazla sorun tespit ettik. Tesliminiz başarılı oldu, ancak sonraki tesliminizde aşağıdaki sorunları düzeltmek isteyebilirsiniz:

Geçersiz paket – Oyun kumandalarını destekleyen bir uygulamanın Apple TV uzaktan kumandasını da desteklemesi gerekir.

veya

Geçersiz paket – GameController çerçevesine sahip Apple TV uygulamaları, uygulamanın Info.plist dosyasında GCSupportedGameControllers anahtarını içermelidir.

Çözüm, uygulamanızın Info.plist dosyasına Siri Remote (GCMicroGamepad) desteği eklemektir. Micro Game Controller profili Apple tarafından Siri Remote'un hedefine eklenmiştir. Örneğin, aşağıdaki anahtarları ekleyin:

<key>GCSupportedGameControllers</key>  
  <array>  
    <dict>  
      <key>ProfileName</key>  
      <string>ExtendedGamepad</string>  
    </dict>  
    <dict>  
      <key>ProfileName</key>  
      <string>MicroGamepad</string>  
    </dict>  
  </array>  
<key>GCSupportsControllerUserInteraction</key>  
<true/>

Önemli

Bluetooth Oyun Kumandaları, son kullanıcıların gerçekleştirebileceği isteğe bağlı bir satın alma işlemidir; uygulamanız kullanıcıyı satın almak için zorlayamaz. Uygulamanız Oyun Kumandalarını destekliyorsa, oyunun tüm Apple TV kullanıcıları tarafından kullanılabilmesi için Siri Remote'un da destekleniyor olması gerekir.

Daha fazla bilgi için Siri Remote ve Bluetooth Controllers belgelerimizin Oyun Kumandalarıyla Çalışma bölümümüze bakın.

Uyumsuz hedef çerçeve: . NetPortable, Version=v4.5, Profile=Profile78

Bir Xamarin.tvOS projesine Taşınabilir Sınıf Kitaplığı (PCL) eklemeye çalışırken, şu şekilde bir ileti alabilirsiniz:

Uyumsuz hedef çerçeve: . NetPortable, Version=v4.5, Profile=Profile78

Bu sorunu çözmek için aşağıdaki içeriğe sahip adlı Xamarin.TVOS.xml bir XML dosyası ekleyin:

<Framework Identifier="Xamarin.TVOS" MinimumVersion="1.0" Profile="*" DisplayName="Xamarin.TVOS"/>

Aşağıdaki yola:

/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/xbuild-frameworks/.NETPortable/v4.5/Profile/Profile259/SupportedFrameworks/

Yoldaki profil numarasının PCL'nin profil numarasıyla eşleşmesi gerektiğini unutmayın.

Bu dosya yerinde olduğunda, PCL dosyasını Xamarin.tvOS projesine başarıyla ekleyebilmeniz gerekir.