Posted on Leave a comment

Behind the Design: Loóna

Illustration of books, birds, and lanterns shining out from an app icon

Andrew Yanchurevich’s inspiration for Loóna came, appropriately enough, at night-night time.

As a father of a 3-year-old son, Yanchurevich was well in the habit of reading bedtime stories nearly every night. One evening, he realized his son wasn’t the only one getting drowsy. “What worked well for him was also working for me,” says Yanchurevich. “As I read, I forgot about my thoughts and my plans. My mind came down.”

While that night brought Yanchurevich pleasant drowsiness, it also sparked the beginnings of an idea: an app that paired the beauty of a great bedtime story with soothing interactive experiences to help you drift off to dreamland. Together with co-founder and former product designer Eugene Nevgen, they dreamt up a product as gorgeous as it is effective: Loóna.

Drawing of child playing in playroom

The app winds you down with “sleepscapes,” interactive episodes designed to soothe your mind at the end of your day. “People use their phones at bedtimes, so we wanted to give them a more meaningful way to do it,” Yanchurevich says. “You can spend 20 or 30 minutes with Loóna and be ready to fall asleep.”

The idea, as Yanchurevich says, is to “recreate this safe bubble from your childhood,” just as he was doing for his son. In the introductory sleepscape “The Dragon’s Shrine,” you’ll explore a beautifully rendered marble pagoda while an appropriately mellifluous voice guides you through calming tasks. As you progress through sleepscapes, you’ll lose yourself in a fairytale kingdom, explore a dark forest, or simply cozy up to a crackling fire.

Co-founder Nevgen says his goal with Loóna wasn’t just to build a great mindfulness app, but to create “the most beautiful in the category.” That’s turned out to be a big job: There are more than 55 sleepscapes in the app, each of which took some 500 hours to build.

People use their phones at bedtimes, so we wanted to give them a more meaningful way to do it.

Luckily, the minds behind Loóna had a unique blend of skill sets. Nevgen and Yanchurevich are former product designers; co-founder Sergey Gonchar is a veteran engineer (along with Nevgen, he launched the now-defunct face-filter app MSQRD); co-founder Dmitri Doryn has a background in 3D graphics and training as an architect; and sound designer Ivan Senkevich has a long history in audio.

Sleepscape ideas range from esoteric notions like “the light of hope” or “the luminous realm” to something more concrete, like a Parisian park or a throwback Brooklyn. A bustling New York city may not be exactly the first thing that comes to mind when you think of a relaxing place. “Generally, people expect to see rainbows or forests in an app that promotes relaxation and sleep,” says Loóna CPO Mike Chernetsov, who leads the writing team. “Here you’ve got an old city building in the late evening.”

But part of the team’s goal is expanding the idea of what a relaxing place can be. “We don’t want to just do stereotypical places,” Chernetsov says. “Sometimes, we want to show places from a totally different perspective. If you look (at ‘Heartwarming Brooklyn’), it refers to a feeling that resonates with everyone: nostalgia. When we’re not feeling good, we all want a place to escape to, a moment where we can feel safe and secure. And from a visual standpoint, Brooklyn is really very soothing.”

Conference room containing the minds behind loona

Yanchurevich says the Brooklyn sleepscape is also easily one of the app’s most popular. “People have messaged us wanting the address to the building,” he says. “They want to grab a pizza in that cafe.”

Every soundscape the team creates involves this level of exploration and storytelling. While co-founder Doryn gets to work drafting a 3D model of the potential world, Chernetsov and the writing team are focused on exploring the narrative: What would bring you to this place? What would you do there? What sort of meditative activities would keep you the right level of engaged? It’s not storytelling in the traditional sense, but the writers so have an advantage: they can plunge into Doryn’s early sketches themselves to, as he says, “fly around the scene to finish the story.”

We want to show places from a totally different perspective. If you look (at ‘Heartwarming Brooklyn’), it refers to a feeling that resonates with everyone: nostalgia. When we’re not feeling good, we all want a place to escape to, a moment where we can feel safe and secure.

While the story is coming together, the app’s team of musicians and sound designers also get to work laying the sleepy sonic groundwork, much of which is recorded live in the team’s hometown of Minsk, Belarus. “I often come into my village to record,” says Senkevich. “The region has a great natural sound.”

