Skip to content

Release: 2.26.1#158

Closed
uc-brunosilva wants to merge 34 commits intomasterfrom
bump/2.26.1
Closed

Release: 2.26.1#158
uc-brunosilva wants to merge 34 commits intomasterfrom
bump/2.26.1

Conversation

@uc-brunosilva
Copy link
Copy Markdown
Contributor

Release 2.26.1

Features

  • Added support for US National (GPP) privacy framework
  • Extended GPP API to Flutter, React Native and Unity bridges
  • Exposed DPS metadata via new getDpsMetadata() API
  • TCF resurfacing period now configurable via Admin UI (1–13 months)

Fixes

  • Fixed TCF resurfacing period logic
  • Fixed stored information not shown on DPS details
  • Fixed TCF maintain legitimate interest logic on Deny All
  • Fixed Android nullable type mismatch in setGPPConsent
  • Fixed iOS Swift closure return type in GppData+Dict

🤖 Generated with Claude Code

@uc-brunosilva
Copy link
Copy Markdown
Contributor Author

Code Review: PR #158 "Release: 2.26.1"

Target: PR #158 "Release: 2.26.1"
Files reviewed: 12
Verdict: No issues found


CI Validation

Check Command Status
Lint/Analyze flutter analyze PASS
Format dart format --line-length=80 --set-exit-if-changed . PASS — 0 changed
Tests flutter test PASS — 64 passed

No issues found on AI review by uc-code-review plugin using Claude Code.

@uc-brunosilva
Copy link
Copy Markdown
Contributor Author

Code Review: PR #158 — bump/2.26.1

Target: PR #158 `bump/2.26.1`
Files reviewed: 13
Verdict: Suggestion


CI Validation

Check Command Status
Lint / Analyze `flutter analyze` PASS
Tests Not configured

Issues

# Title Type Where Severity
1 `pod repo update` adds significant CI runtime overhead Architecture `.github/workflows/ci.yml:188` suggestion

1. `pod repo update` adds significant CI runtime overhead

Type: Architecture | Severity: suggestion | Where: `.github/workflows/ci.yml:188`

`pod repo update` performs a full sync of the CocoaPods spec repository, which typically adds 5–10 minutes to every CI run. This is a blunt fix for a CDN cache staleness issue that is specific to the 2.26.1 release window — once the CDN propagates fully, the step becomes permanently wasteful overhead on every future build.

A targeted alternative is to use `pod install --repo-update` only on the `flutter build` step, or to scope the workaround to a time-limited flag that can be removed after the CDN settles. If the CDN issue is already resolved, remove this step.

# Option A: remove the step once CDN has propagated (preferred)
# Delete the "Update CocoaPods repo" step entirely.

# Option B: if the update is still needed, scope it to pod install only
- name: Build
  working-directory: ./example
  run: flutter build ios --debug --no-codesign --simulator
# and replace pod repo update with:
- name: Pod install with repo update
  working-directory: ./example/ios
  run: pod install --repo-update

Reviewed by uc-code-review plugin using Claude Code.

uc-brunosilva and others added 23 commits April 6, 2026 18:16
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
FlutterImplicitEngineDelegate/FlutterImplicitEngineBridge require Flutter 3.27+,
which is not compatible with the CI Flutter version (3.22.3).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
New method added in 2.26.1 must be overridden in the KMP subclass
to prevent SIGSEGV during test bootstrap.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…mulator

