tvOS is the operating system for Apple TV.

Posts under tvOS tag

63 Posts

Post

Replies

Boosts

Views

Activity

How to Properly Integrate Google IMA SDK for Pre-roll, Mid-roll, and Post-roll Ads in a tvOS App using TVJS and Swift?
I'm working on a tvOS application that plays video content using TVMLKit/TVJS. I'm trying to integrate Google IMA SDK to show pre-roll, mid-roll, and post-roll ads in my app. Here’s what I’ve done so far: Video playback is handled through JavaScript in application.js. Ads are managed in Swift using Google IMA SDK. I use the evaluateJavaScript bridge to control video playback from Swift. I pause and resume the TVJS player (Player object) using a function like startPlayingVideo(value) from Swift based on the ad lifecycle. Current Flow: When the video is about to start, I call loadAds() from JS. This presents a Swift ViewController that handles IMA ad requests. On adsManagerDidRequestContentPause, I pause the video using JS via the bridge. On adsManagerDidRequestContentResume, I resume the video. The Issue: This setup doesn't behave consistently: Sometimes the ad plays in the background and video started playing as well but can not see the ad. Not able to see the post-roll ads Relevant Code Snippets: application.js function startPlayingVideo(value) { if (playerReference != undefined) { if (value == true) { playerReference.play(); else { playerReference.pause(); } } } function playVideo(videoURL) { setup playerReference, push mediaItem, etc. loadAds(); player.present(); } AppDelegate.swift let loadAds: @convention(block) () -\> Void = { DispatchQueue.main.async { let adManagerVC = ViewController() AppDelegate.tvController?.navigationController.present(adManagerVC, animated: true) } } let updateVideoPlayTime: @convention(block) (Double) -\> Void = { time in CustomContentPlayhead.shared.currentTime = TimeInterval(time) } ViewController.swift func adsManagerDidRequestContentPause(\_ adsManager: IMAAdsManager) { showAdUI() playerViewController.player?.pause() } func adsManagerDidRequestContentResume(\_ adsManager: IMAAdsManager) { hideAdUI() // Expecting JS video to resume via bridge } And yeah my IMSDK Implementation is working fine if I am using it with swift AVPlayer. What I Need Help With: Best practice for coordinating video playback between JS (Player) and Swift (IMAAdsManager). How can I sync the playhead reliably between JS and Swift? Is there a better way to pause/resume TVJS player from Swift during ad lifecycle? How to reliably insert mid-roll ads when the playback is primarily controlled in JS? Any insights, code examples, or recommended architecture improvements would be greatly appreciated!
0
0
175
Jun ’25
tvOS App Icon & Top Shelf Image
ISSUE: Warning: None of the input catalogs contained a matching App Icon & Top Shelf Image brand assets collection named "AppIcon" INFORMATION: So I currently have my app published and it works for iOS, and visionOS. (iPhone, iPad, Mac & Apple Vision Pro) There is one target for all OS versions. I have recently updated it to work with tvOS, however upon building I run into the warning listed at the top of this post. I have the following within the project: 'AppIcon.icon' (from the new icon composer for iOS, macOS and watchOS) And within .xcassets: 'AppIcon' (which contains the majority of the icons) 'Brand Assets' Folder (created by right click, tvOS, New tvOS App Icon and Top Shelf Image; which contains these icons in layers and the correct sizes) Brand Assets retains the names created by Xcode, App Icon - App Store, App Icon, Top Shelf Image Wide, Top Shelf Image In "General" in the target, I have AppIcon, still listed as the AppIcon name. Adding a second entry here for just tvOS does not resolve my issue, our could be that I do not what to call it so it can properly find it. QUESTION: What am I missing so that the build process detects these images properly and completes a successful build for tvOS? I am assuming I need to add options to the App Icons and Launch Screens area, but what is the name I place here for tvOS? SCREENSHOTS:
1
0
389
Jun ’25
tvOS 26 removes ability to restrict apps with passcode
Please make sure this feature gets placed back. Parents need a way to provide the ability for kids to watch and not watch at their discretion. The new system doesn’t allow this to happen. Are there any workarounds?
Replies
0
Boosts
0
Views
140
Activity
Jun ’25
How to Properly Integrate Google IMA SDK for Pre-roll, Mid-roll, and Post-roll Ads in a tvOS App using TVJS and Swift?
I'm working on a tvOS application that plays video content using TVMLKit/TVJS. I'm trying to integrate Google IMA SDK to show pre-roll, mid-roll, and post-roll ads in my app. Here’s what I’ve done so far: Video playback is handled through JavaScript in application.js. Ads are managed in Swift using Google IMA SDK. I use the evaluateJavaScript bridge to control video playback from Swift. I pause and resume the TVJS player (Player object) using a function like startPlayingVideo(value) from Swift based on the ad lifecycle. Current Flow: When the video is about to start, I call loadAds() from JS. This presents a Swift ViewController that handles IMA ad requests. On adsManagerDidRequestContentPause, I pause the video using JS via the bridge. On adsManagerDidRequestContentResume, I resume the video. The Issue: This setup doesn't behave consistently: Sometimes the ad plays in the background and video started playing as well but can not see the ad. Not able to see the post-roll ads Relevant Code Snippets: application.js function startPlayingVideo(value) { if (playerReference != undefined) { if (value == true) { playerReference.play(); else { playerReference.pause(); } } } function playVideo(videoURL) { setup playerReference, push mediaItem, etc. loadAds(); player.present(); } AppDelegate.swift let loadAds: @convention(block) () -\> Void = { DispatchQueue.main.async { let adManagerVC = ViewController() AppDelegate.tvController?.navigationController.present(adManagerVC, animated: true) } } let updateVideoPlayTime: @convention(block) (Double) -\> Void = { time in CustomContentPlayhead.shared.currentTime = TimeInterval(time) } ViewController.swift func adsManagerDidRequestContentPause(\_ adsManager: IMAAdsManager) { showAdUI() playerViewController.player?.pause() } func adsManagerDidRequestContentResume(\_ adsManager: IMAAdsManager) { hideAdUI() // Expecting JS video to resume via bridge } And yeah my IMSDK Implementation is working fine if I am using it with swift AVPlayer. What I Need Help With: Best practice for coordinating video playback between JS (Player) and Swift (IMAAdsManager). How can I sync the playhead reliably between JS and Swift? Is there a better way to pause/resume TVJS player from Swift during ad lifecycle? How to reliably insert mid-roll ads when the playback is primarily controlled in JS? Any insights, code examples, or recommended architecture improvements would be greatly appreciated!
Replies
0
Boosts
0
Views
175
Activity
Jun ’25
tvOS App Icon & Top Shelf Image
ISSUE: Warning: None of the input catalogs contained a matching App Icon & Top Shelf Image brand assets collection named "AppIcon" INFORMATION: So I currently have my app published and it works for iOS, and visionOS. (iPhone, iPad, Mac & Apple Vision Pro) There is one target for all OS versions. I have recently updated it to work with tvOS, however upon building I run into the warning listed at the top of this post. I have the following within the project: 'AppIcon.icon' (from the new icon composer for iOS, macOS and watchOS) And within .xcassets: 'AppIcon' (which contains the majority of the icons) 'Brand Assets' Folder (created by right click, tvOS, New tvOS App Icon and Top Shelf Image; which contains these icons in layers and the correct sizes) Brand Assets retains the names created by Xcode, App Icon - App Store, App Icon, Top Shelf Image Wide, Top Shelf Image In "General" in the target, I have AppIcon, still listed as the AppIcon name. Adding a second entry here for just tvOS does not resolve my issue, our could be that I do not what to call it so it can properly find it. QUESTION: What am I missing so that the build process detects these images properly and completes a successful build for tvOS? I am assuming I need to add options to the App Icons and Launch Screens area, but what is the name I place here for tvOS? SCREENSHOTS:
Replies
1
Boosts
0
Views
389
Activity
Jun ’25