web-dev-qa-db-ja.com

iOSアプリをtvOSに拡張する方法

TvOSに拡張する必要があるiOSアプリがあります。私が見つけたすべての情報は、ゼロから始める方法を説明しています!アプリをtvOSに拡張する方法はありますか、それとも新しいプロジェクトを開始する必要がありますか?

pdate1:​​私の質問は、既存のプロジェクトを拡張して、最初からビルドせずにtvOSをサポートする方法ですか?

pdate2: AppleのWebサイトのJess Bowerポイント:

App Storeでアプリのユニバーサル購入を有効にすることで、iOSと新しいApple TVの両方でお気に入りのアプリを1回の購入で楽しむことができます。

つまり、既存のプロジェクトで新しいバンドルを作成し、「ユニバーサル」購入を有効にして、App Storeで1つのアプリとしてカウントする必要があります。

57
BlackM

TvOS SDKはiOSに基づいていますが、互換性はありません。最初のiPadがリリースされたときとは異なり、新しいApple TVはiOSアプリを実行できません。

TVのAppStoreには、tvOS専用にビルドされたアプリのみが含まれます。

Apple TV向けのアプリを作成しようとしているiOS開発者の場合、新しいドキュメントページを確認することをお勧めします。 https://developer.Apple.com/library/content/ documentation/General/Conceptual/AppleTV_PG/index.html#// Apple_ref/doc/uid/TP40015241-CH12-SW1

具体的には、Inherited iOS Frameworksセクションをチェックして、既存のiOSプロジェクトからすぐに動作するものを理解してください。

27
Aaron Wasserman

Xcode 7.1(tvOS SDKを導入)では、tvOSターゲットを他の(File-> New-> Target ...-> tvOS-> ...)として追加でき、Objective-CとSwiftの両方をサポートするため、はい-iOSとtvOSアプリ間でコードを共有することができます。ソースターゲットメンバーシップを確認し、tvOSターゲットで有効にするだけです。 iOSおよびtvOSアプリ全体で購入を延長するには、ユニバーサル購入を使用する必要があります。

20
Maciek Czarnik

また、tvOSの新しいターゲットを追加することは、特にObjective-cまたはSwiftプロジェクト間で共有するコードがたくさんある場合)の方法だと思います。

共有コードにtvOSでサポートされていないタイプが存在する可能性がある場合、これらのプリプロセッサシンボルを使用して、tvOSの代替コードスニペットを提供しました。

#if TARGET_OS_IOS
// iOS-specific code
#Elif TARGET_OS_TV
// tvOS-specific code
#endif
16
Simon Tillson

変更に必要なすべてのものを見つけるのに少し時間がかかりましたが、このリストがそれをカバーするはずです。

  1. iOSターゲットをクリックして複製する
  2. 新しいtvOSターゲットのベースSDKを最新のtvOSに変更します
  3. info.plistのコピーを作成し、tvOSがその1つを指すようにします
  4. すべてのtvOSアイコンを作成し、イメージを起動します
  5. tvOSビルド設定のTARGETED_DEVICE_FAMILYを3に設定します
  6. コードの新しいtvOS固有バージョンを追加します。 shouldAutorotateなし、prefersStatusBarHiddenなど。
16
richy

いくつかの制限と課題を列挙するだけです:
1。 Apple TV。アプリの永続的なローカルストレージはありません。データはiCloudに保存する必要があります。

2。 Apple TVアプリは200MBに制限されています。オンデマンドリソース(App Storeでホストされるアプリコンテンツ)を使用する必要があります。利点は、アプリのサイズが小さくなることと、アプリのリソースの遅延読み込みです。

3。 UIは大幅に異なります。ヒューマンインターフェイスガイドラインは ドキュメントごと に従ってください

4。 JavaScriptとTVMLフレームワークを使用してクライアントサーバーアプリを作成します。

5。 UIタッチフォーカスの制御。 UIFocusEnvironmentは、ビュー階層のブランチのフォーカス関連の動作を制御します。 UIViewControllerは、UIFocusEnvironmentプロトコルに準拠しています。

