# Migration from v0.9.+ to v0.10.+ Weaver 0.10.0 doesn't have any API breaking changes, which means the annotations are still the same. **Only the generated code structure changed**. The major change which happened is the removal of the dependency registration/resolution at runtime. ## Installation ### With v0.9.+: - Install the runtime library WeaverDI with either Cocoapods, Carthage or SwiftPM. - Install the command line tool with either Homebrew, or manually. - Add Weaver pre-compilation build phase. ### With v0.10.+: - Install the command line tool with either Homebrew, or manually. - Add Weaver pre-compilation build phase. The boilerplate code doesn't need WeaverDI anymore since the registration/resolution of dependencies doesn't happen at runtime anymore. ## Dependency build timeline ### With v0.9.+: Dependencies were all lazily built. This behavior brought up a lot of retain cycle and thread-safety issues as well as behavioral issues. Not knowing when a dependency is actually built or not makes it harder for developers to control dependencies lifecycle. ### With v0.10.+: **Dependencies are built upfront**, which means that when a dependency container is initialized, it also initializes all its contained dependencies with it. When a class is then built with its dependency container, the dependencies are already initialized and ready to use. This behavior mimics exactly how dependency injection is usually done manually. **There are few exceptions**: - Transient dependencies are never stored, which means they are built on demand. - Weak dependencies are stored weakly, which means they can't be built upfront since they would get released right away anyway if they did. They are still lazy loaded, which means **the use of weak dependencies in a multi-threaded environment can lead to race conditions**.