We've noticed, that size of our ipa started to vary from time to time. We've found that all the difference was in the LC_CODE_SIGNATURE command under the _LINKEDIT segment of binary. The main reason of that change was the different number of hash slots due to different value of page size: 4096 on macOS SEQUOIA and 16384 on macOS TAHOE. So the size of the final binary was dependent on the machine, it was produced on. I didn't find out any information on why the default page size changed on TAHOE.
Apple’s codesign supports a --pagesize argument. For regular builds that setting can be passed via OTHER_CODE_SIGN_FLAGS=--pagesize 16384. But it seems that xcodebuild export ...` completely ignores it: i've tried to pass invalid size (not the power of two), and the export still succeded.
I've also managed to get xcodebuild logs via
log stream --style compact --predicate 'process == "xcodebuild" OR process == "codesign"' --level trace
They have no occurrences of --pagesize:
2026-03-24 13:43:27.236 Df xcodebuild[93993:a08c53] [IDEDistributionPipeline:verbose] invoking codesign: <NSConcreteTask: 0x8a1b21bd0; launchPath='/usr/bin/codesign', arguments='(
"-f",
"-s",
8C38C4A2CB0388A3DB6BAEFE438F20E044EE6CB2,
"--entitlements",
"/var/folders/w_/5t00sclx2vlcm4_fvly7wvh00000gn/T/XcodeDistPipeline.~~~T3Dcdf/entitlements~~~c2srXx",
"--preserve-metadata=identifier,flags,runtime,launch-constraints,library-constraints",
"--generate-entitlement-der",
"--strip-disallowed-xattrs",
"-vvv",
"/var/folders/w_/5t00sclx2vlcm4_fvly7wvh00000gn/T/XcodeDistPipeline.~~~T3Dcdf/Root/Payload/App.app/Frameworks/FLEXWrapper.framework"
)'>
So here I have some questions:
How is the default page size selected?
Why the default page size may change between SEQUOIA and TAHOE?
How to provide page size to xcodebuild's export or it's a bug that it doesn't look at the value of OTHER_CODE_SIGN_FLAGS?
0
0
64