Notes from FrenchKit 2019
Animations with SwiftUI — Chris Eidhof 🌟
Using a basic animation example, namely creating a shaking effect on a rectangle view, Chris shows the hidden complexity of SwiftUI and how developers used to UIKit need to change their mental model about how to build views. Under the hood, SwiftUI seems very similar to React: a tree of views with wrappers all hover the place, with an efficient diffing algorithm deciding what to re-render.
Understanding Combine — Daniel Steinberg 🌟
A good counterpart to Chris’ talk to mention how Apple frameworks evolved from using the delegation pattern, then closures and are now adopting Reactive Programming. Combine will probably become the de facto framework to use, as opposed to RxSwift and ReactiveCococa, due to its 1st party nature. The only problem is that it is only available for iOS 13.
SwiftUI & Redux — Thomas Ricouard
Many frameworks are available to bring the Redux pattern to iOS development, ie dispatch actions, reducers, immutable states, mapStateToProps, etc. It could be a good idea to use one to keep having architectural conversations relevant to the mobile and web teams.
Testing & Declarative UIs — Nataliya Patsovska 🌟
Great talk promoting snapshot testing, something I tend to already do on ongoing
projects 💪. Nataliya mentioned how we could benefit from a new feature of
iOS/Xcode ie Previews. She wondered if tree inspecting libraries similar to
react-testing-library would eventually show up to inspect contents of SwiftUI
tree representations. A cool idea for an OSS side-project 💡.
Showcase Driven Development — Jérôme Alves 🌟
This talk was about how Heetch created a browsing interface within the debug release version of their app to demo work in progress to their product and quality teams as early as they could, building on the real continuous integration post by Soroush Khanlou.
Slide to Unlock — Joel Kin 🌟
Subtitle: Building Custom UI with UIKit and Core Animation.
When something looks a little complicated, should you spend time looking for a library doing what you need, or should you spend time implementing it yourself? Building on UISlider, Joel shows a real-case scenario of what to assess to make the best informed decision. Notably, UISlider had a much better accessibility support that 3rd parties equivalents.
Swiftly Swift manipulation… with Swift — Marcin Krzyzanowski
Marcin shows up what’s under the hood of his work in progress code reordering tool. While we could benefit from such a tool, it sounds too immature to be integrated in a CI, but worth trying and keeping an eye on. Or even contributing? It involves playing with SourceKitten and Swift AST.
Empower Your UITableView DataSources with a Flexible Model — Denis Poifol
A prescription of a model to write table view view models.
When Did My View Layout? — Gaëtan Zanella
The title of the talk is misleading. It was more about what is an iOS application in terms of entry point, event management, run loop, etc.
Math & Map Masterclass — Daniel Steinberg
Good simple exercises on how to implement an alternative version of
arrays, generics, optionals, results, and combine. Basic & deep at the same
Swift Pills - Vincent Pradeilles 🌟
- Autoclosure for log tooling
- Use map instead of if let These 3 tips are very actionable and recommended.
Swift Generics Topic — Rob Napier
Don’t make things generic to early. Very similar to this AHA Programming
Note encryption — Anastasiia Voitova 🌟
Subtitle: 10 lines for encryption, 1500 lines for key management.
Anastasiia mentioned the real case of how her consulting company helped the Bear app to add security features in their app. What trade-offs you should pick depending on the risks, threats, trust. Lots of recommended readings:
- Cossack Labs / Implementing End-to-End encryption in Bear App: here
- OWASP/owasp-mstg: The Mobile Security Testing Guide (MSTG) is a comprehensive manual for mobile app security development, testing and reverse engineering.
SwiftPM’s New Resolver — Mert Buran
Subtitle: Can it Resolve the Conflicts in my Relationship?.
Really fun and innovative format. Many analogies to explain how pubgrub works for SPM, and how algorithms we took for granted are under-appreciated.
This is Not Rocket (Data) Science — Hervé Berenger
Almost a star for this one. The idea was: how AI is actually hidden everywhere and how 1st party frameworks can already help with a lot of stuff. Example: using the background color of a messaging app to give a hint of the tone of the message that is being written to help think twice about the choice of words being used.
Building Voice-First Apps — Elaine Dias Batista
Elaine insisted how voice-first could be important for accessibility, and to do it properly with existing frameworks.
An Introduction to Property-Based Testing — Vincent Pradeilles
Another approach to test using random values that can auto-discover edge cases of input values that will reveal bugs in a codebase. It is not self sufficient but can be a good complement to other testing strategies. Also, it can lead to randomness in tests: for instance, a test could fail at the 10th execution. But frameworks handling these kind of tests will provide you the failing data and you can turn this failing scenario into a deterministic test case by adding it in traditional test cases.
Shipping a Catalyst app: The Good, the Bad and the Ugly — Peter Steinberger
The story of how PDF Viewer was ported to macOS using a mix of AppKit, UIKit, private API, etc. The conclusion for me is that if you can invest on SwiftUI, it is not worth exploring Catalyst.
And That’s A Wrap! — Olivier Halligon
An exploration of property wrappers, a feature introduced by Swift 5.1. It is totally compatible with older version of iOS as it is interpreted at compile time. The idea is to DRY behaviors of some properties. Example use cases: clamping values into a range, handling UserDefaults with convenience, customizing how a type conform to Codable, database mapping, etc.
Vapor Classroom — David Bonnet
- Apple now releases Swift Docker images on the same day new version of Swift are released;
- Vapor allows to share DTO between an iOS client and a backend;
- A lot of boilerplate code that should be made better via property wrapper in Vapor 4.