To create the appropriately somnolent aural environment, Senkevich often hits the road in search of animal noises, breezy forests, babbling rivers, and the buzz of insect life. “Some of the sleepscapes are more cartoonish and some more realistic. But we always try to show that natural-ness of the sound.” (Some sounds, he notes, did come from libraries. “You can’t record the sea in Minsk,” Senkevich says with a laugh.)

Still, at the end of the day (well, the night), Loóna’s goal is to get you to turn the app off. The key is to strike an artful balance between meditative activity and relaxation; if a sleepscape is working, you’ll shut it down well before you’re finished (which is OK, you can pick it tomorrow night). Doryn says that finding that tightrope-sized balance is not always easy.

In progress sketches

“It’s an iterative process,” Doryn says,“ and sometimes we do go too far. Our animation team always wants to do more. Something more beautiful, something more glowy and shiny and with lots of jiggling wiggling stuff in the scene,” he laughs.

To find that balance, Loóna trusts their team of testers, who interact, color, unpack, and play with each soundscape to make sure the worlds help lull their participants without distracting them. A sleepscape called The Rusty Rooster Inn, for example, initially featured dozens of roof tiles that needed to be individually lit; their testers found it too much, however, so the Loóna team went back to grouping tiles together.

Illustrator sketching a soundscape of Loona

Finding that balance, Doryn says, is a constant job. “There’s no simple recipe, no silver bullet.” he says. “It’s all responding to user feedback. We’re constantly running tiny surveys, and always improving things from a technical and performance standpoint.”

With nearly 100 more sleepscapes in the works, Loóna is growing fast. From a creative standpoint, the team is working to craft an interconnected “Loóna universe,” where elements, themes, and even Easter eggs pop up across the app’s bank of sleepscapes. “We want to offer a journey to a whole universe of interconnected worlds,” says Chernetsov. “We want you to find a place where you’ll feel safe and secure, every night.”

Learn more about Loona

Download Loona from the App Store

Posted on Leave a comment

Developer Spotlight: CHANI

Collage of CHANI developers on a pink background.

In the universe of astrology, Chani Nicholas is a shining star — she has a New York Times best-seller (You Were Born for This: Astrology for Radical Self-Acceptance), a massive and devoted podcast audience, and a huge social media following.

With Chani, Nicholas says, she wanted to provide an experience only an app could, by “creating a personalized guide through life’s ups and downs.”

If you’re accustomed to reading astrology in short blurbs, Chani will be a revelation: Extensive horoscopes and birth charts deliver insights based on your birth date and time, and the current position of every planet (and Pluto).

There’s more to *Chani* than (really comprehensive) horoscopes. Guided meditations, journal prompts, and more are core to the experience.

There’s more to Chani than (really comprehensive) horoscopes. Guided meditations, journal prompts, and more are core to the experience.

Equally important to Nicholas are the app’s social justice initiatives: Chani was built by AnnieCannons, a queer-led development group whose engineers are predominantly survivors of human trafficking or gender-based violence. And 5 percent of the app’s revenue goes to survivors of gender-based violence through FreeFrom.org, an organization run by Nicholas’ wife, Sonya Passi, who also serves as CEO of Chani Nicholas Inc.

We caught up with Nicholas and Passi to discuss the importance of creating a dialogue with your chart, and how all Geminis aren’t the same.

Why did you decide to develop an app?

Nicholas: I’ve taught workshops online for the past six years; they were really successful, but they were delivered in a fairly archaic way. Building an app seemed like the most organic thing to do next.

Passi: It was important for us to make this system of knowledge extremely accessible. We talk about the app being the blueprint of your life in the palm of your hand. But we don’t want to just give your horoscope in tidbits; we want to give you the tools to be in a constant dialogue with your own chart.

The app is full of very specific, personalized information. Who provides all the content?

Nicholas: Every single word is written by me and a team of astrologers who have years, if not decades, of experience. And the planets never stop moving! Whatever you write is gone by the end of the week.

The app includes workshops designed to bring you into a closer relationship with your chart.

The app includes workshops designed to bring you into a closer relationship with your chart.

What has the response been like?

Nicholas: What I note from people is how it’s become a ritual: listening to the podcast, doing the workshops, checking in. It’s evolving in a way where people are making it part of their self-care; there’s such community participation. On Sundays and Mondays, people post a lot of weekend pictures of themselves in the bath to social media. I hope their devices are OK!

