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
webpageURLset for deep linking
- New support for resigning the current automatic NSUserActivity
- New support for custom
- 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
perform()functions on action bindings now have argument names
withPresenter:as necessary, replacing the previous
presenter:for more Swiftiness
.nonehas changed to
.noInput(returning optional enums that also have a case
.noneis a delicious source of obscure bugs)
.nonehas changed to
addVoiceShortcut(input: ..)function now has the argument
withIntent:and now throws
shortcut(input:)function on action bindings now has the argument
withInput:and throws, as does the
prepareActivityfunction on actions now throws
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).
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.