programing

iOS 앱을 tvOS로 확장하는 방법

nasanasas 2020. 12. 24. 23:48
반응형

iOS 앱을 tvOS로 확장하는 방법


tvOS로 확장해야하는 iOS 앱이 있습니다. 내가 찾은 모든 정보는 처음부터 시작하는 방법을 설명하고 있습니다! 내 앱을 tvOS로 확장 할 수있는 방법이 있습니까? 아니면 새로운 프로젝트를 시작해야합니까?

Update1 : 내 질문은 : 처음부터 빌드하지 않고 tvOS를 지원하도록 기존 프로젝트를 확장하는 방법입니다.

Update2 : Jess Bower가 Apple 웹 사이트에서 지적했습니다.

App Store에서 앱에 대한 범용 구매를 활성화하여 고객이 iOS 및 새로운 Apple TV에서 좋아하는 앱을 한 번의 구매로 즐길 수 있도록 지원합니다.

즉, 기존 프로젝트에서 새 번들을 만들고 "범용"구매를 활성화해야 App Store에서 하나의 앱으로 간주됩니다.


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

특히, 상속 된 iOS 프레임 워크 섹션을 확인 하여 기존 iOS 프로젝트에서 바로 사용할 수있는 작업에 대해 알아보세요.


Xcode 7.1 (tvOS SDK 도입)에서는 다른 것과 같이 tvOS 대상을 추가 할 수 있으며 (File-> New-> Target ...-> tvOS-> ...) Objective-C와 Swift를 모두 지원하므로 예 -iOS와 tvOS 앱간에 코드를 공유 할 수 있습니다. 소스 대상 멤버십을 확인하고 tvOS 대상에서 활성화하기 만하면됩니다. iOS 및 tvOS 앱에서 구매를 연장하려면 Universal Purchases를 사용해야합니다.


변경하는 데 필요한 모든 것을 찾는 데 시간이 조금 걸렸지 만이 목록은이를 다룰 것입니다.

  1. iOS 타겟을 클릭하고 복제
  2. 새 tvOS 대상의 기본 SDK를 최신 tvOS로 변경
  3. info.plist의 복사본을 만들고 tvOS가 그 하나를 가리 키도록합니다.
  4. 모든 tvOS 아이콘을 만들고 이미지를 시작하십시오.
  5. tvOS 빌드 설정을 위해 TARGETED_DEVICE_FAMILY를 3으로 설정하십시오.
  6. 새 tvOS 특정 버전의 코드를 추가하십시오 (예 : shouldAutorotate없이, prefersStatusBarHidden 등).

나는 또한 tvOS에 대한 새로운 타겟을 추가하는 것이 갈 길이라고 믿습니다. 특히 프로젝트간에 공유 할 객관적인 C 또는 신속한 코드가 많은 경우 더욱 그렇습니다.

공유 코드에 일부 tvOS 지원되지 않는 유형이있을 수있는 인스턴스의 경우 다음 전 처리기 기호를 사용하여 tvOS에 대한 대체 코드 조각을 제공했습니다.

#if TARGET_OS_IOS
// iOS-specific code
#elif TARGET_OS_TV
// tvOS-specific code
#endif

몇 가지 제한 사항과 과제를 나열하기 만하면됩니다.
1. Apple TV에는 앱을위한 영구 로컬 저장소가 없습니다. 데이터는 iCloud에 저장되어야합니다.

2. Apple TV 앱의 최대 크기는 200MB로 제한됩니다. 주문형 리소스 ( App Store에서 호스팅되는 앱 콘텐츠 )를 사용해야합니다. 이점은 더 작은 앱 크기와 앱 리소스의 지연로드입니다.

3. UI가 완전히 다릅니다. 휴먼 인터페이스 지침은 문서에 따라 따라야합니다 .

4. JavaScript 및 TVML 프레임 워크를 사용하여 클라이언트-서버 앱 만들기.

5. UI 터치 포커스 제어. UIFocusEnvironment는 뷰 계층 구조의 분기에 대한 포커스 관련 동작을 제어합니다. UIViewController는 UIFocusEnvironment 프로토콜을 따릅니다.

6. Parallax 아트 워크 만들기 Xcode로 LSR 이미지를 만든 다음 터미널을 사용하여 LCR 이미지를 만들어야합니다. UIImage 개체는 LCR 이미지를 올바르게 표시 할 수 있습니다.


  1. tvOS에 대한 새 대상을 추가해야합니다. 두 가지 방법이 있습니다.

    • 파일> 새로 만들기> 파일 ...> tvOS 대상을 통해 새 대상을 추가합니다.
    • 기존 iOS 대상을 복제하고 "Build Settings"에서 TARGETED_DEVICE_FAMILY를 3으로, "Supported Platforms"를 tvOS로 변경합니다.
  2. .NET을 사용하여 tvOS 대상에 포드를 추가해야합니다 pod install. tvOS에서 사용할 수있는 / 사용하려는 다른 pod 목록이있을 수 있습니다. 다른 대상에 대한 포드는 다음을 사용하여 Podfile에서 분리 할 수 ​​있습니다.

    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 repo 복제
    • 포드의 버전이 다른 대상 (iOS 대상)에서 사용중인 경우 이름을 변경하십시오. 그렇지 않으면 CocoaPods가 불평 할 것입니다.

      pod 'RestKitTV', :path => 'Other/RestKitTV'
      
    • 복제 된 저장소에서 podspec 파일을 업데이트합니다.

      • 새 이름과 호환되도록 이름 수정
      • 플랫폼을 tvOS로 변경하거나 지원되는 플랫폼 목록에 tvOS 추가

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

        또는

         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 파일)를 추가하십시오.
    • "번들 리소스 복사"에 이미지 추가
    • "Link Binary with Libraries"에 프레임 워크를 추가합니다. 모든 프레임 워크가 tvOS와 호환되는 것은 아닙니다.
  5. TARGET_OS_TV 및 TARGET_OS_IOS 매크로를 사용하여 tvOS 비 호환 코드 분리

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

+Simon-Tillson answer is correct, however I had some backwards compatibility issues with iOS 8.1 and below SDK's where TARGET_OS_IOS was not defined (for older Xcode versions)

The following code fixes that and works the same for iOS 9.0/9.1 SDK + and previous 8.1 and less SDKS.

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

In case of my project, I simply added a new target to the existing iOS project, and modified some code appropriately (using #if os(tvOS/iOS) in a few areas). I am now able to run the same app either on iOS devices or Apple TV.

The only framework missing in tvOS was WebKit (which was necessary to render rich text), and I needed to come up with an alternative mechanism.

I am going to open source this project soon (before the end of October), so that other people can take a look.


Don't forget to change the Base SDK into TVos 9.x in the build settings. It's necessary for the Tv simulator to show up

ReferenceURL : https://stackoverflow.com/questions/32489992/how-to-extend-ios-app-to-tvos

반응형