Our BlogTips, Tricks, and Thoughts from Cerebral Gardens

My WWDC 2019 Wish List

WWDC 2019


Everyone seems to have their own list of things they want to see at WWDC, so I figured I should throw mine down on virtual paper too. I'll keep it short for you and mostly just include things that aren't on everyone else's lists. [Note: You may notice this is almost exactly like my list from last year, maybe I'll get more of my wishes granted this time around.]

App Stores:

  • ✅ (Partial, tvOS is the exception, of course.) they all get the 2017 update, adding curation etc.
  • (macOS only) allows more powerful (read non-sandboxed) apps back in the store.
  • commission rate change: 5% for apps sold via a deep link, 15% for apps sold via search/browse, 30% for apps sold via curation stories/app lists/features.
  • ability for devs to merge SKUs, i.e., combine X and X Lite into one app. Any user that had downloaded either now gets the merged version and the receipt lets the dev know which one(s) the user originally downloaded. (Odds increase for this one this year, since it could help with Marzipan apps as well.)
  • ability for users to browse all stores on any device, make a purchase, and have the app installed on a different device. I should be able to browse the tvOS AppStore on my Mac, buy a tvOS app and have it install on the family room Apple TV.
  • new badges on every app that indicate features/warnings, such as: age rating, whether or not the app is sandboxed, has passed an accessibility audit, if there's a complimentary macOS/iOS/watchOS/tvOS app, is on your wish list (which they need to bring back), etc. (Hat tip for the accessibility audit idea from Marco Arment on Under the Radar) (Bonus points if there are icons that indicate third party analytics and/or similar frameworks embedded).
AppStore screenshot showing 1Password with new App Badges

iOS:

  • ability to set default apps for email, web, calendar etc.
  • add app shortcuts to Control Center. (Not quite as desired anymore since I work on Launch Center Pro, you should use that instead! 🤪)
  • better control of audio, routing and setting different volumes (ring vs media etc). Rumours suggest something is coming here, hopefully not just a UI change with the same limited functionality.
  • landscape support for Face ID. (Works for iPad Pro now, should work on iPhone too).
  • ✅ multiple faces for Face ID.
  • bring the iPad keyboard to iPhone (the swipe down on a key for the alternate version feature).
  • more granular selection of contacts to allow calls from when in Do Not Disturb mode.
  • multi-user support (for iPhone and iPad).
  • ability to block calls for anyone not in your contact list.
  • fix auto-capitalization. There are a few issues with the way iOS auto-capitalizes letters when typing. First: when iOS determines you need a capital next, you can’t change its mind, for example, let’s say you type “Hi. The dog...”, then realize the period was meant to be a comma, so you use your finger to move the cursor there and change it, then move the cursor to between the T and h, backspace to correct the capital T to a lowercase t. But no, iOS makes it a capital T again, based on the original decision, not based on the current text. Second, and even worse, if using a hardware keyboard, when it decides you need a capital next, there is no way to type a lowercase letter. Tapping the hardware Shift doesn’t undo the pre-pressed software shift. Typing Shift-Letter gives you uppercase, caps lock gives you uppercase. You have to type the letter you want twice, and then delete the first one. (It’s possible this is a bug with the Logitech keyboard I have. Update: Angelo Cammalleri reports this happens with Apple’s keyboard as well).
  • remove the stranglehold on apps, either allow distribution outside of the App Store, or at least stop rejecting apps that Apple doesn’t like. I prefer the walled garden over the Wild West of Android, but perhaps make the walls lower for legit businesses/apps, and higher for the scam apps. If Apple can’t tell the difference, let us crowd-source problem apps.

macOS:

  • the ability to lock the dock to one screen. Having it randomly fly around all my other screens has driven me nuts for years, especially when I go to click an icon on the dock and then the dock runs to a different screen so I can't click it.
  • ✅ HomeKit support
  • fix spaces: when an app has a window in a space and the app crashes, put the window back in the space when it reopens. Safari is the worst for this, I’ll have 20 windows across multiple spaces, it’ll crash, and every window moves to the current space.
  • when booting up, remember which display is where in the arrangement. This has gotten better, but occasionally it still randomly flips displays around on boot up.

tvOS:

  • a built-in web browser.
  • enable UIWebView/WKWebView in tvOS apps.
  • multi-user support.
  • for the love of all that is holy, give tvOS some reason to continue to exist.

watchOS:

  • complications that can update more frequently (1 minute intervals). Even if this requires user permission to update that often.
  • custom watch faces.
  • always on display.

