29.12.2020

Tvos App On Mac

According to Apple's release notes, via Mac Rumors the macOS Catalina 10.15.7 Supplemental Update improves the security of macOS and is recommended for all users. WatchOS 7.1 is available via Over-the-Air Update (Settings General Software Update) or by going to the Watch app on your iPhone and navigating to General Software. TvOS 14 includes a lot of valuable improvements, many of which I plan to use regularly. Oddly though, it includes zero changes to the Apple TV’s most important app: the TV app. Maybe updates to the TV app require more development time, and we’ll see something change later this year or early next year.

Your tvOS apps can deliver amazing experiences with stunning picture quality through 4K resolution, Dolby Vision, and HDR10 and immersive sound through Dolby Atmos. And with the Siri Remote, you have access to three-axis gyro data so you can create even more engaging gaming and interactive experiences. Creating apps for Apple TV. TvOS 14.2 update is now available for Apple TV New features we not revealed during the beta process, so this version is most likely bug fixes. TvOS 13.4.8, a free update, can be downloaded over the air through the Settings app on the ‌‌Apple TV‌‌ by going to System Software Update. ‌‌Apple TV‌‌ owners who have automatic.

Streaming is available in most browsers,
and in the WWDC app.

  • Add a new dimension to your tvOS app with SwiftUI. We'll show you how to build layouts powered by SwiftUI and customize your interface with custom buttons, provide more functionality in your app with a context menu, check if views are focused, and manage default focus. To get the most out of this session, you should be comfortable with SwiftUI. For a primer, watch “Introducing SwiftUI: Building Your First App” and “SwiftUI On All Devices.”

    Resources

    Related Videos

    WWDC 2020

    WWDC 2019

  • Download

    Hello, and welcome to WWDC.

    Hello, everyone. My name is Tanu Singhal, and I'm an engineer on the tvOS team.

    Today, we'll talk about building SwiftUI apps for Apple TV.

    We'll introduce new APIs, we'll discuss best practices, and we'll go over some examples that'll help you create experiences that look and feel familiar to TV users.

    First, we'll discuss button styles and context menus that are new on tvOS 14.

    Next, we'll talk about managing focus in our apps.

    And finally, we'll learn to create layouts that look good on the largest screen in the home. There are some button styles that are unique to TV.

    Let's look at an example. Say we're building an app for streaming music on Apple TV.

    Here's a mock-up that we received from our design team.

    They'd like us to create these buttons that have a movement effect when we drag on the Siri Remote, just like the one you see under 'Albums' here.

    To create such buttons in SwiftUI, we can use the new Card-Button-Style.

    A Card-Button creates a platter that raises and looks highlighted when it's focused.

    It also adds directional movement to the button when you drag on the Siri Remote.

    To create a Card-Button, you simply add the button style modifier to any button, and set it to Card-Button-Style.

    Card-Button-Styles can really enhance the appearance of your buttons.

    However, there might be times when you don't want the default highlighting and focus effects that we offer with the preexisting button styles.

    In such a case, you can create your own button style.

    This adds no existing effects for pressing and focused states.

    And a custom button style is really easy to configure and customize.

    To create your own button style, you first conform to the Button-Style protocol.

    then in the makeBody method, you can leverage the configuration to return any view.

    Once the button style is set up, it can be added to any button using the button style modifier. Now we've set up the buttons in our app, but we've received another feature request.

    When we long-press on an album button, we want to present some quick actions, like the ones you see here.

    These can be created easily in SwiftUI using context menus.

    Context menus can be added to any button or view and they're invoked after the long-press gesture.

    We can add actions to the context menu using regular buttons.

    Here's some code showing how you can create a context menu.

    We simply add the context menu modifier, and then we can add some buttons within it.

    As you've seen, it's really easy to use the new button styles and context menus. We think these will look great in your apps.

    Next, we'll discuss focus.

    Focus is the primary way to interact with a TV app.

    And it's incredibly important to be able to focus on views, as well as determine if a view is focused.

    To learn more about focus, let's look at another example from our music app.

    Here we have the 'Now Playing' screen.

    We want to focus on the currently playing song.

    And for this focused song, we would like to display the name of the artist, as well as the name of the album, along with some music emoji.

    For the songs that are not focused, we simply display the name of the artist without the name of the album.

    To implement this, first, we need to be able to focus on the Song-View.

    One way to do this is by using the focusable modifier. The focusable modifier creates a focusable wrapper on top of your existing view.

    Note that this modifier is not meant for intrinsically focusable views. So, if you have a button or list, or a UIKit view that manages focus in UIKit, then it's best to not have a focusable modifier on that, because this modifier will add another focusable wrapper on top of your existing view. To manage the focused and non-focused state, in tvOS 13, you would have to use the onFocusChange callback for the focusable modifier.

    However, new in tvOS 14, we're introducing the isFocused environment variable.

    This lets you check whether or not a view is in focus, even if the view itself is not focusable.

    The isFocused environment variable will return true if the nearest focusable ancestor of your view is focused.

    So now, we'll look at the code for the Song-View that we saw before.

    This just has an image followed by some text labels.

    We've refactored the text labels into a Details-View.

    Within the Details-View, we can simply use the environment variable for isFocused to check whether or not this view is focused.

    So if the Song-View that's the parent of the Details-View is focused, then our isFocused variable would be true.

    We'll use this isFocused variable to display either the artist and the album name, along with the emojis, or simply the artist name when the view is not focused.

    Notice, in our Song-View, we are using a button so we don't need to use the focusable modifier at all, because the button is focusable already.

    Using a button also has the advantage of giving us selection and accessibility for free.

    We've added the button style that's our own button style, because we didn't want the default highlighting and focus effect offered by the existing button styles.

    Now, at this point, our app is mostly set up, and it's ready to start streaming music.

    But, we also want to add a paid version of this app, so users can listen to premium content.

    To create this paid version, we are first setting up a sign in screen.

    This screen simply has a username and password field followed by a log in button.

    Notice that the username field is what's focused by default. tvOS will geometrically compute the view that should be focused on load. This is typically the topmost or leading focusable view on the screen.

    In this case, it makes sense for the username to be focused.

    However, there are times when we already know the username and password, and we want to focus on the log in button instead.

    To implement this in SwiftUI, we can use the new default focus APIs.

    We're introducing the prefersDefaultFocus modifier that allows you to specify the view that prefers to be focused by default. Now, we want to make sure that you don't accidentally change focus for an entire global view hierarchy when you're only working on a small custom view. To support this, we have created the focus-Scope modifier, which allows you to limit default focus preferences just to a specific view. We'll look at the code for the log in screen that we saw.

    This is simply a VStack with a TextField, a Secure-Field and a button. Now I'll add some focus management code to this.

    Don't worry about reading all of it at once. We'll go over it line by line.

    We have a state variable to figure out if the credentials are filled.

    Now, we add the prefersDefaultFocus modifier to the username TextField, and the first parameter of this modifier is a Boolean that should be true if this view prefers default focus. In this case, the username prefers default focus when the credentials are not filled.

    We'll also add the same modifier to the log in button, but this prefers default focus when the credentials are filled.

    Next, we want to limit our focus preferences just to the VStack that we're working on.

    To do this, we create a namespace.

    The namespace is a dynamic property that provides us with a unique ID which can be used to identify any view.

    We'll add this namespace to the focus-Scope modifier that we've added to our VStack.

    Next, we'll pass the same namespace to the prefersDefaultFocus modifiers as the second parameter.

    By doing this, we have set up our default focus preferences in a way that they apply only to this VStack. So if focus was meant to be within the VStack, then our username or log in button would be focused depending on whether or not the credentials are filled.

    However, if focus was supposed to be somewhere else in the view hierarchy, then our modifiers will not impact global focus, which is what we want.

    In addition to setting default focus, we also need to reset focus sometimes.

    tale of tales full movie downloadThis can be done using the new reset-Focus environment action.

    This environment action resets focus back to default and, again, the focus updates stay scoped to the namespace that you provide.

    So, in the sign in screen example that we saw earlier, let's say we also want to add a clear button, which clears the username and password and resets focus back to the username. To implement that, we'll use the reset-Focus environment action.

    Then, when the clear button is triggered, we call reset-Focus for the same namespace that we had in our focus-Scope.

    Since the credentials have been cleared at this point, our focus will get reset back to the username. In this section, we learned about the isFocus environment variable, as well as the new modifiers and environment actions that can be used to control default focus. We think you'll find these really useful as you create your SwiftUI apps.

    Finally, we'll learn to build layouts that are commonly seen on Apple TV. Here's a view that we saw earlier from the music streaming app.

    You may have seen similar layouts across various Apple TV apps.

    This is made up of shelves that scroll horizontally.

    To implement this screen, we can use the new Lazy Grids.

    Lazy Grids arrange child views in a grid container that scrolls vertically or horizontally.

    The grid items can specify properties such as size, alignment, and spacing, that help with building the layout.

    To learn more about grids, you can check out the following two sessions: In this session, though, we'll learn to leverage a Lazy Grid to build the layout that we just saw.

    In our Shelf-View, we have created a Scroll-View that scrolls horizontally.

    Within the horizontal Scroll-View, we have added a Lazy-H-Grid.

    Now, we can add a lot of items to this Lazy-H-Grid, and they won't all get initialized at once.

    They'll get loaded as and when they're needed, while we scroll.

    For the Lazy Grid, we also set up Grid-Items.

    Grid-Items can be a flexible or fixed size and we can customize the spacing between Grid-Items.

    Within our Lazy Grid, we simply add the content that we want to present in our cells.

    Now, our shelf is ready, and we can stack together multiple shelves in a VStack along with a few text labels to create the layout that we saw before.

    It's as easy as that to create beautiful Grid layouts on Apple TV. So, to recap, we encourage you to try out the new Card-Button Styles and context menus on tvOS 14.

    They're really easy to use, and they will look great in your apps.

    The new focus APIs can help you manage focus better in your apps, and we think you'll find them really useful.

    Finally, we hope you'll leverage Lazy Grids to quickly build layouts for tvOS. We cannot wait to see what you build next with SwiftUI.

