Figment AR
This repository contains the entire source code, built using ViroReact and React Native, for Viro Media's Figment AR App. Available on Google Play and App Store.
Installation
Follow the installation guide below to set up and run this source code locally on Mac/Linux (For setting up on Windows, go through Windows specific steps to setup Android Studio here and here
Prerequisites
-
Make sure you have signed up on www.viromedia.com/signup and have your API key
-
And have gone through our Quick Start (Mac/Linux) page and installed the required dependencies.
-
iOS Device with A9 chip or higher and running iOS 11 or an ARCore supported device running Android N or higher.
-
For iOS - Xcode 9 or later.
-
For Android - Android Studio for the Android SDK and tools.
Make sure to install the Android SDK and build tools for API level 26
Clone Repo
git clone https://github.com/viromedia/figment-ar.git
cd figment-ar
Install and setup dependencies
All platforms
npm install
iOS
cd ios
pod install
Android
Nothing needed here
Running and Debugging the app
Add your API key
Open file js/app.js
. Update ViroARSceneNavigator
definition's apiKey
at lines 127 with your own API Key
Android
- For Android, make sure you have downloaded and installed Android Studio from here to get required SDK and platform-tools for building android apps
Make sure you have the required environment variables set -
$ANDROID_HOME
, and addedplatform-tools
to$PATH
variable. If not,export ANDROID_HOME=/YOUR_PATH_TO/Android/sdk export PATH=$ANDROID_HOME/platform-tools:$PATH export PATH=$ANDROID_HOME/tools:$PATH
- To build, install and launch the android app, from the root of the project (
viro/
directory)react-native run-android --variant=gvrDebug
iOS
For building iOS App via Xcode
- Open Xcode workspace
cd ios
open figment.xcworkspace
- Select correct Team and Provisioning Profiles for Signing the app in Xcode.
- Click Play button to build and install
Project Structure
The JS portion of the app is structured as below:
figment-ar/js/
├── app.js // Entry point for the app
├── figment.js // AR Scene where all the Viro Components are rendered
├── component
│  ├── ARInitializationUI.js // AR Initialization animation
│  ├── ButtonComponent.js // Buttons used in the bottom-left menu switching listview contents between Portals, Objects, Effect
│  ├── ContextMenuButton.js // Menu on the top right that appears when you tap a 3D object / Portal
│  ├── EffectItemRender.js // Render the selected effect from listview
│  ├── FigmentListView.js // ListView at the bottom
│  ├── ListViewItem.js // Individual items in ListView
│  ├── ModelItemRender.js // Render the Model (Object) from the listview added by user
│  ├── PSConstants.js // Constants used in PhotoSelector and Portals
│  ├── PhotosSelector.js // UI to enable user to select backgrounds for Portals
│  ├── PortalItemRender.js // Render the Object from the listview added by user
│  ├── RecordButton.js // Red record video button at the bottom
│  ├── ShareScreenButtonComponent.js // Share button on preview screen
│  └── SuccessAnimation.js // Save to Camera Roll Success animation
├── effects
│  └── effects.js // Post Processing effects and Particle Emitters list
├── helpers
│  └── renderIf.js // Helper function for conditional rendering
├── model
│  ├── EffectItems.js // Data model for Effects
│  ├── ModelItems.js // Data model for Models (Objects)
│  ├── PortalItems.js // Data model for Portals
│  └── emitters
│  ├── BirthdayCakeEmitter.js // Particle Emitter for "flame" on top of birthday cake
│  ├── EmojiAngryEmitter.js // Particle Emitter for "smoke" coming out from Angry Emoji's ears
│  └── ParticleEmitter.js // Helper function to add above particle emitters to birthday cake and emoji models
├── redux
│  ├── EffectsConstants.js
│  ├── LoadingStateConstants.js
│  ├── UIConstants.js
│  ├── actions
│  │  └── index.js // Redux actions
│  └── reducers
│  ├── arobjects.js // Redux store / reducers for Viro components in AR Scene
│  ├── index.js // Combining arobjects.js and ui.js reducers
│  └── ui.js // Redux store / reducers for 2D UI components
└── res
Troubleshooting
For iOS you might run into a few issues such as follows:
Xcode: Undefined symbols for architecture x86_64: "JSObjectGetPrototype"
Refer to facebook/react-native#23183 for how to fix it
"TextCompositionLayer.swift" used twice IOS
Refer to lottie-react-native/lottie-react-native#523 for how to fix
If doing the steps mentioned on lottie-react-native
does not fix it, open Lottie.xcodeproj in your Xcode's project explorer under Libraries and search for TextCompositionLayer.swift
. You might notice this file being included twice. Simply delete one of them from Xcode (reference only). It's basically including two copies of the same file. And that should resolve the problem for you.