I’ve not had much trouble either, not recently anyway. The transition from v1 → v2 → v3 was rough, but that’s par for the course when you’re an early adopter.
The new async model looks like a bit of a bear, but that’s why there’s a toggle for it that works on a per-module level so you can incrementally adopt it whenever you see fit.
Honestly I’ve had more pain out of the Kotlin/Android experience in the past several years. If Swift suddenly became a tier 1 language option there I’d switch right away.
Most Objective-C codebases are brown field development.
Apple themselves, the only framework that they started from scratch in recent years was Metal, and even there only die hards use Objective-C instead of the Swift bindings.
Could be better, it isn't as bad as you make it to be, for a language whose design goals are to replace C, C++ and Objective-C for Apple.
I think that is a bit of an overstatement given the amount of legacy code and bindings generation capabilities. I do think it had to swing towards memory safe and C++ still didn’t have a plan for smart pointers much less move semantics when Swift dev started.
Who knows what present day Objective-C++ could have been if it had been the workhorse language of choice. Maybe this profiles thing Bjarne is pushing could have been in the roadmap. We will never know.
Not at all, besides Objective-C would have been dead by now, had it not been for NeXT reverse acquisition of Apple.
Additionally Objective-C++ never was seen anything beyond interop with existing C++ code, and only old timers like myself have its documentation, you will hardly find anything about it on Apple's documentation nowadays.
I would hardly say perfect, but it's regular headaches.