@JohanBiometric, I've been away for a little bit, so I'm just catching up to your follow-up here now.
One of the things that I see confusing the understanding of things here is that Middleman Framework has its MACH_O_TYPE
build setting set to static. That's not invalid, but for the sake of discussion, let's have you configure everything as such:
- All framework code has
MACH_O_TYPE
set to Dynamic Library - App target lists the frameworks as Embed & Sign in the General tab
- Middleman Framework target has reference to Camera framework described as Do Not Embed in the General tab.
This configuration will result in the following file structure inside of the Xcode archive (abbreviated for clarity in this discussion):
SampleApp3.xcarchive
├── dSYMs
│ ├── CameraHandlingFramework.framework.dSYM
│ ├── MiddlemanFramework.framework.dSYM
│ └── SampleApp.app.dSYM
└── Products
└── Applications
└── SampleApp.app
├── Frameworks
│ ├── CameraHandlingFramework.framework
│ └── MiddlemanFramework.framework
├── Info.plist
└── SampleApp
This configuration has your 3 binaries inside the built app (executable or dynamic framework), and the 3 matching dSYM files. One of the most important reasons build UUIDs matter is to aid in crash symbolication, and so if you run dwarfdump
on either the framework binary or on the inner contents of the dSYM file that contains the DWARF (it's a few layers down in the dSYM bundle hierarchy), the UUID values match. In your project, the Middleman framework is missing from that dSYM directory because it was built as a static library, though you were still getting a .framework
inside of the app too. With this configuration, you should see the build UUIDs remain the same when the criteria I mentioned previously is met:
- Exact same source code
- Exact same Xcode version
- Exact same build settings
That is to say, once you get the project configured as I suggest above, changing that string inside your string generation function should affect only the build UUID of the single library file on disk (and its associated dSYM file), and not any of the others, because only the source code to one final linked binary is affected.
A few posts ago, I asked what you're looking to accomplish with a stable build UUID, which is relevant to bring up again here. I presume you configured the build to contain a static framework for a particular reason, since that's not the default configuration created by File > New Target > Framework in Xcode. There's a few related topics here — dynamic vs static libraries, mergable libraries, as examples — which affect how things are built, and that in turn will affect the build UUIDs, and I don't know right now how those choices will meet or not meet your goal for the build UUID.
— Ed Ford, DTS Engineer