Michael Tsai, the master of round-ups, has begun a list of WWDC wishlists, including mine. However, I wanted to highlight a couple of excellent wishlists that I only discovered because they linked to mine (yay for pingbacks!).
The first is by Steve O’Dell, who helps run a Girls Who Code after-school program at Bacon Elementary School in Colorado. His wishlist stems from a desire for Apple to once again become a major player in the education space.
Did you know that Apple has coding club packages that are (potentially) every bit as good as Code.org or Girls Who Code? If you don’t, it’s because the links to find it are all over the place, links to older versions haven’t been taken down yet, and instead of providing a club portal that does some of the admin for you, they aren’t much more than a PDF telling you how to get started and then leaving it up to you to execute.
I definitely did not know that. Apple has clearly committed itself to the areas of health and accessibility. Education seems like an obvious “third leg” to an overall strategy that seeks to improve global well-being. Health, accessibility, education. If I was in leadership at Apple, that’s what I would focus on.
The next wishlist I wanted to share comes from Daniel Andrews. It’s a great list; some of my favorite things are feature parity for Messages across platforms, the return of the magnification loupe, making better use of the iPad status bar, and improvements to search on iPad. He also mentions some specific improvements to Mail:
Better priority/VIP notification settings, snoozing emails etc would go a long way to making the default ‘good enough’ for most folks.
I would also add to that the ability to create Smart Mailboxes on iOS (as John Gruber mentioned), a search function that actually works (I can go to Gmail on the web and find what I’m looking for almost immediately. Mail usually comes up empty.), text formatting tools that aren’t all hiding behind a single button, the ability to easily see which email address an incoming message was sent to from the unified inbox, and yeah, something better than flags for assigning message priority.
E-mail should be so much smarter. How about a “This Week’s Newsletters” folder? How about a way to view all recent attachments? An email from the pharmacy that a prescription has been refilled and is ready for pick-up should automatically be transformed into a to-do list item in my app of choice. All of this should be possible. And that’s all I have to say about that!
Keep those wishlists coming! I’ve really enjoyed reading them.
As of today, Apple’s first-ever online-only version of WWDC is 40(!) days away. As always, I’m incredibly excited to see what Apple has in store for us (although I must say, I’m really disappointed we don’t all get the chance to own a WWDC 2020 jacket and pin set…😢). And since YarnBuddy is written entirely in SwiftUI, I’m particularly looking forward to the next iteration of Apple’s new declarative UI framework.
I’ll go ahead and divide my wishlist into “SwiftUI” and “Everything Else.”
SwiftUI: Missing Pieces
Most of my issues with SwiftUI boil down to 1) Missing UI elements and 2) Missing customizations. Here’s a run-down of what I’m looking for in SwiftUI 2.0:
A collection view of some kind
A multi-line editable text view
A search bar
The ability to manage which object is first responder and to resign objects as first responder
Accessory views for TextFields/TextViews
Inactive/destructive states in Context Menus
Context menu preview-providers (for showing a custom preview on long-press/right-click)
Style parity with UIKit, including the new system colors and materials, the grouped inset table style, and the appearance APIs for styling things like navigation bars,tab bars, etc.
Correct state restoration for TabViews and a fix for the frame delay/flash when switching tabs
A way to prevent modals from being dismissed by dragging (and/or a full-screen modal style)
A way to read the scroll position of a scroll view
Smoother interoperability with QLPreviewController and PencilKit
I would really like to see an easier way to support the native Apple Pencil mark-up tools in PDFKit. In addition, I would love to see:
A complete re-design of Mail. There is no perfect e-mail client, but like, maybe Apple could try or something?
A system-wide color picker in iOS. It’s bananas that I can’t select some text in Apple Notes on my iPad and change its color. From what I can tell, every single Mac app has access to the color picker. As the great 21st-century philosopher Shia Labeouf once said, “JUST DO IT!” 😎
Apple Watch sleep tracking. There are great apps for this, but I’d like to see Apple’s take on it as well.
Some sort of IDE for iPad that would allow me to work on my Xcode projects with some limitations. If I have a project that’s SwiftUI or UIKit with no storyboards and the only third-party dependencies were installed via the Swift Package Manager, I would expect to be able to edit and preview projects in this app. Could I release them straight to the App Store? Maybe not. Could I run the apps on an attached device? Maybe not. I just want to get some work done, yo.
More home screen customization. Let us have an empty row at the top if we want. Give us some widgets. Allow for some chaos. Set us freeeeee.
De. Fault. Apps. Let me change them.
A way to automatically put my Apple Watch in theater mode at night so I don’t accidentally blind myself every time I move.
A revamped iPad multitasking system (yep, just do it again until it’s right) that isn’t big ol’ hot mess. Make it so my 4-year-old can figure it out.
Third-party Apple Watch faces (ahahahaha).
I think that’s all I have. If I think of anything else, I’ll throw some edits down below this paragraph. Now it’s your turn: what do you wish for this year? I always love reading everyone’s wish lists, so feel free to tweet them at me or mention me on Micro.blog.
Wow, what a conference, eh? Like most, I’m still processing the many new frameworks and APIs that Apple presented to us last week. So far I’ve watched 12 session videos, taken copious amounts of notes, and spent lots of time thinking about what all of this could mean for my app. As such, this post will be an attempt to organize those thoughts.
When I wished for more standard system icons that could be used anywhere, I definitely did not expect Apple to deliver over 1500 of them. I feel particularly validated by Apple’s instructions for creating custom icons: find a symbol in SF Symbols that resembles what you’re looking for and edit the SVG. I feel validated because that’s exactly what I’ve been doing to create all my icons in Snapthread, except that my custom icons are based on a $25 set of 200 icons from Glyphish. Browsing through SF Symbols, I think I can replace nearly all of my icons with them, with maybe two exceptions.
The Big Functionality Giveaway
One huge point that nearly every presenter hammered on was that if you follow the Human Interface Guidelines and use Apple’s frameworks as-is, you get a TON of functionality for free. In fact, one major goal of SwiftUI is to handle all of the basic features of your app for you, so you can focus on perfecting your app’s cool, custom features. For example, if you use SwiftUI correctly, the system will automatically handle animating view changes beautifully. If you use semantic colors, Dark Mode just works. Localization behaviors for right-to-left languages, Dynamic Type—these are all things you get for free if you use Apple’s semantic font sizes and SF Symbols.
I think it was Mike Stern who said something like, “if you spent time recreating what UIKit gives you for free, with custom controls, you may want to…I don’t know how else to say this…stop doing that.” Launch Storyboards, resizable interfaces, and support for split view multitasking will all be requirements starting in April of 2020. I don’t think the message has ever been clearer: follow the HIG, use the tools we’ve given you, be a good platform citizen. Just do it.
The New Peek & Pop
If you haven’t watched “What’s New in iOS Design,” you should. Peek and pop have become “contextual menus” that are now available and accessible on all devices. “Use them everywhere!” Mike says in the session. Apple wants these contextual menus to be so pervasive that their users expect to find them all over the place. An important thing to note is that any functionality placed into a contextual menu should also be accessible from elsewhere in the app. There are convenience methods for adding contextual menus to table view and collection view items, which I plan to use so that users can perform common actions on video clips in their timeline. Overall, I think this is a great change.
I wasn’t particularly excited about dark mode prior to the conference because my app, like most other video and photo editors, already has a dark appearance. However, now that I’ve learned more about it, I really like the way Apple’s colors, fonts, and new “materials” adjust to trait changes. For instance, if you use semantic background colors, there are slight variations for “base” and “elevated” states. Apps are elevated when in split view multitasking so that the black separator between apps can be seen more clearly, and controllers and views are considered elevated when they are presented modally. The whole system seems well thought-out, and I plan to adjust my code to use semantic background and font colors, as well as the new “materials” options, and then simply force the whole app to use dark mode (which, incidentally, is as easy as changing an Info.plist value).
I…don’t understand Combine yet. I mean, I sort of do. I don’t feel like I need to understand it yet, though, because there are only a few places in Snapthread where I could make use of it. I observe values on my AVPlayerItems, there’s a few UserDefaults I keep track of, and maybe a handful of Notifications. Anyway, I’m sure it’s really awesome; I just need to re-watch the videos and read a few more articles before I can grok it.
Collection View Improvements
Collection views got a major API upgrade this year with completely new ways to lay them out and configure their data sources. Like SwiftUI, the new layout API is both compositional, and declarative. The most common crash in Snapthread has to do with the collection view inside my custom photo/video picker, and I still haven’t managed to figure out what’s causing it. This probably sounds terrible, but: I’m hoping that by using these new APIs, the problem might just go away!
In fact, I’m hoping a whole pile of layout-related bugs will be eliminated, which brings me to…
My code sucks. It just does. I’m inexperienced, I’ve had no mentors or code reviews (by choice—I’ve had offers from many great people!), and there are fundamental concepts of programming that I only have a tenuous grasp of, at best. Despite my best efforts, I’ve utterly failed at using the MVC model. My views are all up in my model’s business, I probably have delegates where I don’t need them, or, on the flip side, other weird hacky ways of communicating between view controllers (like via viewWillDisappear and unwind segues, and all sorts of odd places) where I should have just used a delegate.
With SwiftUI, I feel like I can finally just burn it all to the ground. SwiftUI makes sense to me because it is declarative, and I love it because it forces its views to rely on a single source of truth. One of the items on my wishlist was for “every visual customization that is possible for a UI component [to] be editable in Interface Builder.” As a modern replacement for Interface Builder, SwiftUI delivers on this request with gusto. There’s a TON of advanced drawing stuff you can do with SwiftUI and all of it is immediately preview-able without building and running the app. That blows my mind!
SwiftUI has some missing pieces. There’s no control that provides the functionality of a collection view. You could probably hack together some HStacks and VStacks, but you wouldn’t get caching or cell reuse. For now, UICollectionViews can be wrapped in a UIViewRepresentable-conforming object to be integrated into SwiftUI. If you’re working with videos, you still have to work with AVPlayerLayers. Live Photos are still previewed in a PHLivePhotoView. I’m sure there are many other frameworks that make use of UIKit classes as well.
Still, my urge to re-write Snapthread is strong. By re-writing most of the app to use SwiftUI, I’m confident that I’ll be able to edit it on the go next year, when a first party, Xcode-like code editor will likely arrive on iPad. I’m also confident that it’ll be way less buggy, and way easier for future me to understand, since all dependencies will be so clearly defined. I’ll try to share some of my new SwiftUI knowledge as I go!
I’ll have to drop support for iOS 11 and 12. Before I do that, I want to add one more feature and maybe some more music to the soundtracks list. It’s going to be a busy summer!
A few years ago around WWDC time I made the mistake of installing the fresh new beta of OS X on my only Mac. Shortly after that, I needed to submit an update to one of my apps…only to find out that you can’t submit release builds to App Store Connect (then iTunes Connect) from a beta version of Mac OS. After some furious googling, disabling system integrity protection, and editing some plist that I was undoubtedly not supposed to touch, I tricked Xcode into thinking I was using the previous version of the OS. Lesson learned.
Since then, I’ve waited until September to update my Mac. This year, however, is different. This year is Marzipan.
So, I took to Twitter and asked for recommendations for external SSDs. Several people recommended the Samsung T5 Portable SSD, so that’s what I got. Fortunately it arrived today, just in time to install macOS 10.15 on Monday!
If, like me, you’ve never run macOS from an external drive, I found some very good instructions over at Macworld. I’m looking forward to exploring all the new features (and Marzipan apps!) that macOS 10.15 will bring without worrying about messing up my main development environment. How about you? Will you be installing the new macOS beta next week?
WWDC is now just two weeks away, so I thought I’d share what I’m hoping for in the way of developer tools/APIs.
A standard system font picker
A standard system color picker
An easier way to implement multi-column layouts that doesn’t involve nesting UISplitViewControllers
A keyboard navigation system for iOS that would allow users to navigate table views and collection views using the arrow keys
Greater variety of stock UI components and customization options for components on iOS (i.e. stop making us reimplement an expanding table view cell with a rotating arrow, or a circular progress indicator, or write dumb hacks like adding a blank UIImage as a navigation bar’s “shadow” just to get rid of that line beneath it)
More standard system icons that can be used both inside and outside of tool bars and navigation bars (like, on regular UIButtons)
A visual redesign of all current stock components on iOS, which, in general, are boring, ugly, and inaccessible
More Apple frameworks classes should be made Codable-compliant (i.e. UIColor).
I want to be able to force a dark appearance for all elements in my app. Snapthread’s never going to have a “light mode,” but I want to make use of iOS 13’s dark mode appearance for things like action sheets, pop ups, picker views, switches, etc regardless of the user’s display setting.
A cleaner way to check if a device is in landscape orientation than checking the orientation of the status bar
Support for rearrangeable buttons in a toolbar/nav bar on iOS
Interface Builder improvements: basically, every visual customization that is possible for a UI component should be editable in Interface Builder. This includes layer customizations like corner radius, border, and drop shadow.
There should be more information than just a progress bar when uploading to App Store Connect from Xcode. At least Application Loader tells you the upload speed and how many MBs are left.
Closing the new Music app should not be a requirement for installing Xcode.
A way to hide/dismiss warnings in Xcode
Photo and Video
Developer access to the more recent Apple-made Core Image filters, such as Silvertone, Dramatic, Vivid, etc
A “What’s New in AVFoundation” session…there hasn’t been one since 2016
There are rumors that Apple will enable developers to train machine learning models on device. I’d like to see examples of that applied in photo/video contexts.
These are just my wishes… now for a few predictions.
WWDC Keynote Predictions
There are rumors that Apple is planning to grant developers access to its real-time document collaboration API. I think this is going to be a big talking point, along with the ability for apps to have multiple “instances” open at the same time (i.e. being able to compare two Microsoft Word documents in split view on iPad). I’m guessing there’s going to be more than one demo showing off these features, and so my prediction is that Microsoft is going to demo a new Office update, and Adobe will be there to show off real-time collaboration in XD or something like that (somebody’s gotta compete with Figma, right?). Or Affinity maybe? I imagine some sort of photo editor or design/drawing app will at least be shown to demo the new floating panels on iPad.
I have no doubt that Tim Cook, or whoever is doing the watchOS presentation, will mention Apple’s ECG app—how it’s already saved lives and will continue to roll out to more countries. None of the new rumored health apps seem demo-worthy, but there’s rumors of new Siri intents, and I’m betting at least some of those are going to get demoed on the watch—event ticketing, flight/gate information, etc.
I have no clue what third party Marzipan apps we’ll see onstage. Darkroom seems like a good candidate for Mac, as well as Ferrite and LumaFusion. Some weather apps might be interesting, but not that interesting. I’m stumped. Instagram? Instagram for iPad and Mac? (lololol) Games don’t make much sense because engines like Unity already enable devs to make cross-platform games.
Perhaps the biggest mystery of all is how Apple is going to fit all of this into a ~2 hour keynote. Close your eyes for a moment and think these words in Tim Cook’s voice: “iOS 13, with a gorgeous new dark mode…” I mean, you know they’re going to want to spend 15 minutes just talking about dark mode. Judging by Bloomberg and 9to5Mac’s rumor dumps, they’re only going to have about two. There’s just too much to cover. Apple has shown that they can put together a really tight keynote though, so my prediction is that we’ll see another fast-paced, throw-a-bunch-of-features-on-a-slide-and-move-on presentation.
What about you? What are your predictions? Feel free to share your own thoughts/blog posts with me on Twitter @bhansmeyer, or Micro.blog @becky.