Bump native SDKs to iOS 4.5.0 and Android 1.7.0 (stable) - #9
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (1)
📜 Recent review details🔇 Additional comments (1)
📝 WalkthroughSummary by CodeRabbit
WalkthroughThe pull request updates native Android and iOS SDK references to Android ChangesNative SDK alignment
Estimated code review effort: 1 (Trivial) | ~5 minutes Possibly related PRs
Suggested labels: Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
✨ Simplify code
Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Tests`~/Native/iOS/run-tests.sh:
- Line 70: Update the SDK_INPUT validation flow in run-tests.sh so direct
.xcframework paths and directories are rejected unless they provide a trusted
AppstackSDK 4.5.0 version identifier or matching checksum. Ensure every accepted
input is verified as 4.5.0 before emitting the line-70 success message.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 6db53168-76b8-4a3a-94fe-59db0fcf69df
📒 Files selected for processing (11)
CHANGELOG.mdDEVELOPMENT.mdDocumentation~/Android.mdEditor/AppstackDependencies.xmlEditor/AppstackIOSPostProcessBuild.csTests~/Integration/README.mdTests~/Integration/UnityProject/Assets/Editor/AppstackIntegrationBuild.csTests~/Native/Android/real-artifact/build.gradle.ktsTests~/Native/README.mdTests~/Native/iOS/run-tests.shUSAGE.md
📜 Review details
🔇 Additional comments (10)
DEVELOPMENT.md (1)
58-60: LGTM!Also applies to: 102-102
Documentation~/Android.md (1)
36-36: LGTM!Editor/AppstackDependencies.xml (1)
10-10: LGTM!Editor/AppstackIOSPostProcessBuild.cs (1)
13-13: LGTM!CHANGELOG.md (1)
14-15: LGTM!Also applies to: 27-32
Tests~/Integration/README.md (1)
60-60: LGTM!Tests~/Integration/UnityProject/Assets/Editor/AppstackIntegrationBuild.cs (1)
264-264: LGTM!Tests~/Native/Android/real-artifact/build.gradle.kts (1)
24-24: LGTM!Tests~/Native/README.md (1)
12-12: LGTM!Also applies to: 29-29
USAGE.md (1)
127-127: LGTM!
| done | ||
|
|
||
| echo "Verified iOS bridge against AppstackSDK 4.4.0 and all expected C symbols." | ||
| echo "Verified iOS bridge against AppstackSDK 4.5.0 and all expected C symbols." |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
file='Tests~/Native/iOS/run-tests.sh'
rg -n -C 4 'SDK_INPUT|git archive 4\.5\.0|\.xcframework|Verified iOS bridge' "$file"Repository: appstack-tech/appstack-unity-sdk
Length of output: 1317
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
file='Tests~/Native/iOS/run-tests.sh'
cat -n "$file"
printf '\n--- related version and artifact references ---\n'
rg -n -C 3 '4\.5\.0|4\.4\.0|CFBundleShortVersionString|CFBundleVersion|AppstackSDK\.xcframework|APPSTACK_IOS_DISTRIBUTION_REPO' \
Tests~ Runtime README.md .github 2>/dev/null || trueRepository: appstack-tech/appstack-unity-sdk
Length of output: 7233
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
python3 - <<'PY'
from pathlib import Path
import re
path = Path("Tests~/Native/iOS/run-tests.sh")
lines = path.read_text().splitlines()
# Model the three input-selection branches without executing repository code.
def selected_xcframework(sdk_input: str) -> str:
if sdk_input.endswith(".xcframework"):
return sdk_input
return sdk_input.rstrip("/") + "/AppstackSDK.xcframework"
for value in ("/tmp/AppstackSDK-4.4.0.xcframework", "/tmp/sdk-4.4.0"):
print(f"{value} -> {selected_xcframework(value)}")
direct_branch = "\n".join(lines[29:34])
version_checks = [
line for line in lines[29:34]
if re.search(r"4\.5\.0|version|checksum|sha256|CFBundle", line, re.I)
]
print("direct-branch-version-checks:", version_checks or "none")
print("success-message:", lines[69])
PYRepository: appstack-tech/appstack-unity-sdk
Length of output: 433
Ensure every accepted input proves the SDK version.
SDK_INPUT accepts direct .xcframework paths and directories without version checks. A compatible 4.4.0 artifact can pass the structural and symbol checks, while line 70 reports validation against AppstackSDK 4.5.0. Reject unversioned inputs or validate a trusted version identifier or checksum before printing this message.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@Tests`~/Native/iOS/run-tests.sh at line 70, Update the SDK_INPUT validation
flow in run-tests.sh so direct .xcframework paths and directories are rejected
unless they provide a trusted AppstackSDK 4.5.0 version identifier or matching
checksum. Ensure every accepted input is verified as 4.5.0 before emitting the
line-70 success message.
Update both native dependency pins from iOS 4.4.0 / Android 1.5.0 to the latest stable releases, and keep the editor integration, public setup documentation, changelog, and validation fixtures in sync. Both releases are purely additive for the APIs the bridges use: configureWrapper is unchanged on Android and the @_spi configure(apiKey:logLevel:customerUserId:wrapperVersion:) is unchanged on iOS. Platform floors are unchanged (iOS 15, Android minSdk 21). Behavior change from the native SDKs: manually sent INSTALL events are now discarded on both platforms (they are emitted automatically on first launch), so SendEvent(EventType.INSTALL) is a no-op. Documented in USAGE.md and the changelog. Verified: - iOS contract fixture compiles the production bridge against the real 4.5.0 XCFramework, with all expected C ABI symbols present. - Android fixture compiles the production Java bridge against the real 1.7.0 artifact from Maven Central.
839900d to
2173e1e
Compare
The runner accepts three input forms but only the git-checkout form pins a tag, yet the success message asserted the pinned version for all three. A developer passing a local XCFramework got a "Verified against AppstackSDK 4.5.0" line the script had not checked. An XCFramework carries no trustworthy marketing version (CFBundleShortVersionString is 1.0 in the shipped artifact), so a caller-supplied binary cannot be validated against the pin. The message now names what was actually used and marks unpinned inputs as unverified, which keeps the local escape hatch without the false claim. Also lifts the tag into EXPECTED_SDK_VERSION so the archive tag and the message cannot drift apart on the next bump. Verified both paths: the checkout form still reports 4.5.0, and a raw .xcframework path reports it as unverified.
|
Rebased onto Conflict resolution. #7 pinned Android to
Fixtures on the rebased tree. 33 Android contract tests pass, with the coordinate resolving as |
|
Correction to the iOS note in the description above. That note claimed the distributed It was based on the Checked against that artifact: its SHA256 is iOS This narrows what this PR's iOS verification established. The bridge does compile and export every expected C symbol, but against the stale committed bits rather than the |
Moves both native dependency pins to the latest stable releases: Android
1.7.0and iOS4.5.0.This is the follow-up #7 asked for. That PR pinned Android to
1.7.0-SNAPSHOTand noted "Snapshots are mutable and expire: this must go back to a plain release version before the package ships."1.7.0is now published on Maven Central, so this replaces the snapshot pin with the stable release and removes the scaffolding that existed only to serve it.Version pins
Editor/AppstackDependencies.xml—1.7.0-SNAPSHOT→1.7.0Editor/AppstackIOSPostProcessBuild.cs—4.4.0→4.5.0Snapshot scaffolding removed
Now that the pin is a plain release, the Central Portal snapshot repository is no longer needed and is dropped from all three places #7 added it:
Editor/AppstackDependencies.xml(the EDM4U<repository>entry)Documentation~/Android.md(the manual-Gradle snippet integrators copy)Tests~/Native/Android/settings.gradle.kts(the scopedappstackSnapshotsrepo)The
real-artifactfixture now resolves1.7.0frommavenCentral()alone, verified below. #7'srelease.yml-SNAPSHOTguard is kept as-is. Simulating the release assembly confirms the guard passes on this branch, which it could not do before.API compatibility
Both bumps are purely additive for every API the bridges call:
configureWrapperis byte-identical between1.5.0and1.7.0.@_spiconfigure(apiKey:logLevel:customerUserId:wrapperVersion:)is unchanged.sendEvent,getAppstackId,isSdkDisabled,awaitAttributionParams/getAttributionParams, andsetProxyUrlall keep their signatures.Platform floors are unchanged, so the documented support matrix holds: iOS
.v15, AndroidminSdk 21.Correction: the earlier iOS note in this description was wrong
An earlier revision of this description stated that the distributed
4.5.0binary does not exportsetCustomerUserIdand that #7's iOS blocker still stood. Both claims were incorrect and are withdrawn.That note was based on the
AppstackSDK.xcframeworkdirectory committed inios-appstack-sdk, which is vestigial after the move tobinaryTarget(url:checksum:)and is byte-identical across4.4.0through4.5.0. The artifact SPM downloads is the release zip, and it does exportsetCustomerUserId, verified at the checksumPackage.swiftdeclares.iOS
4.5.0ships the setter and #7's iOS blocker is cleared by this bump. Nothing needs re-cutting inios-appstack-sdk.The stale directory also affected this PR's iOS fixture, which read it: the iOS verification below was made against
4.4.0-era bits. #10 changes the fixture to resolve and checksum the real release artifact, where it also passes.Behavior change worth reviewing
Both new versions discard a manually sent
INSTALLevent — Android1.7.0returns early fromsendEvent, and iOS4.5.0rejects automatic-only lifecycle events at the entry point. The native comments attribute this to an observed install/first-open over-count. At the old pins that call reached the wire.Nothing throws, so this is not an API break, but
USAGE.mddescribedINSTALLas "App install (SDK may track)", which is no longer accurate. That row is corrected and a changelog note added. Any integrator sendingINSTALLby hand will silently stop counting after this bump.Verification
real-artifactcompiles the production Java bridge against the real artifact. Confirmed the resolved coordinate is genuinely1.7.0({strictly 1.7.0} -> 1.7.0) frommavenCentral()with the snapshot repo removed, not a stale cache.4.5.0XCFramework for an iOS 15 simulator target with all 7 expected C ABI symbols present.release.ymldoes and confirmed no-SNAPSHOTremains.1.7.0returns 200 from Maven Central; the4.5.0binaryTarget zip returns 200, and the XCFramework is still committed at that tag, which the iOS fixture'sgit archivestep depends on.Not covered
Tests/Editor/) and the on-device integration build were not run — they need the Unity CLI. The only C# touched is an Editor-onlyconstand an assertion string in the integration build project, so the public API snapshot surface is untouched.EventTypeenum still lacks iOS'sFIRST_OPEN/FIRST_OPEN_GUARDED. Pre-existing and unrelated to this bump (both already existed at4.4.0, Android has never had them), and they are automatic-only events, so they are intentionally left out.