Getting Started

To test beta versions of apps and App Clips using TestFlight, you’ll need to accept an email or public link invitation from the developer and have a device that you can use to test.

Members of the developer’s team can be given access to all builds of the app.

All other invited testers can access builds that the developer makes available to them. A developer can invite you to test with an email or a public link.

Required platforms

  • iOS apps: iPhone, iPad, or iPod touch running iOS 8 or later. App Clips require iOS 14 or later. iMessage apps and sticker packs require iOS 10 or later.
  • tvOS apps: Apple TV running tvOS 9 or later.
  • watchOS apps: Apple Watch running watchOS 2 or later.

TestFlight is not available for Mac apps.

Available Languages

TestFlight for both iOS and tvOS is available in Arabic, Catalan, Chinese (simplified), Chinese (traditional), Croatian, Czech, Danish, Dutch, English (Australia), English (U.K.), English (U.S.), Finnish, French, French (Canada), German, Greek, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malaysian, Norwegian, Polish, Portuguese (Brazil), Portuguese (Portugal), Romanian, Russian, Slovak, Spanish, Spanish (Latin America), Swedish, Thai, Turkish, Ukrainian, and Vietnamese.

Installing and Testing Beta Apps

Each build is available to test for up to 90 days, starting from the day the developer uploads their build. You can see how many days you have left for testing under the app name in TestFlight. TestFlight will notify you each time a new build is available and will include instructions on what you need to test. Alternatively, with TestFlight 3 or later, you can turn on automatic updates to have the latest beta builds install automatically.

When the testing period is over, you'll no longer be able to open the beta build. To install the App Store version of the app, download or purchase the app from the App Store. In-app purchases are free only during beta testing, and any in-app purchases made during testing will not carry over to App Store versions.

Installation

To get started, install TestFlight on the device you’ll use for testing. Then, accept your email invitation or follow the public link invitation to install the beta app. You can install the beta app on up to 30 devices.

Installing a Beta iOS App via Email or Public Link Invitation

  1. Install TestFlight on the iOS device that you’ll use for testing.
  2. Open your invitation email or tap on the public link on your iOS device.
  3. Tap View in TestFlight or Start Testing; or tap Install or Update for the app you want to test.

Installing a Beta tvOS App via Email Invitation

  1. Install TestFlight on Apple TV.
  2. Open your invitation email on a mobile device or computer.
  3. Click or tap Start Testing. You'll be taken to a web page with a redemption code.
  4. Open TestFlight on Apple TV.
  5. Go to Redeem and enter the redemption code.

Installing a Beta tvOS App via Public Link Invitation

  1. Install TestFlight on an iOS device and Apple TV where you can sign in to the same App Store account.
  2. Tap the public link on your iOS device.
  3. Tap Accept for the app you want to test.
  4. Open TestFlight on Apple TV. You must be signed in to the same App Store account you used on your iOS device.
  5. Install the app you want to test.

