Skip to content

fix(mobile): isolate extension linker flags; complete iOS build in CI - #7187

Merged
brow merged 3 commits into
mainfrom
fix-ios-notification-extension-linking
Sep 1, 2026
Merged

fix(mobile): isolate extension linker flags; complete iOS build in CI#7187
brow merged 3 commits into
mainfrom
fix-ios-notification-extension-linking

Conversation

@brow

@brow brow commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

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 <tomb@block.xyz>
Co-authored-by: Codex <noreply@openai.com>
Ai-assisted: true
@brow

brow commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

@builderbot review

@brow

brow commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown

🔐 Codex Security Review

Status: review required for the current range.

The current range is 4365883151698cd30e31cf4091629543b61c2478...f0a3c7b32503eb188d3e47c133aa0ef25ff18248.
A new review must complete for this exact range. When manual authorization
is required, a Block organization member must comment exactly
@buzz-security-review f0a3c7b32503eb188d3e47c133aa0ef25ff18248 to authorize a new review.
Any previous review applies only to its recorded range.

@brow

brow commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

@buzz-security-review 48089d0

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 48089d025d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread mobile/ios/Runner.xcodeproj/project.pbxproj
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 1, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-01T18:41:40.632963Z f0a3c7b Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions github-actions Bot added the codex-security-review-current The posted Codex security review matches its recorded range. label Sep 1, 2026
Signed-off-by: Tom Brow <tomb@block.xyz>
Co-authored-by: Codex <noreply@openai.com>
Ai-assisted: true
@github-actions github-actions Bot removed the codex-security-review-current The posted Codex security review matches its recorded range. label Sep 1, 2026
@brow

brow commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@brow

brow commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

@builderbot review

@brow

brow commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

@buzz-security-review f5486b4

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f5486b468e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/ci.yml Outdated
Signed-off-by: Tom Brow <tomb@block.xyz>
Co-authored-by: Codex <noreply@openai.com>
Ai-assisted: true
@brow

brow commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@brow

brow commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

@builderbot review

@brow

brow commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

@buzz-security-review f0a3c7b

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Nice work!

Reviewed commit: f0a3c7b325

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@brow
brow marked this pull request as ready for review September 1, 2026 18:39
@brow
brow requested a review from a team as a code owner September 1, 2026 18:39
@brow brow changed the title fix(mobile): isolate notification extension linker flags fix(mobile): isolate extension linker flags; complete iOS builds in CI Sep 1, 2026
@brow brow changed the title fix(mobile): isolate extension linker flags; complete iOS builds in CI fix(mobile): isolate extension linker flags; complete iOS build in CI Sep 1, 2026

@jedwards27 jedwards27 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: APPROVE

Reviewed: bd73490418266f267d9bb3bdf13e64582adc8e80..f0a3c7b32503eb188d3e47c133aa0ef25ff18248 (exact head f0a3c7b32503eb188d3e47c133aa0ef25ff18248)

Risk: medium — iOS target inheritance and CI packaging coverage; a bad setting can break the app extension or strip Runner plugin linkage.

Behavior/contracts traced: NotificationService Debug/Release/Profile base configurations and target overrides; Runner versus extension framework phases; local Swift-package linkage; CocoaPods/Flutter xcconfig inheritance; extension embedding; unsigned device Release CI selection and artifact scope.

Findings: no blocking code defect.

The target-level empty OTHER_LDFLAGS assignments correctly override the shared Flutter xcconfigs only for NotificationService (mobile/ios/Runner.xcodeproj/project.pbxproj:924-997). Runner continues to inherit the configuration-specific CocoaPods linker flags, while both Runner and NotificationService retain explicit BuzzPushKit framework linkage and Runner embeds NotificationService.appex.

The new job is materially stronger than the previous standalone package checks: after Flutter dependency resolution it runs flutter build ios --release --no-codesign --no-pub (.github/workflows/ci.yml:1001-1019), exercising the production device Release graph through CocoaPods, Runner, BuzzPushKit, and the embedded extension.

Author action: none.

Verification owner: release operator for signed archive/export, entitlement reconciliation, installation, and notification-extension invocation.

Validation:

  • Exact-head GitHub Mobile Swift passed: https://github.com/block/buzz/actions/runs/33539643211/job/99974684957. Its log records the device ios-release build, pod install, Xcode build, and Built build/ios/iphoneos/Buzz.app (72.2MB).
  • Independent clean exact-head reproduction of the CI command passed and produced Buzz.app/PlugIns/NotificationService.appex; binary inspection found Runner's Flutter/plugin linkage intact and no Flutter/plugin dylib dependency in NotificationService.
  • Causal clean mutation: removing only the Release override made the same Release build fail on undefined Flutter symbols; restoring it returned a clean exact-head tree. This establishes that the new gate catches the reported RC linker regression rather than compiling a convenient fragment.
  • Local resolved Release settings after pod generation showed Runner retaining non-empty CocoaPods OTHER_LDFLAGS; direct NotificationService settings resolved without inherited linker flags.
  • All exact-head PR checks are green; git diff --check and project plist validation passed in independent review.

Manual/native evidence: unsigned arm64 device build and embedded-binary inspection only; no signed archive, install, launch, APNs delivery, or extension-runtime invocation.

Residual risk: the build gate mutation-proves Release, not Debug/Profile. Those two target assignments are source-reviewed but not independently regression-bound. I classify this as optional hardening rather than an author-actionable defect: Release is the shipping configuration and the configuration implicated by the reported RC failure, and the PR does not claim all-configuration build coverage. A lightweight resolved-settings contract for all three configurations would reduce future Xcode-regeneration risk, but should not block this bounded release repair.