Xcode:

  • plug-in system, at least restoring functionality that was lost in Xcode 8. I'd even be happy with just a way to restore colour to the console logs.

HomeKit:

  • when using automation to turn on a light, be able to turn it off after x number of hours without a second automation. Right now this feature exists, but is limited to 60 minutes. I have several lights that I turn on at sunset, and off at sunrise. They all require 2 automation tasks. Being able to say turn off in 8 hours, would simplify things.
  • display more than just ‘light’ when listing devices in the automation section.

Mac Mini:

  • ✅ (Partial) updated Mac Mini's. Maybe even a Mac Mini Pro with Coffee Lake CPUs, Dual 10 GigE ports, USB-A and C/Thunderbolt 3 ports. Up to 128 GB RAM, 4 TB SSDs. Able to drive 3 5K displays. (We got an update, nearly the exact specs I requested!)

MacBook Pro:

  • ✅ (Partial) updated, with a fixed keyboard design. Coffee Lake CPUs, Up to 64 GB RAM, 4 TB SSDs.
  • option to include the Touch Bar and the standard function keys. I feel most of the hate with the Touch Bar was not with the bar itself, but the removal of the function keys (especially the escape key). I’d buy a MBP that included both.

iPad Pro:

  • ✅ Face ID.

I really wish I could be in San Jose for WWDC this year. It's been a while since I’ve been out with my fellow developers, so you’ll have to have a beer for me. Stay safe, have fun, and hopefully I'll see you next year!


If you've found this article interesting, please subscribe to the RSS feed and follow me on Twitter, Micro.blog and/or Mastodon

It would be awesome if you'd download our newest app All the Rings. It's free and we really think you'll like it!

If you see any errors, want to suggest an improvement, or have any other comments, please let me know.

My WWDC 2018 Wish List

WWDC 2018


Everyone seems to have their own list of things they want to see at WWDC, so I figured I should throw mine down on virtual paper too. I'll keep it short for you and mostly just include things that aren't on everyone else's lists.

AppStores:

  • they all get the 2017 update, adding curation etc.
  • (macOS only) allows more powerful (read non-sandboxed) apps back in the store.
  • commission rate change: 5% for apps sold via a deep link, 15% for apps sold via search/browse, 30% for apps sold via curation stories/app lists/features.
  • ability for devs to merge SKUs, i.e., combine X and X Lite into one app. Any user that had downloaded either now gets the merged version and the receipt lets the dev know which one(s) the user originally downloaded.
  • ability for users to browse all stores on any device, make a purchase, and have the app installed on a different device. I should be able to browse the tvOS AppStore on my Mac, buy a tvOS app and have it install on the family room Apple TV.
  • new badges on every app that indicate features/warnings, such as: age rating, whether or not the app is sandboxed, has passed an accessibility audit, if there's a complimentary macOS/iOS/watchOS/tvOS app, is on your wish list (which they need to bring back), etc. (Hat tip for the accessibility audit idea from Marco Arment on Under the Radar)
AppStore screenshot showing 1Password with new App Badges

iOS:

  • ability to set default apps for email, web, calendar etc.
  • add app shortcuts to Control Center.
  • better control of audio, routing and setting different volumes (ring vs media etc).
  • landscape support for Face ID.
  • multiple faces for Face ID.
  • bring the iPad keyboard to iPhone (the swipe down on a key for the alternate version feature).
  • more granular selection of contacts to allow calls from when in Do Not Disturb mode.
  • multi-user support (for iPhone and iPad).

macOS:

  • the ability to lock the dock to one screen. Having it randomly fly around all my other screens has driven me nuts for years, especially when I go to click an icon on the dock and then the dock runs to a different screen so I can't click it.
  • HomeKit support

tvOS:

  • a built-in web browser.
  • enable UIWebView/WKWebView in tvOS apps.
  • multi-user support.

watchOS:

  • complications that can update more frequently (1 minute intervals). Even if this requires user permission to update that often.
  • custom watch faces.
  • always on display.

Xcode:

  • plug-in system, at least restoring functionality that was lost in Xcode 8. I'd even be happy with just a way to restore colour to the console logs.

HomeKit:

  • when using automation to turn on a light, be able to turn it off after x number of hours without a second automation. Right now this feature exists, but is limited to 60 minutes. I have several lights that I turn on at sunset, and off at sunrise. They all require 2 automation tasks. Being able to say turn off in 8 hours, would simplify things.

Mac Mini:

  • updated Mac Mini's. Maybe even a Mac Mini Pro with Coffee Lake CPUs, Dual 10 GigE ports, USB-A and C/Thunderbolt 3 ports. Up to 128 GB RAM, 4 TB SSDs. Able to drive 3 5K displays.

MacBook Pro:

  • updated, with a fixed keyboard design. Coffee Lake CPUs, Up to 64 GB RAM, 4 TB SSDs.
  • option to include the Touch Bar and the standard function keys. I feel most of the hate with the Touch Bar was not with the bar itself, but the removal of the function keys (especially the escape key). I’d buy a MBP that included both.

iPad Pro:

  • Face ID.

I really wish I could be in San Jose for WWDC this year. It's been a while since I’ve been out with my fellow developers, so you’ll have to have a beer for me. Stay safe, have fun, and hopefully I'll see you next year!


If you've found this article interesting, please subscribe to the RSS feed and follow me on Twitter and/or Micro.blog

It would be awesome if you'd download our newest app All the Rings. It's free and we really think you'll like it!

If you see any errors, want to suggest an improvement, or have any other comments, please let me know.

Mix and Match Swift 3 & Swift 4 Libraries with CocoaPods

With Xcode 9, it’s possible to mix and match Swift 3 and 4 libraries together. In the build settings for the project you set the version of Swift to use by configuring the SWIFT_VERSION setting. You’re able to override the project setting at the target level, thereby building some targets with Swift 3, and others with Swift 4.

If you’re using CocoaPods as your dependancy manager, there’s an issue when mixing and matching.

As you know, when using CocoaPods, you end up with an Xcode workspace that contains your main project, and a Pods project. Whenever you run pod install or pod update, CocoaPods will set the SWIFT_VERSION for all targets to be whatever your main project is set to, or it will fallback to Swift 3 if the main project doesn’t have the SWIFT_VERSION specified.

This means Xcode will try and compile all targets with the same version of Swift, regardless of what version of Swift is actually needed. There’s no built-in way for you to specify the version of Swift to use for each pod you’re including. There is a way for the pod maintainer to specify the version needed in the podspec (they need to set pod_target_xcconfig = { 'SWIFT_VERSION' => '4.0' } see XCGLogger.podspec for an example), but I’ve found it’s rare at this time for it to be set (hopefully this post will help change that).

Even if the pod sets the version of Swift to use, we run into a problem when Xcode resolves the setting. Xcode will prefer the target’s direct setting over the podspec’s suggestion, and since pod update always sets a direct setting on the target, the pod spec’s suggestion is never used (not surprising it’s rarely set).

The solution is to add a post_install script to the end of your podfile:

Let's examine this script.

It’s a post_install script so CocoaPods will execute the script after is has updated all of the included pods and updated the project file.

The script starts by looping through the build configurations of the Pod project and sets the default Swift version to 4.0 (lines 2-5).

Then it loops through all of the project’s targets (lines 7-19). It checks the target name against a known list of targets (line 8) and sets each of the configurations for matching targets to Swift 3 (lines 10-12). If the target isn’t in the known list, the script unsets the Swift version (lines 15-17), which will allow the pod to set the version itself using the pod_target_xcconfig setting we noted above. If the pod doesn’t set the version, Xcode will use the default Swift version we set at the start.

You will need to tweak the script for your project, specifically to set your default Swift version, and then to add the targets that require a different version on line 8.


If you’ve found this article helpful, please subscribe to the RSS feed and follow me on Twitter

It would be awesome if you’d download our new app All the Rings. It’s free and we really think you’ll like it!

If you see any errors, want to suggest an improvement, or have any other comments, please let me know.

Introducing All the Rings

All the Rings

Today we're proud to announce the launch of All the Rings, a companion to the built-in activity app that helps you stay focused, motivated, and most importantly, close all the rings, every day. If you're looking for an enhanced activity experience, All the Rings is for you and it's free to download on the App Store. You can read about the inspiration behind All the Rings here. (tl;dr: We often missed our activity goals by small margins, so we created a companion to the activity app that would solve the problem.) For now, let's dive in so you can see what All the Rings is all about.

More Alerts

The first key feature we wanted to implement was more alerts and the ability to customize them. In my previous blog post I talked about just missing stand alerts. If you have an Apple Watch already, you know how it goes. You get the reminder and think "I'll stand up as soon as I finish..." and next thing you know it's too late. A single hourly alert is often not enough, but now you have the option of increasing your alert reminders so that you wont miss it so easily. You can now also receive move and exercise alerts to make sure you're hitting those goals too. 

Track Your Streaks