Installing a Beta watchOS App via Email or Public Link Invitation

  1. Install TestFlight on the iOS device that you’ll use for testing.
  2. Open your invitation email or tap on the public link on your iOS device.
  3. Tap View in TestFlight or Start Testing.
  4. If you're testing an app that’s for Apple Watch only, tap Install or Update from the Apps list.
  5. If the app is an iOS app that includes an Apple Watch app, install the iOS app first, then from the App Details page under the Information section, you will see a Watch section. If the Apple Watch app is available and compatible with your watch, you’ll see a button to install it.

Testing

Testing iMessage Apps (iOS 10 or later)

  1. Install TestFlight on the iOS device that you’ll use for testing.
  2. Open your invitation email or tap on the public link on your iOS device.
  3. Tap View in TestFlight or Start Testing; or tap Install or Update for the app you want to test.
  4. If you’re testing an iOS app that includes an iMessage app, launch the beta app from the home screen as you would with any app.
  5. If you’re testing an app that’s for iMessage only or a sticker pack, you can launch it from inside Messages.

Testing Beta App Clips (iOS 14 or later)

After accepting your email or public link invitation to test the app, you’ll see the option to test the App Clip in TestFlight. You can install either the app or the App Clip on your device (but not both at once), and can replace one with the other at any time. If the app is installed on your device, testing the App Clip will replace the app and some app data may be lost. You can reinstall the app by tapping Install on the app’s page in TestFlight.

  1. Install TestFlight on the iOS device that you’ll use for testing.
  2. Open your invitation email or tap on the public link on your iOS device.
  3. Tap View in TestFlight or Start Testing; or tap Install or Update for the app you want to test.
  4. Go to the app’s page in TestFlight.
  5. In the App Clips section, tap TEST next to the beta App Clip you want to test.

Managing Automatic Updates

After installing TestFlight 3 or later, you’ll be prompted to turn on automatic updates. This allows the latest available beta builds to install automatically. TestFlight will notify you each time a new build is installed on your device. Automatic updates can be turned off at any time.

Change automatic update settings for all of the beta apps you’re testing using TestFlight:

TestFlight for iOS

  1. Open TestFlight and tap Settings in the upper-right corner.
  2. Tap Automatic Updates.
  3. Tap On or Off.

TestFlight for tvOS

  1. Open TestFlight and click the Settings tab at the top.
  2. Under GENERAL INFORMATION, turn Automatic Updates On or Off.

Change automatic update settings for individual beta apps you’re testing using TestFlight:

TestFlight for iOS

  1. Open TestFlight and go to the app’s page.
  2. Under App Information, turn Automatic Updates On or Off.

