Repository navigation
fix(ios): pick upstream Xcode 27 archive fixes (NSE linker flags, pod deployment floor, C secp256k1) - #199
Merged
Conversation
RossHartmann
force-pushed
the
fix/ios-xcode27-archive
branch
from
October 16, 2026 21:22
bf70db9 to
0bba0d5
Compare
RossHartmann
force-pushed
the
fix/ios-xcode27-archive
branch
from
October 16, 2026 22:41
0bba0d5 to
5e166f2
Compare
…block#7187) ### What changed? Clear inherited linker flags on the NotificationService target in Debug, Release, and Profile. The extension continues to link BuzzPushKit through its target framework phase, while Runner retains its CocoaPods plugin flags. Extend the macOS mobile CI lane to install Flutter dependencies and build the complete unsigned iOS Release app. This exercises the production Flutter, CocoaPods, Runner, BuzzPushKit, and NotificationService build graph on every mobile change. ### Why? The iOS 0.16 RC archive exposed that NotificationService inherits Runner-only CocoaPods linker flags through the shared Flutter xcconfig. That made the extension link Flutter plugins without the Flutter engine and fail on unresolved Flutter symbols. The previous CI coverage built only the standalone BuzzPushKit package, so it could not detect an app or extension linker regression. ### How is it tested? - A complete unsigned Release build of the Runner scheme succeeded with Xcode and linked, embedded, and validated `NotificationService.appex`. - The new GitHub Actions lane builds the full unsigned iOS Release app with `flutter build ios --release --no-codesign --no-pub`. - Pre-commit and pre-push hooks passed. --------- Signed-off-by: Tom Brow <[email protected]> Co-authored-by: Codex <[email protected]> (cherry picked from commit b270437) Signed-off-by: Ross Hartmann <[email protected]>
) Xcode 27 rejects generated CocoaPods targets with deployment versions below iOS 15, even though the app already requires iOS 16. Raise lower explicit pod deployment targets to the existing iOS 16 minimum during installation, preserving targets that require a newer version. On main at 7852b16, the ordinary unsigned Release build with exact Xcode 27.0 failed on pod targets set to iOS 9–13. After this change and a normal pod install, none of the 189 generated build configurations specifies a target below iOS 16, and the same build passes deployment-target validation without a command-line override. The full build remains blocked by the independent swift-secp256k1 0.21.1 `UInt256.words` compiler ambiguity. This PR does not fix or change that dependency. Xcode pin [buzz-releases#110](squareup/buzz-releases#110) remains gated on a complete ordinary release build and its other prerequisites. Related: Wes’s [PR block#8330](block#8330) independently includes a similar Podfile fix alongside DeviceHub changes. This PR contains only the Podfile floor and its lockfile checksum. Full local `just ci` passed; focused iOS validation above is complete. The regenerated lockfile changes only the Podfile checksum; `pod install --deployment` succeeds with CocoaPods 1.16.2. --------- Signed-off-by: Tom Brow <[email protected]> (cherry picked from commit 46159fc) Signed-off-by: Ross Hartmann <[email protected]>
Replace the Swift secp256k1 wrapper with a small native adapter over Bitcoin Core libsecp256k1. This is an alternative to the wrapper upgrade in [block#8381](block#8381), not an additional change to merge alongside it. The adapter covers the three Nostr operations Buzz needs: x-only public-key derivation, BIP-340 signing, and signature verification. It compiles pinned, unmodified upstream C source through SwiftPM. There is no build plugin, plugin approval script, or underscored Swift import. The app and notification extension use an explicit C module map and header search path. This trades the third-party Swift wrapper for a Buzz-owned adapter and responsibility for updating the vendored C source. Upstream v0.8.0 source, its license, and update provenance are included. The release Xcode pin remains separate in [buzz-releases#110](squareup/buzz-releases#110). - Native package tests passed on Xcode 27.0 and 26.5: 96 XCTest tests and 65 Swift Testing tests per toolchain. - Added tests cover the official BIP-340 vectors for 32-byte Nostr messages, invalid secret keys, and malformed input lengths. - Full unsigned Release app and notification extension build passed on exact Xcode 27.0. - Vendored files were compared byte-for-byte with upstream v0.8.0. - Full local `just ci` passed. - [Hosted full unsigned iOS Release build](https://github.com/block/buzz/actions/runs/38924020583/job/117051237094) passed. [Hosted Native Swift validation](https://github.com/block/buzz/actions/runs/38924020583/job/117051237153) passed, including the complete simulator build and native controls/push navigation tests. - Codex code review and security review completed with no findings. - [x] Tom selected the direct-C approach with vendored upstream source; [the wrapper alternative](block#8381) is closed. Signed-off-by: Tom Brow <[email protected]> (cherry picked from commit 7396243) Signed-off-by: Ross Hartmann <[email protected]>
Inventory delta (drop/upstream-present) for the picked b270437, 46159fc and 7396243 paths, and an amendment for five newly modified upstream files (262 -> 267). Co-Authored-By: Claude Opus 5.5 <[email protected]> Signed-off-by: Ross Hartmann <[email protected]>
Fork runners refuse jobs whose workflow differs from main (public_workflow_not_current), so the b270437 CI lane change is not taken. Co-Authored-By: Claude Opus 5.5 <[email protected]> Signed-off-by: Ross Hartmann <[email protected]>
RossHartmann
force-pushed
the
fix/ios-xcode27-archive
branch
from
October 16, 2026 23:52
5e166f2 to
1b489cd
Compare
RossHartmann
pushed a commit
that referenced
this pull request
Oct 17, 2026
…am-60de1db0 Conflict resolutions: - iOS Xcode 27 picks (#199) and the block#7745 backport (#208) are upstream commits already in the 97e1f6a snapshot: take the sync side for every #199 path and drop both drop/upstream-present deltas. - deny.toml: keep upstream's ignores and main's RUSTSEC-2026-0367/0368/0369; the sync tree pulls zip 8.6.0 via mesh-llm v0.76.2, re-audited: plugin manager and autoupdate still never call extract() and write plain files. - Message Details (#205): desktop composes the host ref with the right-click root ref; mobile adds Details to upstream's grouped action sheet (the popover was removed upstream in block#8280) with a Tabler info-circle icon; retired-notice filtering passes agentPubkeys at upstream's new formatTimeline call sites. - Hosted agents (#201): Lucide icons -> BuzzIcons (lucide removed upstream). - Inventory: sync inventory plus main's new deltas (remote signer, guest alert Review, Message Details) and the merged hosted-agents delta paths. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This picks three upstream fixes so the first Kiingo TestFlight archive can build with Xcode 27.0, the only Xcode on the release Mac. Each was flagged in the mobile agent's upstream-sync risk analysis.
OTHER_LDFLAGS = ""in all three configs, so the extension stops inheriting Runner's CocoaPods plugin linker flags. Without this, the Release archive fails to link.ci.ymlchange is not taken, because fork runners refuse a workflow that differs from main (public_workflow_not_current).post_installraises generated pod deployment targets below iOS 16 to 16, because Xcode 27 rejects targets below iOS 15.PODFILE CHECKSUMis recomputed as the SHA-1 of the fork's Podfile, which is how CocoaPods computes it.UInt256.wordsambiguity), with vendored, unmodified Bitcoin Core libsecp256k1 v0.8.0 behind a smallNostrSchnorradapter.Package.resolvedis removed because no remote Swift package remains.Validation: on this Mac,
swift build --build-testsfor BuzzPushKit on Xcode 27.0 completes. This compiles the package and its tests but runs nothing. The full Runner and NSE link is checked at the first archive. Fork CI does not build iOS.Fork inventory: a
drop/upstream-presentdelta for the 139 picked paths, plus an amendment taking modified upstream files from 262 to 267. Production-source budgets are unchanged.🤖 Generated with Claude Code