When signing a universal Mach-O, disagreeing binary identifiers are reconciled to the same value. ``` $ rcodesign debug-create-macho --architecture x86-64 exe.x86_64 assuming default minimum version 11.0.0 writing Mach-O to exe.x86_64 $ rcodesign debug-create-macho --architecture aarch64 exe.aarch64 assuming default minimum version 11.0.0 writing Mach-O to exe.aarch64 $ rcodesign sign --binary-identifier identifier-0 exe.x86_64 signing exe.x86_64 in place signing exe.x86_64 as a Mach-O binary parsing Mach-O writing Mach-O to exe.x86_64 $ rcodesign sign --binary-identifier identifier-1 exe.aarch64 signing exe.aarch64 in place signing exe.aarch64 as a Mach-O binary parsing Mach-O writing Mach-O to exe.aarch64 $ rcodesign macho-universal-create -o exe exe.x86_64 exe.aarch64 adding exe.x86_64 adding exe.aarch64 writing exe $ rcodesign -v sign exe exe.signed signing exe to exe.signed signing exe as a Mach-O binary inferring default signing settings from Mach-O binary preserving existing binary identifier in Mach-O (identifier-0) preserving code signature flags in existing Mach-O signature (CodeSignatureFlags(ADHOC)) identifiers within Mach-O do not agree (initial: identifier-0, subsequent: identifier-1); reconciling to identifier-0 preserving code signature flags in existing Mach-O signature (CodeSignatureFlags(ADHOC)) setting binary identifier to exe parsing Mach-O signing Mach-O binary at index 0 binary targets macOS >= 11.0.0 with SDK 11.0.0 adding code signature flags from signing settings: CodeSignatureFlags(ADHOC) creating ad-hoc signature code directory version: 132096 total signature size: 285 bytes signing Mach-O binary at index 1 binary targets macOS >= 11.0.0 with SDK 11.0.0 adding code signature flags from signing settings: CodeSignatureFlags(ADHOC) creating ad-hoc signature code directory version: 132096 total signature size: 381 bytes writing Mach-O to exe.signed $ rcodesign print-signature-info exe.signed - path: exe.signed file_size: 55312 file_sha256: ef5ec5345b8b70820cf5f207dcf57a6e59e26067098416a93feba927aaf71402 sub_path: macho-index:0 entity: mach_o: macho_linkedit_start_offset: 4096 / 0x1000 macho_signature_start_offset: 4112 / 0x1010 macho_signature_end_offset: 4397 / 0x112d macho_linkedit_end_offset: 10256 / 0x2810 macho_end_offset: 10256 / 0x2810 linkedit_signature_start_offset: 16 / 0x10 linkedit_signature_end_offset: 301 / 0x12d linkedit_bytes_after_signature: 5859 / 0x16e3 signature: superblob_length: 285 / 0x11d blob_count: 3 blobs: - slot: CodeDirectory (0) magic: fade0c02 length: 229 sha1: 41e8e1f340a05d3f0a349c9dd6ee4ea608f13934 sha256: f319eb464979c5ac2db1f24f9d73c17731a022e4af7d9530fe89913e9a9401fd - slot: RequirementSet (2) magic: fade0c01 length: 12 sha1: 3a75f6db058529148e14dd7ea1b4729cc09ec973 sha256: 987920904eab650e75788c054aa0b0524e6a80bfc71aa32df8d237a61743f986 - slot: CMS Signature (65536) magic: fade0b01 length: 8 sha1: 2a7254313aa41796079bb0e9d0f044345f69f98b sha256: e6c83bc98a10348492c7d4d2378a54572ef29e1a5692ccd02b5e29f4b762d6a0 code_directory: version: '0x20400' flags: CodeSignatureFlags(ADHOC) identifier: identifier-0 digest_type: sha256 platform: 0 signed_entity_size: 4112 executable_segment_flags: ExecutableSegmentFlags(MAIN_BINARY) code_digests_count: 2 slot_digests: - 'Info (1): 0000000000000000000000000000000000000000000000000000000000000000' - 'RequirementSet (2): 987920904eab650e75788c054aa0b0524e6a80bfc71aa32df8d237a61743f986' cms: null - path: exe.signed file_size: 55312 file_sha256: ef5ec5345b8b70820cf5f207dcf57a6e59e26067098416a93feba927aaf71402 sub_path: macho-index:1 entity: mach_o: macho_linkedit_start_offset: 16384 / 0x4000 macho_signature_start_offset: 16400 / 0x4010 macho_signature_end_offset: 16781 / 0x418d macho_linkedit_end_offset: 22544 / 0x5810 macho_end_offset: 22544 / 0x5810 linkedit_signature_start_offset: 16 / 0x10 linkedit_signature_end_offset: 397 / 0x18d linkedit_bytes_after_signature: 5763 / 0x1683 signature: superblob_length: 381 / 0x17d blob_count: 3 blobs: - slot: CodeDirectory (0) magic: fade0c02 length: 325 sha1: c51f0d3272967beff74e25d1f0caedc9b6ed8229 sha256: 5f7b84f4ce42b6237680fb5a15b7f6a58afe21a5ff73b6e1f1c826835d220d53 - slot: RequirementSet (2) magic: fade0c01 length: 12 sha1: 3a75f6db058529148e14dd7ea1b4729cc09ec973 sha256: 987920904eab650e75788c054aa0b0524e6a80bfc71aa32df8d237a61743f986 - slot: CMS Signature (65536) magic: fade0b01 length: 8 sha1: 2a7254313aa41796079bb0e9d0f044345f69f98b sha256: e6c83bc98a10348492c7d4d2378a54572ef29e1a5692ccd02b5e29f4b762d6a0 code_directory: version: '0x20400' flags: CodeSignatureFlags(ADHOC) identifier: identifier-0 digest_type: sha256 platform: 0 signed_entity_size: 16400 executable_segment_flags: ExecutableSegmentFlags(MAIN_BINARY) code_digests_count: 5 slot_digests: - 'Info (1): 0000000000000000000000000000000000000000000000000000000000000000' - 'RequirementSet (2): 987920904eab650e75788c054aa0b0524e6a80bfc71aa32df8d237a61743f986' cms: null ``` If we force a different identifier, that is used. ``` $ rcodesign sign --binary-identifier identifier-forced exe exe.signed-forced signing exe to exe.signed-forced signing exe as a Mach-O binary parsing Mach-O writing Mach-O to exe.signed-forced $ rcodesign print-signature-info exe.signed-forced - path: exe.signed-forced file_size: 55312 file_sha256: 963cbf89c51423c76cbb06618abbf58a68542780160191dce851592f36a86752 sub_path: macho-index:0 entity: mach_o: macho_linkedit_start_offset: 4096 / 0x1000 macho_signature_start_offset: 4112 / 0x1010 macho_signature_end_offset: 4402 / 0x1132 macho_linkedit_end_offset: 10256 / 0x2810 macho_end_offset: 10256 / 0x2810 linkedit_signature_start_offset: 16 / 0x10 linkedit_signature_end_offset: 306 / 0x132 linkedit_bytes_after_signature: 5854 / 0x16de signature: superblob_length: 290 / 0x122 blob_count: 3 blobs: - slot: CodeDirectory (0) magic: fade0c02 length: 234 sha1: 654c659c27de82e26ca4554bafe9c909b35b2e6a sha256: df10f8609f8116bf1fbbef0654a2e3f898323aee07c3d7475a5cb9fd5bee7e4c - slot: RequirementSet (2) magic: fade0c01 length: 12 sha1: 3a75f6db058529148e14dd7ea1b4729cc09ec973 sha256: 987920904eab650e75788c054aa0b0524e6a80bfc71aa32df8d237a61743f986 - slot: CMS Signature (65536) magic: fade0b01 length: 8 sha1: 2a7254313aa41796079bb0e9d0f044345f69f98b sha256: e6c83bc98a10348492c7d4d2378a54572ef29e1a5692ccd02b5e29f4b762d6a0 code_directory: version: '0x20400' flags: CodeSignatureFlags(ADHOC) identifier: identifier-forced digest_type: sha256 platform: 0 signed_entity_size: 4112 executable_segment_flags: ExecutableSegmentFlags(MAIN_BINARY) code_digests_count: 2 slot_digests: - 'Info (1): 0000000000000000000000000000000000000000000000000000000000000000' - 'RequirementSet (2): 987920904eab650e75788c054aa0b0524e6a80bfc71aa32df8d237a61743f986' cms: null - path: exe.signed-forced file_size: 55312 file_sha256: 963cbf89c51423c76cbb06618abbf58a68542780160191dce851592f36a86752 sub_path: macho-index:1 entity: mach_o: macho_linkedit_start_offset: 16384 / 0x4000 macho_signature_start_offset: 16400 / 0x4010 macho_signature_end_offset: 16786 / 0x4192 macho_linkedit_end_offset: 22544 / 0x5810 macho_end_offset: 22544 / 0x5810 linkedit_signature_start_offset: 16 / 0x10 linkedit_signature_end_offset: 402 / 0x192 linkedit_bytes_after_signature: 5758 / 0x167e signature: superblob_length: 386 / 0x182 blob_count: 3 blobs: - slot: CodeDirectory (0) magic: fade0c02 length: 330 sha1: 2758ec0c44f728a4f53dbcf55b8c43cad4bbbd3b sha256: bc59b9a004b779b671902b1ccefff5d64eccf48cf38eb9aade1ecfdf48dd5a2d - slot: RequirementSet (2) magic: fade0c01 length: 12 sha1: 3a75f6db058529148e14dd7ea1b4729cc09ec973 sha256: 987920904eab650e75788c054aa0b0524e6a80bfc71aa32df8d237a61743f986 - slot: CMS Signature (65536) magic: fade0b01 length: 8 sha1: 2a7254313aa41796079bb0e9d0f044345f69f98b sha256: e6c83bc98a10348492c7d4d2378a54572ef29e1a5692ccd02b5e29f4b762d6a0 code_directory: version: '0x20400' flags: CodeSignatureFlags(ADHOC) identifier: identifier-forced digest_type: sha256 platform: 0 signed_entity_size: 16400 executable_segment_flags: ExecutableSegmentFlags(MAIN_BINARY) code_digests_count: 5 slot_digests: - 'Info (1): 0000000000000000000000000000000000000000000000000000000000000000' - 'RequirementSet (2): 987920904eab650e75788c054aa0b0524e6a80bfc71aa32df8d237a61743f986' cms: null ```