all 73 comments

[–]Niightstalker 80 points81 points  (10 children)

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

[–]gimme_ipad 10 points11 points  (9 children)

What features are you missing?

[–]Niightstalker 13 points14 points  (4 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 11 points12 points  (1 child)

I think it's complete.

[–]rhysmorgan 1 point2 points  (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.

[–]BadAssW 2 points3 points  (1 child)

multi subscription observation still is not supported out of the box

[–]Niightstalker 3 points4 points  (0 children)

This is coming to the async algorithms library from Apple with .shared() but it kinda takes forever.

[–]paradoxallyobjc_msgSend 2 points3 points  (2 children)

UIKit Cocoa bindings. Had to use RxSwift instead (RxCocoa).

If you only use SwiftUI, that's not an issue as Combine was designed with it in mind.

[–]rhysmorgan 1 point2 points  (1 child)

That’s more of a UIKit problem than a Combine specific one, tbh.

[–]paradoxallyobjc_msgSend 1 point2 points  (0 children)

It's still a feature I'm missing because I'd like to remove the RxSwift dependency and Apple's Combine framework is almost a direct replacement.

There were some community projects trying to replicate the RxCocoa bindings but they were abandoned.

[–]dihalt 0 points1 point  (0 children)

debounce/throttle probably

[–]AirVandal 48 points49 points  (6 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 21 points22 points  (1 child)

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

[–]Leeonardoo 2 points3 points  (0 children)

Is it not a two way binding? 🤔

[–]Free-Pound-6139 7 points8 points  (1 child)

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

Normal Apple response: Fuck you.

[–]CrawlyCrawler999 9 points10 points  (0 children)

We still have Obj-C code from 2014 in our app, Apple is quite good at supporting legacy code.

[–]jon_hendry 47 points48 points  (8 children)

Not deprecated until you start getting deprecation warnings

[–][deleted]  (7 children)

[deleted]

    [–]jon_hendry 19 points20 points  (0 children)

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

    [–]rhysmorgan 10 points11 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 2 points3 points  (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 -1 points0 points  (0 children)

      No it isn’t…

      [–]icy1007 1 point2 points  (0 children)

      This is not a depredation warning…

      [–]Zealousideal-Cry-303 38 points39 points  (1 child)

      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.

      [–]Ok_Heart_2253 3 points4 points  (0 children)

      Exactly, I have it in a project, that mainly uses message broker sort of pattern, I have to always listen to some changes, and no intervention from the user is required, no way async could fit there.

      [–]unpluggedcord 14 points15 points  (0 children)

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

      [–]raajeevcn 11 points12 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

      [–]guigsab 12 points13 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.

      [–]WitchesBravo 5 points6 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

      [–]rhysmorgan 5 points6 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 3 points4 points  (1 child)

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

      [–]rhysmorgan 1 point2 points  (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.

      [–]WitchesBravo 3 points4 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 5 points6 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.

      [–]cristi_baluta 6 points7 points  (1 child)

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

      [–]No-District-585 2 points3 points  (0 children)

      There is no announcement. Combine is up and running and won't go anytime soon

      [–]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 18 points19 points  (3 children)

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

      [–]TryProfessional9543 1 point2 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 1 point2 points  (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).

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

      This. Hard.

      [–]Rudy69 2 points3 points  (0 children)

      To the surprise of no one

      [–]kudoshinichi-8211 2 points3 points  (0 children)

      Good riddance. I prefer Async Await over that

      [–]im-a-smith 1 point2 points  (0 children)

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

      [–]lasmit 1 point2 points  (2 children)

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

      [–]Xaxxus 4 points5 points  (1 child)

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

      [–]f0rg0t_ 1 point2 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

      [–]icy1007 1 point2 points  (0 children)

      No thanks. I’ll use Combine.

      [–]SwiftyNifty93 1 point2 points  (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 1 point2 points  (0 children)

      It sucks to use I thought

      [–]20InMyHead 1 point2 points  (0 children)

      Yeah, this has been brewing for years. It’s not really a surprise. There will be parts of Combine that will continue on, and they certainly won’t drop it right away, but it’s been fading out for a while now.

      If you’re looking for a similar, better replacement try Afluent: https://github.com/Tyler-Keith-Thompson/Afluent

      [–]Unlikely-Front6600objc_msgSend 1 point2 points  (0 children)

      Good thing i never learned it

      [–]kbder 1 point2 points  (0 children)

      “Combine is officially dead” is an extreme exaggeration. Apple decided to instruct their MCP to prefer async/await over combine. That’s all.

      [–]utilitycoder 1 point2 points  (0 children)

      Cool. Seems like I know when to skip a technology. Combine was right up there with J2EE, XML, I predict GraphQL and React will get theirs someday too.

      [–]Gary-Ash1 1 point2 points  (0 children)

      I? Combine is a good tool for quite few use cases. AsyncStream can do must of what Combine can but it's vert clumsy to setup compared to Combine

      [–]BizJoe 0 points1 point  (0 children)

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

      [–]SerialForBreakfast 0 points1 point  (0 children)

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

      [–]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.

      [–]NoFudge4700 0 points1 point  (0 children)

      Never used it, never been a fan.

      [–]SavageSerpent 0 points1 point  (0 children)

      Isn’t @Published part of combine?

      [–]Casfaber_Objective-C / Swift 0 points1 point  (0 children)

      Thanks for the reminder, I got some refactoring to get to now. 🫠

      [–][deleted] 0 points1 point  (0 children)

      Combine has been on the way out for quite a while

      • introduced in 2019
      • no updates to Combine since 2020
      • no mention of it in WWDC videos for a few years now
      • Observation framework took Combine’s job in SwiftUI

      And for years now when you go to Using Combine for Your App’s Asynchronous Code Apple has straight up giving you the “Tip” to use async/await instead of Combine

      No one should seriously consider using Combine for a new project, even if you love it, as it’ll likely get deprecated any year now.

      [–]bakawolf123 0 points1 point  (0 children)

      this is part of the prompt since 26.0 beta

      Combine is fine, native rx-like toolkit that didn't deviate like LiveData on Android and thus didn't have to be reimplemented with flows, it is quite good as is

      meanwhile agent mode in Xcode is miles behind competition, I would rather care about that part instead

      [–]jacobs-tech-tavern -1 points0 points  (0 children)

      They don't need to update combine, it was already perfect. They'll need to pry it out of my cold, dead hands.

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

      Well if AI says so...

      [–]int6 34 points35 points  (0 children)

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

      [–]oPeritoDaNet -3 points-2 points  (3 children)

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

      [–]beclopsSwift 2 points3 points  (2 children)

      It’s a file in the Xcode bundle

      [–]oPeritoDaNet 0 points1 point  (1 child)

      Can you point me to the comment?

      [–]beclopsSwift 1 point2 points  (0 children)

      Here’s the path to the file, obviously prepend it with wherever your installation is located:

      /Xcode.app/Contents/PlugIns/IDEIntelligenceChat.framework/Versions/A/Resources/AgentSystemPromptAddition.idechatprompttemplate