Ever since starting to work with generics in Swift, I have been struggling with combining generics and protocols. In this post, I’ll describe how I finally made sense of it all.
I really love the Swift type system and its extension model. You have to use it with care, but combined with careful system design, they give you a lot of power. In this short post, I discuss how to keep your extensions from being exposed everywhere.
This is a short note to self about how to use
git instead of
grep to recursively find all occurrences of a certain text in all files within a root folder.
struct are two powerful tools. In this post, I’ll discuss how you typically use them and how to use structs like enums when you need more flexibility.
Swift is an amazing language, but I find that it lacks good native support for coordinating async operations in sophisticated ways. In this post, I will look at existing libraries for solving this problem, then discuss a lightweight alternative and show you how to implement it with a couple of simple protocols and implementations.
Sheeeeeeeeet 1.2 introduces a completely rewritten appearance engine that makes it easier than ever to style and subclass your action sheets and their items. In this post, I’ll discuss some of the major changes.
In this post, I’ll write about my long process to find a setup that lets me be more productive and flexible in how I work with my various sites, projects, blog etc. I will descibe how I moved away from my old hosting provider and Wordpress and how I finally found a setup that lets me create content on my iPad Pro.
This is an updated version of talk I gave at CocoaHeads Sthlm in April 2017. The
talk was on how to use Alamofire to talk to an api, AlamofireObjectMapper to map
its responses, use the Alamofire
RequestRetrier to automatically retry failing
requests and use
RequestAdapter to adapt all requests. I also demonstrated how
to use Realm to seamlessly add offline support, using the decorator pattern.
In this post, I will show how to reduce the amount of code you have to type when
testing enums, by using the new
In this blog post, I will show how to automate setting up Xcode for you and your
team, including setting up required tools, simplify enforcing common conventions
Fastlane in a way that is easy to extend if you need
to automate more tasks later on.
After installing Xcode 10 yesterday, I started migrating some libraries to Swift
4.2. While most migrations were painless, one caused me some headache, since the
library depends on
SwiftyDropbox which does not yet support Swift 4.2.
In this post, I’ll describe how you can automate setting up a brand new Mac with a terminal script that will install system software, applications, configure the computer etc. This will help you setup a new Mac in minutes.
After putting years into iOS and Swift development, I have come to a point where I am pretty happy with my project structure, code conventions, coding habits etc.
This year, I decided not to wait a while year before installing the latest macOS, so I grabbed it as a beta, installed it and didn’t look back. Before doing so, I also created a setup script that quickly can setup a clean computer from scratch. I am not that brave.
It’s been a long time coming, but I have eventually gotten around to replace all
NSCoding objects in my Swift libraries with
Codable. This post covers things
that I’ve learned along the way.
In an app of mine, I had an idea on how to redesign how we extend protocol-based
domain models. However, what first looked like a walk in the park, turned into a
Swift nightmare, with problems that I am still struggling with.
In my previous post, I wrote about how I do not like iOS delegates and target/selectors and how I prefer to use closures.
After hearing so many good things about
RxSwift and not having the opportunity
to try it at work, I decided to use it when I rewrote an old app of mine.
Tonight, I finally sat down with my oldest daughter Cornelia, to play with Swift Playgrounds and try to teach her a bit about programming.
In this post, I will write about my experience using Working Copy on my iPad Pro, adding a blog post to a Jekyll-powered blog, then pushing the result to GitHub.
This post will show you how to apply the
UITextField placeholder behavior to a
UITextView, which natively lacks this support.
This is a summary of my talk at CocoaHeads Sthlm, April 3 2017, where I talked about using Alamofire, AlamofireObjectMapper and Realm to talk to an api, map its responses, automatically retry and adapt requests and how to use Realm to create implicit offline support.
I am really looking forward to a HoloLens event at tretton17 next week, where Jimmy Engström will demonstrate this awesome piece of technology:
After procrastinating for too long, I finally spent a minute of my life to setup git autocomplete in the macOS terminal. The original discussion on this topic is found here.
I finally made it! After years and years of “I really shouldn’t”, I have finally managed to abandon my old hosting provider and move all my sites to GitHub.
In a project that I’m currently working on, I load images asynchronously into an UIImageView. As the download starts, I apply a placeholder image from the bundle to the image view, to indicate that no image has yet been downloaded.
Today, I managed to click the “Skip Bundles” button instead of the “Load Bundles” button, when I started up Xcode after adding two new plugins.
I have been playing around with .NET Core since the early betas, but since I do so with rather long times in between, things break each time I decide to pick up from where I started.
In an Ionic 2 app that I am building for iOS and Android, I want to use different application settings for different build configurations. For instance, I want to use different api endpoints for development and production apps, disable tracking for development apps, disable logging for production apps etc.
With the release of Visual Studio Code 1.0, I decided to upgrade .NET Core to the latest version. However, the older version was not properly replaced when upgrading, which did cause Visual Studio Code and Omnisharp to behave quite strange.
I am currently developing a console app in .NET Core on my Mac. It’s a rather nice experience, although I miss a lot of stuff from Visual Studio - expecially R#.
After so much waiting, so many “I’ll do this first”, so much app coding etc. etc. (yep, I blame my family as well), I finally managed to start playing around with DNX and ASP.NET 5.
In an app that I am building, I have a map where users can save personal content and present it in a beauuutiful way. Ok, enough with the sales pitch.
After some time away from .NET, ASP.NET and WebApi, I’m having a great time when setting up a new WebApi solution for a project at work.
I am currently building my very first app with Ionic Framework. So far, Ionic is super fast to setup and performs really well, so I hope performance doesn’t drop once we begin to add images and content to the app.
After upgrading to Xcode 6.3.1, I got a new error that I haven’t received before: