Skip to content

chore(ci): Sign XCFrameworks with OneSignal identity and improve manifest updates#1676

Open
nan-li wants to merge 3 commits into
mainfrom
fix/release-pipeline-signing-and-spm
Open

chore(ci): Sign XCFrameworks with OneSignal identity and improve manifest updates#1676
nan-li wants to merge 3 commits into
mainfrom
fix/release-pipeline-signing-and-spm

Conversation

@nan-li

@nan-li nan-li commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Description

One Line Summary

Make the release pipeline robust: archive XCFrameworks unsigned and sign them with the OneSignal identity, verify the signatures, and update Package.swift by target name instead of line number.

Details

Motivation

The release workflow had brittle spots that caused repeated release failures:

  • The archive step required a developer signing certificate that isn't reliably present, so the build failed to archive.
  • Package.swift was edited by hardcoded line numbers. When unrelated lines shifted, the generator overwrote binary-target boundaries and produced an unparseable manifest, breaking Swift Package Manager consumers.

This makes each step self-healing so releases stop breaking.

Scope

Release tooling only — no SDK runtime code or public API changes.

  • build_all_frameworks.sh: archive with code signing disabled (no developer cert / team needed).
  • create-release-prs.yml: sign every framework slice and wrapper with the OneSignal Apple Distribution identity; add a verification step that fails the release if anything is unsigned or signed by the wrong identity; drop the unused dev-cert import. The framework list lives in one shared env var.
  • update_swift_package.sh: locate each binary target by framework name and rewrite its url version + checksum in place, with fail-loud guards so a malformed manifest errors instead of silently corrupting.

Testing

Manual testing

Validated the scripts locally against the real manifest: signing produces frameworks that pass codesign --verify under the OneSignal identity; the manifest generator reproduces a known-good Package.swift byte-for-byte and fails loudly on malformed/misordered input instead of corrupting it.

nan-li and others added 3 commits June 10, 2026 23:11
…nsigned

Archive with code signing disabled so the build needs no developer
certificate, then sign each inner slice and the wrapper with the OneSignal
Apple Distribution identity. Move the framework list into one shared env var
and drop the unused dev-cert import.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Run codesign --verify on every slice and wrapper and assert the OneSignal
signer, so a missed slice or wrong identity fails the release.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Editing by hardcoded line numbers silently corrupted the manifest whenever
unrelated lines shifted. Locate each binary target by its framework name and
rewrite the url version plus the checksum on the line immediately after it,
so a reordered or renamed checksum line can't overwrite a neighbour. Require
a version argument and fail loudly on any mismatch rather than corrupting the
manifest silently.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@nan-li nan-li self-assigned this Jun 11, 2026
@nan-li nan-li requested a review from a team June 11, 2026 06:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants