Skip to content

Release: 2.26.1#198

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

Release: 2.26.1#198
uc-brunosilva wants to merge 2 commits intomasterfrom
release/2.26.1-bump

Conversation

@uc-brunosilva
Copy link
Copy Markdown
Collaborator

@uc-brunosilva uc-brunosilva commented Apr 6, 2026

User description

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


CodeAnt-AI Description

Release 2.26.1 adds GPP privacy support and fixes consent handling issues

What Changed

  • Added support for the US National privacy framework and extended GPP support in Flutter, React Native, and Unity
  • Exposed DPS metadata and made the TCF resurfacing period configurable in Admin UI
  • Fixed resurfacing timing, missing DPS stored information, and Deny All behavior for legitimate interest
  • Fixed platform issues that could block GPP consent updates on Android and cause iOS bridge errors

Impact

✅ Wider privacy framework support
✅ Clearer consent and DPS details
✅ Fewer consent update failures

💡 Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.

Summary by CodeRabbit

  • New Features

    • Added US National (GPP) framework support
    • Extended GPP API compatibility for Flutter, React Native, and Unity
    • Exposed DPS metadata via getDpsMetadata()
    • Made TCF resurfacing period configurable in Admin UI (1–13 months)
  • Bug Fixes

    • Fixed TCF resurfacing period logic
    • Corrected stored information visibility on DPS details
    • Adjusted TCF legitimate interest behavior on "Deny All"

uc-brunosilva and others added 2 commits April 6, 2026 17:39
…pe in GPP

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@codeant-ai
Copy link
Copy Markdown

codeant-ai bot commented Apr 6, 2026

CodeAnt AI is reviewing your PR.


Thanks for using CodeAnt! 🎉

We're free for open-source projects. if you're enjoying it, help us grow by sharing.

Share on X ·
Reddit ·
LinkedIn

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 6, 2026

📝 Walkthrough

Walkthrough

This PR bumps the package version from 2.25.1 to 2.26.1 across multiple configuration and build files, updates the changelog with new features and fixes, adds null-check logic in the GPP consent method, and adds an explicit type annotation in iOS code.

Changes

Cohort / File(s) Summary
Version & Release Metadata
CHANGELOG.md, package.json, android/build-legacy.gradle, android/build.gradle.kts
Version bumped from 2.25.1 to 2.26.1; changelog updated with GPP framework support, API extensions, DPS metadata, and TCF resurfacing fixes.
Android Module Logic
android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModule.kt
Added null check to abort setGPPConsent invocation when parsedValue is null, preventing unnecessary SDK calls.
iOS Type Annotation
ios/Extensions/GppData+Dict.swift
Added explicit Any return type annotation to array-mapping closure in bridgeValue(_:) method.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

  • Release: 2.25.1 #188: Modifies same release files (CHANGELOG.md, package.json) and Gradle version constants for analogous version-bump/release changes.
  • Release: 2.24.4 #181: Performs the same kind of release/version bump across identical files.
  • Release: 2.23.3 #162: Performs release-version bumps and updates the same build variables and package.json version fields.

Suggested labels

Review effort 1/5, size:S

Suggested reviewers

  • uc-brunosouza
  • islameldesoky95
  • rodrigo-leal-usercentrics

Poem

🐰 A version bump hops along with glee,
From 2.25 to 2.26, now we're free!
GPP frameworks dance, null checks align,
Type annotations sparkle, oh so fine—
Release notes flutter, the SDK's at peace! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Release: 2.26.1' directly reflects the main purpose of the pull request, which is to bump and release version 2.26.1 across all package files and SDKs.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/2.26.1-bump

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@qodo-code-review
Copy link
Copy Markdown

Review Summary by Qodo

Release 2.26.1 with GPP support and type fixes

✨ Enhancement 🐞 Bug fix

Grey Divider

Walkthroughs

Description
• Release version 2.26.1 with GPP privacy framework support
• Fixed Android nullable type mismatch in setGPPConsent method
• Fixed iOS Swift closure return type annotation in GppData+Dict
• Updated version numbers across build and package files
Diagram
flowchart LR
  A["Version Bump<br/>2.25.1 → 2.26.1"] --> B["Android Fix<br/>setGPPConsent null handling"]
  A --> C["iOS Fix<br/>Closure return type"]
  A --> D["Documentation<br/>CHANGELOG update"]
  B --> E["Release 2.26.1"]
  C --> E
  D --> E
