Skip to main content
Config plugins provide fine-grained control over your native iOS and Android projects. This guide covers common modification patterns for both platforms.

Modifying iOS projects

Working with Info.plist

The Info.plist file contains essential app configuration for iOS.

Adding permissions

Setting URL schemes

Configuring background modes

Working with Entitlements

Entitlements enable app capabilities like Associated Domains, HealthKit, and Apple Pay.

Adding Associated Domains

Entitlements.ts

Adding App Groups

Enabling HealthKit

Modifying Xcode project

For advanced modifications like adding build phases or frameworks.

Adding a build phase

Adding a framework

Modifying Podfile

Modifying AppDelegate

For Objective-C code injection (use sparingly).

Modifying Android projects

Working with AndroidManifest.xml

The manifest declares app components, permissions, and features.

Adding permissions

Permissions.ts

Adding features

Adding intent filters

Blocking permissions

Permissions.ts

Modifying Gradle files

Setting build properties in app/build.gradle

Adding dependencies

Modifying project-level build.gradle

Modifying gradle.properties

Working with resource files

Modifying strings.xml

Modifying colors.xml

Modifying Java/Kotlin files

For MainActivity or MainApplication modifications.

Adding imports and code to MainActivity

Managing native dependencies

iOS: CocoaPods

For adding CocoaPods dependencies, use Podfile modifications or the expo-build-properties plugin.
app.json

Android: Maven repositories

For adding Maven repositories:
app.json

Using code generation helpers

The mergeContents utility helps insert code with generated markers:
generateCode.ts
This generates:
Benefits:
  • Idempotent: Running multiple times won’t duplicate code
  • Safe: Won’t remove manually edited code
  • Trackable: Hash detects if user modified generated code

Best practices

1. Use platform-specific helpers

Leverage AndroidConfig and IOSConfig utilities:

2. Validate before modifying

3. Preserve existing values

4. Handle both Groovy and Kotlin DSL

For Gradle modifications, check the language:

Next steps