Please correct me if my reasoning is wrong (I assume it's correct ):
As I build an iOS app, it's output is a package MyApp.app, and among the other things it contains a Mach-O binary MyApp: MyApp.app/MyApp.
We can detect which iOS public frameworks (e.g. UIKit, CoreData etc) MyApp uses by either running otool -L MyApp.app/MyApp, or searching for the particular symbols with some disassemlber tool e.g. Hopper.
Now, if we meet some DYLD error for a private framework during an app's launch, e.g.
dyld[93664]: Symbol not found: _OBJC_CLASS_$_SomeClass
Referenced from: /Applications/XcodeRC.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/FamilyCircleUI.framework/FamilyCircleUI
this means that FamilyCircleUI, which is a private framework, is referenced by some other public iOS framework. And we can't detect it with otool -L MyApp.app/MyApp, because public framework are not built into MyApp, just referenced from it!
So, the question is: in order to detect who's referencing FamilyCircleUI, do I need to run otool -L PublicIosFramework.framework/PublicIosFramework for each of the public frameworks used in the app, or is there much shorter way?
E.g.
- some documentation (Apple doesn't want to provide it, so maybe there're some reversed dumps I didn't found with Google)?
- some wild combination of
otool+grep+find+ls?
