<commit_before>---
title: Installation in React Native and Bare workflow projects
sidebar_title: Manual Installation
---

import InstallSection from '~/components/plugins/InstallSection';
import ConfigurationDiff from '~/components/plugins/ConfigurationDiff';
import { Tab, Tabs } from '~/components/plugins/Tabs';

The installation steps on this page are only required to add expo-dev-client to an **existing** React Native or Bare project.

To initialize a new Bare project or to add a development client to an existing managed project, see our [Getting Started guide](getting-started.md).

If you created your project with `expo init`, or already you have `react-native-unimodules` and/or other Expo modules up and running, use the tabs marked **With unimodules** (most projects will fall under this category).

If you created your project with `npx react-native init` and do not have `react-native-unimodules` or any other Expo packages installed, use the tabs marked **Without unimodules**.

## 1. Installation

Add the `expo-dev-client` package to your package.json.

<InstallSection packageName="expo-development-client" cmd={["npm install expo-dev-client"]} hideBareInstructions />

### 🍏 iOS

Add the following lines to your `Podfile`:

<Tabs tabs={["With unimodules", "Without unimodules"]}>

<Tab >
<ConfigurationDiff source="/static/diffs/client/podfile.diff" />
</Tab>

<Tab >
<ConfigurationDiff source="/static/diffs/client/podfile-no-unimodules.diff" />

Add an empty Swift file to your project from inside of Xcode by choosing File > New > File > Swift File.

<img src="/static/images/client/xcode_bridging_header_alert.png" style={{ maxWidth: "60%" }}/>

When the above prompt comes up, choose **Create Bridging Header**.

</Tab>

</Tabs>

Add configuration in `react-native.config.js` to allow React Native autolinking to find the dependencies of `expo-dev-client`:

<ConfigurationDiff source="/static/diffs/client/react-native.config.js.diff" />

Then you can run the following command to install native code for the Dev Launcher via CocoaPods.

<InstallSection packageName="expo-development-client" cmd={["npx pod-install"]} hideBareInstructions />

Also, make sure that your project is configured to deploy on iOS **above 10**.
To do that, you need to open Xcode, go to `Project settings` > `General` > `Deployment info` and select iOS version is at least 11.

<img src="/static/images/client/check_ios_version.png" style={{maxWidth: "100%" }}/>

### 🤖 Android

<Tabs tabs={["With unimodules", "Without unimodules"]}>

<Tab >

If your project is set up with unimodules, no additional changes are needed to install the package on Android. 🎉

</Tab>

<Tab >

Add the following lines to your `settings.gradle`:

<ConfigurationDiff source="/static/diffs/client/settings-gradle-no-unimodules.diff" />

Additionally, ensure your project's `minSdkVersion` and Gradle version are at least the following:

<ConfigurationDiff source="/static/diffs/client/gradle-no-unimodules.diff" />

</Tab>

</Tabs>

## 2. Basic configuration

To load your application's JavaScript in your client by scanning a QR code, you need to configure a deep link scheme for your application. The easiest way to do this is if you haven't already is with the `uri-scheme` package:

<InstallSection packageName="expo-development-client" cmd={["npx uri-scheme add <your scheme>"]} hideBareInstructions />

