donny wals
donny wals
  • 28
  • 29 279
Let's build an app with iOS 18's new sidebar!
In this video I explore iOS 18's new sidebar and tab bar hybrid by building a tab bar that works well on both iPhones, iPads, and iPads in split-view mode too. I'm using Xcode 16's beta to explore this upcoming feature. We'll leverage size classes and SwiftUI's environment to support smaller screens as well as the iPad's larger screen.
zhlédnutí: 845

Video

Build a stretchy header with SwiftUI on iOS 18
zhlédnutí 921Před 9 hodinami
Let's take a look at SwiftUI's new onScrollGeometryChange view modifier to create a stretchy header effect with little to no workarounds!
WWDC 2024 recap - Apple Intelligence and more
zhlédnutí 316Před 9 hodinami
Apple's WWDC 2024 event happened yesterday and the Keynote was packed with amazing features. In this video I share a developer's perspective on the Keynote and everything that was announced. From visionOS, iOS, iPadOS, macOS and watchOS all the way to Apple's new intelligence features that will release later this fall.
Swift’s “if” and “switch” expressions explained
zhlédnutí 186Před 14 hodinami
In this video we dig into if and switch expressions in Swift. They make conditionally assigning properties in Swift much cleaner than before! This post is a companion for my blog post on the same topic: www.donnywals.com/swifts-if-and-switch-expressions-explained/ Improve your Swift Concurrency skills with my video course: donnyplus.com/p/practical-swift-concurrency-the-video-course
@preconcurrency usage in swift explained
zhlédnutí 399Před dnem
In this video we'll look at how you can start migrating to strict concurrency checking and Swift 6 gradually. We'll go over importing modules that haven't been updated to strict concurrency as well as updating modules to use strict concurrency without having to ship breaking changes as a library author. Learn more about concurrency in Swift with my course: donnyplus.com/p/practical-swift-concur...
Defer in Swift explained
zhlédnutí 393Před měsícem
Learn everything you need to know about Swift's defer keyword in this short video. This video is a companion for this blog post: www.donnywals.com/what-is-defer-in-swift/
Deciding between a computed property and a function in Swift
zhlédnutí 502Před měsícem
In this video we explore Swift's computed properties and I talk about the different things I consider when deciding which type of property I should use. This video is a companion video for: www.donnywals.com/deciding-between-a-computed-property-and-a-function-in-swift/ Level up your Swift Concurrency skills with my course: donnyplus.com/p/practical-swift-concurrency-the-video-course
Avoid App Store Rejection! Add a Privacy manifest to your app today
zhlédnutí 738Před měsícem
Learn how you can add a privacy manifest file to your Xcode project to make sure that you comply with Apple's newly introduced Required Reason API Declaration requirements. Avoid Missing API Declaration (ITMS-91053) rejections and add your manifest today. In this video you'll learn how you can create a privacy manifest file in Xcode and how you can use www.privacymanifest.dev to generate your m...
How to use experimental Swift versions and features in Xcode?
zhlédnutí 240Před měsícem
In this video we'll dig into how you can leverage experimental toolchains and feature flags to test new Swift versions before they're released. Watch me download a new toolchain, install it, enable it in Xcode, and then I actually add a feature flag to test our region based actor isolation. Level up your Swift concurrency skills with my course: donny-wals-s-school.teachable.com/p/practical-swif...
Actor Reentrancy in Swift explained
zhlédnutí 800Před 2 měsíci
In this video we'll explore a complicated topic called actor reentrancy. You'll find out why adding async methods to your actors can yield unexpected and undesired results. You'll also learn about one possible way to solve a specific form of actor reentrancy that leverages caching unstructured Tasks. This video is a companion for my blog post on the same topic: www.donnywals.com/actor-reentranc...
Using Closures as Dependencies
zhlédnutí 1,1KPřed 2 měsíci
In this video we'll explore an alternative way of injecting functionality into your objects. You'll see how you can use closures to inject only the functionality you really need rather than an entire object which makes scoping your dependencies much easier, as well as improving composability and testability of your code. This video is a companion video for the following blog post: www.donnywals...
Building an AsyncSequence with AsyncStream.makeStream
zhlédnutí 416Před 2 měsíci
In this video you'll learn how to use Swift 5.9's AsyncStream.makeStream method to build custom async sequences. You'll learn about its usage as well as its caveats. This video is a companion for this blog post: www.donnywals.com/building-an-asyncsequence-with-asyncstream-makestream/ Other blog posts worth reading: - Understanding Swift Concurrency's AsyncStream: www.donnywals.com/understanding...
Five tips and tricks for exploring a new codebase
zhlédnutí 312Před 2 měsíci
In this video we take a look at some of the most important tips and tricks that I have learned about exploring codebases in practice. Does it make sense to jump in without a plan? You'll learn everything you need to know in this video. Level up your Swift concurrency skills with my course: donny-wals-s-school.teachable.com/p/practical-swift-concurrency-the-video-course Or check out my books: do...
Working with dates and Codable in Swift
zhlédnutí 412Před 3 měsíci
In this video you'll learn about leveraging date decoding strategies in Swift in order to correctly parse different date formats that you might have in JSON data. This video accompanies this blog post: www.donnywals.com/working-with-dates-and-codable-in-swift/ If you're interested in deepening your iOS skills, take a look at my books here: donnywals.com/books.
Customizing how Codable objects map to JSON data
zhlédnutí 467Před 3 měsíci
Learn everything you need to know to start writing more complex and custom mappings for how JSON data can be converted into Swift models. In this video, we'll look at providing custom coding keys. This video accompanies this blog post: www.donnywals.com/customizing-how-codable-objects-map-to-json-data/ If you're interested in deepening your iOS skills, take a look at my books here: donnywals.co...
An introduction to JSON Parsing in Swift
zhlédnutí 671Před 3 měsíci
An introduction to JSON Parsing in Swift
What's new in Swift 5.10
zhlédnutí 3,6KPřed 3 měsíci
What's new in Swift 5.10
Comparing @Observable to ObservableObjects in SwiftUI
zhlédnutí 1,1KPřed 3 měsíci
Comparing @Observable to ObservableObjects in SwiftUI
Designing APIs with typed throws in Swift
zhlédnutí 713Před 3 měsíci
Designing APIs with typed throws in Swift
How to determine where code runs in Swift Concurrency
zhlédnutí 2,1KPřed 3 měsíci
How to determine where code runs in Swift Concurrency
Writing code that makes mistakes harder
zhlédnutí 585Před 4 měsíci
Writing code that makes mistakes harder
Conforming your SwiftData objects to Codable
zhlédnutí 1,7KPřed 9 měsíci
Conforming your SwiftData objects to Codable
Binding vs. Bindable in SwiftUI on iOS 17
zhlédnutí 9KPřed 11 měsíci
Binding vs. Bindable in SwiftUI on iOS 17
SwiftData live stream June 6th, 2023
zhlédnutí 949Před rokem
SwiftData live stream June 6th, 2023
WWDC Watch Party - Advanced Combine
zhlédnutí 704Před 3 lety
WWDC Watch Party - Advanced Combine

