Xamarin で構築された tvOS アプリのトラブルシューティング

この記事では、Xamarin の tvOS サポートの使用中に発生する可能性がある問題について説明します。

既知の問題

Xamarin の tvOS サポートの現在のリリースには、次の既知の問題があります。

  • Mono Framework – Mono 4.3 Cryptography.ProtectedData は Mono 4.2 からデータの暗号化を解除できません。 その結果、保護された NuGet ソースが構成されている場合、NuGet パッケージはエラー Data unprotection failed で復元に失敗します。
    • 回避策 – Visual Studio for Mac では、パッケージの復元を再試行する前に、パスワード認証を使用するすべての NuGet パッケージ ソースを追加し直す必要があります。
  • Visual Studio for Mac w/ F# アドイン – Windows で F# Android テンプレートを作成するときにエラーが発生しました。 これは引き続き Mac で正しく機能するはずです。
  • Xamarin.Mac – ターゲット フレームワークが設定 Unsupportedされた Xamarin.Mac 統合テンプレート プロジェクトを実行すると、ポップアップ Could not connect to the debugger が表示されることがあります。
    • 考えられる回避策 – 安定チャネルで使用可能な Mono フレームワーク バージョンをダウングレードします。
  • Xamarin Visual Studio と Xamarin.iOS – Visual Studio で WatchKit アプリケーションを展開すると、エラー The file ‘bin\iPhoneSimulator\Debug\WatchKitApp1WatchKitApp.app\WatchKitApp1WatchKitApp’ does not exist が表示されることがあります。

GitHub見つけたバグを報告してください。

トラブルシューティング

次のセクションでは、Xamarin.tvOS で tvOS 9 を使用するときに発生する可能性がある既知の問題と、それらの問題の解決策を示します。

無効な実行可能ファイル - 実行可能ファイルにビットコードが含まれていません

Xamarin.tvOS アプリを Apple TV App Store に送信しようとすると、"Invalid Executable - The executable does not contain bitcode" (無効な実行可能ファイル - 実行可能ファイルにビットコードが含まれていません) という形式のエラー メッセージが表示されることがあります。

この問題を解決するには、次の操作を行います。

  1. Visual Studio for Mac で、ソリューション エクスプローラーで Xamarin.tvOS プロジェクト ファイルを右クリックし、[オプション] を選択します

  2. tvOS ビルドを選択し、リリース構成になっていることを確認します。

    Select tvOS Build options

  3. [追加の mtouch 引数] フィールドに追加--bitcode=asmonlyし、[OK] ボタンをクリックします。

  4. リリース構成でアプリをリビルドします。

tvOS アプリにビットコードが含まれていることを確認する

Xamarin.tvOS アプリ ビルドに Bitcode が含まれていることを確認するには、ターミナル アプリを開き、次のように入力します。

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

出力で、次を探します。

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

addrsize 異なりますが、他のフィールドは同じにする必要があります。

使用しているサードパーティの静的 () ライブラリが tvOS ライブラリ (.aiOS ライブラリではなく) に対してビルドされていること、およびビットコード情報も含まれていることを確認する必要があります。

有効なビットコードを含むアプリまたはライブラリの場合、 size 1 より大きくなります。 ライブラリにビットコード マーカーを含めることができるが、有効なビットコードが含まれていない場合があります。 次に例を示します。

無効なビットコード

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

有効なビットコード

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

上記の例で size 実行されている 2 つのライブラリの違いに注意してください。 このサイズの問題を解決するには、ビットコードが有効になっている Xcode アーカイブ ビルド (Xcode 設定 ENABLE_BITCODE) からライブラリを生成する必要があります。

arm64 スライスのみを含むアプリは、Info.plist の UIRequiredDeviceCapabilities の一覧に "arm64" も含まれている必要があります

公開のために Apple TV App Store にアプリを送信すると、次の形式でエラーが発生する可能性があります。

