Xamarin ile oluşturulan tvOS uygulamalarının sorunlarını giderme

Bu makalede, Xamarin 'in tvOS desteğiyle çalışırken karşılaşabileceğiniz sorunlar ele alınmaktadır.

Bilinen Sorunlar

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

  • Mono Framework – mono 4,3 Cryptography. ProtectedData, mono 4,2 ' deki verilerin şifresini çözemez. sonuç olarak, Data unprotection failed korunan bir NuGet kaynağı yapılandırıldığında NuGet paketleri hatayla geri yükleme başarısız olur.
    • geçici çözüm : Mac için Visual Studio paketleri geri yüklemeyi yeniden denemeden önce, parola kimlik doğrulaması kullanan NuGet paket kaynaklarını geri yüklemeniz gerekir.
  • Mac için Visual Studio w/f # Add-in – Windows üzerinde bir F # Android şablonu oluşturulurken hata oluştu. Bu, Mac 'te yine de düzgün çalışır.
  • Xamarin. Mac : hedef Framework olarak ayarlanan Xamarin. Mac birleştirilmiş şablon projesini çalıştırırken , açılan pencere Could not connect to the debugger görünebilir.
    • Olası geçici çözüm : kararlı kanalımızda bulunan mono Framework sürümünü düşürme.
  • xamarin Visual Studio xamarin. iOS – Visual Studio 'da WatchKit uygulamaları dağıttığınızda hata The file ‘bin\iPhoneSimulator\Debug\WatchKitApp1WatchKitApp.app\WatchKitApp1WatchKitApp’ does not exist görünebilir.

Lütfen GitHubbulduğunuz hataları bildirin.

Sorun giderme

Aşağıdaki bölümlerde, Xamarin. tvOS ile tvOS 9 kullanılırken oluşabilecek bazı bilinen sorunlar ve bu sorunlara yönelik çözüm listelenmektedir:

Geçersiz yürütülebilir-yürütülebilir, bitcode 'u içermiyor

Apple TV App Store 'a bir Xamarin. tvOS uygulaması göndermeye çalışırken, "geçersiz yürütülebilir-yürütülebilir dosya bitcode içermiyor"biçiminde bir hata iletisi alabilirsiniz.

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

  1. Mac için Visual Studio, Çözüm Gezgini Xamarin. tvos Project dosyanıza sağ tıklayın ve seçenekler' i seçin.

  2. TvOS Build ' i seçin ve Sürüm yapılandırması üzerinde olduğunuzdan emin olun:

    TvOS derleme seçeneklerini belirleyin

  3. --bitcode=asmonly--bitcode=asmonly alanına ekleyin ve Tamam düğmesine tıklayın.

  4. Yayın yapılandırmasında uygulamanızı yeniden derleyin.

TvOS uygulamanızın Bitcode Içerdiği doğrulanıyor

Xamarin. tvOS uygulama derlemeniz 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ı olacak ancak diğer alanlar aynı olmalıdır.

Kullandığınız herhangi bir üçüncü taraf statik ( .a ) kitaplıklarının, tvOS kitaplıklarına (iOS kitaplıklarına değil) göre oluşturulduğundan ve ayrıca bitcode 'u bilgilerini içerdiğinden emin olmanız gerekir.

Geçerli bitcode 'u içeren uygulamalar veya kitaplıklar için birden size büyük olur. Bir kitaplığın bitcode 'u işaretleyicisi olabilir, ancak geçerli bitcode 'u içermeyen bazı durumlar vardır. Örnek:

Geçersiz Bitcode

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

Geçerli Bitcode

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

sizeListelenen örnekteki iki kitaplık arasındaki farkın yukarıda çalıştığını aklınızda edin. Kitaplık, ENABLE_BITCODE Bu boyut sorununa çözüm olarak bitcode 'u Enabled (Xcode ayarı) ile birlikte bir Xcode arşiv derlemesi tarafından oluşturulmalıdır.

Yalnızca arm64 dilimini içeren uygulamaların, Info. plist dosyasındaki UIRequiredDeviceCapabilities listesinde de "arm64" olması gerekir

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

"Arm64 dilimini içeren uygulamaların, Info. plist dosyasındaki UIRequiredDeviceCapabilities listesinde de" arm64 "olması gerekir.

