In the end of September 2017, I visited Paris, France to attend FrenchKit - an iOS conference as a presenter in one of its workshops. In this blog, I describe how the conference went.

This post will be updated as soon as the new videos will be published.

Contents

Day 1

The first day started with a light Parisian breakfast of croissants and coffee and the whole auditorium was quickly filled up to the capacity. From the Keynote presentation, I learned that this time the conference was fully booked with 250 participants coming to visit from all over the world.

The presentations list and conference schedule was announced in Keynote, and it felt like a lot of presentations to see, and what’s more, there’ll be 2 hours to attend a workshop - one of the classrooms. The conference had an official app with agenda and information about speakers, free Wi-Fi and lots of good content. Check it out.

Paris

Breakfast crowd

In auditorium

Keynote

Playground Driven Development

In the first presentation of the day, Brandon Williams (@brandonw) spoke about using playgrounds in development of view controllers. To me, in the beginning of the presentation, was a bit intriguing to see what would the development process look like, and closer to the live demo I was fully sold on the approach.

Brandon Williams

The main idea is that you can develop and incorporate view controllers inside playgrounds, creating 1 playground per view controller, just like Kickstarter app does. This will shorten your write-build-run cycle, because loading playground is much faster than building the app, navigating to the developed screen, and seeing how it works.

There are other advantages of the approach, too, like view controller isolation, ease of configuration (changing size class and see how the view will be rendered in few moments).

Overall, I highly recommend watching this one.

Table and Collection Views Optimization

This presentation by Janina Kutyn was about optimizing scrolling performance of table views and collection views via offloading GPU processing to CPU.

Janina Kutyn

Essentially, you’ll be using draw() method to draw your cell’s contents on the screen and avoid using lots of UIViews and auto layout.

The slides feature cute chimps and monkeys, check it out yourself!

What Would Tomster Do?

Next presentation was a bit special because it was out of iOS discourse. The presentation by Julien Palmas (@bartocc) was about using Ember.js to write single-page applications for browsers.

Julien Palmas

Generally, the approach in Ember.js is similar as writing a server-side app in Ruby on Rails: you have routes, views, and Ember.js handling many things for you automatically with convention over configuration.

I learned that this framework is used across many websites, among which is iCloud!

To widen your horizons, please watch the presentation here.

Mocking with Swift

This presentation by Bruno Virlet (@bvirlet) reviewed the common ways to write mocks in Swift and then went one step further to employ Sourcery to metaprogram template that would generate a mock based on an interface - automagically!

Bruno Virlet

No more written-by-hand boilerplate mocks, stubs and fake objects, just use Sourcery to generate the code for your protocol and you’re on your way to faster and easier development process.

To learn how to automate everything you mock, watch the presentation here.

How Apps Are Actually Built

This presentation by Romain Pouclet (@Palleas) was quite interesting to see because of a real-world data from BuddyBuild, who analyzed projects they built and shared this information with FrenchKit’s attendees.

Romain Pouclet

As I expected, most projects use CocoaPods for dependency management, though, many projects don’t use any dependency management (by the way, our project, too).

Surprisingly for me, very small amount of projects were actually running their unit tests, although many projects had unit test targets (auto-created by Xcode?). Definitely, something to improve on.

Learn more about industry statistics in this presentation.

Server(less) Swift

The presentation by Chris Bailey (@Chris__Bailey) was about using Swift for running functions in the cloud. Specifically, about how to use Kitura and IBM’s serverless service to write, deploy and run your Swift code, function by function.

Chris Bailey

Personally, I’m not sure where exactly this technology would be useful. I’ve heard conversational bots, sending push notifications, … probably, time will show.

Anyways, the Swift on server topic is an interesting one, and you can learn more about this technology in this presentation.

May the Code Review Be with You

If there would have been an award for the best presentation slides, I think, this one would win it for sure. The talk by Egor Tolstoy (@igrekde) is exploring different aspects of building an effective code review culture.

Egor Tolstoy

The talk presents different tips about code review ethics, technical details and organizational solutions to common code review problems.

You definitely have to watch it, check it out here.

Safety-Critical Development, AdaCore

The talk from AdaCore engineer, Clément Bourgeois, was about Ada programming language, and general reflection on what possibilities are opening when programs written with lots of explicit information.

Clément Bourgeois

One of the best moments in this talk was a realization that your code can be mathematically proven for correctness. I think it’s really cool. That means not only your code works for test cases, but for all possible types of inputs, and compiler making sure this is true for you.

To learn more about Ada, the language of Aerospace computing, watch this presentation here.

You Deserve Nice Things

The talk with an attractive name “You deserve nice things” by Soroush Khanlou (@khanlou) presents an approach that, I think, every developer should follow to make his or her life easier. Namely, wrapping awkward-looking or not so readable APIs into better methods, primarily, using extensions.

Soroush Khanlou

Soroush goes into detailed examples of how one could transform platform APIs from Apple into better code.

Check this talk out here.

Classroom from Deezer

When all presentations finished, there was time for classrooms. A classroom was a workshop on some topic. For my classroom, I picked Deezer’s workshop on writing music visualizer with GPU shaders conducted by Adrien Coye de Brunélis.