TestFlight for tvOS

  1. Open TestFlight and go to the app’s page.
  2. Under the app icon, click the More button.
  3. Click Turn On Automatic Updates or Turn Off Automatic Updates.

Testing Previous Builds

When viewing an app in TestFlight, you'll see the latest available build by default. You can still test all other builds that are available to you.

  1. Go to the app’s page in TestFlight.
  2. Tap on Previous Builds.
  3. Tap and install the build you want to test. The one you select will replace what’s currently installed.
Macbook

If you already have the App Store version of the app installed on your device, the beta version of the app will replace it. After you download the beta app, you’ll see an orange dot next to its name that identifies it as a beta.

When you accept a TestFlight invitation through a public link, your name and email address are not visible to the developer. However, they’ll be able to see your number of sessions and crashes, the day you installed their app, and the latest installed version.

Giving Feedback

While testing a beta version of an app or App Clip, you can send the developer feedback about issues you experience or make suggestions for improvements based on the “What to Test” content. Feedback you submit through TestFlight is also provided to Apple as part of the TestFlight service.

iOS Apps

If your device is running iOS 13 or later, you can send feedback through the TestFlight app or directly from the beta app or beta App Clip by taking a screenshot, and you can report a crash after it occurs. If you were invited to test an app with a public link, you can choose not to provide your email address or other personal information to the developer. Apple will also receive all feedback you submit and will be able to tie it to your Apple ID.

Sending Feedback through the TestFlight App (iOS 13 or later)

  1. Open the TestFlight app on your device.
  2. From the Apps list, tap the app.
  3. Tap Send Beta Feedback.
  4. In the share dialog, tap Include Screenshot to choose a screenshot. If you don’t want to send an attachment, tap Don't Include Screenshot.
  5. Add your comments (up to 2,000 characters), and optionally enter your email address if you were invited with a public link.
  6. Tap Submit.

Sending Feedback through the Beta App (iOS 13 or later)

When you take a screenshot while testing a beta app or beta App Clip, you can send the screenshot with feedback directly to the developer without leaving the app or App Clip Experience. Developers can opt out of receiving this type of feedback, so this option is only available if the developer has it enabled.

  1. Take a screenshot on your device. For details on how to take screenshots, see Take a screenshot on your iPhone, Take a screenshot on your iPad, and Take a screenshot on your iPod touch.
  2. A thumbnail of your screenshot appears in the lower-left corner of your device. Tap the thumbnail and, if needed, add drawings and text with Markup. Then tap the Done button.
  3. Tap the Share Beta Feedback.
  4. Optionally, you can add comments (up to 2,000 characters), and your email address if you were invited with a public link.
  5. Tap Submit.

Tvos App On Mac App Store

Sending Crash Information (iOS 13 or later)

If you experience a crash while testing a beta app or beta App Clip, you’ll receive an alert asking if you want to send crash details to the developer through TestFlight. Developers can opt out of receiving this type of feedback, so this option is only available if the developer has it enabled.

When the crash alert displays, tap Share, add any additional comments, and tap Submit.

Sending Feedback through the TestFlight App (iOS 12.4 or earlier)

If your device is running iOS 12.4 or earlier, tap Send Beta Feedback to compose an email to the developer. The feedback email contains detailed information about the beta app and about your iOS device. You can also provide additional information, such as necessary screenshots and steps required to reproduce any issues. /auto-update-apps-mac.html. Your email address will be visible to the developer when you send email feedback through the TestFlight app even if you were invited through a public link.

Contacting the Developer

If you need to contact the developer while you’re testing their beta app for reasons other than feedback, you can view their email address. In TestFlight, go to the app’s page, go to the Information section, and tap App Details to view the developer’s email address.

Tvos App On Macbook

tvOS Apps