Loading

Grey Divider

File Changes

1. android/build.gradle.kts ⚙️ Configuration changes +1/-1

Update Android build version

• Updated Usercentrics version from 2.25.1 to 2.26.1

android/build.gradle.kts


2. android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModule.kt 🐞 Bug fix +1/-0

Fix Android nullable type in setGPPConsent

• Added null check guard clause after parsing GPP consent value
• Prevents passing null values to setGPPConsent when value is explicitly null
• Fixes nullable type mismatch issue in Android implementation

android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModule.kt


3. ios/Extensions/GppData+Dict.swift 🐞 Bug fix +1/-1

Fix iOS closure return type annotation

• Added explicit return type annotation -> Any to nested map closure
• Resolves Swift closure return type inference issue
• Improves type safety in dictionary bridging logic

ios/Extensions/GppData+Dict.swift


View more (2)
4. CHANGELOG.md 📝 Documentation +11/-0

Add 2.26.1 release notes to changelog

• Added release notes for version 2.26.1 dated Apr 07, 2026
• Documented features including GPP framework support and DPS metadata API
• Listed bug fixes for TCF resurfacing, DPS details, and legitimate interest logic

CHANGELOG.md


5. package.json ⚙️ Configuration changes +2/-2

Update package version numbers

• Updated package version from 2.25.1 to 2.26.1
• Updated iOS package version from 2.25.1 to 2.26.1

package.json


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown

qodo-code-review bot commented Apr 6, 2026

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (0) 📎 Requirement gaps (0) 🎨 UX Issues (0)

Grey Divider


Action required

1. Null GPP consent ignored 🐞 Bug ≡ Correctness
Description
RNUsercentricsModule.setGPPConsent returns early when the incoming React Native value is null,
so Android silently no-ops instead of forwarding a "clear/unset" operation. iOS forwards NSNull
for the same case, so this PR introduces cross-platform behavior divergence for the same JS API
call.
Code

android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModule.kt[R155-159]

        } else {
            readableMapValueToAny(value)
        }
+        parsedValue ?: return
        usercentricsProxy.instance.setGPPConsent(sectionName, fieldName, parsedValue)
Evidence
On Android, parsedValue is set to null when the RN map contains a null value, and the
newly-added parsedValue ?: return short-circuits the call, making setGPPConsent(..., null) a
silent no-op. The JS wrapper accepts value: unknown and forwards it unconditionally (so null can
reach native), while iOS explicitly forwards a null sentinel (NSNull) to the native manager,
indicating that null is intended to be representable over the bridge.

android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModule.kt[151-160]
src/Usercentrics.tsx[156-159]
ios/RNUsercentricsModule.swift[153-156]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
Android `setGPPConsent` currently returns early when `{ value: null }` is received, silently skipping the call. This prevents clearing/unsetting consent fields and diverges from iOS behavior (which forwards `NSNull`).

### Issue Context
The JS API accepts `value: unknown` and forwards `{ value }` without filtering, so `null` is a valid input that can reach native.

### Fix Focus Areas
- android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModule.kt[151-160]
- android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModule.kt[291-301]

### Suggested change (concept)
- Remove the early return on `null`.
- Instead, forward an explicit null sentinel object (e.g., `org.json.JSONObject.NULL`) when the RN value is `ReadableType.Null`, so the underlying SDK receives a value and can interpret it as "clear" (mirroring iOS’s `NSNull`).
- Keep the existing `!value.hasKey("value")` guard for truly missing values.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

@codeant-ai codeant-ai bot added the size:S This PR changes 10-29 lines, ignoring generated files label Apr 6, 2026
@pantoaibot
Copy link
Copy Markdown

pantoaibot bot commented Apr 6, 2026

PR Summary:

Release 2.26.1: Adds GPP/US National support and new APIs, fixes TCF/DPS bugs, and bumps package/version metadata.

  • Changelog updated with 2.26.1 notes (features: US National GPP support, extended GPP API to Flutter/React Native/Unity, new getDpsMetadata(); fixes: TCF resurfacing logic, DPS details display, TCF legitimate interest on Deny All).
  • Version bumps: android/build-legacy.gradle and android/build.gradle.kts usercentrics version -> 2.26.1; package.json version and iosPackageVersion -> 2.26.1.
  • React Native Android module (RNUsercentricsModule.kt): added/expanded GPP-related methods (getGPPData, getGPPString, setGPPConsent) and defensive check to avoid passing null parsedValue to setGPPConsent.
  • iOS bridging (GppData+Dict.swift): minor change to array mapping closure signature (explicit return type) to ensure correct bridging of nested arrays/dictionaries.
  • No breaking API removals; primarily additive APIs and bugfixes.

Reviewed by Panto AI

@pantoaibot
Copy link
Copy Markdown

pantoaibot bot commented Apr 6, 2026

Reviewed up to commit:b1b53a67dfe8e09cd5838167af4f5b0df6f7c4e9

Reviewed by Panto AI


Few more points:

  • [CRITICAL_BUG] You changed behavior so that when the incoming ReadableMap contains a JSON null (ReadableType.Null) the Android implementation simply returns (no-op) instead of forwarding a null-equivalent to the native manager. This creates an inconsistent cross-platform contract: iOS maps missing/null to NSNull and forwards it to usercentricsManager.setGPPConsent (see ios/RNUsercentricsModule.swift lines ~146-150). The current change can silently drop valid "set to null" operations and diverge behavior between iOS and Android.

Recommendations (pick one and implement consistently):

  1. Make the native API accept a nullable value and forward nulls explicitly: change the bridge/spec + manager signature to accept a nullable Any? and forward nulls instead of returning early. Update RNUsercentricsModuleSpec and the Kotlin manager proxy to setGPPConsent(sectionName: String, fieldName: String, value: Any?).
  2. If the native manager cannot accept null, explicitly translate JS null -> a sentinel (e.g. JSONObject.NULL or a specific marker) and document that behavior across platforms.

Also update the codegen / RN interface (RNUsercentricsModuleSpec and TypeScript types) so the contract is clear. Add a focused unit/integration test that calls setGPPConsent with { value: null } from JS and asserts the native manager receives the intended null/sentinel value. Reference: android RN implementation in this PR (new lines ~151-159) and existing reference iOS bridge: ios/RNUsercentricsModule.swift lines 138-170 and RNUsercentricsModuleSpec.kt declaration lines 58-88.

@ReactMethod
override fun setGPPConsent(sectionName: String, fieldName: String, value: ReadableMap) {
    if (!value.hasKey("value")) {
        // Option A: forward explicit null for missing key to stay aligned with iOS NSNull()
        usercentricsProxy.instance.setGPPConsent(sectionName, fieldName, null)
        return
    }

    val parsedValue: Any? = when (value.getType("value")) {
        ReadableType.Null -> null
        else -> readableMapValueToAny(value.getMap("value") ?: value)
    }

    // Forward nullable value explicitly instead of early-returning
    usercentricsProxy.instance.setGPPConsent(sectionName, fieldName, parsedValue)
}

And update the spec / TS types to allow null:

// RNUsercentricsModuleSpec.kt
@ReactMethod
abstract fun setGPPConsent(sectionName: String, fieldName: String, value: ReadableMap)
// src/fabric/NativeUsercentricsModule.ts
setGPPConsent(sectionName: string, fieldName: string, value: { value: unknown | null }): void;

// src/NativeUsercentrics.ts
setGPPConsent(sectionName: string, fieldName: string, value: unknown | null): void;

@codeant-ai
Copy link
Copy Markdown

codeant-ai bot commented Apr 6, 2026

CodeAnt AI finished reviewing your PR.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModule.kt (1)

151-160: ⚠️ Potential issue | 🟠 Major

Cross-platform inconsistency: Android silently drops null values while iOS forwards them to SDK.

The Android implementation returns early when parsedValue is null (line 158), preventing the SDK call entirely. The iOS implementation (ios/RNUsercentricsModule.swift:153-156) uses value["value"] ?? NSNull() and always invokes the SDK method, passing NSNull() when the value is nil.

This creates different behavior:

  • Android: Null values are silently ignored; SDK method is never called
  • iOS: NSNull() is passed to the SDK; the call proceeds

