fix(m9): ad-hoc sign embedded ICCeryCore framework so test host launches (#119) #120

Merged
gronod merged 1 commits from feat/119-debug-disable-lib-validation into milestone/m9-monterey 2026-09-12 09:30:55 +01:00
Owner

Closes #119.

Run 31992 crashed the test host at launch: the dynamically-linked ICCeryCore package framework embedded in ICCery.app is unsigned, and dyld on macOS 12 requires every loaded dylib to carry at least an ad-hoc cdhash (mapped file has no cdhash, completely unsigned?). Run 32003 then showed that forcing the product .static fails on Xcode 14.2 — a static package product cannot be shared between the app and its hosted ICCeryCoreTests bundle.

Changes:

  • Packages/ICCeryCore/Package.swift — revert .static back to automatic linkage.
  • project.ymlDISABLE_LIBRARY_VALIDATION: YES on the ICCery target's Debug config only (belt-and-suspenders; Xcode already disables hardened runtime for ad-hoc signing).
  • .gitea/workflows/macos.yml — new Sign package product frameworks step between build-for-testing and the test steps that ad-hoc-signs every *_PackageProduct.framework in the derived-data products (app copy, xctest copy, PackageFrameworks source). Signing inside a build-script phase does not work: the embed copy step runs after script phases and strips signatures.

Verified locally on Xcode 16.2: build-for-testing + test-without-building launches the test host and all 339 ICCeryCoreTests pass. Release packaging unaffected — the package job builds only the app target (static link) and signs with Developer ID.

Closes #119. Run 31992 crashed the test host at launch: the dynamically-linked `ICCeryCore` package framework embedded in `ICCery.app` is unsigned, and dyld on macOS 12 requires every loaded dylib to carry at least an ad-hoc cdhash (`mapped file has no cdhash, completely unsigned?`). Run 32003 then showed that forcing the product `.static` fails on Xcode 14.2 — a static package product cannot be shared between the app and its hosted `ICCeryCoreTests` bundle. Changes: - `Packages/ICCeryCore/Package.swift` — revert `.static` back to automatic linkage. - `project.yml` — `DISABLE_LIBRARY_VALIDATION: YES` on the ICCery target's Debug config only (belt-and-suspenders; Xcode already disables hardened runtime for ad-hoc signing). - `.gitea/workflows/macos.yml` — new `Sign package product frameworks` step between build-for-testing and the test steps that ad-hoc-signs every `*_PackageProduct.framework` in the derived-data products (app copy, xctest copy, PackageFrameworks source). Signing inside a build-script phase does not work: the embed copy step runs after script phases and strips signatures. Verified locally on Xcode 16.2: `build-for-testing` + `test-without-building` launches the test host and all 339 `ICCeryCoreTests` pass. Release packaging unaffected — the package job builds only the app target (static link) and signs with Developer ID.
gronod added the
Priority
Critical
1
Project/ICCery-v2Bug/Architecture
labels 2026-09-12 09:29:55 +01:00
gronod added 1 commit 2026-09-12 09:29:56 +01:00
gronod merged commit ed7487c2b6 into milestone/m9-monterey 2026-09-12 09:30:55 +01:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gronod/iccery-v2-mac#120