Skip to content

Option to build without recording on iOS, so playback-only apps don't need NSMicrophoneUsageDescription #1350

Open

Description

@Kerumen

Feature Request

I use react-native-audio-api 0.13.6 only for playback: sound effects and music, with iosCategory: 'ambient'. The app never records and never calls requestRecordingPermissions().

App Store Connect still rejects the build:

ITMS-90683: Missing purpose string in Info.plist. Your app's code references one or more APIs that access sensitive user data [...] The Info.plist file should contain a NSMicrophoneUsageDescription key [...]

Apple's static scan finds the recording code that is always compiled in, for example:

  • ios/audioapi/ios/system/AudioSessionManager.mm: requestRecordPermission / AVAudioApplication requestRecordPermissionWithCompletionHandler
  • ios/audioapi/ios/system/AudioEngine.mm: audioEngine.inputNode

The fix today is adding a microphone purpose string (through iosMicrophonePermission or ios.infoPlist) to an app that never uses the microphone. This works, but it's confusing for developers and it shows up in privacy reviews.

Proposal: add an opt-out like disableFFmpeg, for example disableRecording in the config plugin, which would set ENV['DISABLE_AUDIOAPI_RECORDING'] = '1' in the Podfile. The podspec would then exclude the recorder sources and compile out the permission and input-node code paths behind a preprocessor flag. On Android, the same option could drop RECORD_AUDIO, if the library adds it.

The recording JS APIs could throw a clear error when the native side was built without recording.

Happy to test a build on a playback-only app.

Activity

  1. added
    iosNative iOS implementation, CoreAudio/AVFoundation bindings, or iOS-specific issues
    on Oct 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    iosNative iOS implementation, CoreAudio/AVFoundation bindings, or iOS-specific issues

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions