If you were writing Photos from scratch today, which framework(s) would you use?

A type of question I see often is "which UI framework is best? SwitUI, UIKit, AppKit, etc?"

And the answer is, of course, usually "it depends" or "a mix, depending on what you need".

I wanted to re-frame that question with specific parameters.

Let's say you were writing Apple Photos for the Mac from the ground up, starting today. For the sake of discussion, it's going to be functionally identical to the Photos app that exists on the Mac today. Which means it:

  • looks and feels like a true, native macOS app

  • should be very performant in terms of rendering and scrolling through a library that may contain hundreds of thousands of photos

  • maintains a large database which can be synced over iCloud

  • etc

When you go to write that first line of UI code, which UI framework are you reaching for, and why? If more than one, which ones would you use for each piece, and why?

Especially interested to hear any viewpoints from Apple folks in this thought exercise!

That's just a personal opinion. I would select AppKit for such a MacOS app.

The main reasons:

  • maturity vs SwiftUI
  • flexibility. Many things are possible with SwiftUI, but some require convoluted approach
  • limits of SwiftUI in its current version (unless you encapsulate appKit API inside)

Probably not the answer you are looking for, but in a complex app like Photos, if you start from scratch today, you would probably end up with a mix of AppKit, SwiftUI, Metal and QuartzCore, not much different from what is shipping today. The proportions might shift a bit because you start new but every one of these technologies has huge advantages over the other in its own core features and you should pick whatever gets the job done with the best outcome for your users. In the same way, I would not be surprised if the outcome would also be a mix of Swift, Objective-C and C++.

Just out of curiosity, what aspects of such an app benefit from dropping down to frameworks like Metal and QuartzCore? In the specific case of managing and rendering large amounts of images, how do you know when it's appropriate to drop down to the lower-level frameworks? Thanks for your time!

If you were writing Photos from scratch today, which framework(s) would you use?
 
 
Q