SDK 2.26.1 KMP classes trigger SIGSEGV when subclassed on iOS 17.5 (Xcode 15.4).
Tests pass on iOS 18.2 (Xcode 16+). Upgrade CI environment to resolve the crash.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
macOS 15 runner with Xcode 16.2 requires explicit OS version in destination.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
iOS 18.2 runtime is not pre-installed on the macOS 15 runner.
Use OS=latest to pick whatever iOS version is available.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
macOS-15 runner with Xcode 16.2 only has iOS 16.x and 17.x runtimes
pre-installed. OS=latest was selecting iOS 26.2 beta which has no
runtime, causing actool to fail. iPhone 15 Pro + iOS 17.4 uses the
available 23C54 runtime.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
macos-15 runner has no simulator runtimes pre-installed (only placeholder
destinations available). macos-14 comes with Xcode 16.1 bundled with iOS 18.1
simulator runtime. Using Xcode 16.x avoids the KMP SIGSEGV that was
reproducible on Xcode 15.4 + iOS 17.5.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
macos-14 runner with Xcode 16.1 has no iPhone simulator runtimes
pre-installed, but does have iPad (10th generation) with iOS 18.2.
Using that instead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
SIGSEGV happens with Xcode 16.1 + iOS 18.1 too. Tests pass locally with
Xcode 16.2 + iOS 18.2. macos-14 has both Xcode 16.2 and iPad (10th gen)
iOS 18.2 simulator available.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
SIGSEGV happens consistently on macos-14 iOS simulator across all Xcode
versions (15.4, 16.1, 16.2). Both runners (macos-14 and macos-15) expose
a macOS arm64 'Designed for [iPad,iPhone]' destination. This runs the iOS
binary natively on macOS, bypassing the simulator runtime entirely and the
KMP 2.26.1 initialization crash.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Brackets in 'Designed for [iPad,iPhone]' are parsed as comma separators
by xcodebuild. Use 'platform=macOS,name=My Mac' which matches the same
destination unambiguously.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
SIGSEGV on iOS simulator is macOS 14 specific - KMP 2.26.1 requires
macOS 15. macos-15 has no simulator runtimes pre-installed so we
explicitly download them with xcodebuild -downloadPlatform iOS.
Timeout increased to 45min to accommodate the download.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
xcodebuild -downloadPlatform iOS requires the simulator service running
and fails in CI. iOS 18.2 runtime is bundled inside Xcode 16.2 at
iPhoneSimulator.platform/Library/.../Runtimes/iOS.simruntime — register
it directly with xcrun simctl runtime add.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…mulator

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…nner

Xcode 16.2 SDK resolves OS:latest to iOS 18.2 but macos-15 runner has
iOS 18.5 and 18.6 pre-installed (not 18.2). iPhone 16 Pro + iOS 18.5
is already created on the runner — no setup step needed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Xcode 16.2 actool does not recognize iOS 18.5 simulator runtimes due to a SDK version mismatch. Using latest-stable Xcode ensures the SDK matches the pre-installed iOS 18.5 runtime. Removing the OS pin from the destination makes the test resilient to future runner changes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Reverts back to the stable config used in master (macos-14, Xcode 15.4,
iPhone 15 Pro) to fix the simulator runtime mismatch introduced by
the bump/2.26.1 migration to macos-15.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…or 2.26.1

Override getGPPData, getGPPString, setGPPConsent (MSDK-3160) and the updated
denyAllForTCF signature with unsavedVendorLIDecisions (MSDK-3297) to prevent
SIGSEGV crash before test suite bootstrap.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ramework

The published 2.26.1 binary exposes denyAllForTCF with 3 parameters only.
The 4-param override (unsavedVendorLIDecisions) compiled as a new method
instead of an override, leaving the abstract 3-param method unimplemented
and causing SIGSEGV at test bootstrap.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
uc-brunosilva and others added 6 commits April 6, 2026 22:46
KMP-generated ObjC classes require every method to be overridden in Swift
subclasses — any unimplemented vtable slot causes SIGSEGV at instantiation.
Added stubs for all 14 methods missing from FakeUsercentricsSDK, including
methods that pre-date 2.26.1 but were not previously triggering crashes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- getDpsMetadata(templateId:) — new in MSDK-3172
- denyAllForTCF with unsavedVendorLIDecisions — MSDK-3297

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- TCF2Settings: rename resurfacePeriodEnded (Bool) → resurfacePeriod (Int) in Dart model, serializers, and test mocks
- UsercentricsSettings: add gppSignalingEnabled and gpcSignalHonoured fields (Dart model + serializers, iOS Swift, Android Kotlin)
- CCPASettings: add mspaCoveredTransaction and mspaMode fields + MspaMode enum (Dart model + serializers, iOS Swift, Android Kotlin)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@rodrigo-leal-usercentrics rodrigo-leal-usercentrics deleted the bump/2.26.1 branch April 7, 2026 09:18
@uc-brunosilva uc-brunosilva restored the bump/2.26.1 branch April 7, 2026 09:21
@rodrigo-leal-usercentrics rodrigo-leal-usercentrics deleted the bump/2.26.1 branch April 7, 2026 09:22
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