iOS developers have the choice of bundling shared code into a static library, or a dynamic framework, and the tradeoffs between them has historically been a little hard to determine, and have also been a moving target.
Some reasons to choose a dynamic library, even though it’s only ever consumed by a single app bundle:
* Shared code between apps embedded in the same bundle (see sibling comment)
* Some apps may want to load portions of code on-demand with dlopen()
* Dependencies / duplicate symbols. Common example is an analytics static library that contains sqlite, and either the main app or another library also linking sqlite, and getting link warnings about “duplicate symbols, which one is used is undefined”. I think this isn’t necessarily a static / dynamic library issue, but 3rd party static libs were often a “single file with all dependencies” and didn’t always understand why that was a problem.
* for a long time, it was the cleanest way to provide & consume headers & object file when distributing closed-source 3rd party libraries.
There may be more, I’m fuzzy on some of the details. If I remember correctly, some of the reasons could be considered tooling issues: creating a Framework was easier for some cases, even if you didn’t want/need the dynamic linking inherent in that choice.
Found this interesting post: https://developer.apple.com/forums/thread/715385/