What were the early days like after you launched the app?

Passi: I must have answered about 1,200 customer service emails! We’ll look back on that time with turned stomachs and tremendous fondness, because that’s the beauty of it, right? The struggle and the success, seeing it all come together and remembering what you did to get it there. Now — and I’m certain a lot of app developers feel the same way — the ideas are coming faster than we can build.

What can astrology mean to the world today?

Nicholas: It really can feel empowering to know things about yourself, but it’s also about having a relationship with the story. People whose sign is, say, Gemini — the world tells them what they are, based on that. But obviously, everybody with the Gemini sign is very, very different. I wanted to subvert things and have you be more on the inside of your chart.

Passi: I didn’t know a lot about astrology before Chani and I met. Once I did learn, it felt like my life began. My healing journey began. My acceptance of who I am and what I’m here to do began. It’s important to me that everyone can have that.


Learn more about CHANI on the App Store

Learn more about the App Store Small Business Program

Posted on Leave a comment

Developer Spotlight: Cone

As a student in India, Kushagra Agarwal’s favorite subject had always been art, until he started having difficulty identifying the color brown. By sixth grade, dark green, red, and brown became almost indistinguishable to him.

As he grew older, Agarwal was disappointed by the lack of tools for people with color-blindness, so he got to work: Coding with Swift, he built the app Cone, which uses the iPhone or iPad’s camera—and Apple’s AVFoundation framework—to identify colors in photos or any environment.

Agarwal designed *Cone* to serve as a guide for those with color-blindness.

Agarwal designed Cone to serve as a guide for those with color-blindness.

The App Store spoke to Agarwal about color temperatures, the design world, and picking ripe mangoes.

What inspired you to create Cone?
There were other options for color-blind people, but they never worked reliably for me. Some would read only limited hues. Some would read only the color of the exact pixel you were pointing to, which would result in inaccuracies. Individual pixels never tell the whole story—the colors you see, especially in high-resolution photos, are an average of all the colors in a small area.

When did you realize you were onto something?
I’d heard it’s possible to tell if a mango is ripe by its color. I could never do that because I have a hard time differentiating between yellow-orange and green. So one day I had the app look at a few mangoes in the kitchen and found some of them were green! To my eyes, they were different shades of the same color, but Cone told me the real story. I still use Cone to identify ripe mangoes!

What was the early response to your app?
Initially, people—mostly from Reddit’s r/colorblind community—were skeptical about Cone’s accuracy, mainly because of two problems in existing apps: inaccurate color readings in different lighting conditions and the tendency for apps to read only a single pixel value. I introduced a color-temperature control so Cone could read colors accurately in different lighting conditions. I also had Cone read every color around a point and show the average result. People enjoyed this attention to detail.

How has Cone evolved since launch?
Before Cone was released to the public, it was a simple color-identification tool for personal use. Once I started polishing it for release, I figured out another use case that would help me as a designer: the ability to store and manage colors in a library. So over time, Cone evolved to be a utility for designers. It’s now used by UI designers, interior designers, graphic designers, print designers, and more.

The app has become an invaluable tool for many people. What has it meant for you?
Now I make fewer mistakes seeing colors, so I am able to always wear matching clothes!


Learn more about Cone on the App Store

Learn more about the App Store Small Business Program

Posted on Leave a comment

Fine-tune your App Transport Security settings

Padlock symbol badged with a globe symbol

At Apple, we believe privacy is a fundamental human right. When people connect to a public Wi-Fi hotspot, they expect to use your app to send and receive data without worrying that someone in the vicinity could intercept their connection and gain access to unencrypted data. Allowing even seemingly-innocuous data to remain unencrypted can expose people to snooping and fingerprinting by anyone on the network.

Transport Layer Security (TLS) uses encryption to protect connections from prying eyes, and URLSession provides strong TLS connections by default with App Transport Security (ATS).

If you need to connect to older servers that don’t support TLS, however, you can now add ATS exceptions to your app. Ideally, exceptions should just carve out the specific domains or frameworks that make insecure connections, and you should limit any exceptions you do request. Avoid sending data unencrypted except when absolutely necessary for your app to function.

Identify necessary ATS exceptions

To make sure your app — and the data used within it — is as secure as possible, it’s important to identify whether your app is currently making insecure connections.