The classroom was easy to follow through because it was structured into separate exercises. In the end, we ended up having Deezer’s logo animated based on the music played. It was cool.

To me, it was surprising how much configuration is required to run just a simple program using OpenGL ES and shaders. UIKit and CoreGraphics, by comparison, are much much much easier to use.

So if you’re also interested to see the code behind shader programming, check out classroom repository on GitHub.

Other classrooms

Other classrooms during the first day were:

  • A modern development workflow - Romain Pouclet - BuddyBuild [GitHub]
  • From API Description To Tests & Mocks - Micha Mazaheri [GitHub]
  • Intermediate and Advanced RxSwift - Florent Pillet [GitHub1] [GitHub2]
  • Fastlane from zero to Hero - Julien Quéré [GitHub]

Day 2

The second day was more relaxed compared to first one, probably because of the previous night in the pub for many of the attendees. It felt like people made some friends already. It felt cozy.

Day 2

Core Data Custom Stores

The first presenter, Rew Islam (@dashlane_rew), was talking about different ways to implement custom data stores in Core Data.

Rew Islam

It turns out, Core Data is capable to work with custom stores that could implement storage using a custom data format, or even through a REST service!

Pushing Forward iOS Notifications

This presentation about push notifications guidelines from Adrien Humilière (@adhumi) was concerned with being a “good citizen” among apps on user’s device.

Adrien Humilière

In a world with competition over user’s attention it is much easier to delete an app with annoying push notifications than to disable notification settings.

Rewriting Your Model, Undo and Threading One Step at a Time

Next presentation from the Sketch’s founder, Pieter Omvlee (Tumblr), was a long story how the app lived through evolving model, starting from a simple object graph and ending with a tree of objects representing objects on the canvas.

Pieter Omvlee

Profiling Swift Performance on Linux

In this presentation, JP Simard (@simjp) is talking about hardships during profiling of Swift code on Linux. Specifically, about ways to find time profiling visual.

JP Simard

What’s up with Swift 5

Next presentation from Bas Broek (@BasThomas) was about current status and approved proposals for Swift 5.

Bas Broek

In the talk, Bas went through different proposals accepted in Swift 5 and mentioned ABI stability as well as Swift concurrency manifesto written by Chris Lattner. The talk gave a good overview of what’s coming next in Swift.

Working at scale - How to Save Time with Ci and Build Time Reduction

This presentation from Yusei Nishiyama (@yuseinishiyama) is telling about continuous integration setup at Cookpad, with the team across the world working remotely.

Yusei Nishiyama

Yusei talks about code reviews, improving their metrics, and improving build times. For me, the interesting part was using code review metrics with Grafana to visualize pull-request review time.

Core ML - Let’s Talk about Models

In this presentation David Bonnet (@iGranDav) explained and showed the approach to train a neural network on a popular MNist data set to build a custom CoreML model for handwritten digit recognition.

David Bonnet

Don’t Worry, Be Lazy

In this talk, Olivier Halligon (@aligatr) told about SwiftGen and Sourcery - tools to improve code quality.

Olivier Halligon

It was interesting to learn about those two, and additionally about Gyro - a custom tool to transform xcdatamodel to a Realm classes for iOS and Android.

Scaling Open Source Communities

In this talk, Felix Krause (@KrauseFx) shared his impressive experience in growing and scaling a community of the fastlane project on GitHub. The author shares techniques on how to automate repetitive tasks in order to keep a number of issues under control and keep one’s sanity.

Felix Krause

Update Your Reality with Vision and ARKit

In this talk, Xebia’s engineer Julien Datour showcases the small app that he built for the conference using ARKit and Vision framework. The app uses Vision to detect rectangles (physical OSS project cards) on a plane, then finds QR code within the rectangle and based on the GitHub link inside QR-code renders information about GitHub repository on top of the detected rectangle.

Julien Datour

UI automation classroom

After all of the presentations finished it was my turn to conduct a workshop among 4 other workshops. Mine was about UI testing in Swift. In the workshop, attendees learned tips and tricks for working with UI tests, specifically: general tips on testing; writing tests for table views and collection views; using localized strings in UI tests and using a mock server for network requests.

You can find more information about the workshop contents on GitHub. It includes presentation slides, example project, and solutions to the problems (in branches “step1”, “step2”, and so on).

Other classrooms

Other classrooms that day were:

  • A modern development workflow - Romain Pouclet - BuddyBuild [GitHub]
  • Leveraging Swift and GLSL shaders to animate realtime music visualisations - Adrien Coye de Brunélis - Deezer [GitHub]
  • Build a Swift Backend-for-Frontend (BFF) - Chris Bailey [GitHub]
  • Mastering code generation and SwiftGen and Sourcery templates - Olivier Halligon [GitHub]

Conclusion

To me, the 2 days I spent at the FrenchKit conference went very quick and were worth it 100%. My big thank you to FrenchKit organizers, speakers, and attendees, as well as to Zalando for sponsoring my trip.

I learned a lot from presentations, had a good time socializing with other developers, and generally had lots of fun. I definitely recommend attending it.