- name
- ios-audio-e2e
- description
- Build and run device-backed iOS end-to-end checks for react-native-nitro-sound recording, playback, listeners, pause/resume, seek, speed, interruption, audio-session behavior, and rapid switching. Use for iOS audio regressions, Swift changes, or claims that require more than an Xcode compile.
# iOS Audio E2E
Separate build evidence from live microphone and speaker evidence. Never report
an iOS runtime pass from a simulator compile alone.
## Safety And Scope
- Obtain explicit approval in the current run before starting live microphone
capture. State that the example app `sound.example` will record a short clip.
- Use a test device and non-sensitive audio. Do not retain, upload, transcribe,
or inspect recorded content beyond what is needed to prove the flow.
- Preserve the user's signing, simulator, device, and audio-session settings.
- Treat calls, Bluetooth routing, backgrounding, and other-app interruptions as
separate opt-in rows; they alter device state and are not implied by a basic
E2E request.
## Preflight
1. Read `AGENTS.md`, `.github/workflows/ci-ios.yml`, the changed Swift/spec/TS
files, and the relevant example screen.
2. Record `git status --short --branch`; do not discard existing changes.
3. Run `xcodebuild -version` and `xcrun devicectl list devices`; select a
physical iPhone. Use `$simulator-audio-e2e` for virtual-device coverage.
4. Confirm `example/ios/SoundExample/Info.plist` contains a microphone usage
description and identify the selected destination.
5. Run `yarn install --immutable`, `yarn prepare`, and
`./scripts/fix-nitrogen-swift.sh` when generated Swift is involved.
## Build Lane
Mirror `.github/workflows/ci-ios.yml`:
```bash
cd example
bundle install
bundle exec pod install --project-directory=ios
cd ..
xcodebuild \
-workspace example/ios/SoundExample.xcworkspace \
-scheme SoundExample \
-configuration Debug \
-sdk iphonesimulator \
-destination 'generic/platform=iOS Simulator' \
CODE_SIGNING_ALLOWED=NO \
SKIP_BUNDLING=YES \
build
```
Report this as `BUILD PASS` or `BUILD FAIL`, never as runtime E2E.
## Device Runtime Lane
After microphone approval, run the smallest matrix covering the change:
1. Install and launch the example on the selected physical iPhone. Never report
device-backed runtime evidence from this skill using a Simulator.
2. Grant microphone permission through the system prompt.
3. Start recording; require a resolved URI, `isRecording`, and increasing
millisecond callbacks.
4. Pause and resume; require callback time to stop and then advance without a
second recorder instance.
5. Stop; require a terminal state, listener cleanup, and a playable file.
6. Play the recorded clip; require increasing playback position and duration.
7. Exercise seek, volume, and playback speed when affected.
8. Require exactly one playback-end transition and successful stop/cleanup.
9. Run the Rapid Switch screen for concurrency or promise-settlement changes.
For interruption, route change, or background work, capture the before/after
audio-session state and verify recovery on a physical device. A manual gesture
without matching app state and logs is insufficient.
## Evidence And Cleanup
Capture the device identifier, iOS/Xcode versions, build configuration, tested
screen/API, permission state, callback progression, returned path, and relevant
redacted logs. Remove only recordings and temporary artifacts created by the
current run. Report `RUNTIME PASS`, `RUNTIME FAIL`, or `BLOCKED` separately from
the build result and list every untested row.
عرض على GitHub