Stuart Breckenridge

Shoehorning 3D Touch onto the Home Screen

iOS 10 implements a 3D Touch Share option on the home screen for all applications.

The problem with the Share option is that the intent is not clear: what are you actually sharing? A link to the app? The app itself? Some app content? This seems like a way to shoehorn 3D Touch onto all apps on the home screen.

— Supported by —

Bug Report: Core Data Generated Files Not Found by Xcode 8

Xcode 8 promises to bring many improvements to Core Data, however, it seems to be having an issue in that it stops working pretty quickly even after several reinstalls.

My issue is that Xcode generates new NSManagedObject’s and then can’t find them in the build process. Instead, I see the following error:

<unknown>:0: error: no such file or directory: '~/Library/Developer/Xcode/DerivedData/Project-ehewnupfwfyaezbdvoohlbtmspad/Build/

Interestingly, the file the error is referring to — .Country+CoreDataClass.swift — exists in the folder above without the leading .. I’ve filed Radar 27151410.

See also:

The FFI List: In-App Subscription

Yesterday I released v1.1 of The FFI List and with it, I’m trying a new business model. The app is now free and from July onwards new FFI List downloads will be accessible through an auto-renewing subscription.1

I intend to keep this going for six months and then review the uptake.

  1. £0.79/$0.99 per month. ↩︎

The Measurement Type

The new Measurement type1 is a hugely helpful addition to the Foundation framework. It allows for conversion amongst many different measurements:

  • Acceleration
  • Angle
  • Area
  • Concentration Mass
  • Dispersion
  • Duration
  • Electric Charge
  • Electric Current
  • Electric Potential Difference
  • Electric Resistance
  • Energy
  • Frequency
  • Fuel Efficiency
  • Length
  • Illuminance
  • Mass
  • Power
  • Pressure
  • Speed
  • Temperature
  • Volume

Usage is simple:

var mLs = Measurement(value: 125, unit: UnitVolume.milliliters) // 125 mL
var flOz = mLs.converted(to: UnitVolume.fluidOunces) // 4.2267 fl oz

Apple has provided excellent documentation on how to subclass the Dimension type, and on extending existing Dimension types. My quick experiment was to create a new UnitUKCurrency type:

class UnitUKCurrency: Dimension {
    static let pence = UnitUKCurrency(symbol: "pence", converter: UnitConverterLinear(coefficient: 1.0))
    static let pounds = UnitUKCurrency(symbol: "pounds", converter: UnitConverterLinear(coefficient: 100.00))
    override static func baseUnit() -> UnitUKCurrency {
        return self.pence

Which, in use, looks like this:

let pennies = Measurement(value: 1234.0, unit: UnitUKCurrency.pence) // 1234.0 pence
let poundage = pennies.converted(to: UnitUKCurrency.pounds) // 12.34 pounds

If only Measurement was around for v1.2 of Baby’s Milk!

  1. The NSMeasurement class in Objective-C. ↩︎

App Store Changes


We’re introducing exciting new capabilities and tools designed to help grow your app’s business and engage with new and existing customers on the App Store.

Search Ads
Search Ads is an efficient and easy way for you to promote your app directly within the U.S. App Store search results, helping customers discover or reengage with your app, while respecting their privacy. Starting this summer, you’ll be able to participate in the Search Ads beta and see the ads in action.

Subscription Enhancements
We’re opening auto-renewable subscriptions to all app tags including games, increasing developer revenue for eligible subscriptions after one year, providing greater pricing flexibility, and more.

Search Ads has been rumoured for a while and their implementation seems to be a fair to users from a privacy standpoint and to developers—both large and indie—from an ad pricing standpoint. Subscription changes open up the possibility of free trials—something developers have been demanding for a long, long time!

In addition, App Store review times have been cut to 48 hours in 90% of cases. I can vouch for this, one my apps was submitted on Saturday and was approved within a day.