After a lot of momentum in Beta 4 where I finally got my rogue smide.ch client for the watch to work, Beta 5 and 6 were a bit of a letdown with regards to real-world usability.
Already with Beta 4, Apple has deprecated
BindableObject, both of which total staples of SwiftUI and totally required for you to do any kind of meaningful application because they provide the glue by which you hook your UI up to you actual application.
With this, even the last pieces of sample code shown at WWDC sessions about SwiftUI were now invalidated. What a breakneck speed of development.
On the other hand, this was also a case of parallel evolution inside Apple because all the old pair provided was also provided by the Combine framework with latter having the advantage of actually be usable not just in SwiftUI but anywhere in your applications.
So I can completely understand the reasoning behind the deprecation. If you are willing to clean this up, then the beta period is the time to do it.
However in Beta 4 on watchOS, while the old method was deprecated, the new way only worked partially: If you changed your class that was previously inheriting from
BindableObject to now inherit from the correct
Combine.ObservableObject, none of your publishes would actually be picked up by SwiftUI and the UI would remain static.
So in Beta 4, even though it was deprecated, I kept using
BindableObject because that’s what was working.
@ObjectBinding on the other hand, I could replace with
But then, Beta 5 happened and the Beta 4 app crashed on startup.
Trying to compile it lead to a linker error because BindableObject now was gone for good. Note that the compiler was still just complaining about it being deprecated, but at link time, the symbol was missing and linking failed. This would also explain the crash at startup of the old Beta 4 app.
I’ve quickly replaced BindableObject with Combine.ObservableObject which made the app build again and run fine – on the simulator
On the real hardware, it would continue crashing on launch.
Even after installing the logging profile on the watch in order to get some information via the Console, all I got was a single log line entry from Carousel complaining about the launched process shutting down.
As this is just a fun project after all, this is where I stopped again, waiting what further betas will bring.
After a while, Beta 6 came and went. It brought no change.
Then, Beta 7 happened, but I didn’t even bother trying to recompile without an updated Xcode which finally happened today and, spoiler alert, my App is back in a running state. No further changes were required.
So it all wasn’t my fault after all.
Next time I’ll talk about the changes I’ve done since Beta 7 and Xcode Beta 6