— :bot: Jude’s code review agent

@brow
brow merged commit b270437 into main Sep 1, 2026
68 of 70 checks passed
@brow
brow deleted the fix-ios-notification-extension-linking branch September 1, 2026 19:13
wpfleger96 pushed a commit that referenced this pull request Sep 1, 2026
…enericize

* origin/main:
  fix(desktop): preserve keyring identity during recovery (#7203)
  feat(mobile): prepare `buzz-push-gateway` for deployment (#7158)
  ci: relax file-size ceilings by surface (#6485)
  fix(mobile): isolate extension linker flags; complete iOS build in CI (#7187)
  chore(ci): lower Codex security review effort (#7179)
  fix(dev-mcp): extend shell timeout cap to 20 minutes and align outer budgets (#7185)
  fix(dev): keep the canonical profile when launching from desktop/ (#7143)
  feat(buzz-auth): add production NIP-FI federated assertion runtime (#7109)
  Hide download action on voice notes (#7182)

Signed-off-by: Hayt <9e1c23a3fd83f61da34420e4e88ff1b16e45cafcc0cd9019eb07d4ecfa8ca9b0@buzz.block.builderlab.xyz>
johnmatthewtennant added a commit that referenced this pull request Sep 1, 2026
* origin/main:
  feat(buzz-agent): add DatabricksAuthCoordinator single-flight OAuth (#5545)
  fix(desktop): preserve keyring identity during recovery (#7203)
  feat(mobile): prepare `buzz-push-gateway` for deployment (#7158)
  ci: relax file-size ceilings by surface (#6485)
  fix(mobile): isolate extension linker flags; complete iOS build in CI (#7187)

Signed-off-by: John Tennant <jtennant@squareup.com>

# Conflicts:
#	crates/buzz-db/src/runtime/migration.rs
wpfleger96 pushed a commit that referenced this pull request Sep 1, 2026
…c-agent-commit-identity

* origin/main:
  feat(buzz-agent): add DatabricksAuthCoordinator single-flight OAuth (#5545)
  fix(desktop): preserve keyring identity during recovery (#7203)
  feat(mobile): prepare `buzz-push-gateway` for deployment (#7158)
  ci: relax file-size ceilings by surface (#6485)
  fix(mobile): isolate extension linker flags; complete iOS build in CI (#7187)

Signed-off-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>

# Conflicts:
#	.github/workflows/ci.yml
wpfleger96 pushed a commit that referenced this pull request Sep 1, 2026
* origin/main:
  feat(buzz-agent): add DatabricksAuthCoordinator single-flight OAuth (#5545)
  fix(desktop): preserve keyring identity during recovery (#7203)
  feat(mobile): prepare `buzz-push-gateway` for deployment (#7158)
  ci: relax file-size ceilings by surface (#6485)
  fix(mobile): isolate extension linker flags; complete iOS build in CI (#7187)
  chore(ci): lower Codex security review effort (#7179)
  fix(dev-mcp): extend shell timeout cap to 20 minutes and align outer budgets (#7185)
  fix(dev): keep the canonical profile when launching from desktop/ (#7143)
  feat(buzz-auth): add production NIP-FI federated assertion runtime (#7109)
  Hide download action on voice notes (#7182)
  ci: run PostgreSQL tests in isolated lane (#6730)
  Add voice notes to desktop messages (#6978)

Signed-off-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
delkc added a commit that referenced this pull request Sep 1, 2026
…rding-v3

* origin/main:
  feat(buzz-agent): add DatabricksAuthCoordinator single-flight OAuth (#5545)
  fix(desktop): preserve keyring identity during recovery (#7203)
  feat(mobile): prepare `buzz-push-gateway` for deployment (#7158)
  ci: relax file-size ceilings by surface (#6485)
  fix(mobile): isolate extension linker flags; complete iOS build in CI (#7187)
  chore(ci): lower Codex security review effort (#7179)
  fix(dev-mcp): extend shell timeout cap to 20 minutes and align outer budgets (#7185)
  fix(dev): keep the canonical profile when launching from desktop/ (#7143)
  feat(buzz-auth): add production NIP-FI federated assertion runtime (#7109)
  Hide download action on voice notes (#7182)
  ci: run PostgreSQL tests in isolated lane (#6730)
  Add voice notes to desktop messages (#6978)

Signed-off-by: Clay Delk <clay.delk@gmail.com>
wpfleger96 pushed a commit that referenced this pull request Sep 1, 2026
…agent-edit

* origin/main:
  feat(buzz-agent): add DatabricksAuthCoordinator single-flight OAuth (#5545)
  fix(desktop): preserve keyring identity during recovery (#7203)
  feat(mobile): prepare `buzz-push-gateway` for deployment (#7158)
  ci: relax file-size ceilings by surface (#6485)
  fix(mobile): isolate extension linker flags; complete iOS build in CI (#7187)
  chore(ci): lower Codex security review effort (#7179)
  fix(dev-mcp): extend shell timeout cap to 20 minutes and align outer budgets (#7185)
  fix(dev): keep the canonical profile when launching from desktop/ (#7143)
  feat(buzz-auth): add production NIP-FI federated assertion runtime (#7109)
  Hide download action on voice notes (#7182)

Signed-off-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>

# Conflicts:
#	desktop/src/features/agents/AGENTS.md
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