Align the implementations to ensure consistent behavior across platforms. Either both should return early for null, or both should forward null (or NSNull()) to the SDK.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModule.kt`
around lines 151 - 160, The Android method setGPPConsent currently returns early
when the "value" is missing or parsedValue is null, causing it to drop nulls
unlike iOS; change it to always call usercentricsProxy.instance.setGPPConsent
and pass a nullable value so nulls are forwarded to the SDK. Concretely: in
RNUsercentricsModule.setGPPConsent, stop returning early on missing "value" or
when readableMapValueToAny returns null; compute parsedValue as nullable (use
readableMapValueToAny when key exists, otherwise null) and always invoke
usercentricsProxy.instance.setGPPConsent(sectionName, fieldName, parsedValue) so
the SDK receives nulls just like iOS.
🧹 Nitpick comments (1)
package.json (1)

50-51: Minor: Inconsistent version pinning for CLI platform packages.

These two packages use exact versions (18.0.0) while other devDependencies including @react-native-community/cli on line 49 use caret ranges (^18.0.0). Consider using ^18.0.0 for consistency with the coding guidelines recommendation to use ^ ranges, unless there's a specific compatibility reason for exact pinning.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@package.json` around lines 50 - 51, The package.json lists
"@react-native-community/cli-platform-android" and
"@react-native-community/cli-platform-ios" pinned to exact "18.0.0" while
"@react-native-community/cli" uses a caret range; update the two platform
packages to use the caret range "^18.0.0" to match the project's versioning
policy unless there is a deliberate compatibility reason, ensuring the entries
for "@react-native-community/cli-platform-android" and
"@react-native-community/cli-platform-ios" are changed to the caret-prefixed
version.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In `@android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModule.kt`:
- Around line 151-160: The Android method setGPPConsent currently returns early
when the "value" is missing or parsedValue is null, causing it to drop nulls
unlike iOS; change it to always call usercentricsProxy.instance.setGPPConsent
and pass a nullable value so nulls are forwarded to the SDK. Concretely: in
RNUsercentricsModule.setGPPConsent, stop returning early on missing "value" or
when readableMapValueToAny returns null; compute parsedValue as nullable (use
readableMapValueToAny when key exists, otherwise null) and always invoke
usercentricsProxy.instance.setGPPConsent(sectionName, fieldName, parsedValue) so
the SDK receives nulls just like iOS.

---

Nitpick comments:
In `@package.json`:
- Around line 50-51: The package.json lists
"@react-native-community/cli-platform-android" and
"@react-native-community/cli-platform-ios" pinned to exact "18.0.0" while
"@react-native-community/cli" uses a caret range; update the two platform
packages to use the caret range "^18.0.0" to match the project's versioning
policy unless there is a deliberate compatibility reason, ensuring the entries
for "@react-native-community/cli-platform-android" and
"@react-native-community/cli-platform-ios" are changed to the caret-prefixed
version.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 858bfd8d-49b3-4020-8b8c-155022db4807

📥 Commits

Reviewing files that changed from the base of the PR and between f45a517 and b1b53a6.

