Build: * Updated huycn.zxingcpp.winrt to v1.1.0, enables ARM64 build on RNW >= 0.61 * Updated ReactNativeCameraCPP.sln with RNW 0.63 dependencies * Added ReactNativeCameraCPP62.sln for building against RNW 0.62 * Cleaned up ReactNativeCameraCPP61.sln for building against RNW 0.61 ReactNativeCamera RNCamera component: * Passing unspecified maxDuration to recordAsync no longer stops recording immediately Documentation: * Updated installation docs for RNW 0.63 auto-linking Closes #2942, #2944
469 lines
16 KiB
Markdown
469 lines
16 KiB
Markdown
---
|
|
id: installation
|
|
title: Installation
|
|
---
|
|
|
|
This document is split into two main sections:
|
|
|
|
1. Required installation steps for basic usage of `react-native-camera`
|
|
2. Additional installation steps for usage of Face Detection/Text Recognition/BarCode with [MLKit](https://developers.google.com/ml-kit)
|
|
|
|
# Required installation steps
|
|
|
|
_These steps assume installation for iOS/Android. To install it with Windows, see [Windows](#windows) below_
|
|
|
|
## Mostly automatic install with autolinking (RN > 0.60)
|
|
|
|
1. `npm install react-native-camera --save`
|
|
2. Run `cd ios && pod install && cd ..`
|
|
|
|
## Mostly automatic install with react-native link (RN < 0.60)
|
|
|
|
1. `npm install react-native-camera --save`
|
|
2. `react-native link react-native-camera`
|
|
|
|
## Manual install - iOS (not recommended)
|
|
|
|
1. `npm install react-native-camera --save`
|
|
2. In XCode, in the project navigator, right click `Libraries` ➜ `Add Files to [your project's name]`
|
|
3. Go to `node_modules` ➜ `react-native-camera` and add `RNCamera.xcodeproj`
|
|
4. Expand the `RNCamera.xcodeproj` ➜ `Products` folder
|
|
5. In XCode, in the project navigator, select your project. Add `libRNCamera.a` to your project's `Build Phases` ➜ `Link Binary With Libraries`
|
|
6. Click `RNCamera.xcodeproj` in the project navigator and go the `Build Settings` tab. Make sure 'All' is toggled on (instead of 'Basic'). In the `Search Paths` section, look for `Header Search Paths` and make sure it contains both `$(SRCROOT)/../../react-native/React` and `$(SRCROOT)/../../../React` - mark both as `recursive`.
|
|
|
|
## Manual install - Android (not recommended)
|
|
|
|
1. `npm install react-native-camera --save`
|
|
2. Open up `android/app/src/main/java/[...]/MainApplication.java`
|
|
|
|
- Add `import org.reactnative.camera.RNCameraPackage;` to the imports at the top of the file
|
|
- Add `new RNCameraPackage()` to the list returned by the `getPackages()` method. Add a comma to the previous item if there's already something there.
|
|
|
|
3. Append the following lines to `android/settings.gradle`:
|
|
|
|
```gradle
|
|
include ':react-native-camera'
|
|
project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android')
|
|
```
|
|
|
|
4. Insert the following lines in `android/app/build.gradle` inside the dependencies block:
|
|
|
|
```gradle
|
|
implementation project(':react-native-camera')
|
|
```
|
|
|
|
## iOS - other required steps
|
|
|
|
Add permissions with usage descriptions to your app `Info.plist`:
|
|
|
|
```xml
|
|
<!-- Required with iOS 10 and higher -->
|
|
<key>NSCameraUsageDescription</key>
|
|
<string>Your message to user when the camera is accessed for the first time</string>
|
|
|
|
<!-- Required with iOS 11 and higher: include this only if you are planning to use the camera roll -->
|
|
<key>NSPhotoLibraryAddUsageDescription</key>
|
|
<string>Your message to user when the photo library is accessed for the first time</string>
|
|
|
|
<!-- Include this only if you are planning to use the camera roll -->
|
|
<key>NSPhotoLibraryUsageDescription</key>
|
|
<string>Your message to user when the photo library is accessed for the first time</string>
|
|
|
|
<!-- Include this only if you are planning to use the microphone for video recording -->
|
|
<key>NSMicrophoneUsageDescription</key>
|
|
<string>Your message to user when the microphone is accessed for the first time</string>
|
|
```
|
|
|
|
<details>
|
|
<summary>Additional information in case of problems</summary>
|
|
|
|
You might need to adjust your Podfile following the example below:
|
|
|
|
```ruby
|
|
target 'yourTargetName' do
|
|
# See http://facebook.github.io/react-native/docs/integration-with-existing-apps.html#configuring-cocoapods-dependencies
|
|
pod 'React', :path => '../node_modules/react-native', :subspecs => [
|
|
'Core',
|
|
'CxxBridge', # Include this for RN >= 0.47
|
|
'DevSupport', # Include this to enable In-App Devmenu if RN >= 0.43
|
|
'RCTText',
|
|
'RCTNetwork',
|
|
'RCTWebSocket', # Needed for debugging
|
|
'RCTAnimation', # Needed for FlatList and animations running on native UI thread
|
|
# Add any other subspecs you want to use in your project
|
|
]
|
|
|
|
# Explicitly include Yoga if you are using RN >= 0.42.0
|
|
pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
|
|
|
|
# Third party deps podspec link
|
|
pod 'react-native-camera', path: '../node_modules/react-native-camera'
|
|
|
|
end
|
|
|
|
post_install do |installer|
|
|
installer.pods_project.targets.each do |target|
|
|
if target.name == "React"
|
|
target.remove_from_project
|
|
end
|
|
end
|
|
end
|
|
```
|
|
|
|
</details>
|
|
|
|
## Android - other required steps
|
|
|
|
Add permissions to your app `android/app/src/main/AndroidManifest.xml` file:
|
|
|
|
```xml
|
|
<!-- Required -->
|
|
<uses-permission android:name="android.permission.CAMERA" />
|
|
|
|
<!-- Include this only if you are planning to use the camera roll -->
|
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
|
|
|
<!-- Include this only if you are planning to use the microphone for video recording -->
|
|
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
|
```
|
|
|
|
Insert the following lines in `android/app/build.gradle`:
|
|
|
|
```gradle
|
|
android {
|
|
...
|
|
defaultConfig {
|
|
...
|
|
missingDimensionStrategy 'react-native-camera', 'general' // <--- insert this line
|
|
}
|
|
}
|
|
```
|
|
|
|
<details>
|
|
<summary>Additional information in case of problems</summary>
|
|
|
|
1. Make sure you use `JDK >= 1.7` and your `buildToolsVersion >= 25.0.2`
|
|
|
|
2. Make sure you have jitpack added in `android/build.gradle`
|
|
|
|
```gradle
|
|
allprojects {
|
|
repositories {
|
|
maven { url "https://www.jitpack.io" }
|
|
maven { url "https://maven.google.com" }
|
|
}
|
|
}
|
|
```
|
|
|
|
</details>
|
|
|
|
# Additional installation steps
|
|
|
|
Follow these optional steps if you want to use Face Detection/Text Recognition/BarCode with [MLKit](https://developers.google.com/ml-kit).
|
|
You will need to set-up Firebase project for your app (detailed steps below).
|
|
|
|
_Note:_ Installing [react-native-firebase](https://github.com/invertase/react-native-firebase) package is NOT necessary.
|
|
|
|
## iOS
|
|
|
|
If you want any of these optional features, you will need to use CocoaPods.
|
|
|
|
### Modifying Podfile
|
|
|
|
Add dependency towards `react-native-camera` in your `Podfile` with `subspecs` using one of the following:
|
|
|
|
- For Face Detection:
|
|
|
|
```ruby
|
|
pod 'react-native-camera', path: '../node_modules/react-native-camera', subspecs: [
|
|
'FaceDetectorMLKit'
|
|
]
|
|
```
|
|
|
|
- For Text Recognition:
|
|
|
|
```ruby
|
|
pod 'react-native-camera', path: '../node_modules/react-native-camera', subspecs: [
|
|
'TextDetector'
|
|
]
|
|
```
|
|
|
|
- For BarCode Recognition:
|
|
|
|
```ruby
|
|
pod 'react-native-camera', path: '../node_modules/react-native-camera', subspecs: [
|
|
'BarcodeDetectorMLKit'
|
|
]
|
|
```
|
|
|
|
- For all possible detections:
|
|
|
|
```ruby
|
|
pod 'react-native-camera', path: '../node_modules/react-native-camera', subspecs: [
|
|
'TextDetector',
|
|
'FaceDetectorMLKit',
|
|
'BarcodeDetectorMLKit'
|
|
]
|
|
```
|
|
|
|
Then run `cd ios && pod install && cd ..`
|
|
|
|
### Setting up Firebase
|
|
|
|
Text/Face recognition for iOS uses Firebase MLKit which requires setting up Firebase project for your app.
|
|
If you have not already added Firebase to your app, please follow the steps described in [getting started guide](https://firebase.google.com/docs/ios/setup).
|
|
In short, you would need to
|
|
|
|
1. Register your app in Firebase console.
|
|
2. Download `GoogleService-Info.plist` and add it to your project
|
|
3. Add `pod 'Firebase/Core'` to your podfile
|
|
4. In your `AppDelegate.m` file add the following lines:
|
|
|
|
```objective-c
|
|
#import <Firebase.h> // <--- add this
|
|
...
|
|
|
|
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
|
{
|
|
[FIRApp configure]; // <--- add this
|
|
...
|
|
}
|
|
```
|
|
|
|
<details>
|
|
<summary>Additional information in case of problems</summary>
|
|
|
|
- If you have issues with duplicate symbols you will need to enable dead code stripping option in your Xcode (Target > Build Settings > search for "Dead code stripping") [see here](https://github.com/firebase/quickstart-ios/issues/487#issuecomment-415313053).
|
|
- If you are using `pod Firebase/Core` with a version set below 5.13 you might want to add `pod 'GoogleAppMeasurement', '~> 5.3.0'` to your podfile
|
|
</details>
|
|
|
|
## Android
|
|
|
|
### Modifying build.gradle
|
|
|
|
Modify the following lines in `android/app/build.gradle`:
|
|
|
|
```gradle
|
|
android {
|
|
...
|
|
defaultConfig {
|
|
...
|
|
missingDimensionStrategy 'react-native-camera', 'mlkit' // <--- replace general with mlkit
|
|
}
|
|
}
|
|
```
|
|
|
|
### Setting up Firebase
|
|
|
|
Using Firebase MLKit requires seting up Firebase project for your app. If you have not already added Firebase to your app, please follow the steps described in [getting started guide](https://firebase.google.com/docs/android/setup).
|
|
In short, you would need to
|
|
|
|
1. Register your app in Firebase console.
|
|
2. Download google-services.json and place it in `android/app/`
|
|
3. Add the folowing to project level `build.gradle`:
|
|
|
|
```gradle
|
|
buildscript {
|
|
dependencies {
|
|
// Add this line
|
|
classpath 'com.google.gms:google-services:4.0.1' // <--- you might want to use different version
|
|
}
|
|
}
|
|
```
|
|
|
|
4. add to the bottom of `android/app/build.gradle` file
|
|
|
|
```gradle
|
|
apply plugin: 'com.google.gms.google-services'
|
|
```
|
|
|
|
5. Configure your app to automatically download the ML model to the device after your app is installed from the Play Store. If you do not enable install-time model downloads, the model will be downloaded the first time you run the on-device detector. Requests you make before the download has completed will produce no results.
|
|
|
|
```xml
|
|
<application ...>
|
|
...
|
|
<meta-data
|
|
android:name="com.google.firebase.ml.vision.DEPENDENCIES"
|
|
android:value="ocr, face" /> <!-- choose models that you will use -->
|
|
</application>
|
|
```
|
|
|
|
<details>
|
|
<summary>Additional information in case of problems</summary>
|
|
The current Android library defaults to the below values for the Google SDK and Libraries,
|
|
|
|
```gradle
|
|
def DEFAULT_COMPILE_SDK_VERSION = 26
|
|
def DEFAULT_BUILD_TOOLS_VERSION = "26.0.2"
|
|
def DEFAULT_TARGET_SDK_VERSION = 26
|
|
def DEFAULT_GOOGLE_PLAY_SERVICES_VERSION = "12.0.1"
|
|
def DEFAULT_SUPPORT_LIBRARY_VERSION = "27.1.0"
|
|
```
|
|
|
|
You can override this settings by adding a Project-wide gradle configuration properties for
|
|
use by all modules in your ReactNative project by adding the below to `android/build.gradle`
|
|
file,
|
|
|
|
```gradle
|
|
buildscript {...}
|
|
|
|
allprojects {...}
|
|
|
|
/**
|
|
* Project-wide gradle configuration properties for use by all modules
|
|
*/
|
|
ext {
|
|
compileSdkVersion = 26
|
|
targetSdkVersion = 26
|
|
buildToolsVersion = "26.0.2"
|
|
googlePlayServicesVersion = "12.0.1"
|
|
googlePlayServicesVisionVersion = "15.0.2"
|
|
supportLibVersion = "27.1.0"
|
|
}
|
|
```
|
|
|
|
The above settings in the ReactNative project over-rides the values present in the `react-native-camera`
|
|
module. For your reference below is the `android/build.gradle` file of the module.
|
|
|
|
```gradle
|
|
def safeExtGet(prop, fallback) {
|
|
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
|
|
}
|
|
|
|
buildscript {
|
|
repositories {
|
|
google()
|
|
maven {
|
|
url 'https://maven.google.com'
|
|
}
|
|
jcenter()
|
|
}
|
|
|
|
dependencies {
|
|
classpath 'com.android.tools.build:gradle:3.3.1'
|
|
}
|
|
}
|
|
|
|
apply plugin: 'com.android.library'
|
|
|
|
android {
|
|
compileSdkVersion safeExtGet('compileSdkVersion', 28)
|
|
buildToolsVersion safeExtGet('buildToolsVersion', '28.0.3')
|
|
|
|
defaultConfig {
|
|
minSdkVersion safeExtGet('minSdkVersion', 16)
|
|
targetSdkVersion safeExtGet('targetSdkVersion', 28)
|
|
}
|
|
|
|
flavorDimensions "react-native-camera"
|
|
|
|
productFlavors {
|
|
general {
|
|
dimension "react-native-camera"
|
|
}
|
|
mlkit {
|
|
dimension "react-native-camera"
|
|
}
|
|
}
|
|
|
|
sourceSets {
|
|
main {
|
|
java.srcDirs = ['src/main/java']
|
|
}
|
|
general {
|
|
java.srcDirs = ['src/general/java']
|
|
}
|
|
mlkit {
|
|
java.srcDirs = ['src/mlkit/java']
|
|
}
|
|
}
|
|
|
|
lintOptions {
|
|
abortOnError false
|
|
warning 'InvalidPackage'
|
|
}
|
|
}
|
|
|
|
repositories {
|
|
google()
|
|
jcenter()
|
|
maven {
|
|
url 'https://maven.google.com'
|
|
}
|
|
maven { url "https://jitpack.io" }
|
|
maven {
|
|
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
|
|
url "$rootDir/../node_modules/react-native/android"
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
def googlePlayServicesVisionVersion = safeExtGet('googlePlayServicesVisionVersion', safeExtGet('googlePlayServicesVersion', '17.0.2'))
|
|
|
|
implementation 'com.facebook.react:react-native:+'
|
|
implementation "com.google.zxing:core:3.3.3"
|
|
implementation "com.drewnoakes:metadata-extractor:2.11.0"
|
|
generalImplementation "com.google.android.gms:play-services-vision:$googlePlayServicesVisionVersion"
|
|
implementation "com.android.support:exifinterface:${safeExtGet('supportLibVersion', '28.0.0')}"
|
|
implementation "com.android.support:support-annotations:${safeExtGet('supportLibVersion', '28.0.0')}"
|
|
implementation "com.android.support:support-v4:${safeExtGet('supportLibVersion', '28.0.0')}"
|
|
mlkitImplementation "com.google.firebase:firebase-ml-vision:${safeExtGet('firebase-ml-vision', '19.0.3')}"
|
|
mlkitImplementation "com.google.firebase:firebase-ml-vision-face-model:${safeExtGet('firebase-ml-vision-face-model', '17.0.2')}"
|
|
}
|
|
```
|
|
|
|
If you are using a version of `googlePlayServicesVersion` that does not have `play-services-vision`, you can specify a different version of `play-services-vision` by adding `googlePlayServicesVisionVersion` to the project-wide properties
|
|
|
|
```gradle
|
|
ext {
|
|
compileSdkVersion = 26
|
|
targetSdkVersion = 26
|
|
buildToolsVersion = "26.0.2"
|
|
googlePlayServicesVersion = "16.0.1"
|
|
googlePlayServicesVisionVersion = "15.0.2"
|
|
supportLibVersion = "27.1.0"
|
|
}
|
|
```
|
|
|
|
</details>
|
|
|
|
# Windows
|
|
|
|
## Mostly automatic install with autolinking (RNW >= 0.63)
|
|
|
|
1. `npm install react-native-camera --save`
|
|
2. See [Additional steps - Windows](#additional-steps-windows) below
|
|
|
|
## Manual install - Windows (RNW 0.62)
|
|
|
|
1. `npm install react-native-camera --save`
|
|
2. Link the library as described below:
|
|
1. Add the _ReactNativeCameraCPP_ project to your solution (eg. `windows\yourapp.sln`)
|
|
1. Open your solution in Visual Studio 2019
|
|
2. Right-click Solution icon in Solution Explorer > Add > Existing Project...
|
|
3. Select `node_modules\react-native-camera\windows\ReactNativeCameraCPP\ReactNativeCameraCPP.vcxproj`
|
|
2. Add a reference to _ReactNativeCameraCPP_ to your main application project (eg. `windows\yourapp\yourapp.vcxproj`)
|
|
1. Open your solution in Visual Studio 2019
|
|
2. Right-click main application project > Add > Reference...
|
|
3. Check _ReactNativeCameraCPP_ from Solution Projects
|
|
3. Modify files below to add the package providers to your main application project
|
|
1. `pch.h`
|
|
1. Add `#include "winrt/ReactNativeCameraCPP.h"`
|
|
2. `App.cpp`
|
|
1. Add `PackageProviders().Append(winrt::ReactNativeCameraCPP::ReactPackageProvider());` before `InitializeComponent();`
|
|
4. See [Additional steps - Windows](#additional-steps-windows) below
|
|
|
|
## Manual install - Windows (RNW 0.61)
|
|
|
|
Follow [Manual install - Windows (RNW 0.62)](#manual-install-windows-rnw-062) above, but for step 2 substitute _ReactNativeCameraCPP61_ for _ReactNativeCameraCPP_.
|
|
|
|
## Additional steps - Windows
|
|
|
|
You need to declare that your app wants to access the camera:
|
|
|
|
1. Add the capabilities (permissions) for the webcam and microphone as described here: [Add capability declarations to the app manifest](https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/simple-camera-preview-access#add-capability-declarations-to-the-app-manifest)
|
|
2. If you plan on capturing images to the Pictures Library, or videos to the Videos Library, be sure to enable those capabilities too
|
|
|
|
Follow the [Q & A](QA.md) section if you are having compilation issues.
|