To provide feedback on a tvOS app, open TestFlight, go to app’s page, go to the Information section to view the developer's email address, and send them an email. Provide as much information as you can, including screenshots and steps required to reproduce any issues you encountered. Please note that your email address will be visible to the developer when you send email feedback through TestFlight.

Opting Out from Testing

If you do not accept your email invitation, the beta app will not be installed and you will not be listed as a tester, and Apple will not take any action with respect to your email address. Additionally, you can unsubscribe using the link at the bottom of the invitation email to notify the developer that you’d like to be removed from their list. If you accepted the invitation and no longer wish to test the app, you can delete yourself as a tester in the app’s Information page in TestFlight by tapping Stop Testing.

App

Your Privacy and Data

Tvos App On Mac Ios

When you test beta apps and beta App Clips with TestFlight, Apple will collect and send crash logs, your personal information such as name and email address, usage information, and any feedback you submit to the developer. Information that is emailed to the developer directly is not shared with Apple. The developer is permitted to use this information only to improve their App and is not permitted to share it with a third party. Apple may use this information to improve the TestFlight app.

Apple retains TestFlight data for one year. To view and manage your data with Apple, including your data that is sent to Apple through TestFlight, visit Data and Privacy. For more information about how the developer handles your data, consult their privacy policy. To request access to or deletion of your TestFlight data, you should contact the developer directly.

Information Shared by Using TestFlight

Tvos App On Mac Os

The following data is collected by Apple and shared with the developer when you use TestFlight. If you accepted an invitation through a public link only, your email address and name are not visible to the developer.

DataDescription
Email AddressThe email address with which you were invited to test the app with. This may or may not be the same as the Apple ID associated with your device. If you were invited with a public link, your email address is not shared with the developer.
NameYour first and last name as entered by the developer when they invited you to test the app using your email address. If you were invited with a public link, your name is not shared with the developer.
Invitation TypeWhether you were invited by email or through a public link.
StatusThe status of your invitation: Invited, Accepted, or Installed. This status is refreshed when you accept or install a beta build.
InstallsThe number of times you've installed a beta build.
SessionsThe number of times you've used a beta build.
CrashesThe number of crashes per beta build.

Data Shared When Sending Feedback (iOS only)

When you send feedback through TestFlight or send crashes or screenshots from the beta app, the following additional information is shared. If your device runs iOS 12.4 or earlier, this information is only shared with the developer. If your device runs iOS 13 or later, this information is collected by Apple and shared with developers. Apple retains the data for one year.

DataDescriptionWhen this data is included
App NameThe name of the app you are testing.Included in all feedback
App VersionThe most recent version and build that you have access to. This is the number that displays under the app name in the list of apps in TestFlight.Included in all feedback
Installed App VersionThe version and build you have installed on your device.Included in all feedback
DeviceThe model of your device.Included in all feedback
iOS VersionThe version of iOS your device is running. Included in all feedback
LanguageYour device language.Included in all feedback
CarrierYour wireless service provider.Included in all feedback
Time ZoneThe time zone your device is set to.Included in all feedback
ArchitectureThe type of Central Processing Unit (CPU) for your device.Included in all feedback
Connection TypeWhether you were connected to Wi-Fi, cellular, or not connected at the time that the feedback was sent and your network type.Included in all feedback
Paired Apple WatchThe model and watchOS version of the paired Apple Watch, if applicable.Included in all feedback
ScreenshotsThe screenshots you shared when providing feedback.Only on devices running iOS 13 or later
CommentsThe comments you shared when providing feedback.Only on devices running iOS 13 or later
App UptimeThe length of time the app was open and running at the time the feedback was sent.Only on devices running iOS 13 or later
Disk FreeThe amount of disk space you had available when you sent feedback.Only on devices running iOS 13 or later
BatteryYour battery level at the time the feedback was sent.Only on devices running iOS 13 or later
Screen ResolutionThe screen resolution of your device.Only on devices running iOS 13 or later
Crash LogsSymbolicated crash logs. This includes information about how long the app was running before it crashed.Only on devices running iOS 13 or later