So you might wonder “Why?” especially since I am more of an Android guy. The reason why I decided to visit a mobile conference is that a few months ago I transferred to a different team inside my department at “Süddeutsche Zeitung” which is responsible for building the SZ News Apps for iOS and Android. So I am now officially an app developer, even though I do not have much of a clue yet (shush… don’t tell my boss).
The reason why I chose this particular conference was that it was among those recommended to me by my new colleagues. UIKonf was recommended to me by my lovely colleague and iOS expert Lisa Berle as one with a good reputation in the iOS community. Even though she has not been there yet herself she decided to tag along meaning that I would not be alone among the Apple disciples ;-)
The conference features quite a range of side events. While Monday and Tuesday are the main conference days where all the talks are taking place there are additional workshops on Saturday and Wednesday (some are free, some require extra payment). Also happening on Wednesday is the unconference with lab coding sessions and more. Sunday has a variety of socialising events in the early afternoon ranging from a bike tour over a boat ride to museum visits and the kick-off party in the evening where it is also possible to register for the conference days.
For time and budget reasons we decided to skip both workshop days and only attend Sunday to Tuesday. Lisa chose the 3.5 hrs walking tour while my lazy self settled for a boat ride on the Spree. The boat tour took us up and down the river past different government buildings and other sights like the museum island for a good 1.5 hrs. As there was still quite some time left until the kick-off party I decided to visit the Brandenburg Gate and Alexanderplatz on my own.
The kick-off party took place in the wonderful beergarden of James June where we met up with three nice chaps from Dresden who Lisa met at the walking tour. We enjoyed our evening with good food and a few drinks.
Day 1
Before moving on to the talk themselves I wanna give a short overview over all the big and little things I noticed in the run-up.The first and foremost fact to mention is the speaker lineup. The organizers decided to have an all female speaker list for this year. I am aware that this is a polarizing topic but I appreciate the effort made by the organization as to make a statement and hopefully incent more women to speak at other conferences. Important fact here: The conference was fully booked and it seemed to me that there was a higher percentage of women than at other conferences (though it could be that all iOS conferences are like this).
What struck me as a bit odd was that even though some speakers had been posted on the website for quite a while the topics of the talks had not been published until shortly before the conference and there were no abstracts at all. So buying the ticket was very much like the proverbial pig in the poke.
Two screens on both sides of the stage showing the text “Live transcription” reminded me about btconf two weeks before where all talks received a live transcriptions as well. At btconf the service was provided by White Coat Captioning. I asked in a tweet if it could be Andrew doing the captioning again and got a very quick reply that it was indeed the same company but a colleague of Andrew as he was already booked for another event. Funny how an intended joke can hit that close to home ;-)
The greeting by the organizers focused mainly on things regarding the schedule and facilities, making sure everyone had all the necessary information but had also enough room for a heartfelt welcome. Germafficiency for the win :-D
There was one thing though that annoyed me immensely. It was the first time at a conference where I noticed people using their coats, caps, bike helmets etc. to reserve seats during the whole day. Very classy guys.. next time why not bring towels.
We had lots of breaks, only coffee in the morning but lunch breaks were pretty long but that way everyone had time to eat without haste and in the afternoon we got ice cream sandwiches!!
The sponsors brought lots of goodies. MyTaxi even had 3 talks/workshops hosted on a boat just next to the location each day as a semi parallel track. The swag bag did contain not only the UIKong shirt and stickers but also a reusable coffee mug, a webcam cover, a mytaxi discount coupon and a notebook.
But now let’s cut to the chase...
Kaya Thomas - Inclusive and Accessible App Development [@kthomas901, kayathomas.info] <video>
A11y is an ever present topic at almost all conferences nowadays. But still too many sites and apps are lacking it. An aspect that other talks usually brush over though is the difference between a11y and inclusion. A11y features help to not exclude people but actual inclusion usually needs something more. Kaye used a good example: If a gym installs a ramp it uses a11y to allow wheelchair access but it is not automatically inclusive as there are likely still some issues when actually using the equipment.Kaya also gave an exhaustive overview of available a11y tools and elements that can be used with examples. She also mentions that there are more things to consider than “just” ui elements but also that also users with a slow connection can be excluded if you rely on a huge bandwidth. A lot of those points reminded my about the talk of Charlie Owen at btconf, like including your users or some external QA authority to get more input on where your app might not be inclusive enough yet.
All in all a good talk covering the basics of a11y considerations plus a bit extra.
Shannon Hughes - Detangling Gesture Recognizers [@whattherestime4, github.com/whattherestimefor] <video>
This talk described the issues Shannon and her colleagues had when porting an application from MacOS to iOS using a rich set of gestures as shortcuts for a lot of operations.As an introduction Shannon illustrated how different gestures are recognized using state machines. Debugging such gesture recognizers can be very tricky though especially when several recognizers are involved. Usual mechanisms like breakpoints do not work as they derail the timing setup.
Shannon describes their efforts and learnings in an extremely seasoned and also entertaining way. I highly recommend watching the video. The way she explains what bugs they encountered, what fixes they tried and why they failed is very diverting.
In the end the found out that too many gesture recognizers were active at the same time and had to reduce the amount in some way. In the end they created their own state machine, to define what gestures are recognizable at what time.
This is a good example how a few seemingly small bugs can lead down a rabbit hole and force your hand into overhauling your architecture. Really good talk, interesting topic and a great speaker.
Glenna Buford - Rolling your own Network Stack [@glennersboofy, github.com/glenna] <video>
From the topic of the talk I was not sure what to expect. In a nutshell Glenna presented her approach to a lean and reusable networking layer inside an app without using 3rd party libraries.The first approach simply an UrlRequest created from a string, classic network session etc. This got refined more and more by adding encapsulation and abstraction techniques. In the end she had different classes containing all the required data to access a specific endpoint and operation classes to be used with those.
If you are into Swift programming techniques you might wanna check this one out.
Nataliya Patsovska - Declarative Presentations [@nataliya_bg] <video>
Another topic that can mean almost anything ;-) and TBH I am not quite sure I totally got the point.Nataliya took us on a refactoring tour where she started from a completely synchronous program flow and turned it more and more into an asynchronous one using futures. As far as I understood the idea was to have rather generic classes that take futures and completion handlers as declarative arguments instead of having the traditional code flow.
This resulted in a code structure where the developer does not need to know when to check for what conditions or how to react to them but simply can define it by using an appropriately named handler/future parameter. This was emphasised by making use of Swift’s type system to make sure the classes are used in the intended way.
To me it felt like this was more suitable for designing SDKs or libraries so provide the developer with clearer interface. When you do that in the actual business logic there seems to be not too much benefit unless you have a lot of similar structured code portions that can be abstracted more easily that way. It might also benefit you during refactorings but I am not sure reworking existing code into such a structure in the first place is worth it. If you create a new application though it could be interesting to try this route.
But I gotta say, whoever does live coding that even just remotely involves XCode is either very brave or a madman ;-)
Kristina Fox - Internationalizing your App [@krstnfx, kristina.io] <video>
When you say i18n people immediately go for translations. Which is in a way correct but there is more to it.Different regions can also mean having a different currency or regional differences like what an icon can mean or what associations are triggered by certain colors, screen orientation or units of measurement.
To find out about these differences user research is the main information source. If you gather that information yourself it is often useful to interview people at their workplace or even at home, places they feel comfortable at. Otherwise they tend to overthink their answers and the result is less authentic/natural. Another option are cultural consultants that can assist you with their expertise.
The second part of the talk focused on implementation aspects of i18n, like how to extract strings into a localizable and parameterizable format. How to use formatters to accommodate currency or time zone differences or the usage of start/end as opposed to left/right.
Ellie Shin - Mockolo: Efficient Mock Generator for Swift [@ellsk1] <video>
Here we have a highly technical talk. At Uber Ellie’s team was challenged with the task to generate a vast number of mocks at build time. Existing frameworks/libraries like OCMock, Sourcery or Cuckoo all had some drawbacks like need to subclass NSObject, use objc annotations or were simply too slow for the use case.So what do we do in such a case? Correct, we build a new one from scratch ;-) Ellie explains the different steps they took to create Mockolo and what problems they encountered during this.
The topic was rather interesting but for me it did not contain much information to be used in daily work life. I mean, when will you need to write a code generator? Alas I have to say the talk itself was very hard to follow as it was very uninflected and a lot of complex information kept pouring in at a steady pace. But if you are into the technical details of Swift code generation this might just be what you are looking for.
Julie Yaunches - Consistency Principle [@julieyaunches, yaunch.io] <video>
Never heard of that, no clue what it could mean. So I was curious what was coming down the pike.During the life time of any application we all face the same challenges. The team maintaining the app changes, technology evolves and libraries get abandoned. So over the time you decide to swap certain parts of your application out for other things. But that hardly ever goes down smoothly or even atomically. So suddenly you end up having different libraries in your network layer essentially doing the same thing but you do not have the time to complete the transition. The same thing then happens maybe at the UI layer or somewhere in your business logic.
This kind of vertical duplications and inconsistencies is always a pain and of course we do not want them but in reality we often end up stuck in such a limbo due to non technical restrictions like time or budget.
So here Julie introduces the term of the Consistency Principle stemming from the accounting world into the IT landscape. In accounting you have several ways you can do your bookkeeping and the consistency principle tells you to stick to one method throughout a book and not mix bookkeeping styles. That sounds very sensible and plausible.
But what does that mean in regard to the aforementioned examples? I think here is where she lost me and also other people I spoke to afterwards. Because if you apply this logic par for par it would mean NOT to change to a new library or abstraction pattern. Or maybe it means, if you do it, then only if you can finish the swap?
What came then instead were things like, make sure you encapsulate your application layers so that the business logic only has minimal knowledge of your network layer etc. But that is software architecture 101. So I fail to see the correlation between the initial problem description and the proposed solution. Maybe someone can enlighten me about it.
Lisa Dziuba - How to Market Your Mobile App [@lisadziuba] <video>
I gotta be honest, for me the term “marketing” is just.. well.. it just gives me the heebie-jeebies. But it is a very important aspect of a successful app and so we all should have at least a basic understanding about it, so we know where to start and what to ask people about if we need to get involved with it.As a start Lisa defines the basics of user research, the term of a persona and what it is used for. Once you understand what your potential audience looks like you can start to think about what the USP (unique selling point) of your app would be to the different groups.
Subsequently Lisa gave a detailed overview of the different marketing methods one can use to promote and sell an app. It starts by communicating your app launch on all relevant channels like social media, publications or platforms like Product Hunt. Then we have direct sales mechanics, free marketing like influencers or viral marketing and then of course paid marketing.
Sally Shepard - Swift to Hack Hardware [@mostgood] <video>
Final talk of day 1. Hardware hacking talks are usually very interesting as they show you how you can break out of the usual confines we all get so comfortable in way too quickly.Sally drew my interest right out of the gate by structuring the talk such as if we were new employees at a fictional cat bank :-D To really get the joke behind this, better watch the video.
The project at hand was having money box to report what coin was deposited and what the total balance is. For this she setup a RaspberryPI with Swift-Arm and SwiftyGPIO to allow using weight sensors to determine the actual coin size. This also involved having analogue to digital signal converters and lots of other nerd stuff!
Then on the server side she went for Kitura as a Swift cloud platform to provide data to the apps.
And here the talk took an unexpected turn (at least for me it was). After talking about all the different parts involved in the project, I was expecting to see the final result. But instead Sally switched her focus to something different but also important: the future of Swift
In summary it was an appeal to all of us to help the community grow and improve. Special mention was given to the Swift Evolution Process and its importance to the community and how we all can contribute to it (spoiler alert, it was not the last time we heard about that :-O)
So this somewhat left me in an emotional limbo. I appreciate the significance of the Swift community and its processes but I also wanted to see the kitty money bank do its job ;-)
Day 1 roundup
Pewh.. 9 talks in one day. Quite a lot to take in. Overall I must say that first day did not impress me that much. There were some really good and interesting talks and in total it was okay just not that great. But we have another whole day to hopefully blow our socks off!!Monday evening at UIKonf features the so called Ambassador’s Dinner. Here an ambassador organizes a table at a restaurant so that nonlocals can just tag along without the hassle of finding a place for dinner on their own. This time there were like 6 different ambassadors where people could sign up. Lisa and I decided to go rogue though and had a nice stroll along some remnants of the Berlin Wall and the famous district of Kreuzberg to find some food along the way.
Day 2
Füsun Wehrmann - From Heroic Leaders To High Performing Teams [@fuesunw] <video>
Starting talk of the second day usually features a tough and slow crowd. But Füsun was definitely not impressed. We did get to enjoy an invigorating and entertaining talk that softened the start of the day.We started off with a short travel to IT past, about things like how companies were structured or what the expected behavior at work was. She drew comparisons between now and then, how things changed in our working environment and technologies.
What happened when a project went haywire? Some expert got tossed into the maelstrom to save the day. Pretty often that approach just hit a brick wall and everything went south. Especially with changes like agile processes and self organized teams this approach is a recipe for disaster.
From here on Füsun outlined an alternative approach on what modern teams can do to increase their chances of success. This covers topics like customer and people centricity, shared leadership or collaborative mastery.
All of this is already rather well-known but Füsun manages to illustrate the benefits and synergies in a fascinating way which IMO makes watching this talk worthwhile.
Erica Sadun - Swift 5 Strings [@ericasadun]
Erica Sadun, a name I never heard before, which probably shows how little I now about the Swift ecosystem. She is highly involved in the Swift Evolution Process and worked on several language proposals. But more importantly: She.. is.. a blast!!!Seriously, this was one of the most entertaining talks I had the pleasure to listen to in a long while. She is very enthusiastic and funny and manage to carry me along for the full distance. So even if you do not care too much about Swift or programming at all, I recommend watching this talk simply for the entertainment value.
Edit: It seems this is the ONLY talk not available as video. This sucks BIG time!!!
Okay, back on topic. As the title says, this is about strings. Exciting, isn’t it? No? Well, give it some time. With a simple but effective C example Erica shows why using strings as control structures is a bad idea. There is hardly anything the compiler can do to spot errors and so the results are often undesirable. She substantiates this with the example of a date format string that yields several issues from wrong casing to i18n deficits.
ExpressibleByStringInterpolation to the rescue!!! Or if you want it a bit more nerdy: SE-0228. This feature in Swift5 allows you to create extension to the existing string interpolation mechanism. The really great thing about this is, that those extensions can have typed parameters.
This gives an immense boost in regard to compile time safety and abstraction. Since this are regular extensions you can add all kinds of logic into the interpolation code which is really powerful. Erica shows a lot of different examples of varying complexity.
For me this was hands down the best talk of the conference, even though Erica labeled herself as the opening act for Ellen Shapiro ;-)
Ellen Shapiro - Kotlin/Native [@designatednerd, bakkenbaeck.no] <video>
Wait.. what?? Kotlin on iOS?? Yeah baby!!!!But let’s start at the beginning and an hint for everyone going to watch the talk: Play it at like 80% speed otherwise your ears might fall off because, boy, she <i>does</i> talk fast.
There have been different approaches to try to have only one implementation for the different app platforms, like Xamarin or have Swift code run on Android. All of these attempts have severe drawbacks and turned out to be impractical. Many of these issues are unlikely to be resolved anytime soon as the parties that could do so usually have no incentives for it (e.g. lack of Java bindings for Swift).
Kotlin on the other hand was created by Jetbrains which has a strong interest in Kotlin being in as many places as possible.So it is also possible to compile Kotlin into LLVM code to be run on iOS devices. WOOOOOOOTT!!!!
The main part of this talk is Ellen talking about how she created a multi-platform project with Kotlin. I can’t give an adequate summary here, so better watch the talk and be ready for a verbal overkill ;-)
Alaina Kafkes - A11y-oop - Adding new Accessibility Features to not-so-new Apps [@alainakafkes] <video>
Another a11y talk but this time about how to add a11y features to an existing app. More specifically how Alaina und her colleagues added night mode to the Medium app.I found it rather unfortunate that the talk consisted solely of slides explaining in prose what classes were added/modified for what purpose but not a single line of code. This made the whole talk very hard to follow and so I did not pick up on anything in this one.
Neha Kulkarni - Advanced Colors in iOS [@nehapundlik] <video>
Before this talk I was wondering what exactly could be advanced in colors ;-)With P3 the IPhoneX supports a wider color space than its predecessors that use the standard RGB color space (ok, this sounds advanced ;-)) Sadly this is about the only thing related to P3, apart from how to use it in a color picker, in this talk. I would have liked to hear something more about P3 and the implications of its usage.
In the second part, Neha described how you can use semantic names and proper name spacing to improve maintainability of your apps. She also points out the importance of proper communication between e.g. design and development by using the correct names consistently and sticking to agreed names and naming schemes.
Lastly she emphasized that when choosing colors for your app or website you should try to have good contrasting, avoid color combinations that are hard to distinguish or simply painful to look at and that not only colors alone but also the combination with symbols can help to improve your app (kind of cycling back to a11y).
Anne Cahalan - Promises in iOS [@northofnormal] <video>
Swift has a variety of promise libraries. Anne gives an introduction to promises using PromiseKit with basic operations and elaborates on the implications to coding and mindset that come with switching to asynchronous programming.At the end stands a short comparison of various promise libraries like Google Promises, BrightFutures or Hydra and a lookout regarding Async/Await.
If you are familiar with Promises you can probably skip this one, for others this can be a good starting point.
Julia Roggatz - Muse Prototype Challenges <video>
And yet again I was at a complete loss regarding this talk title. Will she be musing about challenges in prototyping. Are there challenges when prototyping a muse? I guess so, cause I would not have a clue how that should work.Of course none of that. Muse is a prototyping tool Julia helped to developed at a research facility [@inkandswitch]. The whole presentation was held using Muse, which I thought was a nice touch.
At the start this seemed like a mundane product presentation and to some extend it was definitely a kind of advertisement. But once you look beyond that you see a new concept for creative working.
The tool allows you to nest so called boards infinitely. A board can contain various kinds of elements as well as free hand sketches and texts. It only work when using the Stylus which is a kind of exclusion (interesting counterpoint to all the a11y focused talks) but the idea was to see what a Stylus driven interface can look like and what you can do with it.
So I think this more an attempt in a kind of paradigm shift towards a new way of working which sounds interesting, even though I am definitely not the target audience. Another twist is that there are no menus or working modes (e.g. you select a drawing or eraser tool so define what the next click will do) instead you use additional touch gestures to change the behaviour of the pen or even the angle at which you hold it.
So this could be interesting for designers or other creative people that would like to create something like a graphical mind map where you can include all kinds of documents or media.
Kate Castellano - What to expect when you are templating? Clue’s approach to Backend Driven UIs [@katecastellano] <video>
This was actually the only backend focused talk of the two days. The problem at hand is something every app has to solve if it does get data from a server.How to create a reusable and maintainable architecture to send data about entities to display to your apps. The idea shown here is to define building blocks of your elements that can be reused to create new layout elements. Each block is described as a json element with a type. The apps know how to display each element and so you can control from the backend what the UI of your apps looks like.
That way it is easy or even mandatory to have the same names and definitions on all platforms, allowing more consistent experiences for users and developers. Also you can add new elements without breaking old apps but need to be aware that those might lack data then.
This is very similar to the way we built our apps at Süddeutsche Zeitung, so it was interesting to see, that others came to basically the same solution.
Lea Marolt - Mobile && Me == It's Complicated [@hellosunschein] <video>
I spent quite some time thinking about how to describe this talk. The best I could think of is some kind of “Coming of Age” for software developers.Lea talks about her first experiences in software development and how she became more and more practised. Then after a while she felt a lack of meaning in her job and decided to build things in the real world. During that time she realized what aspects are easier when building software and found a new appreciation for the profession.
Summary
Looking back at the whole event I do have a rather positive impression. A good location, logistics worked out well and the organizers made you feel welcome. Some of the talks were a bit of a let down though but a few really stuck out. But 539€ for two days might be a bit steep for some.If you are looking for a place for an exchange with other iOS enthusiasts UIKonf is definitely worth considering.