WWDC 2020 Wishlist

My wishlist as a Mac developer.SwiftUICollectionView component!SearchBar component.Make text in TextField selectable.Multi-line editable TextView.Focus API.Rethink navigation.NavigationView is not good.Manage app windows in SwiftUI.Manage the macOS app…

My wishlist as a Mac developer.

SwiftUI

  • CollectionView component!
  • SearchBar component.
  • Make text in TextField selectable.
  • Multi-line editable TextView.
  • Focus API.
  • Rethink navigation.
    NavigationView is not good.
  • Manage app windows in SwiftUI.
  • Manage the macOS app menu in SwiftUI.
  • Expose a binding for the scroll position of ScrollView.
  • More layout-related components.
    HStack and VStack are surprisingly powerful, but they don’t solve everything.
  • Fix all the bugs.
  • Make it possible to debounce @Published properties.
    An ObservableObject can easily become inefficient when there are a lot of noisy properties.
  • Color manipulation methods.
  • Keyboard avoidance for iOS.
  • SwiftUI version of NSAttributedString.
  • Custom swipe actions for List rows.
  • .tooltip() view modifier on macOS.
  • Steal ideas from The Composable Architecture.

Xcode

  • Type-safe assets.
    I hate having to do NSImage(named: "Unicrn")!. There’s no code completion and it’s prone to typos. Instead, Xcode could generate boilerplate Swift code internally with type-safe constants for the assets. For example, the earlier example could be NSImage(asset: .unicorn). Android has already done this for years.
  • Detect and remove unused code and assets.
    Something like Periphery but built-in.
  • Built-in linter and formatter.
  • More extension hooks.
    It’s currently very limited what kind of extensions you can make. I’d like to see third-party refactorings and proper linter integration.
  • Faster compile times. 🐢💨

System Frameworks

macOS

  • SF Symbols and Dynamic Type for macOS.
    Lack of these are the biggest obstacles for making cross-platform apps at the moment. Also, I have gotten lots of requests to add font size settings to my macOS apps, but it’s silly that every single macOS app has to manually implement that.
  • Fix the whole permission system.
    It’s awful and user & developer-hostile. It should be possible for an app to easily check what permissions it has and request permissions using a unified API. Ideally, there should also be a standard dialog for requesting multiple permissions. This could be so much better.
  • TestFlight for macOS apps.
    iOS devs have it so good.
  • Time-limited trials for paid apps in the App Store.
    I want users to be able to try my apps before buying, but I don’t want any IAP shit.
  • Reduce user-interface vibrancy.
    For example, app sidebars and menus are too vibrant, which looks ugly and affects text legibility.
  • Improve the Dark Mode look.
    While I love Dark Mode and use it permanently, we all expected it to be refined in Catalina. That obviously didn’t happen. The black is too bright and the window border is too hard.
  • A built-in way to organize menu bar items.
    I’m thinking something like Bartender where you can hide certain menu bar items in an overflow menu.
  • Abolish .DS_Store.
    How is that still a thing?
  • Low-power mode.
    Like iOS. I work from coffee shops a lot and would gladly trade some performance for better battery life.
  • System preference to set age rating for a user and let apps respect that.
    Currently, if an app supports both G and PG-13 content, the App Store will still only allow users that can consume PG-13 content.
  • iCloud Time Machine.
    iOS already has it.
  • More types of app extensions.
  • Fix “Launch At Login”.
    I guess at least 10% of apps need this functionality, but:
    1. The API randomly fails to enable it. Resetting NVRAM seems to fix it in many cases.
    2. There’s no way to get the current status. You can only set. (SMLoginItemSetEnabled)
    3. When enabled, the app does not show up in “System Preferences › Users & Groups › Login Items”. (It used to do that before sandboxing)
    4. The process of setting it up is convoluted and error-prone. You need to bundle a helper app in your app that then launches your app.
    Since it’s such a common need, it should ideally simply be NSApp.shouldLaunchAtLogin = true. No helper app. Bonus points for including a publisher for when it changes too: NSApp.$shouldLaunchAtLogin.sink { ... }.
    (Check out my LaunchAtLogin package which simplifies setting this up)
  • API to register global keyboard shortcuts.
    And also a built-in component where the user set a keyboard shortcut. Currently, the only way to do this at the moment is with archaic Carbon APIs.
    (If you want something like this today, check out my KeyboardShortcuts package)
  • Fix NSMenu.
    It’s a buggy mess…
  • Improve EventKit.
  • Bring EventKitUI to macOS.
    It’s a lot of work to implement this yourself…
  • Built-in “Preferences” window component.
    Almost every app needs this, but it’s difficult to implement correctly and a lot of apps get it wrong, including Apple. The Mac experience would be better if this was standardized.
    (If you want something like this today, check out my Preferences package)
  • NSPasteboard#changePublisher.
    There’s currently no way to know when the clipboard changes other than polling. Clipboard managers waste a lot of energy as they need to poll the clipboard many times a second. Since it’s common for users to use a clipboard manager, adding such API would have a big impact on energy usage in total.
  • NSWorkspace APIs to control Dark Mode and Do Not Disturb.
    For example, screen recording apps, conference call apps, presentation apps, etc, need to ensure there are no interruptions.
  • NSWorkspace API to open any pane in System Preferences.

iOS

  • New home screen layout (with widgets).
  • Set third-party apps as default.
  • Banner-style call notifications instead of taking up the whole screen.
    I cannot believe this is still not a thing!
  • System setting to opt-out of in-app browser in all apps.
  • Copy and paste adjustments in the Photos app.
    I often have multiple photos of the same thing and I would like to be able to just copy-paste the adjustments instead of having to try to do the exact same adjustments manually again.
  • Bottom sheet component.
  • More SF Symbols icons.
  • Buttons that look like buttons.
    Years later, I still dislike the iOS 7 style buttons.
  • System-wide color picker.
    In the meantime, check out Pastel.

watchOS

Hardware

  • Remove the Touch Bar.
  • FaceID for Mac.

Swift

This is unlikely to be revealed at WWDC, but one can dream…

  • Async/await!
    Doing anything async in Swift is just plain annoying, especially after having used async/await in JavaScript and Rust. It would also be important to import legacy callback-APIs with a transformed async/await version. (Yes, Combine is fine, but it doesn’t replace native async/await)
  • Improved generics
    As a Swift package author, I often encounter generics limitations. There are still lots of things to implement from the Generics Manifesto.
  • Regular expressions
    A regex literal and type-safe regexes would be very useful. Regex is used a lot in real-world code. (Swift Evolution discussion)

WWDC 2020 Wishlist was originally published in 🦄 Sindre Sorhus’ blog on Medium, where people are continuing the conversation by highlighting and responding to this story.


Print Share Comment Cite Upload Translate
CITATION GOES HERE CITATION GOES HERE
Select a language: