[HN Gopher] I Quit Using SwiftUI
       ___________________________________________________________________
        
       I Quit Using SwiftUI
        
       Author : geoffeg
       Score  : 133 points
       Date   : 2022-08-28 17:53 UTC (5 hours ago)
        
 (HTM) web link (chsxf.dev)
 (TXT) w3m dump (chsxf.dev)
        
       | ChildOfChaos wrote:
       | Ugh.
       | 
       | I haven't really coded things since I was a kid and since I have
       | an iPad/iPhone/iMac and wanted to learn how to code again and
       | potentially use it as a side hustle or some sort of future money
       | making opportunity, I decided to learn swift/swiftUI and i'm
       | currently taking an online course, but when I read through hacker
       | news, all I see is articles bashing it constantly.
        
         | [deleted]
        
       | retskrad wrote:
       | People nowadays praise Apple for their hardware, mainly their
       | silicon - not their software. Maybe it's time for Apple to shake
       | things up and promote someone else to VP of Software engineering?
        
         | bsaul wrote:
         | I'm with you, however mac os remain the best dekstop OS and iOS
         | remain the best mobile one, even after all those years. So,
         | they must be doing something right..
        
           | GrabbinD33ze69 wrote:
           | I agree, in my experience, MacOS is one of the most reliable
           | operating systems I've used in terms of lack of crashes or
           | spurrious bugs; the most common bug I see is my mouse pointer
           | dissapearing, which is fixed by opening the tasks view.
        
             | pohuing wrote:
             | If only they could so something about the truly terrible
             | window switching crap, where you'll have to hit the same
             | icon in your doc multiple times to eventually with a bit of
             | luck get to the window you wanted. Why can't we have window
             | previews like Windows has had since Windows 7 or just about
             | every DE on Linux
        
               | mml wrote:
               | hold down option when you release the selection to force
               | hidden windows up. i too hate this behavior.
        
             | DelightOne wrote:
             | My mouse pointer also disappeared for a time when it by
             | accident crossed over to my iPad. After disabling that
             | feature it never happened again.
        
           | ohgodplsno wrote:
           | iOS lacks many features that have been standard on Android
           | for years and the only reason it feels so smooth is because
           | the UI thread has pretty much the highest QoL that anything
           | can ever have. iOS would rather drop your network call than
           | drop a single frame.
           | 
           | Android variants all have things that iOS can only dream of
           | having in five years (notifications was a fun one), just
           | spread very unevenly throughout manufacturers. Samsung
           | currently has a very good Android build.
           | 
           | Calling it the best is very far fetched.
        
             | dangus wrote:
             | The copying of features isn't one-sided. Both companies
             | have had firsts there:
             | https://www.popsci.com/story/diy/stolen-features-android-
             | app...
             | 
             | When I switched from Android to iOS in 2016, I was shocked
             | at how little was different, and I can only assume gulf has
             | narrowed since then. A lot of features Android users just
             | _assume_ iOS users don 't have are there: vendor-agnostic
             | password manager integration, Safari browser extensions,
             | Safari content (ad) blocker API (Chrome is restricting ad-
             | blockers soon!), more complete home screen customization
             | and widgets, lock screen customization and widgets (iOS 16,
             | upcoming), custom third-party keyboards,
             | grouped/customizable notification system, native console
             | wireless controller support from all three consoles.
             | 
             | Features like granular privacy controls and screen
             | recording (with the exception of some obscure Android OEM
             | builds) debuted on iOS first.
             | 
             | I'd be skeptical with anyone declaring either platform
             | "best," I think they're both roughly equivalent.
             | 
             | However, I do think that anyone who uses macOS is insane to
             | go with Android. There are simply too many useful
             | integrations between the platforms to ignore, combined with
             | the fact that, even if the iPhone isn't _the best phone_ ,
             | it's usually in the top handful of choices in terms the
             | overall package.
        
           | FpUser wrote:
           | >"...however mac os remain the best dekstop OS..."
           | 
           | I would say this is a matter of opinion.
        
         | dangus wrote:
         | I view it a different way: macOS and many of Apple's built-in
         | apps/utilities are, at the very least, a _less bad_ option
         | compared to many others.
         | 
         | OS utilities like Image Capture, Preview, Apple's screenshot
         | utilities, Spotlight, Quick Look, and quite a few others have
         | been basically "killer apps" that make me want to use macOS
         | over Windows for decades now.
         | 
         | Even basic areas like system settings have been a point of
         | frustration for Windows for an extremely long time now, with
         | Microsoft taking many years to truly migrate off of the Control
         | Panel and deliver something half-decent in the Settings app.
         | The Windows 11 iteration finally starts to feel like it's a
         | little bit cohesive (but I still hate the Devices settings
         | panel). The whole situation has really been a mess going back
         | to Windows 8.
         | 
         | Another example: anytime someone says that printers universally
         | suck I know immediately that they're Windows users because of
         | just how much better Macs interact with printers and scanners
         | and how much better and more reliable their configuration
         | interface is. Apple single-handedly saved the entire printer
         | industry from the depths of hell with AirPrint, before that
         | Bonjour, and before that shipping OS X with preinstalled
         | printer drivers.
         | 
         | Windows 10 couldn't decide what screenshot app I was supposed
         | to use, thank goodness it's been consolidated after Windows
         | 10's inclusion of two separate apps both worse than Apple's
         | tooling.
         | 
         | Plus, Apple has to get credit for the sheer number of decently
         | high quality non-enterprise apps that Apple just gives you for
         | free.
         | 
         | Microsoft doesn't make anything that approaches the quality you
         | get from Apple's free iMovie, Photos, Podcasts, Books,
         | iTunes/Music, Contacts, Mail, Pages/Keynote/Numbers (without
         | paying).
        
       | stephc_int13 wrote:
       | Any UI code running on a modern CPU should take close to 0ms to
       | update, no matter how many buttons, toggles, sliders and shadows.
       | 
       | For the rendering part, it depends, I'd say it should take
       | between 0.5 and 2ms with many layers, a lot or transparency and
       | not much care for optimization.
        
         | kevingadd wrote:
         | In my experience working with IMGUI-style libraries, it's
         | definitely feasible to perform full layout and rendering for
         | complex UI in 1-2ms at most. For simpler applications it should
         | be basically free. It's depressing that people are willing to
         | accept complex, slow layout APIs at this point considering it's
         | been possible for stuff to be fast for a long time.
         | 
         | Perhaps surprisingly, the most expensive part is usually text
         | layout and rendering - text shaping is just really expensive
         | and in the industry standard libraries it can take a long time
         | to lay out a string, so you have to aggressively cache and do
         | fancy things to get good performance. ASCII text is fast,
         | though.
        
       | jmull wrote:
       | The declarative, "reactive" approach is good, and worthy of
       | rolling out a new UI API even given that Apple has an excellent
       | MVC-style API...
       | 
       | But it looks like the task was somewhat beyond the people who had
       | the responsibility for rolling out SwiftUI at Apple.
       | 
       | We're several years in to SwiftUI.
       | 
       | Apple's in a tough spot now. I'm really glad I don't have
       | anything too high-stakes dependent on it. (I only have a project
       | with ~200 hours invested -- not zero! -- it's heavily UI, but
       | it's tiny... maybe ~30-40 hours to port to UIKit, if needs be.)
        
       | TazeTSchnitzel wrote:
       | The post didn't go into much detail as to why it seems to be so
       | slow. Is SwiftUI recreating an entire UI's worth of components
       | when a state update happens?
        
         | bsaul wrote:
         | To me that's the red flag. That an experienced game developer
         | wasn't able to properly troubleshoot down to the correct level,
         | but ended up facing a black box and gave up.
        
           | ohgodplsno wrote:
           | I am not developing on Apple platforms, but just like any
           | reactive UI framework, i am almost certain the documentation
           | of SwiftUI starts with a massive red flag that says "make
           | your updates granular and don't repost a whole ass struct on
           | every frame" at the very beginning which is exactly what the
           | author seems to be doing.
           | 
           | If all you want is a declarative UI, just dump in ImGui and
           | be done with it.
        
             | yakubin wrote:
             | ImGui doesn't give you native OS widgets.
        
           | bowsamic wrote:
           | Well that's supposed to be the point of SwiftUI. You write
           | out your declarative structure, let the library worry about
           | how to make it fast, and move on with your day. They
           | literally introduced it that way. Obviously that is very
           | detached from reality
        
         | [deleted]
        
       | solarmist wrote:
       | It sounds like SwiftUI is capable, but not performant for his use
       | case. Fair enough.
        
       | pixel_tracing wrote:
       | The entire view shouldn't be redrawn but certain views only (not
       | the entire tree) maybe look into prevent entire view from being
       | redrawn itself (React does this too and you can prevent redraw
       | without utilizing useMemo by understanding it's internals)
        
         | tadfisher wrote:
         | Compose bakes this into the framework at the function level. By
         | default, if the function parameters are immutable and the
         | function doesn't return a value (basically emits compositions
         | by calling other Composable functions) the entire composition
         | is memoized and the function can be skipped.
         | 
         | The tricky part is knowing what is immutable, because standard
         | JVM collections are not.
        
       | jph wrote:
       | SwiftUI is a big opportunity that Apple's not investing enough
       | in, IMHO. It's good tech, and the reactive approach is excellent
       | for many typical view-based needs, but at the same time the docs
       | are terribly lacking at how to handle any kind of edge cases.
       | 
       | Success to me looks like steering clear of SwiftUI for now, and
       | advocating for Apple to hire documentation editors/leaders who
       | can 1) create SwiftUI documentation of code examples for how to
       | escape out of SwiftUI to handle more-complex cases, and 2)
       | accelerate Xcode speedups of SwiftUI testing-and-instrumentation
       | techniques such as View testing (e.g. ViewInspector) and
       | integration testing vs. unit testing (e.g. reactive vs.
       | dependency injection vs. extension tests vs. protocol tests etc.)
        
         | choxi wrote:
         | You can integrate UIKit into SwiftUI, I always found that to be
         | a pretty general purpose fallback on any missing functionality
         | in SwiftUI.
        
         | coldcode wrote:
         | It's a great idea but not fully baked yet. My former colleague
         | is using it for internal apps and it seems to work fairly well
         | (UI is not fancy), but not for anything going into the high
         | volume apps, which has much more complex behavior (designers
         | are asking for stupidly complex UI). It's much better in the
         | upcoming OS since they added better navigation, but requires
         | the latest OS, which is not supportive for many companies who
         | try to support back at least 1 year.
         | 
         | Will it ever be mainstream for iOS/MacOS? Maybe, if Apple would
         | use it way more than they have so far, thus improvement by
         | dogfooding. It is nice to build apps this way, but there are
         | way too many bizarre gotchas still for most people unless you
         | can live with more flexible designs.
        
           | dpmitu wrote:
           | At my company we've been slowly rewriting our UIKit app in
           | SwiftUI. We were due for a rewrite when SwiftUI dropped. I'd
           | say we're about 75% done.
           | 
           | For those "stupidly complex UIs", SwiftUI just doesn't have
           | enough hooks for customization. And the improvements are too
           | slow. Using SwiftUI has been bitter-sweet. It feels like you
           | just can't use it to craft a high quality app that doesn't
           | look like a generic iOS app.
        
             | WanderPanda wrote:
             | Is looking like a generic iOS app that bad?! Especially
             | here on HN where the sentiment is pro plain html etc. a
             | generic iOS UI should be well received
        
           | ozgung wrote:
           | > designers are asking for stupidly complex UI
           | 
           | I think a mobile app should have a stupidly simple UI
           | instead. Designers traditionally use a graphics program to
           | design pixels. SwiftUI let's you design layouts and
           | components. Maybe designers should change how they design and
           | start using SwiftUI as a design tool.
        
             | azemetre wrote:
             | Your comment reminds me how asinine some Designs orgs have
             | become at companies. Basically chasing fashion statements
             | and demanding Engineers "just do it" with little
             | consideration to the development, maintenance, and testing
             | costs.
             | 
             | Modern development, at some companies, can truly feel
             | regressive at times.
        
               | aYsY4dDQ2NrcNzA wrote:
               | It's like Design for Machining, if you're fabricating
               | metal parts.
        
         | elpakal wrote:
         | > but at the same time the docs are terribly lacking at how to
         | handle any kind of edge cases.
         | 
         | I agree that Apple's documentation needs help (this year's
         | improvements are a nice step) but can we really expect them to
         | provide extensive documentation for handling edge cases (you're
         | telling me UIKit docs offer that)?
        
           | heavyset_go wrote:
           | Yes, I expect a trillion dollar company to invest in good
           | documentation of their dev products.
        
             | worik wrote:
             | My feeling is that Apple hates the developers that develop
             | the software that makes them rich.
             | 
             | Forcing myself to be rational "hate" is probably too strong
             | a word. If you are down the Apple cul-de-sac there is
             | really no turning back. So investing in things like code
             | examples for all of their API (there are a few, a very few)
             | is a waste for Apple. It does not attract new developers
             | and the old ones are stuck in the cul-de-sac.
        
           | diffeomorphism wrote:
           | That sounds very different from what was written? The
           | complaint was about "lacking ... any kind of" yet you write
           | about "extensive documentation".
           | 
           | There obviously is a trade off with how much you can/should
           | expect, but "you cannot expect 9/10" is not a valid reply to
           | "it currently is 3/10".
        
             | elpakal wrote:
             | well thats good because I didn't say "you cannot expect",
             | did I?
        
         | darinf wrote:
         | So wish they would decouple SwiftUI from the OS releases and
         | opensource it!
        
           | bhedgeoser wrote:
           | ..and from the crappy excuse for an IDE that they distribute
           | along with their build tooling.
        
       | ChrisMarshallNY wrote:
       | I like what SwiftUI will become, but I'm not there. yet.
       | 
       | The current project that I'm working on, is pretty big. It peaked
       | at 40 screens, but I'm trying to get it down to half that.
       | 
       | I've been working on it for two years. I also wrote one of the
       | backends (and most of another).
       | 
       | There was _no way_ that I was going to start on a project of that
       | complexity on SwiftUI, which, at the time I started, had only
       | been demonstrated in a few small projects. I already knew that
       | UIKit could do it.
       | 
       | But I think that SwiftUI will become the standard, sooner or
       | later. I look forward to being able to write more reactive
       | applications in it. In my experience, if I use UIKit, it's a
       | fairly bad idea to stray from the old MVC model (This, I have
       | learned. _< Pulls up shirt>_ See this scar?).
        
       | brailsafe wrote:
       | I quite like SwiftUI most of the time, and have got past most of
       | hurdles, such as integrating state with menubar views. But my
       | biggest hangup is that it's used for 3 different platforms with 3
       | different sets of variation, and most tutorials focus on iOS
        
       | foobarding wrote:
       | Dealing with SwiftUI recreating Views too often can be a
       | challenge. I would have liked to have seen more details on how
       | this guy setup his models.
       | 
       | In my experience, you definitely have to minimize work done in
       | Views and maybe avoid `@Published` properties on your model in
       | favor of more explicit calls to `objectWillChange.send()` to
       | signal when you really are ready for the Views to be updated.
       | SwiftUI does not seem to do a very good job of coalescing by
       | default.
        
       | socialdemocrat wrote:
       | I spent only about half an hour with Swift UI to decide it was
       | bot worth it. Looks sleek but the underlying technology is too
       | complex IMHO.
        
         | bowsamic wrote:
         | I agree. The amount of plumbing behind the scenes is really
         | complex. This immediately becomes apparent if, for example, you
         | want to use @AppStorage with something that isn't a very simple
         | type. Then suddenly you are in no mans land reading Combine
         | documentation with no examples
        
         | seanalltogether wrote:
         | I just wish that Apple had used this big effort to update their
         | ui tooling to instead 1. Bring in stylesheets to UIKit/AppKit,
         | 2. Let us define UIKit/Appkit views with simple straightforward
         | xml like android or xaml.
        
       | mrtksn wrote:
       | The author talks about SwiftUI on macOS, which I also find to be
       | much much more buggy than what's on iOS.
       | 
       | Very unexpected things happen, like items in a specific region in
       | the App UI stop responding to clicks next time once you interact
       | with them.
       | 
       | However I find it fine on iOS and the issues are usually around
       | Apple changing something in the behaviour of the UI or API and
       | breaking it, then you need to fix it for specific versions of the
       | iOS. That's what you get when a framework is not mature yet, I
       | guess.
       | 
       | That said, I don't think there's a turning back. It might be
       | buggy but it definitely feels like the right way of building UI.
       | 
       | Oh, about the performance, you can build very sluggish or very
       | responsive UI with SwiftUI because there's a night and day
       | performance cost difference between "re-calculating and re-
       | drawing" the UI and adjusting a property of it. Always try to
       | structure your components in a way that changes happen by
       | changing passed values instead of inserting or re-doing the
       | views.
       | 
       | SwiftUI works quite a bit like React, many performance lessons
       | from React will translate into SwiftUI.
        
         | [deleted]
        
         | guelo wrote:
         | Tying the SwiftUI version to the iOS version is seriously
         | asinine. In the Android world Compose is a regular library so
         | devs can pick the version. That's partly why there has been
         | much more adoption of Compose even though it was released years
         | later than SwiftUI.
        
           | mrtksn wrote:
           | I wonder what is the technical justification for it too, if
           | any. I mean, sure - you can save space by making it a dynamic
           | library that is shipped with the OS but considering how
           | immature it is, shipping a specific version of it with the
           | app should be an option IMHO.
        
             | coldtea wrote:
             | > _I wonder what is the technical justification for it too,
             | if any._
             | 
             | Well, apps using it get a uniform look, that uniformly
             | changes when the OS look is updated so that it matches it,
             | and more importantly, they and also get to have the same
             | widgets and widget functionality [1].
             | 
             | Unlike, say, Windows where you have 20 generations of MS
             | GUI lib versions, with different looks and behavior,
             | running at the same time, even from MS apps themselves...
             | 
             | [1] Yes, Apple has its share of inconsistencies (e.g. Swift
             | UI vs regular Cocoa UI). But nothing like what would have
             | resulted if they allowed apps with different historical
             | macOS UI libs/versions to be installed at the same time
             | independently from the OS UI libs.
        
               | mrtksn wrote:
               | Good point actually.
        
             | sofixa wrote:
             | It's probably the same as the technical justification for
             | why Safari updates are bundled with iOS and not separate,
             | why XCode only runs on macOS, why no other browsers are
             | allowed on iOS, why macOS can't have separate scroll
             | directions between mouse and touchpad and many many others.
             | It's Apple's ecosystem, nobody is asking you, you're
             | holding it wrong.
        
               | bliteben wrote:
               | Scroll direction is because everyone needs a mouse that
               | you have to turn upside down to charge
        
               | mrtksn wrote:
               | The meme about the Magic Mouse charging upside down is
               | really silly. There's a real good reason to be like that
               | and you charge it once a month.
               | 
               | In the case of Magic Mouse, there's really a case of
               | holding it wrong too. People hold it wrong and thats why
               | they also complain about the ergonomics.
               | 
               | Truly excellent but misunderstood product.
        
               | AlotOfReading wrote:
               | I've worked on mice before and frankly I have no clue
               | what sort of technical requirement would lead to an
               | upside down charging requirement and disabling the
               | functionality in the meantime. Can you explain what that
               | reason might be?
               | 
               | Also if most people can't just pick up the mouse and use
               | it, it's a broken design. In my particular case, it's so
               | much smaller than my palm that I'm sure _any_ grip would
               | result in RSI.
        
               | mrtksn wrote:
               | Simple, the front is not thick enough to accommodate a
               | common port like USB or Lightning. If you put it on the
               | sides, it defies the purpose.
               | 
               | Changing the design to accommodate a port in the front
               | doesn't make sense because the primary function of the
               | device is to act as a human-computer interface and
               | optimising the design for that purpose is paramount,
               | charging is not a primary function but something that we
               | have to do with electronics and as a result having long
               | battery life and short charging process is good enough
               | solution(the battery lasts about a month, charging takes
               | about 2 hours but will work for hours even with a few
               | minutes or charging). Why would you compromise a design
               | for something that needs to be done occasionally and can
               | be done out of the service(i.e. at nigh, when not using
               | it).
        
               | AlotOfReading wrote:
               | So put the port on the side where you aren't supposed to
               | grip it. If we assume that being totally nonfunctional
               | for a couple hours a month is acceptable, merely being a
               | bit inconvenient for the same period is surely an
               | improvement.
               | 
               | Also, we _don 't_ agree that the magic mouse is good
               | human-computer interface because I'm starting from the
               | position that causing physical pain automatically
               | precludes it from that category. Another example of an
               | interface in the same position is laser keyboards.
               | They're also very cool designs, but the the fact that
               | tapping on solid surfaces starts to hurt after awhile
               | precludes them from being 'good' HCI.
        
               | mrtksn wrote:
               | You can't put it at the side, the cable will interfere
               | with the keyborad or the laptop that is on the left and
               | won't work at all for the left handed people.
               | 
               | I mean, if you really think that charging a few minutes a
               | day or leave it charging overnight once a month is a deal
               | breaker, simply don't buy it but this is not a bad
               | design. It is very unrealistic to expect that the mouse
               | will be used 24/7 every day forever. If you have this use
               | case of using mouse 24/7 everyday, this must be some kind
               | of industrial operation and obviously this mouse is not
               | for you but for everyone else it's a non-issue.
        
               | AlotOfReading wrote:
               | Won't work at all for left-handed people, as opposed to
               | now where it works for no one during the same period?
               | Seems like an improvement, despite my doubts that it
               | truly wouldn't work for left-handers.
               | 
               | Anyway, hopefully we can avoid wild mischaracterizations
               | here. My expectation obviously isn't that things work
               | 24/7 indefinitely. Think about how the typical user is
               | going to discover that the battery is low. Either they'll
               | get the notification just before it dies and have to
               | charge it "soon" [1] or the mouse will simply die and
               | force the matter. In some cases (think multi-user
               | computer labs), the person who receives the notification
               | and the person who has to charge the mouse might be two
               | different people. I think it's reasonable to find waiting
               | around on a mouse rather than whatever they were planning
               | on doing irritating.
               | 
               | [1] https://apple.stackexchange.com/questions/254703/get-
               | low-bat...
        
               | mrtksn wrote:
               | Sure, better notifications can help. Maybe once idle, can
               | send a notification to the phone to make the user put it
               | on charge overnight.
               | 
               | I had the occasion where the battery died by surprise.
               | That's why I keep repeating that the device works for
               | hours after few minutes o charging, you don't have to
               | fully charge it before use.
        
             | johannes1234321 wrote:
             | They can ship security updates themselves, which
             | immediately fix all apps. Otherwise apps eventually never
             | update.
             | 
             | Also apps don't get the new "improved" styles etc if they
             | don't have it in the system, which takes away the
             | consistency Apple aims for.
             | 
             | And then: It's Apple ...
        
               | pohuing wrote:
               | Style changes and quickly become usability and
               | accessibility issues. I'd rather my app continues to work
               | well as I tested it, than having to test all of the shit
               | on every other OS patch.
        
               | jen20 wrote:
               | I hope you don't apply the same philosophy to security
               | patches.
        
             | callmeal wrote:
             | My guess would be a monetary justification. After all you
             | can't just have developers working on year old laptops and
             | devices when you can make them buy new ones by making this
             | one simple change.
        
               | coldtea wrote:
               | These kind of "conspiracy theories" for this or that what
               | amounts to negligible money always make me cringe. Not
               | that companies don't do shitty things for money. But they
               | don't do things like that for negligible money compared
               | to their other operations, especially since there are far
               | more important reasons to do them...
               | 
               | The reason is platform coherence and control, and lock-
               | step updates. To avoid cases like this:
               | 
               | https://segmentfault.com/a/1190000040213084/en
               | 
               | https://ntdotdev.wordpress.com/2021/02/06/state-of-the-
               | windo...
               | 
               | ...and not the insignificant money that could be made
               | from devs updating a laptop a little earlier (especially
               | since you can trivially use a still supported 5-6 year
               | old laptop anyway with the newest Apple OS, and you
               | wouldn't see any major performance issue, except in cases
               | like the Intel to ARM switching. So what would they gain?
               | Developers forced not to use an 8 or 10 year old laptop?
               | As if they would?).
        
               | jules wrote:
               | The potential profit from that is a rounding error for
               | Apple.
        
       | adamnemecek wrote:
       | I like SwiftUI even if most of my views are still
       | NSViewRepresentables, it makes the application structure so much
       | nicer and I don't have to use Interface Builder as much. I know
       | you can use AppKit without Interface Builder but it's more
       | annoying.
        
       | solomatov wrote:
       | What surprises me the most is that Apple didn't open source it
       | even many years since unveiling has passed. It doesn't look to me
       | that they have any risks here. The library could be used only on
       | Apple platforms. It will let users submit fix PRs, and make
       | debugging code (by framework users) much easier.
        
         | worik wrote:
         | They will be embarrassed, perhaps, about code quality
        
       | kitsunesoba wrote:
       | The main issue with SwiftUI is sheer lack of maturity.
       | 
       | People don't think about it, but UIKit now has ~15 years of
       | effort put into it, and got a serious boost from its shared roots
       | with AppKit (even though big chunks of UIKit were freshly
       | written, its structuring and API design were largely informed by
       | AppKit), which has history tracing all the way back to the 1980s.
       | Of course something as fresh out of the oven as SwiftUI is isn't
       | going to be able to compare in terms of polish or capability.
       | 
       | So for now I'm sticking to UIKit in the apps I'm responsible for.
       | I think SwiftUI's day in the sun is coming, but it's not here
       | quite yet.
       | 
       | That doesn't mean that there aren't issues with how it's being
       | engineered and documented, though. It has serious shortcomings
       | that need to be shored up, and hopefully that happens with its
       | maturation.
        
         | ricardobeat wrote:
         | It is already three years old. I doubt AppKit, UIKit or any of
         | the predecessors were in a bad state for three whole years
         | after their launch.
        
           | kitsunesoba wrote:
           | I can't speak for AppKit, but UIKit/Cocoa Touch was pretty
           | rough early on. Major chunks of "standard" functionality were
           | missing and standard widgets were somewhat inflexible. It was
           | common to pull in third party libraries and write custom
           | widget code for relatively basic things.
           | 
           | Based on my experience, the UIKit dev experience didn't start
           | to reach the level of completeness it's known for now until
           | some time between iOS 7 and 9... at least that's when I
           | remember the number of "required" third party libraries start
           | to steeply decline.
        
       | rudedogg wrote:
       | I'm building an IDE in (mostly) SwiftUI, and have been using it
       | since release, so I feel like I've worked with it more than most
       | people.
       | 
       | A couple observations:
       | 
       | - SwiftUI is really complex
       | 
       | It's going to take you at least a year to get used to the
       | declarative way it works, and be able to make UIs without
       | struggling to figure out how to shuffle data around. If you look
       | at SwiftUI examples/code, most of the complexity is hidden, but
       | it's there, and you're going to have to interact with it to do
       | anything non-trivial.
       | 
       | - Is SwiftUI the way?
       | 
       | SwiftUI has enabled me to build out huge amounts of beautiful UI
       | quickly - faster than anything I've ever used. But you _will_ run
       | into things you can 't do, forcing you have to fall back to
       | AppKit/UIKit. And the area where AppKit/SwiftUI meet will
       | disappoint and frustrate you. I just got done refactoring a huge
       | amount of my app to use the "AppKit App Lifecycle" instead of the
       | SwiftUI App lifecycle since I need some specific windowing
       | behavior. Now I can't use .toolbar, .menu, and other stuff, which
       | makes things much more complicated for me, and forces me to think
       | about both SwiftUI/AppKit. Switching mental models like that, and
       | trying to remember all the intricacies of both SwiftUI and AppKit
       | is rough.
       | 
       | --------------
       | 
       | Regarding the performance issues of this specific post, my guess
       | is they put everything into an ObservableObject, and used
       | @Published properties to get bindings for their UI controls. This
       | means any view with a reference to the ObservableObject gets re-
       | rendered when @Published values change. Instead you need to silo
       | your changes, so your entire App isn't redrawn every frame. This
       | goes back to the complexity - it's not straightforward at all.
        
         | jules wrote:
         | How do you silo the changes? The issue was that changing a
         | property of an object caused the inspector to be redrawn. With
         | old fashioned UI libraries you would only change the value of
         | one text field in the inspector. Can this be achieved with
         | SwiftUI? To be honest I'm surprised that it's that slow even if
         | the entire inspector is redrawn. Surely on a modern computer
         | you can redraw a couple of text fields at 30fps?
        
           | rudedogg wrote:
           | See this answer: https://swiftui-lab.com/digital-
           | lounges-2022/#data-15
           | 
           | > Surely on a modern computer you can redraw a couple of text
           | fields at 30fps?
           | 
           | Yeah this is the tricky thing, with how (I'm guessing) the
           | code looks, you would think it's only updating the text
           | fields. But in reality it's probably re-rendering the entire
           | hierarchy using the @EnvironmentObject. So the SceneKit view
           | gets setup and rendered every update of the Slider.
           | 
           | ------------------
           | 
           | I have real-time color pickers for changing all windows in my
           | app. Same with font sizes. It's possible to make it work, you
           | just have to modify your design (which is unfortunate).
        
             | jules wrote:
             | Ah I see, so each of the values that are shown in the
             | inspector should become its own observable object? That
             | sounds reasonable.
             | 
             | > But in reality it's probably re-rendering the entire
             | hierarchy using the @EnvironmentObject. So the SceneKit
             | view gets setup and rendered every update of the Slider.
             | 
             | I get that this is slower than only updating the single
             | value, but what I don't understand is why even this is so
             | slow? Browsers can render the right hand side of this
             | inspector UI (https://chsxf.dev/assets/posts/5/map-editor-
             | with-inspector.p...) at reasonable speed _even if you
             | rebuild the entire DOM_ for the fields in the inspector. I
             | mean, it 's one checkbox, one slider, and 7 text boxes and
             | a bunch of labels. What is taking so much time here?
        
         | darinf wrote:
         | Yeah you end up designing models not to be logically separated
         | but to instead isolate updates to Views. In theory those should
         | align but they don't always. And the method of finding objects
         | thru the environment makes it all too easy to have big models
         | that everything is listening too which of course really hurts
         | perf. So easy to hold SwiftUI wrong.
        
         | pandatigox wrote:
         | Out of curiosity, what framework/library/solution are you using
         | for your text editor? I've been researching this space for a
         | while and syntax highlighting text editors are rare and sparse.
         | 
         | There is this: https://github.com/krzyzanowskim/STTextView for
         | textkit2, but the author ended up writing his own text input
         | client.
         | 
         | How did you do about providing autocomplete, etc?
         | 
         | Thanks!
        
           | rudedogg wrote:
           | > Out of curiosity, what framework/library/solution are you
           | using for your text editor?
           | 
           | I'm still at the beginning of that part, but I'm doing it
           | myself with TextKit 2 as well.
           | 
           | > I've been researching this space for a while and syntax
           | highlighting text editors are rare and sparse.
           | 
           | I had the same experience as you when looking for information
           | on how to go about it. I've come to the conclusion that no
           | matter what an editor/IDE is going to be an ugly beast. This
           | gave me some comfort in just forging ahead and trying to make
           | good decisions as I go. And since I'm doing this all as a
           | native app, I think I have a lot of wiggle room.
           | 
           | As far as syntax highlighting, I just recently started
           | calling into Zig (the language I'm building this for), and
           | using the tokenizer to do basic syntax highlighting. I'll
           | need to go a bit deeper into the compiler to do more advanced
           | highlighting, but it's cool to have it working.
           | 
           | > How did you do about providing autocomplete, etc?
           | 
           | I'm not there yet, but these are the things I'm looking
           | forward to working on. I'm currently working on sort of
           | "core" things and trying to design them well. Things like the
           | settings, window management, a command palette, etc. Getting
           | them close to right early on seems important.
           | 
           | I don't really do very technical posts, but I'm trying to
           | blog a little about it: https://austinrude.com/tags/zig-ide/.
           | My biggest issue is second-guessing using Swift/SwiftUI and
           | not trying to do it all myself with Zig, leading me to
           | procrastinate. But I'm pretty far along, and think I'll
           | probably release something eventually.
        
       | stackedinserter wrote:
       | In 2022 developing software for iOS (now iPhoneOS) feels like
       | you're working for Apple for free.
       | 
       | You have to look closely to new requirements that they roll out
       | every few months. You should use Apple products in your app or
       | gtfo (e.g. login with Apple ID). You have to update your laptop
       | every few years because Xcode (which is monumental PoS) requires
       | new MacOS that your hardware doesn't support. And when you go
       | through all this trouble, you have to literally beg Apply to
       | admit a new version of your app. You even have to pay Apple to be
       | able to write apps for their phones/tablets.
       | 
       | I'm so glad I jumped off iOS development a few years ago.
       | 
       | If you're a young developer and still not decided what area suits
       | you the most, think twice before entering iOS and MacOS
       | development.
        
         | [deleted]
        
         | qudat wrote:
         | I couldn't agree more, especially the bit about Xcode. I don't
         | even do apple development but still have to deal with it on
         | every upgrade. What a pain
        
       | Apocryphon wrote:
       | If I was to build a new mobile app using a shiny new declarative
       | framework, I'd rather use Flutter, because at least that provides
       | the benefit of targeting Android for free. Depending on the type
       | and scale of the app, of course.
        
         | mhoad wrote:
         | I know that the HN crowd has a weird relationship with both
         | Apple and Google that go in two very different directions
         | regardless of the evidence but honestly I think what you are
         | proposing is actually a really good long term plan.
         | 
         | Flutter is currently rewriting a key part of their graphics
         | rendering pipeline as we speak that should clear up the
         | remaining issues people seem to have with it when it comes to
         | performance and the rest of the project is incredibly well
         | supported and documented and most importantly as you hinted at
         | genuinely cross platform.
         | 
         | It's a much better bet for basically any project outside of one
         | that you know for a fact is only ever going to target Apple
         | operating systems.
        
           | Bolkan wrote:
           | > Flutter is currently rewriting a key part of their graphics
           | rendering pipeline as we speak
           | 
           | Source?
        
           | Apocryphon wrote:
           | To elaborate upon my previous post:
           | 
           | 1. SwiftUI seems mainly suited for building quick proof-of-
           | concept simple intro apps, with the difficult 20% still out
           | of reach. Which doesn't sound all that different from the
           | notorious downsides of cross-platform frameworks, some of
           | which can allow for small simple apps to be quickly spun up,
           | but the tough under-the-hood cases still intractable.
           | 
           | 2. Flutter, and React Native are more mature than SwiftUI is
           | right now. SwiftUI will get there, and maybe it's only 1-2
           | years away, but it still hasn't hit its Swift 5 moment yet.
           | That opens up the possibility of breaking API or even
           | conceptual changes until then.
        
       | aaaaaaaaaaab wrote:
       | People burn an astounding amount of CPU and brain cycles
       | pretending that UIs are something they are not. (i.e. "pure"
       | functions)
       | 
       | I hope Apple never goes the way Microsoft did with their fad UI
       | toolkits that utterly destroyed developer trust in native Windows
       | development (MFC, WinForms, WPF, UWP, WinUI, .Net MAUI). They are
       | pretty wise for keeping SwiftUI be the "for kids" vanity UI
       | toolkit to lure in React webdevs, while keeping UIKit and AppKit
       | for serious stuff.
        
         | marcosdumay wrote:
         | The ironic thing is that functional reactive idiom is not about
         | pure functions. It's about dealing with the impurity only once,
         | at state management.
         | 
         | But if you don't keep track of the impurity dependencies on
         | your language, you will need to rediscover those dependencies
         | during compilation, and besides surprising the developer all
         | the time, that's a really nasty problem to solve. That's why
         | it's always solved badly.
        
         | criddell wrote:
         | MFC? As somebody who has worked with MFC in some way or another
         | for the past 25 years, there are worse examples out there. The
         | beauty of MFC was that it was pretty simple layer on top of
         | Win32 and the source code was provided. You can continue to use
         | it with some of their newest stuff using XAML Islands.
        
         | rudedogg wrote:
         | > They are pretty wise for keeping SwiftUI be the "for kids"
         | vanity UI toolkit to lure in React webdevs, while keeping UIKit
         | and AppKit for serious stuff.
         | 
         | At WWDC 2022 they specifically said that Swift+SwiftUI is the
         | best way to build apps, and the future of their platforms. I
         | thought AppKit/UIKit would stick around, but I guess not.
         | 
         | ---------------------------
         | 
         | Edit: Here's the direct quote from the "Platforms State of the
         | Union":
         | 
         | > We're continuing to expand our adoption of SwiftUI across our
         | apps and system interfaces. For example, iOS's new Lock Screen
         | widgets were designed from the ground up using SwiftUI. The new
         | Font Book app was completely rewritten with it. And the modern,
         | forward-looking design of the new macOS System Settings app was
         | built using it. Swift and SwiftUI were designed from the start
         | to provide a single, native language and API for all Apple
         | platforms. You can learn them once and apply them everywhere.
         | Whether your vision is to provide quick access to information
         | at a glance on Apple Watch, productivity tools on MacBook Pro
         | and iPad, new experiences on iPhone, or a new way to relax with
         | Apple TV, Swift, SwiftUI, and Xcode provide a next-generation
         | integrated development platform to help you build apps for all
         | of our products. Now, if you have an existing app, it's easy to
         | adopt these new technologies incrementally. And if you're new
         | to our platforms or if you're starting a brand-new app, the
         | best way to build an app is with Swift and SwiftUI.
         | 
         | The slide had a Swift, SwiftUI, and Xcode logo with nothing
         | else.
        
           | bowsamic wrote:
           | There is no evidence to suggest that Apple are deprecating
           | AppKit and UIKit
        
             | ChrisMarshallNY wrote:
             | It'll be around for many years.
             | 
             | I know, for a fact, that some AAA applications are still
             | using ObjC.
             | 
             | Also, I am quite sure (but don't _know_ ) that Apple still
             | has a plenty big ObjC codebase at home.
        
               | aaaaaaaaaaab wrote:
               | Some? More like _all_ AAA applications use ~100% ObjC. I
               | 'm talking about apps like Facebook, Messenger,
               | Instagram, YouTube, etc.
        
               | ChrisMarshallNY wrote:
               | This is likely true. I only know of a couple, but I'm
               | quite sure that there are legacy codebases up the yin-
               | yang.
               | 
               | Either that, or Electron/Xamarin/React Native.
               | 
               | I am not really a fan of the hybrid apps. I was just
               | watching Slack go crazy on my iPad, a few minutes ago.
        
             | Someone wrote:
             | Supertankers turn slowly, but if the captain tells you the
             | ship will turn, you better believe it, even if you don't
             | see the ship turning yet.
             | 
             | Having said that, even though Apple indicates it will turn,
             | it still may change its mind halfway through.
        
               | worik wrote:
               | > but if the captain tells you the ship will turn, you
               | better believe it,
               | 
               | What Apple says at their circus show is not the same
               | weight as the captain of a ship telling you the ship's
               | course.
        
           | aaaaaaaaaaab wrote:
           | Don't read too much into it. That's just PR.
           | 
           | I'll start getting concerned when they rewrite any of their
           | serious apps in Swift(UI). (i.e. Logic, FCP, Xcode, Finder,
           | Instruments, iMessage, Mail, Calendar, etc.)
        
       | [deleted]
        
       | bowsamic wrote:
       | I just don't get what purpose it really solves over UIKit.
       | Everything seems far more complicated in SwiftUI, and the data
       | dependence problems it solves did not ever really seem to be a
       | huge issue in UIKit anyway.
       | 
       | Apple's sell for SwiftUI was "it's like going to a chef who knows
       | how to cook for you" instead of "cooking yourself". But is that
       | really a good thing? Do we really want to be taking less control
       | of our applications when we write them?
       | 
       | The worst part is all these tutorials that have to combine
       | SwiftUI and UIKit because the former is very buggy in certain
       | cases, like navigation trees on iOS have really janky animations
       | using SwiftUI. So you have to coordinate all your Views using
       | UIKit. It just seems barely easier to use SwiftUI most of the
       | time.
       | 
       | EDIT: Basically, in summary, it seems like a very complicated
       | (look at the crazy language features they had to add for it) plus
       | very opaque ("it magically does it for you just how you wanted")
       | way to write the same apps you were already writing fine in UIKit
       | and AppKit
        
         | aaaaaaaaaaab wrote:
         | I have some friends at Apple... The story goes something like
         | this: SwiftUI came about because someone who has never been a
         | software engineer, got concerned about losing mindshare to
         | ReactNative et al. So this person created a "task force" to
         | deal with the problem by tacking something on top of UIKit that
         | resembles React, to create a "friendly" ingress funnel into the
         | iOS world.
        
           | andrekandre wrote:
           | > SwiftUI came about because someone who has never been a
           | software engineer
           | 
           | so... management?
        
       | worik wrote:
       | > I profiled the whole thing and discovered several things
       | 
       | Well done
       | 
       | After two years with Xcode/Swift/SwiftUI I never succeeded in
       | getting anything useful out of the profiler.
        
       | ncmncm wrote:
       | Coding for a walled garden will always be an exercise in
       | futility.
       | 
       | The tooling will always be less mature than you can find
       | elsewhere. And in the end, all you have is a thing that works
       | only in the walled garden.
       | 
       | Of course this observation is not limited to any particular
       | garden.
        
       | data-leon wrote:
       | Built an  macOS app (https://posturenet.app) to monitor my
       | posture in real time with SwiftUI last year for fun.
       | 
       | The lack of support for Video and Camera from SwiftUI was the
       | most challenging part for me as a newbie  Mac dev.
       | 
       | Took me a few weekends to get the core part done (ML and
       | algorithm), but hooking up all the UI components and connecting
       | them with the video stream gave me so many headaches.
       | 
       | With that said, it was still much easier for me (complete newbie
       | to  Mac App at the time) to learn and develop in SwiftUI than
       | UIKit.
       | 
       | Hope SwiftUI keeps getting better and  keeps investing in the
       | team.
        
       | robertbmenke wrote:
       | My SwiftUI codebase for https://equater.app definitely has some
       | "// TODO: when apple fixes X" comments, but there's no denying
       | the MASSIVE developer velocity I gained from using the framework.
       | 
       | If the bugs are bad enough I can always do something custom in
       | UIKit via UIViewRepresentable.
        
       | dmitriid wrote:
       | > I profiled the whole thing and discovered several things.
       | First, the view provided by the selectable object was completely
       | recreated with every redraw. I gained some performance back by
       | caching it, but things remained barely usable.
       | 
       | That... is exactly the same thing with React. You don't notice
       | everything is redrawn until suddenly everything is unbearably
       | slow. And then it's useMemo etc. galore.
       | 
       | I'll withhold my judgement on SwiftUI for now though.
        
         | solomatov wrote:
         | IMO, you shouldn't use React-like tools in performance critical
         | UI code. Direct DOM manipulation in such cases is much better
         | and more maintainable option. I.e., it's easier to maintain
         | straightforward direct DOM manipulations than all the tuning
         | around making a React-like system more performant.
        
           | jollybean wrote:
           | Then why use it anywhere?
           | 
           | I have never fully bought into this notion that the
           | components should rebuild themselves in this kind of
           | stateless manner.
           | 
           | I think this like an intellectual obsession with functional
           | programming mapped onto the UI Tree. I can't fathom why it's
           | 'better'.
           | 
           | The reactive aspects of the middle tier of the program -
           | that's progress. But the reactive components, I'm not sure
           | about that.
        
             | solomatov wrote:
             | >Then why use it anywhere?
             | 
             | To write code quicker, and make it easier to maintain. If
             | it's a moderately complicated UI, then I could code it up
             | much faster in React (my guess is around 10x). IMO, React
             | isn't about functional programming, it's just a good DSL
             | for writing UI.
        
               | dmitriid wrote:
               | > To write code quicker, and make it easier to maintain.
               | 
               | Yes, it's faster to write. Is it easier to maintain?
               | Doubtful. Especially when you inevitably run into issues
               | that your whole UI re-renders a couple of hundred of
               | times a second, and you have to go in and butcher
               | everything with useMemos, caching etc.
        
               | worik wrote:
               | > To write code quicker, and make it easier to maintain.
               | 
               | It makes the easy things easier. A common problem for
               | these sorts of tools. It is help with the hard things
               | that we need.
               | 
               | Edit - I have experience with SwiftUI not React.
        
               | jollybean wrote:
               | I don't buy that '10x' gain at all.
               | 
               | React Native doesn't seem to have any degree of
               | simplification vis-a-vis regular Android Views for
               | example.
               | 
               | On the web - that's a different story entirely, but when
               | doing strict comparison I just don't really buy it for
               | mobile apps.
               | 
               | The amount of code is similar, but with React you have to
               | deal with extra layers of abstraction, and some things
               | are obfuscated by the framework. No performance gain and
               | often a performance lost.
        
             | dmitriid wrote:
             | There are levels to reactivity, and React (and apparently
             | Swift UI) are not granular enough. There's an amazing
             | presentation that explores reactivity here: https://github-
             | com.translate.goog/nin-jin/slides/tree/master... (auto
             | translated with Google)
             | 
             | On the web frameworks like Solid.js are exploring these
             | fine-grained reactivity approaches to actually re-render
             | only what's needed, and not huge chunks of UI
        
       ___________________________________________________________________
       (page generated 2022-08-28 23:00 UTC)