<< back

InjectionIII 4.7.5

Adds a limited form of “Hot Reload” capability to your iOS, tvOS and macOS projects

Category: Developer Tools
Price: Free
Popularity: Low
Version String: 4.7.5 (7869)
Release Date: 2023-10-12
Architecture: Intel & AppleSilicon(ARM)
Minimum OS: macOS 10.12
Vendor Name: Christoffer Winterkvist
Homepage: [Mac App Store]

Version History 4.7.5 (7869)

Increased use of caching, accommodations for Xcode 15

Description:

InjectionIII adds a limited form of “Hot Reload” capability to your iOS, tvOS and macOS projects written in Swift or Objective-C. This allows you to change the implementations of methods in classes without having to restart your app.

To get started, install the app to /Applications and run it then, download the example project http://johnholdsworth.com/GettingStarted.zip and build and run it in Xcode. You’ll be promoted to select the directory containing the project file and sources by the menubar app to give it access to which files have changed. Once injection has connected, if you save a file, it will be recompiled and injected into the running app, the new implementations taking place of the old. In the GettingStarted iOS app, if you edit the file DetailViewController.swift to change the string appended after the detail.description in function configureView() then save the file, you can see it take effect straight away.

InjectionIII requires Xcode version 9.3/4 or 10 to work, installed at the standard location in /Applications. You'll need to turn entitlements off to be able to use injection on a macOS application. Add one of the following to your app’s startup to connect to InjectionIII:

Xcode 10.2 and later:

#if DEBUG
Bundle(path: '/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle')?.load()
//for tvOS:
Bundle(path: '/Applications/InjectionIII.app/Contents/Resources/tvOSInjection.bundle')?.load()
//Or for macOS:
Bundle(path: '/Applications/InjectionIII.app/Contents/Resources/macOSInjection.bundle')?.load()
#endif

Xcode 10.1:

#if DEBUG
Bundle(path: '/Applications/InjectionIII.app/Contents/Resources/iOSInjection10.bundle')?.load()
//for tvOS:
Bundle(path: '/Applications/InjectionIII.app/Contents/Resources/tvOSInjection10.bundle')?.load()
//Or for macOS:
Bundle(path: '/Applications/InjectionIII.app/Contents/Resources/macOSInjection10.bundle')?.load()
#endif

It’s limited in that it can only reload implementations of non-final, non-generic classes and not structs but in general it works quite well once you’re up an running.