The second feature we wanted to add was the ability to better track streaks. We didn't call the app All the Rings for nothing. The idea here was that an increased awareness of your daily progress was critical in closing all the rings, every day. At a glance you can now look at your individual move, exercise, and stand streaks, as well as your All the Rings streak. Just for fun (and bragging rights, of course), we added is the ability for you to share this information and help you stay motivated.

Detailed Activity Stats

The third feature we wanted to incorporate was more detailed activity stats. At a glance we wanted the ability to see certain move, exercise, and stand data that was not available to us before. I had questions about my activity data and I wanted the answers. How many times did I reach my goals and what are my overall percentages? What was my best day? What are my overall averages? How many times have I increased or decreased my move goal? Am I making any progress? We answer those questions and then some. And once again, you can easily share this information.

Maximizing Workout Data

Once we got going with our initial feature list, we notice another area with opportunities for improvement: workout data. After playing tennis one evening, Dave and I noticed a huge spike in our activity performance as a result of that workout. In that moment we decided to tap into recorded exercise data to determine the efficiency of our favourite workouts. For example, if I needed 250 calories to hit my goal, I wanted to know which workout would get me there the fastest. ie. how many calories are burned per minute. While we were at it, we figured we would also let users sort their exercise data by most calories burned per workout or average calories burned per workout. You can also share the cumulative data from each type of workout you've logged.

All the Rings on the Apple Watch

Obviously, where All the Rings really shines is on the Apple Watch. Our goal was to make a companion app that complimented the built-in activity app, but at the same time could serve as a fully functional, standalone fitness tool that would be easy to use and get results. With one tap you can see your activity progress for the day and start a workout if you need to. All the Rings is all about efficiency too. No need to use two separate apps anymore.

Complications to Suit Everyones Needs

Choosing which complications appear on your watch face is a big deal. Screen real estate is at a premium, so we want you to get the most out of All the Rings' complications. Wether you want to see all the details or just see what your focused on, we've got you covered. Just go into the All the Rings Settings on your iPhone and select Configure Complications to choose from all of the options. My personal favourite is the circular move ring with the current stand hour indicator. At a glance, I can see how close I am to achieving my move goal and if I got my stand for the current hour. If the star is empty I still need to stand, if it's filled in I've got it already. So simple, yet so effective. You can see some of the other configurations below.

Set Multiple Goals for a Single Workout

For many people, the ability to set only one workout goal just doesn't cut it. Say you need an additional 250 calories and 15 minutes of exercise to close your rings for the day. With All the Rings you now have the option to set those goals. During your workout you will get progress alerts and a final alert when you hit each goal so you'll know when it's safe to wrap things up. Now that's workout #GOALS!

No More Screen Hopping

Focus and fluidity is essential when you're on the move. With All the Rings you can quickly see the status of your move and exercise progress during your workout without having to jump between the workout and activity app. But, that's not all. Your calories burned, heart rate, distance, and pace are front and center. Tap on each icon and get even more information including basal energy, average heart rate, speed, and steps - all on one screen.

We initially made All the Rings to improve our activity experience, and we want this app to fulfill your activity needs too. All the Rings wants to make it easier for you to close all the rings, every day, and that's why we're offering a free basic version of the app, with several paid Power Pack options to suit every budget. We even have a section inside the app that let's you vote on new features. We can't wait for you to try it and would love to hear your feedback!

An Activity Story: The Inspiration Behind All the Rings

It was a cold winter day last December. We had been out running errands all day, but apparently not moving enough to earn our 30 mins of exercise. At 11:58pm Dave noticed he still needed 3 minutes. He ran around the house in a desperate attempt to close his exercise ring, hoping just maybe the watch would be forgiving and give him credit for the 3 minutes. It was not to be. As the minutes ticked away into the new day, it became clear the 30th minute would never be filled. A 55 day exercise streak broken. "Damn it, my watch should have warned me" he said. And the idea for our newest app was born that night out of frustration.

Dave's story is not the exception. How many times have you been only a few calories away from achieving your move goal? Or missed getting your stand goal because you got the reminder and thought "I'll stand up as soon as I finish..." and next thing you know it's ten past and you've missed your window? It kept happening to Dave and I and it was really starting to get on our nerves. Instead of huffing and puffing about it, we decided to make a companion to the built in activity app that would solve the problem.

Once we decided to move forward with the idea, we realized there were a few more areas that had room for improvement. Over the past year, we've been working towards an enhanced activity experience - think, the activity app on steroids. It's called All the Rings, and it's available now on the App Store. You can read a detailed breakdown of everything All the Rings has to offer here.