Our BlogTips, Tricks, and Thoughts from Cerebral Gardens

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.

Proposed Affiliate/Developer Commission Changes

Big news from Apple today:

Starting on May 1st 2017, commissions for all app and in-app content will be reduced from 7% to 2.5% globally.
Screenshot via @drbarnard on Twitter

Apple is reducing commissions paid to sites who promote our apps by 64%! That's a huge cut and they're only giving everyone involved 7 days notice.

The app economy has been tanking for the last few years. Apple must know this by now, even though they tout how great it is (maybe it is for a few big companies such as Niantic Labs, Nintendo etc). Personally I think this change in commission rate must be part of something larger, aimed to help rejuvenate the ailing app economy.

Back in June, 2016, Apple announced the first change in the percentage developers pay Apple, dropping the 30% rate to 15% but only for those using subscriptions, and only after a customer has been a subscriber for at least a year. For the most part, this would only have helped a few developers so far, since only a limited number of developers were even allowed to use subscriptions until the June changes. Those would be the Netflix/HBO type apps that are worth billions and don't need the extra help.

What I'd like to see at WWDC this year, is for Apple to announce they are finally reducing the 30% rate we pay to something more reasonable. Let's say 15%?

Assuming that's the plan, how about this as a proposed alternative? Instead of dropping the rate to 15% across the board, Apple could drop the rate to 15% for apps installed organically, and 20% for apps installed through an affiliate link. That extra 5% could then be paid to the affiliate who earned the sale. As a developer, I'm fine with that since it only helps those who help me.

I feel this would be a win-win for all involved. Developers get a much needed drop in their commission rate. Promotion sites such as iMore, touchArcade, etc will get a small bump instead of a drastic cut in their earnings, and Apple gets to keep the new 2.5% affiliate commission rate. I know dropping the developer rate isn't ideal for Apple, but it would make a big difference for the people who help keep their devices in demand.

What do you think about this proposal? Please @ me on Twitter and let me know your thoughts.