Hot reloading tool for Swift and SwiftUI development in Xcode, enabling code injection into running iOS/macOS simulators without full rebuilds.
InjectionIII is a hot reloading tool for Xcode that enables developers to inject code changes into a running iOS, macOS, or tvOS simulator without restarting the app or performing a full rebuild. It works by recompiling edited Swift files into dynamic libraries and loading them at runtime, allowing immediate testing of UI tweaks and logic adjustments. The tool solves the slow edit-compile-run cycle by making Xcode feel like a live programming environment.
iOS, macOS, and tvOS developers using Swift or SwiftUI who want to accelerate UI iteration and debugging in Xcode simulators. It is particularly valuable for developers building complex interfaces or frequently tweaking visual layouts.
Developers choose InjectionIII because it provides near-instant feedback during UI development, eliminating the need for repetitive rebuilds. Its deep integration with Swift and SwiftUI, support for multiple injection modes, and ability to work with existing Xcode projects without major configuration offer a unique productivity boost compared to manual restart cycles.
Re-write of Injection for Xcode in (mostly) Swift
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Injects updated Swift method implementations into running simulators without full rebuilds, saving significant time during UI iteration and debugging, as described in the README's core feature.
Integrates with property wrappers like @ObserveInjection and .enableInjection() to automatically trigger SwiftUI view updates, leveraging packages like HotSwiftUI or Inject for seamless redraws.
Supports standalone injection, App Store sandboxed builds, device injection over Wi-Fi, and integration with third-party packages, offering versatility for different development environments.
Parses Xcode build logs to recompile changed source files into dynamic libraries, automating the recompilation process based on recent project builds.
Requires manual configuration of EMIT_FRONTEND_COMMAND_LINES setting, as Xcode 16.3 no longer logs compiler invocations by default, breaking a long-standing workflow without user intervention.
Cannot inject changes to memory layout such as adding, removing, or reordering stored properties, limiting live refactoring during development sessions, as admitted in the README.
Setting up injection on real devices involves turning off app sandboxing, using build scripts like copy_bundle.sh, and configuring Wi-Fi connections, which is error-prone and not straightforward.