Solved Problems

| Tags: dev, ios, swift

I’m that kind of guy who loses interest in problems once they are solved. That’s why I seldom write about software development on this site although developing software is what I’m doing most of my time.

Problems interrupt the flow. They require me to experiment again and again with seemingly not getting anywhere for some time. Solving problems also involve finding some good search terms that will make DuckDuckGo bring up some StackOverflow page or some blog post that at least contains some hints at where the solution might be lurking. Having solved a problem is fun. Achievement unlocked. Problem solved.

After a problem is solved the flow becomes tangible again. So I usually don’t write about solved problems. I plunge into the flow towards new challenges.

I applied for a job as an iOS developer some days ago and they asked me to do a homework to verify the truthfulness of what I told them about my skills. They asked me to develop an app showing fake statistics data for an unnamed website. The app was also required to contain a today widget.

As I developed the app and the widget and wrote tests for both, I realized that it presents the solutions to some problems in a pretty uncluttered way that might be useful to other people.

So I put it on GitHub. It shows my current opinion on the development of testable iOS apps in the Swift programming language.

Although it makes some use of ReactiveCocoa 3, I’ve still got the inkling that there is much more to functional reactive programming than how I use ReactiveCocoa now. So don’t take it as a primer on that subject. It’s still a good starting point, though.

I’ve read many comments from iOS developers complaining about AutoLayout. Perhaps because I’m used to this kind of layout management from the Java projects I’ve worked on, AutoLayout has never been a big issue to me. I actually like it. I’ve never been a fan of GUI builders and avoid Interface Builder whenever possible. I create my UIs programmatically. Sure, it’s quite verbose when you use the low level API, but I always have a simple wrapper around it that I started developing while working on Space Primacy. It’s so simple that I didn’t bother releasing it as a framework. That’s one of those solved problems I mentioned above.