Release of my first iOS app

08 Feb 2023

I release my first app for iPhone/iPad on the app store. In principle, it is really simple and it helps you to figure out when to ventilate your home without messing up the humidity.

It currently only works in Germany, but you can get it here:

Here come some thoughts on how it went.

Programming language: Swift

These days swift is the language of choice for native iOS apps. In the end, I also used swift for the relatively simple server component to gather the data from the weather service.

I think it is a really nice language. It has all the features I want without being too complicated. The syntax is nice to look at for me and easy enough to read.

Of cause it is a little messy, due to its compatibility with some parts of Objective-C which was preferred by Apple before developing Swift. It is very much a multi-paradigm language with all the pros and cons of that.

I had to implement some basic data structures like a Pairing heap and a Bounding volume hierarchy for arbitrary dimensional data. From my experience, this can get messy fast in most languages, but it was unexpectedly simple.

UI Framework: SwiftUI

SwiftUI is Apple’s relatively new UI Framework. It kind of follows the idea of react and vue.js, but I like it much more than these two. A big part of this is that there are specific features built into Swift to make it nicer to use, which Javascript misses at the moment. I also think it took some ideas from Immediate mode GUI that work very well. I think it is very well designed.

Data source: Germany public weather service

I get my data from the DWD. It has an amazing amount of freely accessible data for Germany. There is also a huge amount of data with a worldwide application, but it is not as nicely preprocessed as the local data.

The documentation and data formats are a little old-school at first, but easy to parse when you figured out what you need. Tip: If nothing works check if that data uses latin1 encoding instead of UTF-8. As far as I figured out this is not documented anywhere…