I wonder though, why start with old Objective-C cocoa APIs instead of Swift?
I wonder though, why start with old Objective-C cocoa APIs instead of Swift?
I don't need to do that in my day to day job, but I do remember that as part of an OS class at school (some 20+ years ago) one of the tasks we were assigned was that we had to work in pairs of teams, where one team would implement a function and another team would implement code that called that function, the only requirement being that both teams had to use different languages. The point of the exercise was to show how, provided you had a defined API, thanks to linking you could use the best language for each job.
Objective-C is done, see WWDC 2022.
(I'm saying this as someone who would be more inclined to contribute if it was written in Swift.)
* They definitely did not start with Objective-C and a blank slate here; they're folding in monumental amounts of third-party code
Around minute 4, or go through the transcript.
Likewise for AppKit.
Apple, the “do as we say, not as we do” company.
Besides this is nothing new in the industry, some Android business units and Windows ones, are quite adverse to touch anything besides C++, regardless of the guidelines to the rest of us.
I know they say it. But they’re made up of 100s-1000s of groups. And at Apple especially, many of these groups are not allowed to talk to each other.
From the outside it’s easy to see companies that way. But if you’ve ever been inside a large company, you know what I’m talking about. That’s not unique to tech, either.
And rewriting software in a new language is always going to get back burnered by delivering new features. Until there’s a fundamental change they want that justifies a rewrite, a codebase is staying in its current language due to inertia.
Heck, companies will lie to themselves about these things. My favorite is this pattern
Execs: We’re all going to X!
Crowd: Yaaay. [Some project leads look at each other with a mix of sarcasm and fear.]
Initiative kicks off. Swag is distributed. Projects are identified.
Exec: [Looks at $] Well, except this one. And that one… Ok, we’ll replace all of these [waves arms] in 3-5 years.
Narrator: 3-5 years continues to be relative to the current date.
I'm sure I still have CD case with 'Windows .net' printed on it which contains Windows 2000 and SQL Server... .net?
The marketers really went to town on that one, would have loved to be in the creative pitch meetings for that swag.
'.net, what is it??'
'Who knows??! But if we print .net in multicolour on enough stuff, somebody might figure it out!'
To be fair, the developers at Microsoft went to town on it as well, adopting C# for parts of Windows Blackcomb, including the File Manager, the Desktop Manager, and (some of) WinFS. It turned into a fiasco and the .NET adoption was mostly dropped, as far as I remember, when they did the "reset" and pivoted to Vista.
So since Vista all new APIs follow Longhorn ideas, while using COM, followed by Windows Runtime, with the caveat that tooling is just as bad as before .NET was invented, but hey they are happy fellows on their little turf.
For problem areas where Apple's frameworks provide a useful or necessary solution, accessing them from Objective-C instead of Swift is more stable. Examples like Accelerate, HealthKit, and StoreKit come to mind.
For problem areas where Apple has no advantage but you want to ship code there, oft derided but broadly usable solutions like C++ (which connects to Objective-C better than it does to Swift) or Javascript dominate.
Even Apple appears to struggle at drinking its own koolaid, given the recent criticism of the Settings port to SwiftUI. [2]
[1]: https://www.joelonsoftware.com/2004/06/13/how-microsoft-lost...
[2]: https://daringfireball.net/linked/2022/08/15/ventura-system-...
Swift seems to be more and more a kitchen sink language. Compile time linking, v-tables, and dynamic dispatch? Sure! There’s so much syntactic sugar masking seemingly unchangeable implementation details (throws/try/catch) and odd implementation choices (protocols associated types vs structs and classes generics). Builder methods are just plain weird, imho.
I had a lot of hope for Swift early on, but it seems like a rudderless ship.
Further, I saw many legacy projects move from Objective-C to Swift (Podcasts comes to mind). (Some legacy Objective-C apps like iTunesU, sadly, were "sunsetted".)
Until recently, I believe there were issues with frameworks written natively in Swift so I saw a few smaller frameworks thrown together in Objective-C. I believe that, whatever the issues were, are no longer pertinent.
I can say too that there are many engineers that don't even know how to code in Objective-C. The younger engineers learned on Swift and are even hostile to writing in Objective-C (ha ha).
Of course Apple is a big company and I can't speak for the whole of engineering - only the teams/orgs I was involved with. And since I left Apple last year I can only guess at the current state. But the direction was clearly away from Objective-C.
As you can imagine, the biggest hurdle to 100% adoption is going to be bringing over legacy projects. Porting to Swift will probably always take a back seat to features, bug fixes. If the pace at Apple were more leisurely, not a suite of new OS releases every year, perhaps we could have our cake and eat it.