Komentáře

  • @edhahaz
    @edhahaz Před dnem

    3 UIs into one lol... flutter devs screaming rn

  • @smotch7533
    @smotch7533 Před 3 dny

    if I choose regular does it match all devices larger than iPad, TV or Vision Pro for example

    • @DonnyWalsdev
      @DonnyWalsdev Před 3 dny

      Yes, those should all be regular too. Good to know is that macOS is always regular regardless of your window’s size

    • @smotch7533
      @smotch7533 Před 2 dny

      @@DonnyWalsdev oh interesting!

  • @TwinkyEnterainment
    @TwinkyEnterainment Před 3 dny

    Might need to send this to one of the speakers at iOSKonf in Skopje about the scrollView problem :D. Great work as always Donny!

  • @w0mblemania
    @w0mblemania Před 4 dny

    Donny, at the beginning of the video, the list of items is overlapping the header in a nasty way. This may be because you have set a fixed height for the rectangle (300 pts). So the image height is being adjusted dynamically, but the rectangle is not. Cheers.

    • @DonnyWalsdev
      @DonnyWalsdev Před 4 dny

      Do you mean there’s a glitch while I’m messing around with scrolling in the beginning? Not sure why that happened. Changing the rectangles height causes the entire scroll view to glitch unfortunately; otherwise the header image could have been in the scroll view and we wouldn’t have needed the ZStack at all.

  • @tokero5199
    @tokero5199 Před 4 dny

    Cool. Now we just have to way a few years to be able to use it because Apple does not want to backport UI like Android has AndroidX....

  • @iLoveAppl3947
    @iLoveAppl3947 Před 4 dny

    jizz man...WWDC24 is not finished yet and fanboys already making videos...chill

    • @DonnyWalsdev
      @DonnyWalsdev Před 4 dny

      Why wouldn’t I make a quick video about a view modifier I like?

  • @slmille4
    @slmille4 Před 4 dny

    I'm really curious whether App Intents will expand beyond just being voice activated shortcuts to making it possible to quickly surface relevant information out of 3rd party apps.

  • @chezchezchezchez
    @chezchezchezchez Před 5 dny

    This is great. Thanks, Donnie.

  • @nigelgee3576
    @nigelgee3576 Před 6 dny

    Can you have a ‘var’ then able to change the value again?

  • @MarijaJuodyte
    @MarijaJuodyte Před 9 dny

    Thank you!

  • @ashleydube3710
    @ashleydube3710 Před 12 dny

    Thanx

  • @indiekiduk
    @indiekiduk Před 12 dny

    Hopefully this is the nail in coffin for view models and everyone finally learns structs!

    • @DonnyWalsdev
      @DonnyWalsdev Před 12 dny

      I doubt it. SwiftUI and @Observable very strongly rely on (view)models being defined as classes

    • @indiekiduk
      @indiekiduk Před 12 dny

      @@DonnyWalsdev view models are view structs. @ observable is for model data

  • @BookmarkMountain
    @BookmarkMountain Před 17 dny

    Really well explained thank you!

  • @wjcnwjcn
    @wjcnwjcn Před 28 dny

    What about this? czcams.com/video/_XZHzl3R1Fo/video.html

    • @DonnyWalsdev
      @DonnyWalsdev Před 26 dny

      What about it? Is there something specific from that video you think I should look at?

  • @nicolaiharbo2201
    @nicolaiharbo2201 Před měsícem

    I’ve been aware of the feature for a long time, but never found a reason to use it honestly. Always thought of it, as a bit useless. Is it something you use often, and if yes, for what? Like, very specific use cases would be appreciated 😊

    • @DonnyWalsdev
      @DonnyWalsdev Před měsícem

      I don't use it often. Mostly for stuff like in the example from the video where there might be multiple exit points for the function and I always need to unset/restore some state. It's useful for that, but not something I use very often

    • @markaurelius61
      @markaurelius61 Před měsícem

      It would be to close a connection to a database, for example. Many of the things that would have been useful for though are handled by ARC.

  • @toddlask
    @toddlask Před měsícem

    your videos are beyond my noobie level but really interesting!

    • @DonnyWalsdev
      @DonnyWalsdev Před měsícem

      Thanks! Are there any topics that you're currently learning about or interested in that I could cover?

    • @toddlask
      @toddlask Před měsícem

      @@DonnyWalsdev hey thx for asking! im kinda interested in the life cycle and object structure of a running app. like the dom in the old internet explorer. im an older programmer and want to understand the modern new ways of swift. im very curious how the app sees the environment variables and settings, other views and classes... i hope this makes sense.

  • @victorriurean
    @victorriurean Před měsícem

    👍

  • @alexandr8328
    @alexandr8328 Před měsícem

    Hello! When is your Swift Concurrency course released? It says it is still in progress. Thx

    • @DonnyWalsdev
      @DonnyWalsdev Před měsícem

      Hey! The course should be finished in the next week or two. Plan was to have it fully done this week but I'm currently at a conference so that seems a little too ambitious. Almost all sections are finished except for the final one on TaskGroup and async let.

  • @nigelgee3576
    @nigelgee3576 Před měsícem

    I know that you are using person name as an example code. But it should said that when dealing with with names that should use PersonNameComponentsFormatter as this will put the correct format for user locale

  • @srzurka
    @srzurka Před měsícem

    Thanks for the video. I concur. I would only add that, computed properties feel Swifty to me so I start with a bias towards using them, then change to a function when there's one of the situations that you've identified. (needs arguments, it's not lightweight, potential side-effects, etc)

  • @user-qg8nc5bk4p
    @user-qg8nc5bk4p Před měsícem

    Sound became better :) Could you please share your thoughts on usage of extensions, e.g. extending models with some methods, formatting methods etc. When an object that does something is better than extension of some model that handles the model certain way and returns the data I need, the only think that comes to my mind is inability to use DI in extension, so testability is limited for these functionality

    • @DonnyWalsdev
      @DonnyWalsdev Před měsícem

      I've added it to my (long) list of potential topics!

  • @tiagoalexbastos
    @tiagoalexbastos Před měsícem

    your videos are so good man, top tier content! Keep it up :)

  • @nigelgee3576
    @nigelgee3576 Před měsícem

    Nice generator. I have already added it to my new project so I do not forget it. Is it required for TestFlight?

    • @DonnyWalsdev
      @DonnyWalsdev Před měsícem

      Not required for TestFlight but I’d recommend just adding it anyway :)

  • @venuvenu2719
    @venuvenu2719 Před měsícem

    Awesome, Is the required reasons API, the only thing that needs to be added? What about privacy nutrition labels? Let's say, my app uses email id info and Username. What do I do here?

    • @DonnyWalsdev
      @DonnyWalsdev Před měsícem

      You should be adding them all. However, Apple will only reject you for not declaring required reason APIs.

  • @jairoalexanderlaurenteceli9966

    Excelente video, muchas gracias por compartir información valiosa!!✌✌

    • @DonnyWalsdev
      @DonnyWalsdev Před měsícem

      ¡Gracias! Me alegro que te guste el vídeo

  • @victorriurean
    @victorriurean Před měsícem

    🔥

  • @filmaniac1984
    @filmaniac1984 Před měsícem

    Thanks @DonnyWalsdev! Great example and well explained.

  • @roym27
    @roym27 Před měsícem

    I had to stop watching because of the background music - it’s not great when you’re narrating as I was unable to focus on what you were saying.

    • @DonnyWalsdev
      @DonnyWalsdev Před měsícem

      I'll probably do a re-record of this video at some point without the bg music. It's a shame that it's not possible to "update" a video without a full reupload

  • @srinivasanmunna
    @srinivasanmunna Před 2 měsíci

    This is a great one. I was actually expecting to see another dictionary variable that keeps track of running tasks. But the enum with associated type looks so much better.

  • @JumpingCow
    @JumpingCow Před 2 měsíci

    Subtle and complex! Thank you.

  • @0xifarouk
    @0xifarouk Před 2 měsíci

    This is amazing, thank you for the explanation 🙏🏻 Can we have a video on task cancellation please?

  • @bobdel
    @bobdel Před 2 měsíci

    This video is very helpful. I am still confused by the body property. As I understand it, Body is annotated via a protocol to run on MainActor. Is this correct: a view such as the one in your example that does not have a @MainActor annotation, but the function is called from a task modifier inside the Body will run on the MainActor.

    • @DonnyWalsdev
      @DonnyWalsdev Před 2 měsíci

      It's the opposite, unless the function definition itself has a @Mainactor annotation (or in other words, is isolated to the main actor) it doesn't matter where you call it from. The function itself decides where it runs and if it's not isolated to the main actor explicitly it will run in the background even if it was called from a main actor isolated spot

  • @muncho404
    @muncho404 Před 2 měsíci

    the title was enough to trigger my anxiety😅

  • @jyotinkarpandey
    @jyotinkarpandey Před 2 měsíci

    Can we have a sample project link ?

    • @DonnyWalsdev
      @DonnyWalsdev Před 2 měsíci

      Hey! So sorry, I don't have a (publicly available) sample project available for this.

  • @victorriurean
    @victorriurean Před 2 měsíci

  • @weeee733
    @weeee733 Před 2 měsíci

    Thanks for the tip! Also these closures make use of withContinuation methods)

  • @loganblevins8633
    @loganblevins8633 Před 2 měsíci

    Nice video! Why not make a smaller protocol only giving the needed capability and then make the other protocol conform to the smaller if needed?

    • @DonnyWalsdev
      @DonnyWalsdev Před 2 měsíci

      You'd end up with loads of small protocols that are composed into larger ones when needed. This can certainly help with scoping and mocking, but at the same time having so many protocols can be quite unwieldy; especially when an object needs to have a composition of parts of protocols and you end up having to break things down even further. Of course, it might make more sense for some codebases then others. This is just one tool in your toolbelt for injecting and composing dependencies

  • @priceringo1756
    @priceringo1756 Před 2 měsíci

    Thank for such great, simple but not trivial, examples!

  • @user-jz8op2dc4e
    @user-jz8op2dc4e Před 2 měsíci

    Why can you input content in the canvas preview? How do I set it up?

    • @DonnyWalsdev
      @DonnyWalsdev Před 2 měsíci

      You can start "playing" the canvas from the previews UI and that should make it interactive

  • @indiekiduk
    @indiekiduk Před 2 měsíci

    I think makeStream is an anti-pattern because I ran into issues when using like cancellation not working. Once I redesigned my async code and made AsyncStream own the object that yields values all my problems were solved!

    • @DonnyWalsdev
      @DonnyWalsdev Před 2 měsíci

      Any chance you have a gist that would demonstrate the issues you've had? The tests I ran involved moving from the older AsyncStream init to makeStream and I didn't see these issues.

    • @indiekiduk
      @indiekiduk Před 2 měsíci

      @@DonnyWalsdev ok I'm trying to work on that. I noticed you had onTermination = { [weak self] that must have been to work around the retain cycle issue.

    • @indiekiduk
      @indiekiduk Před 2 měsíci

      I've been investigating this all day and I think makeStream is fine. By using a weak var in the parent object and using onTerminate to capture a strong reference to the stream's object I can make cancellation deinit the stream's object properly. My test harness has a task group with 2 tasks that call the same stream property on its containing object (to make sure the first stream is cancelled). I can only have one stream working at a time despite the object's stream property being a computed var that returns a new stream, so I wanted it to also cancel a previous stream.

  • @w0mblemania
    @w0mblemania Před 2 měsíci

    Thanks for this.

  • @syakhiskk
    @syakhiskk Před 2 měsíci

    Earned a sub! This feels like talking to a coworker instead of watching a youtube video. THANKS!

  • @victorriurean
    @victorriurean Před 2 měsíci

    🔥

  • @andresraigoza2082
    @andresraigoza2082 Před 2 měsíci

    I found very useful the idea of thinking that @State is telling SwiftUI who owns that object. I'll never forget that, thank you so much!

  • @iLoveAppl3947
    @iLoveAppl3947 Před 2 měsíci

    tickets are damn expensive for stuff that you find for free on CZcams...

  • @victorriurean
    @victorriurean Před 3 měsíci

  • @victorriurean
    @victorriurean Před 3 měsíci

  • @victorriurean
    @victorriurean Před 3 měsíci

  • @w0mblemania
    @w0mblemania Před 3 měsíci

    This was very useful. Thanks.

  • @NicholasGJeria
    @NicholasGJeria Před 3 měsíci

    Love these videos, keep them coming.