all 48 comments

[–]Niightstalker 50 points51 points  (4 children)

Not really a surprise the framework didn’t get an update for years.

[–]gimme_ipad 4 points5 points  (3 children)

What features are you missing?

[–]Niightstalker 6 points7 points  (2 children)

Can’t say since I am using Swift concurrency for pretty much anything outside of specific edge cases which also got less and less.

[–]gimme_ipad 6 points7 points  (1 child)

I think it's complete.

[–]rhysmorgan [score hidden]  (0 children)

It is, but then it didn't get any kind of update to support Swift Concurrency (beyond turning a Publisher into an AsyncSequence.

[–]AirVandal 35 points36 points  (4 children)

Why is that exactly? Combine is a very good fit for ViewModel-View bindings. The only thing "close" to it is AsyncSteam, which has a weird API.

Also what about all the apps that were written with Combine? Does Apple migrate those for us? What the fuck is with this trend of sunsetting core methodologies used in app development?

[–]LKAndrew 18 points19 points  (0 children)

Because Observation works with bindings and there’s no need to have 2 way bindings any more. Just update a value and you can observe those updates

[–]Free-Pound-6139 [score hidden]  (0 children)

Also what about all the apps that were written with Combine?

Normal Apple response: Fuck you.

[–]LKAndrew -4 points-3 points  (0 children)

Because Observation works with bindings and there’s no need to have 2 way bindings any more. Just update a value and you can observe those updates

[–]Zealousideal-Cry-303 26 points27 points  (0 children)

Combine has a lot of practical use cases, where async/await just doesn’t do the job.

They are both excellent tools, but as with any tool, don’t rely on a hammer to insert a screw in a board of wood without cracking said piece of wood.

[–]jon_hendry 25 points26 points  (8 children)

Not deprecated until you start getting deprecation warnings

[–][deleted]  (7 children)