See the [uri-scheme package](https://www.npmjs.com/package/uri-scheme) for more information.

### 🍏 iOS

Make the following changes to allow the Development Client to control project initialization in the **DEBUG** mode.

<Tabs tabs={["With unimodules", "Without unimodules"]}>

<Tab >
<ConfigurationDiff source="/static/diffs/client/app-delegate.diff" />
</Tab>

<Tab >
<ConfigurationDiff source="/static/diffs/client/app-delegate-no-unimodules.diff" />
</Tab>

</Tabs>
<commit_msg>[docs][clients] add note to installation page about iOS module name (#13598)<commit_after>---
title: Installation in React Native and Bare workflow projects
sidebar_title: Manual Installation
---

import InstallSection from '~/components/plugins/InstallSection';
import ConfigurationDiff from '~/components/plugins/ConfigurationDiff';
import { Tab, Tabs } from '~/components/plugins/Tabs';

The installation steps on this page are only required to add expo-dev-client to an **existing** React Native or Bare project.

To initialize a new Bare project or to add a development client to an existing managed project, see our [Getting Started guide](getting-started.md).

If you created your project with `expo init`, or already you have `react-native-unimodules` and/or other Expo modules up and running, use the tabs marked **With unimodules** (most projects will fall under this category).

If you created your project with `npx react-native init` and do not have `react-native-unimodules` or any other Expo packages installed, use the tabs marked **Without unimodules**.

## 1. Installation

Add the `expo-dev-client` package to your package.json.

<InstallSection packageName="expo-development-client" cmd={["npm install expo-dev-client"]} hideBareInstructions />

### 🍏 iOS

Add the following lines to your `Podfile`:

<Tabs tabs={["With unimodules", "Without unimodules"]}>

<Tab >
<ConfigurationDiff source="/static/diffs/client/podfile.diff" />
</Tab>

<Tab >
<ConfigurationDiff source="/static/diffs/client/podfile-no-unimodules.diff" />

Add an empty Swift file to your project from inside of Xcode by choosing File > New > File > Swift File.

<img src="/static/images/client/xcode_bridging_header_alert.png" style={{ maxWidth: "60%" }}/>

When the above prompt comes up, choose **Create Bridging Header**.

</Tab>

</Tabs>

Add configuration in `react-native.config.js` to allow React Native autolinking to find the dependencies of `expo-dev-client`:

<ConfigurationDiff source="/static/diffs/client/react-native.config.js.diff" />

Then you can run the following command to install native code for the Dev Launcher via CocoaPods.

<InstallSection packageName="expo-development-client" cmd={["npx pod-install"]} hideBareInstructions />

Also, make sure that your project is configured to deploy on iOS **above 10**.
To do that, you need to open Xcode, go to `Project settings` > `General` > `Deployment info` and select iOS version is at least 11.

<img src="/static/images/client/check_ios_version.png" style={{maxWidth: "100%" }}/>

### 🤖 Android

<Tabs tabs={["With unimodules", "Without unimodules"]}>

<Tab >

If your project is set up with unimodules, no additional changes are needed to install the package on Android. 🎉

</Tab>

<Tab >

Add the following lines to your `settings.gradle`:

<ConfigurationDiff source="/static/diffs/client/settings-gradle-no-unimodules.diff" />

Additionally, ensure your project's `minSdkVersion` and Gradle version are at least the following:

<ConfigurationDiff source="/static/diffs/client/gradle-no-unimodules.diff" />

</Tab>

</Tabs>

## 2. Basic configuration

To load your application's JavaScript in your client by scanning a QR code, you need to configure a deep link scheme for your application. The easiest way to do this is if you haven't already is with the `uri-scheme` package:

<InstallSection packageName="expo-development-client" cmd={["npx uri-scheme add <your scheme>"]} hideBareInstructions />

See the [uri-scheme package](https://www.npmjs.com/package/uri-scheme) for more information.

### 🍏 iOS

Make the following changes to allow the Development Client to control project initialization in the **DEBUG** mode.

<Tabs tabs={["With unimodules", "Without unimodules"]}>

<Tab >
<ConfigurationDiff source="/static/diffs/client/app-delegate.diff" />
</Tab>

<Tab >

> ⚠️ Make sure to replace `MyApp` on line 75 in the following diff with your app's actual module name (found on the removed line 36).

<ConfigurationDiff source="/static/diffs/client/app-delegate-no-unimodules.diff" />

</Tab>

</Tabs>

{'fraction_non_alphanumeric': 0.11276113767933552, 'fraction_numerical': 0.0039013340045305814, 'mean_word_length': 4.908550185873606, 'pattern_counts': {'":': 0, '<': 65, '<?xml version=': 0, '>': 76, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4918936', 'n_tokens_mistral': 2412, 'n_tokens_neox': 2269, 'n_words': 887}