⛔ Files ignored due to path filters (3)
  • legacy-sample/package-lock.json is excluded by !**/package-lock.json
  • package-lock.json is excluded by !**/package-lock.json
  • sample/ios/Podfile.lock is excluded by !**/*.lock
📒 Files selected for processing (6)
  • CHANGELOG.md
  • android/build-legacy.gradle
  • android/build.gradle.kts
  • android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModule.kt
  • ios/Extensions/GppData+Dict.swift
  • package.json

@qodo-code-review
Copy link
Copy Markdown

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: test-ios

Failed stage: Run tests [❌]

Failed test name: ""

Failure summary:

The GitHub Action failed because the iOS build failed during the test step, causing xcodebuild to
exit with code 65.
- A Swift compilation error occurred in ios/Extensions/GppData+Dict.swift at line
14: cannot convert value of type '[Any]' to closure result type 'NSDictionary' (seen in the
SwiftCompile normal arm64 phase for target react-native-usercentrics in project Pods).
- Because the
app could not compile, the test run was cancelled: Testing cancelled because the build failed and **
TEST FAILED **.
- Other messages shown (unused variable, deprecation, implicit coercion, duplicate
build files, and “Create Symlinks…” script warnings) are warnings and not the primary cause of the
failure.

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

963:  Installing React-RCTText (0.81.4)
964:  Installing React-RCTVibration (0.81.4)
965:  Installing React-RuntimeApple (0.81.4)
966:  Installing React-RuntimeCore (0.81.4)
967:  Installing React-RuntimeHermes (0.81.4)
968:  Installing React-callinvoker (0.81.4)
969:  Installing React-cxxreact (0.81.4)
970:  Installing React-debug (0.81.4)
971:  Installing React-defaultsnativemodule (0.81.4)
972:  Installing React-domnativemodule (0.81.4)
973:  Installing React-featureflags (0.81.4)
974:  Installing React-featureflagsnativemodule (0.81.4)
975:  Installing React-graphics (0.81.4)
976:  Installing React-hermes (0.81.4)
977:  Installing React-idlecallbacksnativemodule (0.81.4)
978:  Installing React-jserrorhandler (0.81.4)
979:  Installing React-jsi (0.81.4)
...

1217:  ▸ Copying ExecutionContextManager.h
1218:  ▸ Copying ExecutionContext.h
1219:  ▸ Copying ConsoleMessage.h
1220:  ▸ Copying Base64.h
1221:  ▸ Copying React-jsiexecutor-umbrella.h
1222:  ▸ Copying JSINativeModules.h
1223:  ▸ Copying JSIExecutor.h
1224:  ▸ Copying threadsafe.h
1225:  ▸ Copying jsilib.h
1226:  ▸ Copying jsi.h
1227:  ▸ Copying jsi-inl.h
1228:  ▸ Copying instrumentation.h
1229:  ▸ Copying decorator.h
1230:  ▸ Copying React-jsi-umbrella.h
1231:  ▸ Copying JSIDynamic.h
1232:  ▸ Copying React-jserrorhandler-umbrella.h
1233:  ▸ Copying React-idlecallbacksnativemodule-umbrella.h
1234:  ▸ Copying React-hermes-umbrella.h
1235:  ▸ Copying HermesExecutorFactory.h
1236:  ▸ Copying React-graphics-umbrella.h
1237:  ▸ Copying React-featureflagsnativemodule-umbrella.h
1238:  ▸ Copying React-featureflags-umbrella.h
1239:  ▸ Copying React-domnativemodule-umbrella.h
1240:  ▸ Copying React-defaultsnativemodule-umbrella.h
1241:  ▸ Copying React-debug-umbrella.h
1242:  ▸ Copying TraceSection.h
1243:  ▸ Copying SystraceSection.h
1244:  ▸ Copying SharedProxyCxxModule.h
1245:  ▸ Copying RecoverableError.h
1246:  ▸ Copying ReactNativeVersion.h
...

1249:  ▸ Copying RAMBundleRegistry.h
1250:  ▸ Copying NativeToJsBridge.h
1251:  ▸ Copying NativeModule.h
1252:  ▸ Copying MoveWrapper.h
1253:  ▸ Copying ModuleRegistry.h
1254:  ▸ Copying MethodCall.h
1255:  ▸ Copying MessageQueueThread.h
1256:  ▸ Copying JsArgumentHelpers.h
1257:  ▸ Copying JsArgumentHelpers-inl.h
1258:  ▸ Copying JSModulesUnbundle.h
1259:  ▸ Copying JSIndexedRAMBundle.h
1260:  ▸ Copying JSExecutor.h
1261:  ▸ Copying JSBundleType.h
1262:  ▸ Copying JSBigString.h
1263:  ▸ Copying Instance.h
1264:  ▸ Copying ErrorUtils.h
1265:  ▸ Copying CxxNativeModule.h
...

1626:  ▸ Copying RCTI18nUtil.h
1627:  ▸ Copying RCTI18nManager.h
1628:  ▸ Copying RCTHTTPRequestHandler.h
1629:  ▸ Copying RCTGIFImageDecoder.h
1630:  ▸ Copying RCTFrameUpdate.h
1631:  ▸ Copying RCTFrameAnimation.h
1632:  ▸ Copying RCTFont.h
1633:  ▸ Copying RCTFileRequestHandler.h
1634:  ▸ Copying RCTFileReaderModule.h
1635:  ▸ Copying RCTFPSGraph.h
1636:  ▸ Copying RCTExceptionsManager.h
1637:  ▸ Copying RCTEventEmitter.h
1638:  ▸ Copying RCTEventDispatcherProtocol.h
1639:  ▸ Copying RCTEventDispatcher.h
1640:  ▸ Copying RCTEventAnimation.h
1641:  ▸ Copying RCTErrorInfo.h
1642:  ▸ Copying RCTErrorCustomizer.h
1643:  ▸ Copying RCTDynamicTypeRamp.h
...

1866:  ▸ Compiling SocketRocket-dummy.m
1867:  ▸ Compiling SRWebSocket.m
1868:  ▸ Compiling SRURLUtilities.m
1869:  ▸ Compiling SRSecurityPolicy.m
1870:  ▸ Compiling SRSIMDHelpers.m
1871:  ▸ Compiling SRRunLoopThread.m
1872:  ▸ Compiling SRRandom.m
1873:  ▸ Compiling SRProxyConnect.m
1874:  ▸ Compiling SRPinningSecurityPolicy.m
1875:  ▸ Compiling SRMutex.m
1876:  ▸ Compiling SRLog.m
1877:  ▸ Compiling SRIOConsumerPool.m
1878:  ▸ Compiling SRIOConsumer.m
1879:  ▸ Compiling SRHash.m
1880:  ▸ Compiling SRHTTPConnectMessage.m
1881:  ▸ Compiling SRError.m
1882:  ▸ Compiling SRDelegateController.m
...

2206:  ▸ Compiling RCTModalManager.m
2207:  ▸ Compiling RCTModalHostViewManager.m
2208:  ▸ Compiling RCTModalHostViewController.m
2209:  ▸ Compiling RCTModalHostView.m
2210:  ▸ Compiling RCTLayoutAnimationGroup.m
2211:  ▸ Compiling RCTLayoutAnimation.m
2212:  ▸ Compiling RCTLayout.m
2213:  ▸ Compiling RCTKeyCommands.m
2214:  ▸ Compiling RCTJSThread.m
2215:  ▸ Compiling RCTJSStackFrame.m
2216:  ▸ Compiling RCTImageSource.m
2217:  ▸ Compiling RCTI18nUtil.m
2218:  ▸ Compiling RCTFrameUpdate.m
2219:  ▸ Compiling RCTEventEmitter.m
2220:  ▸ Compiling RCTEventDispatcher.m
2221:  ▸ Compiling RCTErrorInfo.m
2222:  ▸ Compiling React-Core-dummy.m
...

2233:  ▸ Compiling RCTBundleManager.m
2234:  ▸ Compiling RCTBridgeModuleDecorator.m
2235:  ▸ Compiling RCTBridgeConstants.m
2236:  ▸ Compiling RCTBorderDrawing.m
2237:  ▸ Compiling RCTAssert.m
2238:  ▸ Compiling RCTActivityIndicatorViewManager.m
2239:  ▸ Compiling RCTActivityIndicatorView.m
2240:  ▸ Running script 'Create Symlinks to Header Folders'
2241:  ▸ Compiling RNCSafeAreaContext.mm
2242:  ▸ Compiling react_native_safe_area_context_vers.c
2243:  ▸ Compiling react-native-safe-area-context-dummy.m
2244:  ▸ Touching jsireact.framework (in target 'React-jsiexecutor' from project 'Pods')
2245:  ▸ Processing React-hermes-Info.plist
2246:  ▸ Processing React-graphics-Info.plist
2247:  ▸ Touching ReactCommon.framework (in target 'ReactCommon' from project 'Pods')
2248:  ▸ Processing React-jserrorhandler-Info.plist
2249:  ▸ Compiling StackTraceParser.cpp
2250:  ▸ Compiling JsErrorHandler.cpp
2251:  ▸ Compiling React_jserrorhandler_vers.c
2252:  ▸ Compiling RNCSafeAreaViewMode.m
2253:  ▸ Compiling RNCSafeAreaViewManager.m
2254:  ▸ Compiling RNCSafeAreaViewLocalData.m
2255:  ▸ Compiling RNCSafeAreaViewEdges.m
2256:  ▸ Compiling RNCSafeAreaViewEdgeMode.m
2257:  ▸ Compiling RNCSafeAreaView.m
2258:  ▸ Compiling RNCSafeAreaUtils.m
2259:  ▸ Compiling RNCSafeAreaShadowView.m
2260:  ▸ Compiling RNCSafeAreaProviderManager.m
2261:  ▸ Compiling RNCSafeAreaProvider.m
2262:  ▸ Compiling RNCOnInsetsChangeEvent.m
2263:  ▸ Compiling Transform.cpp
2264:  ▸ Compiling RCTPlatformColorUtils.mm
2265:  ▸ Compiling PlatformColorParser.mm
2266:  ▸ Compiling React-jserrorhandler-dummy.m
2267:  ▸ Compiling HostPlatformColor.mm
...

2291:  ▸ Compiling RCTInputAccessoryViewManager.mm
2292:  ▸ Compiling RCTInputAccessoryViewContent.mm
2293:  ▸ Compiling RCTInputAccessoryView.mm
2294:  ▸ Compiling RCTInputAccessoryShadowView.mm
2295:  ▸ Compiling RCTDynamicTypeRamp.mm
2296:  ▸ Compiling RCTConvert+Text.mm
2297:  ▸ Compiling RCTBaseTextViewManager.mm
2298:  ▸ Compiling RCTBaseTextShadowView.mm
2299:  ▸ Compiling RCTBaseTextInputViewManager.mm
2300:  ▸ Compiling RCTBaseTextInputView.mm
2301:  ▸ Compiling RCTBaseTextInputShadowView.mm
2302:  ▸ Compiling RCTBackedTextInputDelegateAdapter.mm
2303:  ▸ Compiling RCTText_vers.c
2304:  ▸ Running script 'Create Symlinks to Header Folders'
2305:  ▸ Compiling React-RCTText-dummy.m
2306:  ▸ Touching React_jserrorhandler.framework (in target 'React-jserrorhandler' from project 'Pods')
2307:  ▸ Touching React_graphics.framework (in target 'React-graphics' from project 'Pods')
...

2775:  ▸ Compiling RCTAppDependencyProvider.mm
2776:  ▸ Compiling ReactAppDependencyProvider_vers.c
2777:  ▸ Compiling RNCWebViewImpl.m
2778:  ▸ Compiling RNCWebViewDecisionManager.m
2779:  ▸ Compiling RNCWKProcessPoolManager.m
2780:  ▸ Compiling RCTConvert+WKDataDetectorTypes.m
2781:  ▸ Compiling ReactAppDependencyProvider-dummy.m
2782:  ⚠️  /Users/runner/work/react-native-sdk/react-native-sdk/ios/Extensions/TCFUserDecisions+Dict.swift:76:13: variable 'consent' was never mutated; consider changing to 'let' constant
2783:  var consent = dict["consent"] as? Bool
2784:  ~~~ ^
2785:  ⚠️  /Users/runner/work/react-native-sdk/react-native-sdk/ios/Extensions/CCPAData+Dict.swift:7:31: 'toUSPString()' is deprecated: Please, use the field uspString directly
2786:  "uspString": self.toUSPString(),
2787:  ^
2788:  ❌  /Users/runner/work/react-native-sdk/react-native-sdk/ios/Extensions/GppData+Dict.swift:14:36: cannot convert value of type '[Any]' to closure result type 'NSDictionary'
2789:  return nestedArray.map { nestedItem -> Any in
2790:  Testing failed:
2791:  ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
2792:  Cannot convert value of type '[Any]' to closure result type 'NSDictionary'
2793:  Testing cancelled because the build failed.
2794:  ** TEST FAILED **
2795:  ⚠️  /Users/runner/work/react-native-sdk/react-native-sdk/ios/Extensions/ReadyStatus+Dict.swift:9:35: expression implicitly coerced from 'NSDictionary?' to 'Any'
2796:  "geolocationRuleset": self.geolocationRuleset?.toDictionary(),
2797:  The following build commands failed:
2798:  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2799:  SwiftCompile normal arm64 Compiling\ BannerSettings+Dict.swift,\ CCPAData+Dict.swift,\ DispatchQueueManager.swift,\ GppData+Dict.swift,\ GppSectionChangePayload+Dict.swift,\ PresentationViewController.swift,\ ReadyStatus+Dict.swift,\ RNUsercentricsModule.swift /Users/runner/work/react-native-sdk/react-native-sdk/ios/Extensions/BannerSettings+Dict.swift /Users/runner/work/react-native-sdk/react-native-sdk/ios/Extensions/CCPAData+Dict.swift /Users/runner/work/react-native-sdk/react-native-sdk/ios/Manager/DispatchQueueManager.swift /Users/runner/work/react-native-sdk/react-native-sdk/ios/Extensions/GppData+Dict.swift /Users/runner/work/react-native-sdk/react-native-sdk/ios/Extensions/GppSectionChangePayload+Dict.swift /Users/runner/work/react-native-sdk/react-native-sdk/ios/Manager/PresentationViewController.swift /Users/runner/work/react-native-sdk/react-native-sdk/ios/Extensions/ReadyStatus+Dict.swift /Users/runner/work/react-native-sdk/react-native-sdk/ios/RNUsercentricsModule.swift (in target 'react-native-usercentrics' from project 'Pods')
2800:  SwiftCompile normal arm64 /Users/runner/work/react-native-sdk/react-native-sdk/ios/Extensions/GppData+Dict.swift (in target 'react-native-usercentrics' from project 'Pods')
2801:  ▸ Touching ReactCodegen.framework (in target 'ReactCodegen' from project 'Pods')
2802:  Testing workspace sample with scheme sample
2803:  ▸ Compiling RNUsercentricsModule.mm
2804:  (3 failures)
2805:  ▸ Compiling RNUsercentricsModule+TurboModule.mm
...

2844:  Skipping duplicate build file in Compile Sources build phase: /Users/runner/work/react-native-sdk/react-native-sdk/sample/ios/build/generated/ios/react/renderer/components/safeareacontext/States.cpp (in target 'ReactCodegen' from project 'Pods')
2845:  Skipping duplicate build file in Compile Sources build phase: /Users/runner/work/react-native-sdk/react-native-sdk/sample/ios/build/generated/ios/react/renderer/components/safeareacontext/States.cpp (in target 'ReactCodegen' from project 'Pods')
2846:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'ReactCodegen' from project 'Pods')
2847:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-utils' from project 'Pods')
2848:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-runtimescheduler' from project 'Pods')
2849:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-runtimeexecutor' from project 'Pods')
2850:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-rendererdebug' from project 'Pods')
2851:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-renderercss' from project 'Pods')
2852:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-rendererconsistency' from project 'Pods')
2853:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-performancetimeline' from project 'Pods')
2854:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-microtasksnativemodule' from project 'Pods')
2855:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-jsitooling' from project 'Pods')
2856:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-jsinspectortracing' from project 'Pods')
2857:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-jsinspectornetwork' from project 'Pods')
2858:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-jsinspectorcdp' from project 'Pods')
2859:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-jserrorhandler' from project 'Pods')
2860:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-idlecallbacksnativemodule' from project 'Pods')
...

2864:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-domnativemodule' from project 'Pods')
2865:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-defaultsnativemodule' from project 'Pods')
2866:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-debug' from project 'Pods')
2867:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-RuntimeHermes' from project 'Pods')
2868:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-RuntimeCore' from project 'Pods')
2869:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-RuntimeApple' from project 'Pods')
2870:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-RCTRuntime' from project 'Pods')
2871:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-RCTFBReactNativeSpec' from project 'Pods')
2872:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-NativeModulesApple' from project 'Pods')
2873:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-Mapbuffer' from project 'Pods')
2874:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-ImageManager' from project 'Pods')
2875:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-FabricImage' from project 'Pods')
2876:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-FabricComponents' from project 'Pods')
2877:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-Fabric' from project 'Pods')
2878:  Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this issue, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'RCT-Folly' from project 'Pods')
2879:  ##[error]Process completed with exit code 65.
2880:  ##[group]Run actions/upload-artifact@v4

@rodrigo-leal-usercentrics rodrigo-leal-usercentrics deleted the release/2.26.1-bump branch April 7, 2026 09:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S This PR changes 10-29 lines, ignoring generated files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant