Flint 1.0 is released!

We are overjoyed to announce that Flint framework has reached its public 1.0 release — meaning that the API is now stable and the baseline features are all implemented. The early access period is now over. You can install it today using Carthage or Cocoapods.

Adopting Flint’s approach of thinking and coding in terms of Features and Actions decouples your UI code without enforcing a heavyweight architecture. Its convention-over-configuration smarts integrate with all Apple’s platforms, so you can delight your users while also spending less time on the error-prone, boring and yet important business of handling purchases, analytics and feature flagging.

Over the past thirteen months we have honed the APIs for consistency and ergonomics while fleshing out the framework’s capabilities. This release (tagged 1.0.8) ships with support for triggering actions from URL schemes and deep linking, NSUserActivity (Handoff, Search and Siri Prediction) and Siri Intents. On the Features side it also ships with support for conditional features that require system permissions, purchases, certain OS versions and custom feature flagging.

The project has reasonable test coverage, compiles with both Xcode 9.4 and Xcode 10.2+ on the CI server for every pull request and compiles with Swift 4 onwards.

New since the last ea-1.0.7 build are a small number of breaking source changes to converge on naming consistency, along with some new features and improvements:

  • New system permissions support for Bluetooth, SiriKit and Media Library
  • New system permissions support for camera and microphone on macOS
  • New support for incoming NSUserActivity with webpageURL set for deep linking
  • New support for resigning the current automatic NSUserActivity
  • New support for custom activityType in prepareActivity
  • New support for disabling Action Stack functionality if not required
  • New support for disabling Analytics functionality if not required
  • Action Stacks now use a limited-size LIFO array to control memory footprint
  • Updated for Swift 4.2+ hashing changes
  • Zero compiler warnings (typealias woes be gone!)
  • Support for Action inputs that are not immutable, so the input is captured early for logging for correctness and thread safety
  • The perform() functions on action bindings now have argument names withInput: and withPresenter: as necessary, replacing the previous input: and presenter: for more Swiftiness
  • The NoInput enum case .none has changed to .noInput (returning optional enums that also have a case .none is a delicious source of obscure bugs)
  • The LoggerLevel enum case .none has changed to .off
  • The addVoiceShortcut(input: ..) function now has the argument withInput: and throws
  • The perform(intent:,completion:) function on IntentAction has argument withIntent: and now throws
  • The shortcut(input:) function on action bindings now has the argument withInput: and throws, as does the donateToSiri(withInput:) function
  • The prepareActivity function on actions now throws
  • The associatedIntents(input:) function now has withInput: argument and throws

The complete iOS demo project is updated with support for Siri Intents, Handoff, Search, permission prompting and purchases.

We’d like to give special thanks to Rob Fahrni, Kyle Sherman and Matthaus Woolard who have been very supportive throughout and made valuable contributions to the APIs, code quality and thought processes — as well as to everybody who has come by the Flint Slack to see what the fuss is about (join, we’d love to help you try out Flint).

Thanks also go to the many kind and patient people on the Core Intuition Slack and Swift Forums who helped us through tricky Swift issues.

Very special thanks also go to bitrise for the free open source CI hosting. Our CI build turnaround on pull requests is now so fast it is a true delight.

We’re all very lucky to have such a great development community for Apple platforms.


Article about retro-fitting an app with Flint to add Siri Shortcuts

A blog post written by project lead Marc Palmer on how he added Siri Shortcuts to an existing non-Flint app and shipped it to the store