Apple Designed For Ian M

broken image


Apple Music 1
City
Broadcast areaOver 100 countries[1]
SloganWorldwide. Always on.
Programming
FormatFreeform radio, rhythmic contemporary, urban contemporary
Ownership
OwnerApple Inc.
History
First air date
June 30, 2015; 5 years ago
Links
Webcast
  • - via iTunes on Windows
  • - via Music app on iOS, tvOS, watchOS, macOS
  • - via Apple Music app on Android
WebsiteApple Music Radio

Apple Music 1, previously branded as Beats 1, is a 24/7 music radio station owned and operated by Apple Inc. It is accessible through the Apple Music app on a computer, smartphone or tablet, and through the Apple Music web browser app.

  1. Apple has released a series of new commercials showcasing the Accessibility of their different products. In this video, 'Designed for Ian M.' , Ian is an outdoor and birding enthusiast. With Siri on iPhone, he can play a bird call or chat with a friend via FaceTime, and with Switch Control he is able to capture the perfect waterfall photo.
  2. Envision the scenario of Ian M.Banks's book 'The Culture' that describes an utopist world where computers called 'Minds' – computers that possess immense artificial intelligence work.
  3. The Marked Location opens in Maps on Ian's iPhone. (Ian uses Voice Control) Tap share. Ian's contact, Tim is highlighted, with a Messages logo in the bottom of his photo. (Ian uses Voice Control) Tap Tim. The Marked Location appears in the Message with Tim, who has responded to the initial Message: 'I'm down. Let's go!' (Ian uses.

The apple symbol – and the Apple computers logo – symbolizes knowledge. This symbol is one of the oldest and most potent in Western mythology. Apple's use of the logo is extremely powerful; their name and the corresponding pictorial icon are synonymous: they both say apple. The simple logo design deftly carries the heft of centuries of. Earlier in 2020, Apple reportedly purchased Barcelona startup Vilynx, gaining expertise and technologies related to artificial intelligence, machine learning, and computer vision.

Apple Music 1 airs a mix of pop, rap and indie music. Prime-time presenters include Zane Lowe, Ebro Darden and Matt Wilkinson.[2][3]

Apple Music Hits offers a full catalog of the biggest songs from the '80s, '90s, and 2000s.

Apple Music Country offers a mix of country songs old and new. [4]

Apple Music Radio is streamed at 64kbit/s and 256kbit/s, utilising HTTP Live Streaming protocol and the HE-AAC audio codec.

History[edit]

Logo as Beats 1

Apple bought audio equipment maker Beats Electronics in 2014, which included the ownership of Beats' former music service Beats Music,[5] and made Beats Music CEO Ian Rogers responsible for the iTunes Radio service.[6]Business Insider later reported that Apple was planning to merge the two services. Apple also hired Zane Lowe as a music curator.[7]

The day of Beats 1's launch, The Guardian revealed that they had been given pre-recorded examples of Beats 1 programming, and said it 'suggests an eclectic mix of programming to fill the 24-hours-a-day of broadcasting.'

On September 29, 2015, Zane Lowe said he wasn't sure that Apple Music needed Beats 1, but said 'I hope that there's a place for it.'[8]

In December 2015, rumors spread that Apple would expand on the Beats 1 brand and give it sister stations, after Apple registered trademarks for four additional Beats stations.[9][10][11][12]

In September 2016, Apple refreshed the Apple Music interface with the release of iTunes 12.5 and iOS 10. Beats 1 reportedly became harder to get to, due to the clunky interface of iOS 10's Music app.[13]

In March 2017, Apple claimed that Beats 1 was 'the biggest radio station in the world' and beat all other music stations in concurrent listeners.[14]

In March 2020, Beats 1 transitioned to remote broadcasting from the respective homes of the radio hosts in light of the coronavirus outbreak.[15]

In May 2020, London headline host Julie Adenuga announced she was leaving Beats 1 after her years on the station since its inception.[16]

On August 18, 2020, Apple announced the rebranding of Beats 1 to Apple Music 1 and the launch of two new radio stations, Apple Music Hits and Apple Music Country, featuring exclusive original shows from the world's top music hosts and artists.[4]

Reception[edit]

Reception for the Apple-run station has been mixed. Quartz analyzed the track list of songs that were aired on Beats 1 in its second week. 'Though Beats 1 is an eclectic mix of genres, some listeners have complained that it plays too much hip-hop.' However, they did note that 'there is a reasonable amount of diversity.'[17]

Ian

Mashable complained of 'dynamic-range compression, which squashes the volume range of audio' and also said, 'The variety can be a blessing and a curse.it jumps all over the musical spectrum.If I wasn't committed to listening to nothing but Beats 1 for this review, I would have turned it off.'[18]

9to5Mac had a generally positive review of the station, saying, 'Although Beats 1 is advertised as a 24/7 station, it isn't really true. The schedule is set up on a 12 hour basis, so for the other 12 hours it plays a recording of the last 12 hours.This is frustrating for me, being based in the UK. If I listen in the afternoon and in the following morning, I am likely to hear the same shows repeated.In summary, Beats 1 as a concept is great. It needs some work on the software side and the production side to make it really shine.'[19]

Jason Cipriani of Fortune wrote, 'I haven't liked every song played on Beats 1, but the personal bond I instantly felt with each DJ has been strong enough for me to resist the urge to go back to a lifeless algorithm.'[20]

Billboard said, 'the tech community has been heaping praise on Beats 1.Internet-savvy people have fallen head over heels for old-school monoculture.'[21]

Rob Price of Business Insider said, 'So far, I've loved it. I was never much of a radio listener before, and I've enjoyed the eclectic selection it has thrown up.'[22]

Kirk McElhearn wrote, 'Beats 1 radio is clearly a loss-leader. Apple has designed it to draw people into Apple Music and get them interested. But the station is designed for just one demographic: the young, pop/rock/hip-hop listener. As such, it's a non starter for a lot of Apple Music customers, and that's a shame.'[23]

The Guardian's review heavily criticized Jaden Smith's MSFTS Frequency program and A-Trak's show Day Off, but was generally positive of their other programming.[24]

After Larry Jackson, Apple Music's Head of Programming, claimed Beats 1 is the number one music station worldwide, media.info warned readers of believing Apple's claims without listenership numbers.[25]

Format[edit]

Apple Music 1 broadcasts a mix of music focusing on new music and artists. Unlike the playlists for the 'stations' on iTunes Radio, The Next Web claims, 'The overarching aim of Beats 1 is to curate cool new music, whether it be new talent or fresh music from established artists.'[26] Brooke Reese hosts a show called Chart, which has music premieres[27] and countdowns of popular music[28] in general on Apple Music. It features both full songs in addition to snippets and previews.[29] However, most shows focus on specific music genres or musical cultures.

Beats 1 aired Apple's annual Apple Music Festival (which was formerly known as the iTunes Festival)[30] as well as interviews with popular American music artists such as[31]Lady Gaga,[32]Bruno Mars[33] and Chance the Rapper.[34] Apple Music Festival was cancelled in 2017. Beats 1 and Apple Music as a whole wanted to focus more on introducing new artists and creating original content.[35]

Apple Music 1 also lets some musicians - such as Lady Gaga, Nicki Minaj, and Frank Ocean - host their own shows on the station. In an interview with Digital Trends' Keith Nelson Jr., Zane Lowe praised the format, saying, 'We've been overwhelmed by.how great the artists are at doing it.'[36]

Sister stations[edit]

Apple Designed For Ian M Thompson

In 2015, Apple secured trademarks allowing them to create up to four sister stations for Beats 1.[37][38][39] Portable cad software.

In August 2020, Apple finally announced its first two sister stations 5 years after trademark was secured named Apple Music Hits and Apple Music Country. [4] Can i watch directv now anywhere.

See also[edit]

References[edit]

  1. ^'Availability of Apple Music, Apple Music Radio, and iTunes Match'. apple.com.
  2. ^Sisario, Ben (2015-06-25). 'Zane Lowe, the D.J. Scratching Out Beats 1 for Apple'. The New York Times. ISSN0362-4331. Retrieved 2016-09-16.
  3. ^'Beats 1 brings Matt Wilkinson into its primetime lineup'. iMore. 2018-01-04. Retrieved 2018-05-16.
  4. ^ abc'Apple Announces Apple Music Radio'. apple.com.
  5. ^Karp, Hannah; Dezember, Ryan; Barr, Alistair (2014-05-30). 'Apple Paying Less Than $500 Million for Beats Music Streaming Service'. Wall Street Journal. ISSN0099-9660. Retrieved 2016-09-30.
  6. ^Wakabayashi, Hannah Karp and Daisuke. 'With Apple-Beats Deal Complete, Ian Rogers To Run iTunes Radio'. Retrieved 2016-09-30.
  7. ^'What we're hearing about the new music-streaming service Apple is developing in secret'. Retrieved 2016-09-30.
  8. ^'Zane Lowe: 'I'm not sure that Apple Music needs Beats 1''. Telegraph.co.uk. Retrieved 2016-10-14.
  9. ^'Beats 1 to Get Sister Stations, If Trademark Filings Are Any Indication'. Billboard. Retrieved 2016-10-14.
  10. ^Rogelet, Sylvain. 'Quatre nouvelles radios pour Apple ?'. Consomac. Retrieved 2016-10-14.
  11. ^Times, Tech (2015-12-31). 'Apple Music To Add 4 New Beats Radio Stations, What Genres And Regions Could Their Formats Cover?'. Tech Times. Retrieved 2016-10-14.
  12. ^Rossignol, Joe. 'Apple Files Trademarks for Beats 2, 3, 4, and 5 Radio Stations'. Retrieved 2016-10-14.
  13. ^Miller, Chance (2016-10-13). 'Comment: Beats 1 station deserves an Apple Music-like revamp in year 2'. 9to5Mac. Retrieved 2016-10-14.
  14. ^'Beats 1 is 'the Biggest Radio Station in the World', Says Apple Music'. Retrieved 2017-11-29.
  15. ^'Apple Music's Beats 1 Hosts Shift to Remote Broadcasting'. Billboard. 2020-03-23. Retrieved 2020-08-03.
  16. ^'Julie Adenuga to leave Beats 1'. www.musicweek.com. Retrieved 2020-08-03.
  17. ^Sonnad, Nikhil. 'We analyzed a month of Beats 1 tracks to figure out Apple's taste in music'. Retrieved 2016-09-30.
  18. ^Perkins, Chris. 'I listened to Beats 1 for a week and all I got was a headache [REVIEW]'. Mashable. Retrieved 2016-09-30.
  19. ^Mayo, Benjamin (2016-01-19). 'Do you listen to Beats 1? Here's what Apple can do to improve its radio station & encourage more people to tune in'. 9to5Mac. Retrieved 2016-09-30.
  20. ^'Why Apple's Beats 1 is music streaming done right'. Fortune. 2015-07-02. Retrieved 2016-09-30.
  21. ^'Beats 1, Apple's Radio Station, Looks Like It's A Hit -- and Maybe a New Digital Direction'. Billboard. Retrieved 2016-10-14.
  22. ^'Here's what people are saying about Beats 1, Apple's new global radio station'. Business Insider. Retrieved 2016-10-14.
  23. ^McElhearn, Kirk (2015-07-27). 'We've Got Beats 1 Radio, but What About Beats 2, Beats 3, Etc.?'. Kirkville. Retrieved 2016-11-04.
  24. ^Evans, Rhiannon (2015-09-02). 'What happens when you listen to Beats 1 radio for 24 hours? Lots and lots of Drake'. The Guardian. ISSN0261-3077. Retrieved 2017-07-27.
  25. ^'Is Beats 1 really 'the biggest radio station in the world'?'. media.info. 2017-03-29. Retrieved 2017-11-29.
  26. ^Swanner, Nate (2015-09-29). 'Zane Lowe is crazy if he doesn't think Apple Music needs Beats 1'. The Next Web. Retrieved 2016-11-04.
  27. ^'Halsey Drops New Track 'Now Or Never' [LISTEN] – RAZMAG.com'. Retrieved 2018-06-28.
  28. ^'Living through the first 24 hours of Beats 1 radio'. The Verge. Retrieved 2018-06-28.
  29. ^'One station to rule them all? The verdict on Beats 1's first month'. DIY. Retrieved 2018-06-28.
  30. ^'Apple's rebranded Music Festival was livestreamed on Beats 1'. Engadget. Retrieved 2016-11-04.
  31. ^'What Apple's Beats 1 Means for Your Radio Brand | Mark Ramsey Media LLC'. www.markramseymedia.com. Retrieved 2016-11-04.
  32. ^'Don't Compare Lady Gaga To Madonna (Or Anyone Else), Because She Says So'. MTV News. Retrieved 2016-11-04.
  33. ^Guide, Game & (2016-11-02). 'Bruno Mars Failure Lead Him To His Success: Find Out How He Coped With Failure'. Gamenguide. Retrieved 2016-11-04.
  34. ^'Watch Chance the Rapper's Full Interview with Zane Lowe on Beats 1 - Noisey'. Noisey. Retrieved 2016-11-04.
  35. ^https://www.theguardian.com/music/2017/sep/05/apple-cancels-its-london-music-festival-itunes-festival.Missing or empty |title= (help)
  36. ^'Beats 1 radio's Zane Lowe on superstar DJs, exclusive releases, and the age of curation'. Digital Trends. 2017-06-11. Retrieved 2017-11-29.
  37. ^'Beats 1 to Get Sister Stations, If Trademark Filings Are Any Indication'. Billboard. Retrieved 2017-12-20.
  38. ^'Apple Files Trademarks for Beats 2, 3, 4, and 5 Radio Stations'. Retrieved 2017-12-20.
  39. ^'Apple files trademark applications for Beats 2, 3, 4 and 5 radio stations'. www.idownloadblog.com. Retrieved 2017-12-20.

External links[edit]

Apple Designed For Ian M Smith

Retrieved from 'https://en.wikipedia.org/w/index.php?title=Apple_Music_1&oldid=979137672'

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

  • Widgets are at their best when they show up on someone's Home screen or in the Today View at the right time and provide actionable, relevant information. We'll show you how to build configurable widgets to let people create a personalized Home screen experience, and that take advantage of system intelligence to help people get what they want, when they want it. Learn how to customize your widget's configuration interface, and how to appear within Siri Suggestions or at the top of a widget Smart Stack based on user behavior or by letting the system know when there's new, timely information. For more on widgets, watch 'Meet WidgetKit'. And for more on system intelligence, watch the collection 'Design for Intelligence.'

    Resources

    Related Videos

    WWDC 2020

  • Download

    Hello and welcome to WWDC.

    Welcome to 'Add Configuration and Intelligence to Your Widgets.' My name is Ian, and I'm here with my colleague Kelvin.

    In this talk, we'll show you how to make widgets configurable, and show you how a configurable widget can help the system work in more intelligent ways.

    New in iOS 14 and macOS Big Sur, we have a whole new widget experience. Widgets allow your app to surface new information to people in exciting new ways.

    Widgets can live in more places than ever. They can live on pages of the Home Screen, as part of Stacks, on the Today View, and in macOS Notification Center.

    Powering those widgets is WidgetKit. WidgetKit allows you to create multiple widgets, each to solve its own unique problem.

    Each widget can support different sizes and layouts. Let's take a look at an example.

    We've built an example app that lets you view all of the transactions on your credit cards. It lets you view information about your spending and track balances on all of your accounts.

    The two most common things that I do in the app are check balances and look at recent transactions. It would be really great to see this information right at a glance on the Home Screen, so we built two widgets for our app.

    The first one is called 'Recent Purchases,' which shows a list of purchases on one of your cards. The other one is called 'Due Date,' which shows your next payment's due date and how much you owe.

    Because I often want to see information about one card at a time, we added configuration to pick which card to show.

    I can change which card is shown by tapping on 'Edit Widget' and then selecting a card.

    Because we made our widget configurable, now people can create multiple different instances of the Due Date widget and show a different card in each.

    Now let's look at what we're going to cover today.

    First, we'll talk about the basics of how to add configuration to your widget.

    Next, we'll talk about the types of information that you can ask the user to enter, and show how to populate the interface with data from your app.

    After that, we'll talk about how you can customize the title, description and colors of the backside of your widget.

    And finally, we'll cover how adding configuration to your widget allows the system to better predict times to display your widget in a stack.

    Let's start with the basics.

    The first piece of the system is the widget extension. Widget extensions contain SwiftUI code that renders the visual appearance of the widget. They also contain some metadata about the widget itself.

    Mp4 compressor software, free download. Before you get started, make sure that you have set up a widget extension already using WidgetKit and SwiftUI.

    If you haven't done that yet, make sure to go watch the 'Meet WidgetKit' talk.

    When your widget is configurable, you can specify which options to ask the user on the backside of the widget, and the system will display them for you. These questions are called parameters.

    Here's our Recent Purchases widget. It has a 'Card' parameter and a 'Category' parameter. The Card parameter allows people to choose a card to display, and the Category parameter lets people filter the list to only include transactions for a specific category, like groceries, if they'd like.

    To define which parameters are shown, we use intents, which is the same system that you can use to add support for Siri and Shortcuts to your app.

    An intent contains an ordered list of parameters. Each parameter that you put on the intent will show up as a row in the widget's configuration UI.

    You declare your intents in Xcode using an Intent Definition File. This file contains all of your intents, their parameters, and indicates which parts of the system they support.

    By compiling this file into your app, the system will be able to read information about your intents.

    Once you define an intent, Xcode will also generate an intent class for you, containing a property for each parameter. For this widget, we have a ViewRecentPurchasesIntent class, with Card and Category properties.

    An instance of this intent class will be passed into the widget extension at runtime, allowing your widget to know what the user has configured and what to display.

    Next, let's talk about the types of parameters that you can add to your intent. As I mentioned before, we build the widget configuration UI for you, based on the intent's definition. We support a wide variety of input types, which I'll walk you through now.

    When you specify 'String' as the type of your parameter, the configuration UI shows a text field, and it will show a switch for the 'Boolean' parameter.

    The configuration UI also supports numbers with a few different input mechanisms. For integers, it supports number fields and steppers, and for decimals, it supports number fields and sliders.

    The configuration UI also has support for contact and location pickers.

    The 'Person' type will show as a contact picker, and the 'Location' type will show as a location picker.

    The configuration UI also supports enumerations. You can make these enumerations static, or dynamically populate them with content from your app. We'll talk about dynamic options in more detail later. The configuration UI supports a number of other types as well, each with their own UI.

    Parameters can also support multiple values. For example, if your widget shows a list of events from your calendars, you can configure the intent to support selecting multiple calendars. New in iOS 14, Intents now supports fixed-size arrays. This is useful if your widget supports showing a fixed number of items, and lets you prevent the user from adding more than a defined number of items into the array.

    You can specify the number of items based on the widget size in the intent editor. Now I'm going to walk you through how to add rich configuration to your widget. The first step is identifying what you want to make configurable. Let's use the Recent Purchases widget here as an example. In the Recent Purchases widget, each widget can only show one card, but people may have multiple cards in the app, so it would make sense to make that configurable.

    This allows people to have multiple Recent Purchases widgets on their Home Screen, each showing different cards.

    It also would be useful to be able to filter by category. That way, people could have one widget to show transportation expenses and another widget to show food expenses.

    So, in addition to making the card configurable, we are also going to allow people to configure the category.

    Now I'm going to walk you through how we can make the Recent Purchases widget configurable.

    This is our project, where we already have our widget set up. You can see that the widget currently has a StaticConfiguration.

    In order to make the widget configurable, we need to switch from a StaticConfiguration to an IntentConfiguration. The first step in switching to an IntentConfiguration is defining an intent that you'll use to configure the widget.

    You can define a custom intent inside of an Intent Definition File.

    I already have one here in this project. You'll note that it is checked in to both the app and the widget extension targets.

    Now let's create an intent using the plus button in the bottom left.

    I'll be calling it ViewRecentPurchases.

    Next we're going to check the 'Intent is eligible for widgets' option.

    This will allow the intent to work as a configuration for a widget.

    If you want this intent to also support the Shortcuts app, check the 'Intent is user-configurable in the Shortcuts app and Add to Siri' option. We'll uncheck this option for this demo and just focus on widgets.

    We're also going to leave the 'Intent is eligible for Siri Suggestions' checkbox unchecked for now, and my colleague Kelvin will walk you through how to add intelligence to your widget later in this talk.

    We'll also set the category of this intent to 'View' because the purpose is to view your transactions.

    Now, using the plus button in the parameters list, I am going to add a parameter for the card.

    The first step here is naming the parameter. This label will be displayed in the widget configuration UI. I'm going to name this 'Card.' Next, I need to pick a type.

    Because a credit card represents an object inside of my app, I'm going to create a custom type to represent it. You'll see that I already created a 'Card' type, which has a name and identifier, so I'll use that here for my type.

    The list of cards will need to be provided by the app, and will change depending on who is signed in, so I will check the 'Options are provided dynamically' checkbox.

    We'll go into detail later on how to populate this dynamic list.

    Since this intent won't support running in Siri, we can uncheck the 'Siri can ask for value when run' option Next, because we want to allow people to choose the category, we'll add a 'Category' parameter to the intent.

    We can use an enum for the type of this parameter because there are a fixed set of categories. I already have an enum defined, so I will choose that.

    We'll set the default value for the category to 'All' so that people will see all of the transactions by default.

    And we'll also uncheck the 'Siri can ask for value when run' option for the category.

    Now let's talk about dynamic options and search.

    In many cases, the data that you want to display in the widget configuration can vary by person, and can't be specified up front in the Intent Definition File. For example, the list of cards in our example app varies by person. You can accomplish this by implementing dynamic options.

    You can enable dynamic options for any parameter on an intent by checking the 'Dynamic Options' checkbox in Xcode. Enabling dynamic options will indicate to the system that it should consult your app to retrieve the possible values that a person can choose from, instead of allowing them to enter any value that they want.

    Once you enable dynamic options, two things will happen. First, the visual appearance of your parameter will change on the backside of the widget into a button that opens a modal list of options.

    Second, two methods will be generated for you to implement in your app, one to provide a list of possible options, and a default value.

    These methods are part of the intent handler protocol, which Xcode generates for you.

    You will need to make a class that conforms to this protocol, either in your app or in an Intents extension.

    This class will be asked by the system to provide possible options while the person is configuring your widget.

    In the example app, the two methods that we need to implement are provideCardOptionsCollection and defaultCard. For provideCardOptionsCollection, we will load the list of cards that the user has set up and then call the completion handler. For defaultCard, we return the primary card that the user has set up.

    Royal reels jackpot. The provideCardOptionsCollection method lets you either provide a flat list of cards or a list of sections containing cards.

    For example, we can display a section for each type of card, like credit or debit. If you use sections, your UI will look like this.

    Now all of my credit cards show under the 'Credit' section, and I can see more sections containing other types of cards.

    By default, the search bar at the top will filter the options that you provide. In some cases, your app might have more data than you can easily provide up-front in a list.

    If that's the case, you can provide search results as the person types. These results can include options outside of the standard options that you provide dynamically.

    To do this, make sure to check the 'Intent handler provides search results as the user types' checkbox and also provide a prompt.

    If you check the checkbox, the provideCardOptionsCollection method will get a search term parameter.

    When a person first looks at the list, this method will get called with a nil search term, and then as they start typing, the method will get called again with the updated search term. Now let's do a quick demo of how you can implement dynamic options.

    Continuing from our last demo, let's go ahead and implement returning the list of cards to the user dynamically. The first step is setting up the intent handler for the ViewRecentPurchases intent. We're going to put our intent handler inside of an Intents extension.

    I already have an Intents extension set up for our other widget, so I can add my code there.

    The next step is making our intent handler conform to the ViewRecentPurchases intent handling protocol.

    You can see that this protocol has a single required method, which is the provideCardOptionsCollection method. We need to implement this such that it returns a list of cards inside of the app.

    First, I create custom Card objects from the objects inside of my app.

    Then I put them into the INObjectCollection, which allows me to add sections if I want.

    I don't have any sections in mind here, so I will just create the collection from a list of items, and then call the completion handler with the created collection.

    There's also an optional method to provide a default card.

    The default is used when a widget is dragged onto the Home Screen for the first time, so it's really important to provide a good default.

    Now that we've created our intent and implemented our intent handler, we can adopt the IntentConfiguration in our widget.

    It's very similar to the StaticConfiguration that we had before, but it takes an intent type as an argument.

    You'll also need to switch your TimelineProvider to be an IntentTimelineProvider.

    It's very similar to the default TimelineProvider, but the methods have an additional intent argument that you use to determine what to show.

    Here, we'll need to take the card from the intent and use that to determine which purchases to show. Previously, it was just showing the purchases from the default card.

    Let's run the code and try to configure the widget.

    Notice that when I drag out the widget, it shows me transactions from the default card.

    This is because I implemented the default card method.

    Now if I go and flip it around and tap on the 'Card' button, it shows me a list of cards.

    Tapping on the 'Category' option also shows a list of categories.

    Voilà.

    Now let's talk about a few ways that you can further customize the appearance of your widget configuration UI.

    You can customize the title and the description by using the SwiftUI modifiers called 'configurationDisplayName' and 'description' in your widget extension.

    Next is colors. You can style the background and the accent color of the widget configuration UI to match your app's color scheme.

    To do this, you'll need to add named colors to your widget extension's asset catalog. Here we're adding one for the accent color and another one for the background color.

    And then you'll need to add the names of your colors to your widget extension's build settings for 'Global Accent Color Name' and 'Widget Background Color Name.' Another thing you might want to do is hide and show specific parameters based on another parameter. For example, in the Calendar widget, if you turn off the 'Mirror Calendar App' switch, the 'Calendar' parameter appears, and you can manually choose which calendar to show.

    Let's take a look at the Intent Definition File to see how to specify the relationship between Mirror Calendar App and Calendar.

    To specify that we only want the 'Calendar' parameter to show up when the 'Mirror Calendar App' option is off, make the 'Mirror Calendar App' parameter a parent of the 'Calendar' parameter.

    To do that, we'll select the 'Calendar' parameter, then select 'Mirror Calendar App' as its parent.

    Then we'll set it up to show only if the parent has the exact value of 'false'. Now the 'Calendar' parameter will only show up if the 'Mirror Calendar App' is turned off. That's it from me. Now over to Kelvin to talk about system intelligence and widgets.

    Hi, I'm Kelvin, and I work on the Proactive team here at Apple. Next, we're going to talk about system intelligence.

    Widgets are one of the most exciting new opportunities across iOS, iPadOS and macOS.

    On iOS 14, not only can you add widgets to the Home Screen, you can stack multiple widgets together and provide access to a variety of widgets in one place by easily swiping through.

    Everyone will find a different way to take advantage of this, but it's easy to imagine that you could group multiple widgets together that would be useful as you progress through your day.

    Now, what's exciting about Stacks is that the system can automatically rotate widgets to the top of the stack to provide useful and timely information.

    Let me walk you through the underlying design principles that drive stack intelligence, and how you should implement some new APIs to ensure your app is part of this new Home Screen experience.

    Let's dig a little deeper into what makes for a good Smart Stack.

    Stacks should provide timely and glanceable information with obvious value to the user.

    You want your widget to be surfaced when you have timely information relevant to the people using your app, like when you know there is a thunderstorm coming, but not when you're just updating the temperature regularly.

    Broadly speaking, the system will try to surface widgets based on two reasons. The first is user behavior-based. We want to surface widgets that provide information the user typically looks for at a particular time.

    For example, if someone frequently launches your weather app to check on the weather, the system can instead surface your widget with that information to provide quicker access to what they're looking for.

    The second is based on relevant information from your app. So, for example, if a thunderstorm is happening, your widget can inform the system that it has a highly relevant update, and the system will consider surfacing your widget to the top of the stack.

    Now let's talk about the APIs you can use to provide the information the system needs to surface your widget.

    Let's start with user behavior.

    So the system wants to surface your widget when someone is typically looking in your app for information, and in iOS 12, we introduced the concept of Shortcuts and custom intent donations, which provides a way for the system to understand what people do in your app. And using this information, the system provides predictions in Spotlight on what actions they want to perform.

    Now, new in iOS 14, these same donations will also inform the system about when would be a good time to surface your widget.

    So now, let's continue from our previous example with the Recent Purchases widget. Here we have already set up an intent for widget configuration. It allows a user to specify the credit card and the category they want to view. Now, to enable system intelligence to rotate to our widget, we have to set this same intent for donation by our host app.

    The idea here is we want to inform the system when a user is checking a particular credit card in our app, and we will do so by donating this intent.

    We'll describe what happens under the hood in just a bit. So for now, let's dive into some details about how to set it up.

    First, we need to mark this intent as eligible for Siri Suggestions, and that opens up the bottom section here labeled 'Suggestions.' And for our example, we want the system to predict when someone will check a particular credit card, and we want it to match any widget with that same card configured. In order to convey that, we need to add a 'Supported Combinations' with just the Card parameter.

    And so now that we have set up our custom ViewRecentPurchases intent, we need to have our host app donate it whenever the user views recent purchases in our host app. And to do that, we create an INInteraction object and call the donate function, passing in our intent.

    And since we've specified a 'Supported Combinations' as just the Card parameter, even if we provided the Category parameter in our donation, the system will only consider the Card parameter. Vu meter app iphone.

    And that's all you have to do. The system will do the rest. Now let's take a closer look at what the system does with your donations under the hood.

    So let's say someone views grocery purchases for our AcmeCard regularly at noon, and checks their SoupPay card for restaurant purchases in the evenings. Now, our host app would donate intents like this.

    And based on these donations, the system would recognize that the user typically checks their AcmeCard at noon. And then on Friday at noon, the system would predict the intent for viewing AcmeCard and would surface our widget, as long as they have configured it to show their AcmeCard regardless of the category.

    But what if instead we added both Card and Category as a supported combination? Let's look at what would happen. Now, since Category is part of the supported combination, you are telling the system that it is an important parameter.

    Then on Friday at noon, the system would predict the intent for viewing AcmeCard in the 'Groceries' category, which would only surface widgets where the user has explicitly configured both parameters to show the AcmeCard for the 'Groceries' category.

    So, in short, 'Supported Combinations' is the way to communicate to the system which configurable parameter truly represents the information people are looking for.

    We walked through a lot of steps there, so to quickly summarize, first, set up a configuration for your widget with an intent. Second, mark it as eligible for Siri Suggestions to allow the system to predict it.

    Next, configure 'Supported Combinations' for only the parameters that you want the system to predict. And finally, donate the intent when the user views that information in your host app.

    Now let's talk about the second scenario, where you want the system to surface your widget when you have important, relevant information. Fortnite battle royale p.

    So, a quick recap. Using WidgetKit, you provide timeline entries that will determine what your widget will look like at various points in time. It works great whether your widget can schedule your entries ahead of time, like this weather example where you can provide forecasts for future views.

    It also works if your widget needs to react to new information in real time, like our Recent Purchases example, where you can only provide each entry as they occur.

    So now, let's say we know that people using our app want to be alerted if they got a charge for over $50.

    How can you inform the system that your widget has relevant information for the Acme Books purchase? You can convey that information by supplying a TimelineEntryRelevance object with your TimelineEntry.

    A TimelineEntry has effectively three components: a date time stamp that determines when this entry should be rendered, the view that should be rendered, and the relevance of this entry. The relevance is a TimelineEntryRelevance object, which has two fields: a score and a duration.

    And here's what it looks like in Swift. Let's start with the score. The score is a value indicating how relevant an entry is compared to all entries provided in the past. The range and scale is largely up to you to define, as the system only considers the score in relation to other entries. The only exception being a score of zero or lower will indicate to the system that your widget currently has no relevant information and should not be surfaced.

    Now, coming back to our example, we want to convey to the system that we have important information when there is a purchase of more than $50. We can simply provide a score of one when that happens to emphasize the importance, and a score of 0.1 for all other purchases. That way, there will be a slight chance the system might surface our widget for the minor purchases, but will try to prioritize for the big purchase.

    When there is no important information, like when we have no recent purchases at 8:04 a.m., we set a score of zero. And keep in mind, it doesn't matter what scores other widgets provide. Scores are only compared within the scores you provide.

    Now, on the other hand, let's say we think the amount spent is a good indicator of relevance. We can set the amount spent to be the score, and the system will likewise prioritize surfacing the expensive purchases.

    Next, let's talk about duration. The duration is a field for situations where you have a well-defined period of time where the relevance score will be fixed.

    Otherwise, feel free to leave duration as zero, which will mean the relevance score will last until the next TimelineEntryRelevance is received. Simple 3d building design software.

    Here's an example to highlight how duration can be used. We want to build a basketball widget that shows the progress of a game as it occurs. So, at the beginning of the game, we can create an entry with a score of one and a fixed duration for the length of the game. During the game, we can continue to make TimelineEntry updates without affecting the relevance by just leaving the TimelineEntryRelevance field as nil. Setting the entry as nil is how you can tell the system to ignore this update for relevance purposes.

    So to wrap up, with Smart Stacks, we have an opportunity to surface your widget on top of a stack. You can make this work for your widgets in two ways. First, by donating intents from your app that match configuration of your widget, and secondly, by providing TimelineEntryRelevance when your widget has important information.

    Thanks for watching. We can't wait to see what kind of configurable, intelligent widgets you will build.





broken image