6。視差アートワークの作成XcodeでLSRイメージを作成し、ターミナルを使用してLCRイメージを作成する必要があります。 UIImageオブジェクトは、LCR画像を正しく表示できます。

8
Vacca
  1. TvOSに新しいターゲットを追加する必要があります。それを行うには2つの方法があります

    • [ファイル]> [新規]> [ファイル...]> [tvOSターゲット]で新しいターゲットを追加します。
    • 既存のiOSターゲットを複製し、「ビルド設定」でTARGETED_DEVICE_FAMILYを3に、「サポートされるプラットフォーム」をtvOSに変更します
  2. ポッドは、pod installを使用してtvOSターゲットに追加する必要があります。 tvOSで使用できる/したいポッドの別のリストがあります。さまざまなターゲットのポッドは、次を使用してポッドファイルで分離できます。

    target 'iOS TARGET NAME' do
    pod 'podname', :git => 'https://github.com/name.git'
    end
    
    target 'tvOS TARGET NAME' do
    pod 'podname', :git => 'https://github.com/name.git'
    end
    
  3. 現在、ほとんどのポッドはtvOSをサポートしていません。これらのポッドの場合、プロジェクトでそれらを動作させる手順は次のとおりです。

    • ローカルディスクにgitリポジトリを複製します
    • ポッドのバージョンが別のターゲット(iOSターゲット)で使用されている場合は、名前を変更します。そうしないと、CocoaPodsが文句を言います。 RestKit-> RestKitTVおよびPodfileで:pathを使用して、クローンリポジトリの場所をポイントします。

      pod 'RestKitTV', :path => 'Other/RestKitTV'
      
    • クローンリポジトリのpodspecファイルを更新します。

      • 新しい名前と互換性があるように名前を変更します
      • プラットフォームをtvOSに変更するか、サポートされているプラ​​ットフォームのリストにtvOSを追加します

         Pod::Spec.new do |s|
         ..
         s.platform = :tvos
         ..
         end
        

        OR

         Pod::Spec.new do |s|
         ..
         s.tvos.deployment_target = '9.0'
         s.tvos.exclude_files = 'framework/Source/Mac', ....
         s.tvos.frameworks   = ['OpenGLES', 'CoreMedia', 'QuartzCore']
         ..
         end
        
  4. ファイルをターゲットに追加します。

    • ターゲットの「ビルドフェーズ」の「ソースのコンパイル」にソースコード(.mファイル)を追加します。
    • 「バンドルリソースのコピー」に画像を追加します
    • フレームワークを「ライブラリとバイナリをリンク」に追加します。すべてのフレームワークがtvOSと互換性があるわけではないことに注意してください
  5. TARGET_OS_TVおよびTARGET_OS_IOSマクロを使用して、tvOSの非互換コードを分離します

    #if !TARGET_OS_TV
        *iOS only code*
    #else
        *tvOS only code*
    #end
    
6
Dijam

+ Simon-Tillsonの答えは正しいが、iOS 8.1以前の下位互換性の問題があり、TARGET_OS_IOSが定義されていないSDK(古いXcodeバージョンの場合)

次のコードは、それを修正し、iOS 9.0/9.1 SDK +および以前の8.1以前のSDKSでも同じように動作します。

#if TARGET_OS_IOS || (TARGET_OS_IPHONE && !TARGET_OS_TV)
// iOS-specific code
#Elif TARGET_OS_TV
// tvOS-specific code
#endif
5
Danoli3

私のプロジェクトの場合、既存のiOSプロジェクトに新しいターゲットを追加し、いくつかのコードを適切に変更しました(いくつかの領域で#if os(tvOS/iOS)を使用)。 iOSデバイスまたはApple TV。)で同じアプリを実行できるようになりました。

TvOSにない唯一のフレームワークはWebKit(リッチテキストのレンダリングに必要でした)であり、代替メカニズムを考え出す必要がありました。

他の人が見ることができるように、私はこのプロジェクトをすぐに(10月末までに)オープンソースにするつもりです。

2

ビルド設定でBase SDKをTVos 9.xに変更することを忘れないでください。テレビシミュレーターを表示する必要があります

0
Pavlos