Bu durumda, Info.plist dosyanızı 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 derleyin ve iTunes Bağlan 'a yeniden gönderin.

Görev "MTouch" yürütme--başarısız

Bir 3. taraf kitaplığı (MonoGame gibi) kullanıyorsanız ve yayın derlemeniz, uzun bir hata mesajıyla birlikte başarısız olduysa Task "MTouch" execution -- FAILED , -gcc_flags="-framework OpenAL"Task "MTouch" execution -- FAILEDeklemeyi deneyin:

Görev MTouch yürütmesi

--bitcode=asmonly--bitcode=asmonlyde dahil etmelisiniz, bağlayıcı seçeneklerinizin Tümünü bağla ve temiz bir derleme yapmak için ayarlanmış olması gerekir.

IMS-90471 hatası. Büyük simge eksik

"IMS-90471 hatası" biçiminde bir ileti alırsanız. Yayın için Apple TV App Store 'a bir Xamarin. tvOS uygulaması göndermeye çalışırken büyük simge eksik ", lütfen aşağıdakileri denetleyin:

  1. Assets.carAssets.car belgelerini kullanarak oluşturduğunuz büyük simge varlıklarını dosyanıza eklemiş olduğunuzdan emin olun.
  2. Assets.carDosyayı, son uygulama paketinizdeki Assets.car belgelerinden dahil olduğunuzdan emin olun.

Geçersiz paket: oyun denetleyicilerini destekleyen bir uygulama da Apple TV Remote 'ı desteklemelidir

veya

Geçersiz paket – GameController çerçevesi olan Apple TV Apps uygulamasının, uygulamanın Info. plist dosyasında GCSupportedGameControllers anahtarını içermesi gerekir

Oyun denetleyicileri oyun oynamak ve bir oyunda Immersion hakkında fikir sağlamak için kullanılabilir. Ayrıca, kullanıcının uzak ve denetleyicisi arasında geçiş yapabilmesi için standart Apple TV arabirimini denetlemek için de kullanılabilir.

Apple TV App Store 'a oyun denetleyicisi desteğiyle bir Xamarin. tvOS uygulaması gönderiyorsanız ve şu biçimde bir hata iletisi alıyorsanız:

"Uygulama adı" için en son teslimatta bir veya daha fazla sorun keşfettik. Teslimizin başarılı oldu, ancak sonraki teslimatta aşağıdaki sorunları düzeltmek isteyebilirsiniz:

Geçersiz paket: oyun denetleyicilerini destekleyen bir uygulama da Apple TV Remote ' i desteklemelidir.

veya

Geçersiz paket – GameController çerçevesi ile Apple TV Apps, uygulamanın Info. plist dosyasında GCSupportedGameControllers anahtarını içermelidir.

Çözüm, uygulamanızın dosyasına Siri Remote () desteği eklemektir GCMicroGamepadInfo.plist . Siri uzak 'ı hedeflemek için mikro oyun denetleyicisi profili Apple tarafından eklendi. Örneğin, aşağıdaki anahtarları dahil edin:

<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 denetleyicileri son kullanıcıların yapabilmesine yönelik isteğe bağlı bir satın alma, uygulamanız kullanıcıyı bir tane satın almaya zorlayamaz. Uygulamanız oyun denetleyicilerini destekliyorsa, oyunun tüm Apple TV kullanıcıları tarafından kullanılabilmesi için Siri Remote öğesini de desteklemesi gerekir.

daha fazla bilgi için, Siri Remote ve Bluetooth Controllers belgelerimizin oyun denetleyicileri ile çalışmamız bölümüne bakın.

Uyumsuz hedef çerçeve:. NetPortable, sürüm = v 4.5, profil = Profile78

Bir Xamarin. tvOS projesine taşınabilir bir sınıf kitaplığı (PCL) dahil edilmeye çalışılırken şu şekilde bir ileti alabilirsiniz:

Uyumsuz hedef çerçeve:. NetPortable, sürüm = v 4.5, profil = Profile78

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

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

Şu 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 söz konusu olduğunda, PCL dosyasını Xamarin. tvOS projesine başarıyla ekleyebilmelisiniz.