Will's Avatar

Will

@will-lumley.bsky.social

Mainly a senior iOS engineer, but love to dabble in web development and robotics/embedded-systems in my spare time. Father to four amazing children, and husband to a beautiful wife. Checkout my stuff: https://lumley.io http://github.com/will-lumley/

281 Followers  |  42 Following  |  52 Posts  |  Joined: 01.01.2024  |  1.931

Latest posts by will-lumley.bsky.social on Bluesky

let's express gratitude to the amazing people who selflessly shared their priceless wisdom with us: @danielchooper.bsky.social, Jinkai, @useyourloaf.com, Tjeerd in 't Veen, @jacobstechtavern.com, Bruno Valente Pimentel, Alfonso Tarallo, @massicotte.org and @will-lumley.bsky.social

20.10.2025 12:19 โ€” ๐Ÿ‘ 5    ๐Ÿ” 2    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

Hard agree. Combine deserved a graceful evolution, not quiet abandonment. Even a small set of first-party bridging tools or async-friendly operators wouldโ€™ve gone a long way toward easing the transition.

14.10.2025 13:10 โ€” ๐Ÿ‘ 2    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

My talk from ServerSide is up!

13.10.2025 13:23 โ€” ๐Ÿ‘ 35    ๐Ÿ” 10    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 3

Fair question! And a common gotcha I've had with AsyncStream.

In this case itโ€™s fine, as each call to stream() creates its own independent AsyncStream/Continuation pair, and the actor fans out values to all registered continuations when send(_:) is called.
So yeah itโ€™s multi-subscriber safe :)

11.10.2025 13:34 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

Why make this?
Because observing an @Observable class from a SwiftUI view is easy, but doing the same from another ViewModel got messy fast. Without @Published, youโ€™re left juggling Tasks and AsyncStreams just to stay in sync.

11.10.2025 03:01 โ€” ๐Ÿ‘ 4    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
AsyncCombine: Because Async Code Shouldnโ€™t Be Ugly When Swift first introduced Combine, I loved it. The syntax was expressive, pipelines were easy to follow, and @Published made state changes feel almost magical. But as Apple pushed us toward Swift Co...

๐Ÿš€ New blog post!

AsyncCombine: Because Async Code Shouldnโ€™t Be Ugly

I brought back Combineโ€™s sink, assign, and CombineLatest - but built powered by Swift Concurrency.

Observing @Observable from another ViewModel shouldnโ€™t be painful.

Hereโ€™s how I fixed it ๐Ÿ‘‰ lumley.io/blogs/async-...

11.10.2025 02:59 โ€” ๐Ÿ‘ 21    ๐Ÿ” 5    ๐Ÿ’ฌ 4    ๐Ÿ“Œ 0
Preview
How to Stub URLSession Responsesโ€ฆ or Die Trying The internet is filled to the brim with the gravestones of attempts to stub URLSession responses. As something of a strange holdover from the Objective-C days, URLSession is notoriously hard toโ€ฆ

so i wrote a thing about stubbing URLSession based on a 'trick' i discovered the other day jellystyle.com/2025/09/stub...

24.09.2025 09:17 โ€” ๐Ÿ‘ 1    ๐Ÿ” 1    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Preview
Swift 6.2 Released Weโ€™re excited to announce Swift 6.2, a release aimed at making every Swift developer more productive, regardless of where or how you write code. From improved tooling and libraries to enhancements in ...

www.swift.org/blog/swift-6...

16.09.2025 05:10 โ€” ๐Ÿ‘ 7    ๐Ÿ” 5    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Post image

iOS Dev Tip ๐Ÿ’ก

Easily monitor the deviceโ€™s thermal state to optimize performance during overheating.

โ†’ learnandcodewithenid.com

17.04.2025 19:20 โ€” ๐Ÿ‘ 1    ๐Ÿ” 1    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Post image

Making this argument and then hanging the entire load on TRY is fucking hilarious:

10.04.2025 22:29 โ€” ๐Ÿ‘ 487    ๐Ÿ” 40    ๐Ÿ’ฌ 11    ๐Ÿ“Œ 4
Post image

๐Ÿ’กStarting with iOS 18.0, you can create mesh gradients in SwiftUI using MeshGradient.

โ†’ learnandcodewithenid.com

19.01.2025 23:24 โ€” ๐Ÿ‘ 13    ๐Ÿ” 1    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

FaviconFinder by @will-lumley.bsky.social is awesome!

github.com/will-lumley/...

10.01.2025 08:49 โ€” ๐Ÿ‘ 3    ๐Ÿ” 1    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

Thank you for the shoutout @weijianduan.bsky.social! Iโ€™m really glad itโ€™s managed to help you :)

10.01.2025 23:37 โ€” ๐Ÿ‘ 3    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Preview
Adjust the intensity of colors in SwiftUI views Lighten or darken colors in SwiftUI views using the brightness(_:) modifier.

There is a convenient brightness(_:) modifier in #SwiftUI that can be used to adjust the intensity of colors in our views. We can lighten the colors by passing it values from 0 to 1 or darken them using negative values:
nilcoalescing.com/blog/AdjustT...

19.12.2024 06:51 โ€” ๐Ÿ‘ 41    ๐Ÿ” 7    ๐Ÿ’ฌ 2    ๐Ÿ“Œ 0

1517, Martin Luther

28.12.2024 18:37 โ€” ๐Ÿ‘ 22    ๐Ÿ” 2    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

itโ€™s forbidden in their culture but a vacuum cleaner wants nothing more than to eat itโ€™s own cord

26.12.2024 17:13 โ€” ๐Ÿ‘ 1346    ๐Ÿ” 139    ๐Ÿ’ฌ 20    ๐Ÿ“Œ 2
Preview
GitHub - Jaennaet/pISSStream: macOS menu bar app that shows how full the International Space Station's urine tank is in real time macOS menu bar app that shows how full the International Space Station's urine tank is in real time - Jaennaet/pISSStream

Why I ๐Ÿ’› the web.

#macOS menu bar app that shows how full the ISS urine tank is in real time. ๐Ÿ›ฐ๏ธ๐Ÿšฝ

Yurnining to check this out.

github.com/Jaennaet/pIS... #Swift

25.12.2024 00:10 โ€” ๐Ÿ‘ 14    ๐Ÿ” 2    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

*click* React Native. *click* Flutter. *click* .....SwiftUI. *click* GTK. Easy. *click* ......Qt6.

23.12.2024 01:19 โ€” ๐Ÿ‘ 8    ๐Ÿ” 2    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

How embarrassing! Maybe itโ€™s just an issue on my machine then ๐Ÿ’€

15.12.2024 06:36 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

CMD+Space doesn't bring up Spotlight anymore and this has ruined my opinion on macOS and life.

15.12.2024 05:07 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

How so?

15.12.2024 03:20 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

Completion > perfection

13.12.2024 04:51 โ€” ๐Ÿ‘ 1    ๐Ÿ” 1    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

With #swiftlang It's easy to forget that the diff between a point-free and pointed styles of function argument passing is not just syntactic but semantic. It's normal to consider these to be equivalent:
1. [1, 2].map(String.init)
2. [1, 2].map { String($0) }
But we shouldn't forget that: 1/4

11.12.2024 13:44 โ€” ๐Ÿ‘ 12    ๐Ÿ” 1    ๐Ÿ’ฌ 2    ๐Ÿ“Œ 0
Post image

Do you know about the take function for the Optional type? It takes the value if it is not nil and toggles the variable to nil.
https://buff.ly/3Zin2Wv

11.12.2024 11:16 โ€” ๐Ÿ‘ 14    ๐Ÿ” 6    ๐Ÿ’ฌ 3    ๐Ÿ“Œ 0

I've always just used GPT-4o, but will give o1 a try after this. Keen to see the difference.

09.12.2024 03:32 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Video thumbnail

A problematic little #swiftlang pattern I often see is "unwrap-then-nullify" for optional values that hold some temp state. This oft comes up when dealing with local caches or scrollOffsets or in-flight tasks, etc. Forgetting to nullify a value to "reset" state is a common mistake. Use take method.

06.12.2024 12:28 โ€” ๐Ÿ‘ 28    ๐Ÿ” 2    ๐Ÿ’ฌ 3    ๐Ÿ“Œ 0
Post image

If โ€œthe boy who cried wolfโ€ was a notification

05.12.2024 07:03 โ€” ๐Ÿ‘ 2    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

Hypothetically, imagine not knowing Swift Testing doesn't have a built-in timeout function, and then writing a bad unit test and pushing it, going to sleep, and then waking up and finding out you've used all your Github Action minutes for the month. On this second day of the month.
Hypothetically.

02.12.2024 00:29 โ€” ๐Ÿ‘ 2    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
How to Write Unit Tests for Combine Publishers in Swiftย Testing Unit testing Combine publishers can feel like youโ€™re wrestling with a slippery eel: asynchronous, stateful, and a bit chaotic if not handled correctly. But fear not! Today, Iโ€™ll walk you through how t...

Currently working on a Swift project that uses Combine, and because it the year of our lord 2024 I'm using Swift Testing to write my unit tests.

But I was struggling with covering my Combine code with Swift Testing.

Here's how I managed to solve the problem!

lumley.io/blogs/swift-...

#iOS #swift

30.11.2024 08:26 โ€” ๐Ÿ‘ 2    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

@will-lumley is following 20 prominent accounts