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
inprepareActivity
- 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 nameswithInput:
andwithPresenter:
as necessary, replacing the previousinput:
andpresenter:
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 argumentwithInput:
and throws - The
perform(intent:,completion:)
function onIntentAction
has argumentwithIntent:
and now throws - The
shortcut(input:)
function on action bindings now has the argumentwithInput:
and throws, as does thedonateToSiri(withInput:)
function - The
prepareActivity
function on actions now throws - The
associatedIntents(input:)
function now haswithInput:
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.