And now for something completely different

Hi S/E,

So.. this isn’t a place to “grind one's axe” but I wanted to write a quick note highlighting recent developments in the InjectionIII project for "hot reloading" as it’s taken a significant leap forward in terms of usability. Perhaps you’ve tried to use injection in the past or it always sounded “too good to be true" but I’d recommend giving the new version a try particularly if you are working on a large project.

The InjectionIII App runs alongside Xcode and it allows you to update method implementations in your program without having to rebuild and restart it by simply saving the source file. Ideal for iterating over design decisions or applying a fix without having to re-navigate through your app to where you noticed the bug. Until now there hasn’t been an entirely satisfactory solution for Swift but we found a powerful new technique that could even swizzle C++ if one wanted to.

The reasons not to use injection are getting vanishingly small given it pretty much “just works”™️ if you understand its limitations. And even if you don’t, the worst case is you just have to restart your app as you would normally. This has developed into a bit of a personal crusade for me and I hope one day it gets thoroughly sherlocked so developers can be liberated from the edit-build-run-test, edit-build-run-test treadmill.

9 Likes

Very cool!

I remember using an older version of this with an Obj-C App (like... maybe 5+ years ago?), and it was a real timesaver - especially when dealing with complex animation code, where you're making lots of small adjustments to get the right "feel", rebuilding, getting back to that place in the App where it appears, trying again... no, still doesn't feel quite right... rise, repeat.

Thanks a lot for all your work on this project over the years. It's quite a nice feeling the first time you make a change to an application, and you're about hit CMD+R from muscle memory, but then you realise you don't need to.

I'd definitely encourage people to give it a try.

1 Like