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 と 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 ビルド] を選択し、リリース構成になっていることを確認します。

    [tvOS ビルド] のオプションを選択します

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

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

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

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

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 は異なりますが、他のフィールドは同一のはずです。

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

有効なビットコードを含むアプリまたはライブラリの場合、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

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

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

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

"Apps that only contain the arm64 slice must also have “arm64” in the list of UIRequiredDeviceCapabilities in Info.plist" (arm64 スライスのみを含むアプリは、Info.plist の UIRequiredDeviceCapabilities のリストに "arm64" も含める必要があります)

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

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

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

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

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

タスク MTouch の実行

[追加の mtouch 引数]--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 Remote および 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 プロジェクトに正常に追加できるようになります。