To check, disable all your active ATS exceptions by setting their values in your Info.plist to “NO.” From there, open your app or run your unit tests. If your app makes an insecure connection, Xcode will generate runtime errors for each one.

If your app is generating insecure connections, there are a few steps you can take to remove them.

Secure your servers

If your app connects to servers you control, make sure those servers support secure connections. This requires a TLS certificate. If you use a hosting service, check whether they offer certificates, and make sure those certificates meet the requirements detailed in “Preventing Insecure Network Connections.”

Preventing Insecure Network Connections

Use HTTPS

If your app connects to servers you don’t control, you should always attempt to connect to those servers over HTTPS instead of HTTP. You can identify whether a server supports HTTPS by simply changing “http://” to “https://” in your URL string and trying to load data from that website. You can check this manually in a browser, or run code as follows:

let request = URLRequest(url: URL(string: “https:

Many websites redirect HTTP connections to HTTPS. Connecting over HTTPS first can often improve the performance of your app. Note, however, that while a website may use HTTPS, that doesn’t mean it’s ATS-compatible. For instance, it may be using an outdated version of TLS, which, on Safari, displays a “This Connection Is Not Private” warning.

Remove unnecessary exceptions
On websites where you no longer receive ATS runtime errors, you can remove those exceptions. Locate “App Transport Security Settings” in your Info.plist and click the “-” icon to remove the exceptions in question.

Configure exception domains

If your app still needs to make insecure connections to specific domains, you can configure ATS exceptions for just those domains.

  • Add Exception Domains directly to your app’s Info.plist or in the project editor. Navigate to “Signing & Capabilities” and choose the “+ Capability” option.
  • Select “App Transport Security Exception” from the list.
  • This will add an “App Transport Security Exception” section to your capabilities:
  • Click the “+” icon to add domains that your app needs to connect to insecurely.
  • Enter a domain here to connect over HTTP to that domain and its subdomains. If you need to alter these settings, you can make changes directly in your Info.plist.

Configure framework and class exceptions

On rare occasion, you still may need to make an insecure connection to an unknown domain. In this case, there are two broader exceptions you can consider offering.

  • If your app needs to make insecure connections through WKWebView, add “Allows Arbitrary Loads In Web Content” to your Info.plist:
  • If your app needs to make insecure connections through AVFoundation, add “Allows Arbitrary Loads for Media”:

These exceptions will ensure that your app only makes insecure connections via AVFoundation or WKWebView, leaving the rest of your app protected by ATS. Because these are relatively broad exceptions, however, they will allow every part of your app that uses AVFoundation or WKWebView to make insecure connections which can be intercepted and inspected.

Keep your app secure

People want to trust your app, and ATS can help you build that trust by handling their data responsibly while in transit. To get the most out of ATS:

  • Make sure that your app connects to servers over HTTPS instead of HTTP.
  • Tailor your ATS exceptions to your app as closely as possible.
  • Periodically review your exceptions to check whether servers have started supporting HTTPS or your app no longer needs to connect those servers to make insecure connections.

Resources

Networking with NSURLSession

Learn about App Transport Security, HTTP/2 protocol support, new NSURLSession API, and best practices for networking in apps, extensions, and WatchKit apps.

NSAppTransportSecurity

Preventing Insecure Network Connections

NSExceptionDomains

NSAllowsArbitraryLoadsForMedia

NSAllowsArbitraryLoadsInWebContent

WKWebView

Learn more about App Transport Security on the Developer Forums

Posted on Leave a comment

Best of WWDC21

Explore Xcode Cloud workflows

Learn how Xcode Cloud workflows can help you and your team automate building, analyzing, testing, archiving, and distributing your apps and frameworks. They are flexible, extensible, and can be configured around your team’s development and distribution process. Find out the basics of Xcode Cloud…

Posted on Leave a comment

Challenge: Create an engaging tutorial

The DocC documentation compiler, available in Xcode 13, converts Markdown-based text into rich documentation for Swift frameworks and packages and displays it right in the Xcode documentation window. DocC also powers the interactive developer tutorials featured on developer.apple.com. In this challenge, we invite you to explore the tutorial functionality and design and build step-by-step instructions for an existing project you’ve created or an open source Swift package.

Begin the challenge

To get started writing a tutorial, add a Documentation Catalog to your existing project, or create a new framework project.

You’ll write your tutorial content in Markdown, and use directives to define specific types of pages and elements, like introductions, sections, steps, and assessments. Then, use the Build Documentation feature of Xcode — which runs the DocC compiler — to render your tutorial in a rich, interactive learning format.

diagram showing markdown translated to DocC tutorial format

Resources

Meet DocC documentation in Xcode

Discover how you can use DocC to build and share documentation for Swift packages and frameworks. We’ll show you how to begin generating documentation from your own code — or from third-party code you depend upon — and write and format it using Markdown. And we’ll also take you through the…

Create great documentation with DocC

Build interactive tutorials using DocC

Discover how you can author immersive tutorials from scratch with DocC. We’ll demonstrate how you can bring together rich instructions, example code, and images through the DocC syntax to showcase your Swift framework in action. And we’ll go over how to create progressive training that can…

Elevate your DocC documentation in Xcode

Great documentation can help people effectively and easily adopt your Swift framework. Discover how you can create rich, conceptual articles to accompany your API. You’ll learn best practices for writing articles, including how to structure your documentation, and find out how to create…

Visit the Apple Developer Forums

Building an Interactive Tutorial

SlothCreator: Building DocC Documentation in Xcode

Read the WWDC21 Challenges Terms and Conditions

Posted on Leave a comment

WWDC21 Daily Digest: Day 5

A Memoji staring into the screen of a MacBook Pro.

This is it! The final day of WWDC. (We can’t believe it, either.) Before we power down, however, we’ve got one more big day of events and activities for you.

Relive the week

It’s been a busy week — and we understand if you missed some of the action. Catch up quickly with our video recaps of Day 1, Day 2, Day 3, and Day 4.

Thursday@WWDC21

Wednesday@WWDC21

Tuesday@WWDC21

Monday@WWDC21

Day 5 in the WWDC pavilions

There’s still lots to explore in the pavilions. Discover how to design for Safari 15 in the Safari & Web pavilion. Learn how to practice audio haptic design in the Audio & Video pavilion. And find out how to build a research and care app in the Health & Fitness pavilion.

Design for Safari 15

Practice audio haptic design

Code-Along: Build a Research and Care app

Code-Along: Build a great Mac app in SwiftUI

Write a DSL in Swift using result builders

Explore advanced project configuration in Xcode

Create 3D workflows with USD

Accept these Friday challenges

The responses to the #WWDC21Challenges this week have been fantastic. You’ve captured 3D objects and designed SwiftUI interfaces for your apps in the style of old Apple design language. You’ve resolved pesky memory issues in code by capturing flags, and designed and created ShazamKit companion apps.

Developer Laurence Moroney built an app for the “Build an app using built-in Sound Classification” challenge that takes the built-in sound classes and renders them as emoji.

Developer Laurence Moroney built an app for the “Build an app using built-in Sound Classification” challenge that takes the built-in sound classes and renders them as emoji.

We’re wowed by the things you’ve created — and now, it’s the last day to show off your skills.

Explore #WWDC21Challenges on social media

Explore spatial audio soundscapes and learn how to craft compelling stories with multichannel audio. Build a prototype in SwiftUI. And solve a pitch-black maze entirely using VoiceOver.

Challenge: Prototype with SwiftUI

Challenge: Explore spatial audio soundscapes

Challenge: VoiceOver Maze

Drop in on the Digital Lounges

The WWDC21 Digital Lounges have been so much fun, but it’s almost time to say goodbye. The lounges will close at 5 p.m. PDT on Friday, but there’s still time to stop by SwiftUI Office Hours, meet the presenters in the Machine Learning lounge, and connect with the developer tools and accessibility teams. Don’t be shy — if you haven’t stopped by the Digital Lounges yet, we’d love to meet you still.

Explore the Accessibility Digital Lounge

Explore the Developer Tools Digital Lounge

Explore the Machine Learning Digital Lounge

Explore the SwiftUI Digital Lounge

Spotlight on accessibility

How do you approach creating apps for everyone? Learn from developers who are blind or deaf themselves as they discuss the process of making technology accessible. Discover how their unique perspectives have sparked innovation at their companies and helped make their apps even more inclusive.

Developer spotlight: Accessibility

Join our final Mindful Cooldown for Coding

There’s been so much excitement this week: At 3 p.m. PDT, wind down with one final Mindful Cooldown for Coding from our friends at Fitness+.

And that’s a wrap! Thank you for spending your week with us, watching sessions, participating in our Digital Lounges, asking questions in the Developer Forums and 1-to-1 labs, trying daily challenges, and having fun.

And remember: While WWDC21 may be over, our session and labs content will be available all year round in the Developer app for you to consult when you’re ready to start working on the next thing.

Posted on Leave a comment

Challenge: VoiceOver Maze

Speak bubble symbol with a pointing arrow location symbol inside

Can you escape from Castle Park using only VoiceOver? Challenge yourself to solve this puzzle while getting familiar with VoiceOver, an assistive technology for people who are blind and low-vision. VoiceOver is a screen reader that allows people who are blind and low-vision to completely operate Apple’s products. On iOS, people can touch and swipe on the screen in order to navigate items, with each item’s name and status spoken aloud using synthesized speech.

In this challenge, we invite you to escape the maze of Castle Park. But there’s a catch: There is no visual interface in this iOS app! You must rely completely on VoiceOver to navigate the maze and escape.

How to enable VoiceOver

You have a few options to enable or disable VoiceOver.

  • You can ask Siri to turn VoiceOver on or off for you at anytime.
  • You can use the Accessibility Shortcut in Settings > Accessibility and set the shortcut to VoiceOver. Now, when you triple click the side button (or Home button, depending on your device), you can quickly turn VoiceOver on or off.

Begin the challenge

To start this accessibility challenge, download the Xcode project linked below and run it on iPhone or iPad. Use VoiceOver to explore the app and make decisions to help you escape.

Tip:
Once you’ve enabled VoiceOver, there are three main gestures to help you navigate:

  • Touch to speak
  • Swipe left or right to move previous or next
  • Double-tap to activate

And once you complete this challenge, consider exploring how your own app behaves with VoiceOver. How can you make it better for people who rely on a screen reader to interact with their device?

SwiftUI Accessibility: Beyond the basics

Go beyond the basics to deliver an exceptional accessibility experience. Learn how to use the new SwiftUI Previews in Xcode to explore the latest accessibility APIs and create fantastic, accessible apps for everyone. Find out how you can customize the automatic accessibility built into SwiftUI to…

Tailor the VoiceOver experience in your data-rich apps

Learn how to present complex data through VoiceOver with the Accessibility Custom Content API. Discover how you can deliver accessibility information in a concise form, and only when someone wants it. We’ll show you how you can integrate AXCustomContent and help people who want VoiceOver enabled…

VoiceOver: App Testing Beyond The Visuals

VoiceOver provides spoken descriptions and braille output of onscreen elements. Learn how to go beyond the visuals to identify VoiceOver and functional issues to help improve the experience for all users.

Resources

WWDC21 Challenge: VoiceOver Maze

Enhance the VoiceOver experience in your app

Read the WWDC21 Challenges Terms and Conditions

Posted on Leave a comment

Challenge: Prototype with SwiftUI

Swiftui icon on blue background

While SwiftUI is a powerful framework, one of its key features is its simplicity. Designers with very little knowledge of code can easily create prototypes with human-readable syntax and interactive Xcode Previews. In this challenge, we invite you to say “hello, world” with a brilliant SwiftUI-based prototype.

Begin the challenge

What’s an app you’d love to build right now? Take charge of SwiftUI and Xcode Previews and turn that idea into a prototype: Explore what interfaces you can create with Xcode Preview, and let the tools write the code for you. (And pick up a little SwiftUI code knowledge along the way.)

Start fresh with a new Xcode project, or explore prototyping a new view in SwiftUI for your existing app. Need support, or want help from the community in prototyping? You can share prototyping projects in progress on the Developer Forums. Already working on a prototype in UIKit or AppKit? Explore creating a new view in SwiftUI.

Visit the Apple Developer Forums

Share your new SwiftUI views with us over the summer. We can’t wait to see what you can build with SwiftUI and Xcode Previews, and to hear about what you learn!

Resources

Code-Along: Build a great Mac app in SwiftUI

  • WWDC20

Introduction to SwiftUI

Explore the world of declarative-style programming: Discover how to build a fully-functioning SwiftUI app from scratch as we explain the benefits of writing declarative code and how SwiftUI and Xcode can combine forces to help you build great apps, faster.

Introducing SwiftUI

Read the WWDC21 Challenges Terms and Conditions