| name | verify-plugin-release |
| description | Verify an AppsFlyer Capacitor plugin release (RC or production) by installing from npm, building and running the example app on Android and iOS, and validating SDK behavior from device logs. Use when the user asks to test a release, verify an RC, run the example app after publishing, or check that a published plugin version works on both platforms. |
Verify plugin release
End-to-end verification of a published AppsFlyer Capacitor plugin version using
the example app at examples/CapacitorReact.
Prerequisites
Before starting, confirm:
- An Android physical device is connected (
adb devices)
- An iOS simulator is booted (
xcrun simctl list devices booted)
- The target version is published on npm (
npm view appsflyer-capacitor-plugin@<tag> version)
- The example app has a valid
.env with REACT_APP_AF_DEV_KEY and REACT_APP_AF_APP_ID
Workflow
1. Determine the install tag
| Release type | npm tag | Install script |
|---|
| RC / QA | QA | npm run installQA |
| Production | latest | npm run installFromNpm |
Confirm the published version:
npm view appsflyer-capacitor-plugin@QA version
npm view appsflyer-capacitor-plugin@latest version
2. Install the plugin from npm
From examples/CapacitorReact:
npm run installQA
npm run installFromNpm
This runs npm install appsflyer-capacitor-plugin@<tag> && npx cap sync.
3. Handle iOS pod install failures
If cap sync fails on iOS with a pod version conflict (common when the native
SDK version was bumped), fix it:
cd ios/App
rm Podfile.lock
pod repo update
pod install
cd ../..
Then re-run npx cap sync to confirm both platforms succeed.
4. Build web assets and sync
npm run rebuild
This runs npm run build && npx cap sync. Verify the Capacitor sync output
lists the correct plugin version for both platforms:
appsflyer-capacitor-plugin@<expected-version>
5. Deploy to devices
Identify targets:
- Android:
adb devices (use the physical device serial)
- iOS:
xcrun simctl list devices booted (use the simulator UDID)
Run in parallel:
npx cap run android --target <DEVICE_SERIAL>
npx cap run ios --target <SIMULATOR_UDID>
Both should complete with Deploying ... to <target>.
6. Collect and verify logs
Give the user a moment to interact with the app, then pull logs.
Android:
adb -s <DEVICE_SERIAL> logcat -d -v time \
| grep -iE "AppsFlyer_[0-9]|Capacitor/Plugin|CapacitorPlugin|onConversion|logEvent" \
| tail -60
iOS:
xcrun simctl spawn <SIMULATOR_UDID> log show --last 2m \
--predicate 'eventMessage CONTAINS "AppsFlyer" OR eventMessage CONTAINS "initSdk" OR eventMessage CONTAINS "onConversion" OR eventMessage CONTAINS "logEvent" OR (process == "App" AND eventMessage CONTAINS[cd] "capacitor")' \
--style compact
7. Verification checklist
Confirm the following from the logs:
8. Clean up
After verification, revert the example app's package.json back to local dependency:
cd examples/CapacitorReact
npm run installLocal
This restores the "appsflyer-capacitor-plugin": "file:../.." dependency so the
repo stays clean for development.
Troubleshooting
| Problem | Solution |
|---|
CocoaPods could not find compatible versions | Delete Podfile.lock, run pod repo update, then pod install |
| Android logcat shows no AppsFlyer logs | Widen the grep filter; some SDK versions use different tag prefixes |
| iOS logs are sparse / redacted | The unified log system redacts messages in simulator builds; check for TLS connections to *.appsflyersdk.com as evidence of SDK communication |
.env not found or no dev key | Create examples/CapacitorReact/.env with REACT_APP_AF_DEV_KEY and REACT_APP_AF_APP_ID |
npm publish conflict on re-run | Use "Re-run failed jobs" in GitHub Actions instead of re-running the entire workflow |