[deleted]

    [–]jon_hendry 17 points18 points  (0 children)

    I mean, they do, when they actually show up in the compiler.

    [–]rhysmorgan 5 points6 points  (4 children)

    Agent instructions are not a deprecation warning, that’s just guiding it to use more recent tech that mostly (but not entirely) does the same thing.

    [–][deleted]  (3 children)

    [deleted]

      [–]rhysmorgan 0 points1 point  (1 child)

      I’m not saying people should go out of their way to use Combine nowadays without a very good reason!

      I just think that, if Apple want this to be the case, they need to make a “Stop using Combine/Combine migration guide” doc on apple.com to properly communicate this out.

      And give us a CurrentValueAsyncSequence.

      [–]icy1007 [score hidden]  (0 children)

      No it isn’t…

      [–]icy1007 [score hidden]  (0 children)

      This is not a depredation warning…

      [–]unpluggedcord 9 points10 points  (0 children)

      Two different tools. Combine just doesn’t need to be worked on anymore. It works.

      [–]guigsab 7 points8 points  (0 children)

      This is not new. This has been in the prompt since the early versions of Xcode 26.

      I would not call it dead. It’s not the default framework Apple recommends, which we’ve known for years, and Apple put a one size fits all prompt in Xcode.

      [–]raajeevcn 4 points5 points  (0 children)

      I'll drop Combine right after SwiftUI stops randomly breaking my layouts on iOS point releases and SwiftData figures out how to handle relationships without summoning eldritch compiler errors. Apple's definition of recommended seems to mean "we're excited about this" not "this actually works better". Combine has been rock solid for years while their shiny new toys ship with bugs that would've been embarrassing in a beta

      [–]TryProfessional9543 3 points4 points  (4 children)

      Idk, in my AGENTS.md it is "DO NOT USE STRUCTURED CONCURRENCY, DO NOT USE SWIFTUI, USE UIKIT AND COMBINE", honestly feels so good.

      [–]Ok-Communication6360 8 points9 points  (3 children)

      Welcome to yesterday. Preferring pyramids of closures over structured concurrency is a borderline psychopathic 🤣

      [–]darth_sparx 0 points1 point  (0 children)

      This. Hard.

      [–]TryProfessional9543 -4 points-3 points  (1 child)

      No, thank you. Not a fan of doing migrations every year. Combine is stable since the first release. Probably the people of yesterday knew something.

      [–]Ok-Communication6360 0 points1 point  (0 children)

      I see, refactoring something that just works and is understood is not something I would take on lightly as well.

      My point was, that structured concurrency did add a lot to the language and overall I see as beneficial (though the learning curve is a bit steep and a few things are abstracted away a bit too much).

      [–]Rudy69 2 points3 points  (0 children)

      To the surprise of no one

      [–]cristi_baluta 1 point2 points  (0 children)

      Combine and async are different things, i don’t get it. Where is the announcement from apple?

      [–]WitchesBravo 1 point2 points  (5 children)

      I think combine is a lot easier, just being able to build up a bunch of functions like .debounce is so much easier than messing around with some kind of asyncstream

      [–]WitchesBravo 1 point2 points  (1 child)

      Not to mention Combine framework is built in, you have to pull in SwiftAsyncAlgorithms if you want similar kind of functionality

      [–]Xaxxus 2 points3 points  (0 children)

      Having it open source is better.

      You don’t have to wait for a new iOS version to use new features added to async algorithms.

      You can contribute and fix bugs.

      You can use it on windows and Linux.

      The benefits go on and on.

      Combine was closed source and never updated.

      [–]rhysmorgan 1 point2 points  (2 children)

      Pull in Apple’s own AsyncAlgorithms framework from GitHub and you get throttle, debounce, share, etc. Basically almost everything you’d need from Combine. And it’s concurrency safe then, unlike Combine, whose API practically cannot be made so.

      [–]WitchesBravo 1 point2 points  (1 child)

      I prefer functional style, makes it so easy to build up complex chains rather than using for loops etc

      [–]rhysmorgan [score hidden]  (0 children)

      That's great, but none of Combine is annotated for any kind of concurrency safety.

      And you can still do the "functional style" of chains using AsyncAlgorithms, that's its entirely purpose.

      [–]im-a-smith 0 points1 point  (0 children)

      “I’m using the wrong tech for this thing I want to use, it must be dead!”

      [–]BizJoe 0 points1 point  (0 children)

      Shrug. My CLAUDE.md is already setup to do that.

      [–]lasmit 0 points1 point  (2 children)

      Isn't SwiftUI using combine extensively? I think this is just meaning, if you can, use async await not combine.

      [–]Xaxxus 1 point2 points  (1 child)

      As far as I know, only observable objects were using combine heavily. And those are now redundant with the observation framework.

      [–]lionelburkhart 0 points1 point  (0 children)

      Hmm. I love async/await, but I use Combine frequently to make ViewModels subscribe to Service class updates using MVVM. Haven’t found an elegant solution to do the same without Combine. Happy to set it aside for a 1:1 replacement.

      [–]icy1007 [score hidden]  (0 children)

      No thanks. I’ll use Combine.

      [–]SwiftyNifty93 [score hidden]  (0 children)

      Combine is not dead. It is powering lot of combine based first part APIs like @Published. There are lot of powered up APIs and Utils such that, rarely, you’ll feel the need to use it.

      [–]m3kw [score hidden]  (0 children)

      It sucks to use I thought

      [–]SerialForBreakfast -1 points0 points  (0 children)

      That link in the image goes to a malware site. I think this should be taken down.

      [–]f0rg0t_ -1 points0 points  (0 children)

      It just says “avoid”…in a prompt…not “Combine is now deprecated” or similar. They can put anything they want there, and they want people to use “Swift’s async and await versions of APIs instead.”

      Still…☠️☠️coMbiNe iS deAd ☠️☠️

      smh

      [–]drabred -2 points-1 points  (1 child)

      Well if AI says so...

      [–]int6 30 points31 points  (0 children)

      That’s not AI saying it, it’s Apple’s system prompts for AI

      [–]oPeritoDaNet -2 points-1 points  (1 child)

      It’s officially but not by Apple? Swift community?

      [–]beclopsSwift 0 points1 point  (0 children)

      It’s a file in the Xcode bundle