"arm64 スライスのみを含むアプリは、Info.plist の UIRequiredDeviceCapabilities の一覧に "arm64" も含まれている必要があります"

この場合は、ファイルを編集し、次のキーがあることを確認します Info.plist

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

アプリを再コンパイルしてリリースし、iTunes Connect に再送信します。

タスク "MTouch" の実行 -- FAILED

サード パーティ製ライブラリ (MonoGame など) を使用していて、リリースコンパイルに失敗し、長い一連のエラー メッセージが終わるTask "MTouch" execution -- FAILED場合は、追加のタッチ引数追加-gcc_flags="-framework OpenAL"してみてください。

Task MTouch execution

追加のタッチ引数にも含める--bitcode=asmonly必要があります。リンカー オプションを [すべてリンク] に設定し、クリーンコンパイルを実行します。

ITMS-90471 エラー。 大きいアイコンがありません

"ITMS-90471 エラー" という形式のメッセージが表示される場合。 リリースのために Xamarin.tvOS アプリを Apple TV App Store に送信しようとすると、大きなアイコンが見つかりません。次のチェックしてください。

  1. アプリ アイコンのドキュメントを使用して作成したファイルにAssets.car、大きなアイコンアセットが含まれていることを確認します。
  2. 最終的なアプリケーション バンドルにAssets.car、アイコンとイメージの操作に関するドキュメントのファイルが含まれていることを確認します。

無効なバンドル – ゲーム コントローラーをサポートするアプリは、Apple TV リモートもサポートする必要があります

または

無効なバンドル – GameController フレームワークを使用する Apple TV アプリは、アプリの Info.plist に GCSupportedGameControllers キーを含める必要があります

ゲーム コントローラーは、ゲームプレイを強化し、ゲームに没入感を提供するために使用できます。 また、ユーザーがリモートとコントローラーを切り替える必要がないように、標準の Apple TV インターフェイスを制御するために使用することもできます。

ゲーム コントローラーをサポートする Xamarin.tvOS アプリを Apple TV App Store に提出する場合、次の形式でエラー メッセージが表示されます。

"アプリ名" の最近の配信に関する 1 つ以上の問題が検出されました。 配信は成功しましたが、次の配信で次の問題を修正したい場合があります。

無効なバンドル – ゲーム コントローラーをサポートするアプリは、Apple TV リモートもサポートする必要があります。

または

無効なバンドル – GameController フレームワークを使用する Apple TV アプリは、アプリの Info.plist に GCSupportedGameControllers キーを含める必要があります。

解決策は、Siri Remote (GCMicroGamepad) のサポートをアプリの Info.plist ファイルに追加することです。 Micro Game Controller プロファイルは、Siri Remote をターゲットにするために Apple によって追加されました。 たとえば、次のキーを含めます。

<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/>

重要

Bluetooth ゲーム コントローラーは、エンド ユーザーが購入する可能性があるオプションの購入です。アプリでは、ユーザーに購入を強制することはできません。 アプリがゲーム コントローラーをサポートしている場合は、すべての Apple TV ユーザーがゲームを使用できるように、Siri Remote もサポートする必要があります。

詳細については、Siri リモートおよび Bluetooth コントローラーのドキュメントの「ゲーム コントローラーの操作」セクションを参照してください。

互換性のないターゲット フレームワーク: .NetPortable、Version=v4.5、Profile=Profile78

Xamarin.tvOS プロジェクトにポータブル クラス ライブラリ (PCL) を含めようとすると、次のようなメッセージが表示されることがあります。

互換性のないターゲット フレームワーク: .NetPortable、Version=v4.5、Profile=Profile78

この問題を解決するには、次の内容で呼び出された Xamarin.TVOS.xml XML ファイルを追加します。

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

次のパスへ:

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

パス内のプロファイル番号が PCL のプロファイル番号と一致している必要があることに注意してください。

このファイルを配置すると、PCL ファイルを Xamarin.tvOS プロジェクトに正常に追加できるようになります。