diff --git a/__mocks__/react-native-realm-path.js b/__mocks__/react-native-realm-path.js
new file mode 100644
index 000000000..5df7c3985
--- /dev/null
+++ b/__mocks__/react-native-realm-path.js
@@ -0,0 +1,3 @@
+export default {
+ realmPath: ''
+};
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 9d2271ef0..f8eb15bf8 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -174,6 +174,8 @@ android {
dependencies {
addUnimodulesDependencies()
implementation "org.webkit:android-jsc:r241213"
+ implementation project(':rn-extensions-share')
+ implementation project(':rn-fetch-blob')
implementation project(':react-native-document-picker')
implementation project(':react-native-firebase')
implementation project(':react-native-webview')
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index e18141cc0..df3179623 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -5,8 +5,10 @@
+
+
+
@@ -36,6 +39,19 @@
+
+
+
+
+
+
+
diff --git a/android/app/src/main/java/chat/rocket/reactnative/MainApplication.java b/android/app/src/main/java/chat/rocket/reactnative/MainApplication.java
index a2b1eed84..89c788f32 100644
--- a/android/app/src/main/java/chat/rocket/reactnative/MainApplication.java
+++ b/android/app/src/main/java/chat/rocket/reactnative/MainApplication.java
@@ -34,6 +34,8 @@ import com.learnium.RNDeviceInfo.RNDeviceInfo;
import com.actionsheet.ActionSheetPackage;
import io.realm.react.RealmReactPackage;
import com.swmansion.rnscreens.RNScreensPackage;
+import chat.rocket.SharePackage;
+import com.RNFetchBlob.RNFetchBlobPackage;
import chat.rocket.reactnative.generated.BasePackageList;
@@ -69,6 +71,8 @@ public class MainApplication extends Application implements ReactApplication, IN
new RNCWebViewPackage(),
new OrientationPackage(),
new SplashScreenReactPackage(),
+ new SharePackage(),
+ new RNFetchBlobPackage(),
new RNGestureHandlerPackage(),
new RNScreensPackage(),
new ActionSheetPackage(),
diff --git a/android/app/src/main/java/chat/rocket/reactnative/share/ShareActivity.java b/android/app/src/main/java/chat/rocket/reactnative/share/ShareActivity.java
new file mode 100644
index 000000000..873db3473
--- /dev/null
+++ b/android/app/src/main/java/chat/rocket/reactnative/share/ShareActivity.java
@@ -0,0 +1,23 @@
+package chat.rocket.reactnative.share;
+
+import com.facebook.react.ReactActivity;
+import com.facebook.react.ReactActivityDelegate;
+import com.facebook.react.ReactRootView;
+import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
+
+public class ShareActivity extends ReactActivity {
+ @Override
+ protected String getMainComponentName() {
+ return "ShareRocketChatRN";
+ }
+
+ @Override
+ protected ReactActivityDelegate createReactActivityDelegate() {
+ return new ReactActivityDelegate(this, getMainComponentName()) {
+ @Override
+ protected ReactRootView createRootView() {
+ return new RNGestureHandlerEnabledRootView(ShareActivity.this);
+ }
+ };
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/java/chat/rocket/reactnative/share/ShareApplication.java b/android/app/src/main/java/chat/rocket/reactnative/share/ShareApplication.java
new file mode 100644
index 000000000..94cd8b861
--- /dev/null
+++ b/android/app/src/main/java/chat/rocket/reactnative/share/ShareApplication.java
@@ -0,0 +1,38 @@
+package chat.rocket.reactnative.share;
+
+import chat.rocket.reactnative.BuildConfig;
+
+import chat.rocket.SharePackage;
+
+import android.app.Application;
+
+import com.facebook.react.shell.MainReactPackage;
+import com.facebook.react.ReactNativeHost;
+import com.facebook.react.ReactApplication;
+import com.facebook.react.ReactPackage;
+
+import java.util.Arrays;
+import java.util.List;
+
+
+public class ShareApplication extends Application implements ReactApplication {
+ private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
+ @Override
+ public boolean getUseDeveloperSupport() {
+ return BuildConfig.DEBUG;
+ }
+
+ @Override
+ protected List getPackages() {
+ return Arrays.asList(
+ new MainReactPackage(),
+ new SharePackage()
+ );
+ }
+ };
+
+ @Override
+ public ReactNativeHost getReactNativeHost() {
+ return mReactNativeHost;
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index 4066067af..afec33cb3 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
Rocket.Chat Experimental
-
+ Rocket.Chat Experimental
No Browser Found
diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml
index a555a172a..28c600d30 100644
--- a/android/app/src/main/res/values/styles.xml
+++ b/android/app/src/main/res/values/styles.xml
@@ -2,4 +2,19 @@
+
+
+
+
diff --git a/android/settings.gradle b/android/settings.gradle
index e5b09cafc..73f1ee150 100644
--- a/android/settings.gradle
+++ b/android/settings.gradle
@@ -38,4 +38,8 @@ include ':realm'
project(':realm').projectDir = new File(rootProject.projectDir, '../node_modules/realm/android')
include ':reactnativenotifications'
project(':reactnativenotifications').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-notifications/android')
-include ':app'
+include ':rn-fetch-blob'
+project(':rn-fetch-blob').projectDir = new File(rootProject.projectDir, '../node_modules/rn-fetch-blob/android')
+include ':app', ':rn-extensions-share'
+project(':rn-extensions-share').projectDir = new File(rootProject.projectDir, '../node_modules/rn-extensions-share/android')
+
diff --git a/app.json b/app.json
index 181bef970..7b3a422dc 100644
--- a/app.json
+++ b/app.json
@@ -1,4 +1,5 @@
{
"name": "RocketChatRN",
+ "share": "ShareRocketChatRN",
"displayName": "RocketChatRN"
}
\ No newline at end of file
diff --git a/app/constants/settings.js b/app/constants/settings.js
index 17eb1560f..cf28f6364 100644
--- a/app/constants/settings.js
+++ b/app/constants/settings.js
@@ -68,16 +68,16 @@ export default {
Threads_enabled: {
type: null
},
- API_Gitlab_URL: {
- type: 'valueAsString'
- },
- AutoTranslate_Enabled: {
- type: 'valueAsBoolean'
- },
FileUpload_MediaTypeWhiteList: {
type: 'valueAsString'
},
FileUpload_MaxFileSize: {
type: 'valueAsNumber'
+ },
+ API_Gitlab_URL: {
+ type: 'valueAsString'
+ },
+ AutoTranslate_Enabled: {
+ type: 'valueAsBoolean'
}
};
diff --git a/app/containers/HeaderButton.js b/app/containers/HeaderButton.js
index b31fb814e..e1550b4c0 100644
--- a/app/containers/HeaderButton.js
+++ b/app/containers/HeaderButton.js
@@ -32,6 +32,15 @@ export const CloseModalButton = React.memo(({ navigation, testID }) => (
));
+export const CloseShareExtensionButton = React.memo(({ onPress, testID }) => (
+
+ {isIOS
+ ?
+ :
+ }
+
+));
+
export const MoreButton = React.memo(({ onPress, testID }) => (
@@ -50,6 +59,10 @@ CloseModalButton.propTypes = {
navigation: PropTypes.object.isRequired,
testID: PropTypes.string.isRequired
};
+CloseShareExtensionButton.propTypes = {
+ onPress: PropTypes.func.isRequired,
+ testID: PropTypes.string.isRequired
+};
MoreButton.propTypes = {
onPress: PropTypes.func.isRequired,
testID: PropTypes.string.isRequired
diff --git a/app/containers/RoomTypeIcon.js b/app/containers/RoomTypeIcon.js
index 433dfe984..ece1a80ea 100644
--- a/app/containers/RoomTypeIcon.js
+++ b/app/containers/RoomTypeIcon.js
@@ -7,8 +7,12 @@ import { COLOR_TEXT_DESCRIPTION } from '../constants/colors';
const styles = StyleSheet.create({
style: {
marginRight: 7,
- marginTop: 3,
- tintColor: COLOR_TEXT_DESCRIPTION,
+ marginTop: 3
+ },
+ imageColor: {
+ tintColor: COLOR_TEXT_DESCRIPTION
+ },
+ iconColor: {
color: COLOR_TEXT_DESCRIPTION
},
discussion: {
@@ -23,13 +27,15 @@ const RoomTypeIcon = React.memo(({ type, size, style }) => {
if (type === 'discussion') {
// FIXME: These are temporary only. We should have all room icons on , but our design team is still working on this.
- return ;
+ return ;
}
if (type === 'c') {
- return ;
+ return ;
+ } if (type === 'd') {
+ return ;
}
- return ;
+ return ;
});
RoomTypeIcon.propTypes = {
diff --git a/app/i18n/locales/en.js b/app/i18n/locales/en.js
index 88476839a..f26cfd8de 100644
--- a/app/i18n/locales/en.js
+++ b/app/i18n/locales/en.js
@@ -103,6 +103,7 @@ export default {
Avatar_changed_successfully: 'Avatar changed successfully!',
Avatar_Url: 'Avatar URL',
Away: 'Away',
+ Back: 'Back',
Block_user: 'Block user',
Broadcast_channel_Description: 'Only authorized users can write new messages, but the other users will be able to reply',
Broadcast_Channel: 'Broadcast Channel',
@@ -310,6 +311,8 @@ export default {
Search_global_users: 'Search for global users',
Search_global_users_description: 'If you turn-on, you can search for any user from others companies or servers.',
Select_Avatar: 'Select Avatar',
+ Select_Channels: 'Select Channels',
+ Select_Server: 'Select Server',
Select_Users: 'Select Users',
Send: 'Send',
Send_audio_message: 'Send audio message',
@@ -349,6 +352,7 @@ export default {
Thread: 'Thread',
Threads: 'Threads',
Timezone: 'Timezone',
+ To: 'To',
topic: 'topic',
Topic: 'Topic',
Translate: 'Translate',
@@ -389,6 +393,7 @@ export default {
Welcome: 'Welcome',
Welcome_to_RocketChat: 'Welcome to Rocket.Chat',
Whats_your_2fa: 'What\'s your 2FA code?',
+ Without_Servers: 'Without Servers',
Yes_action_it: 'Yes, {{action}} it!',
Yesterday: 'Yesterday',
You_are_in_preview_mode: 'You are in preview mode',
@@ -398,6 +403,7 @@ export default {
you_were_mentioned: 'you were mentioned',
you: 'you',
You: 'You',
+ You_need_to_access_at_least_one_RocketChat_server_to_share_something: 'You need to access at least one Rocket.Chat server to share something.',
Version_no: 'Version: {{version}}',
You_will_not_be_able_to_recover_this_message: 'You will not be able to recover this message!',
Change_Language: 'Change Language',
diff --git a/app/i18n/locales/pt-BR.js b/app/i18n/locales/pt-BR.js
index c9f2dee52..cb321841e 100644
--- a/app/i18n/locales/pt-BR.js
+++ b/app/i18n/locales/pt-BR.js
@@ -108,6 +108,7 @@ export default {
Avatar_changed_successfully: 'Avatar alterado com sucesso!',
Avatar_Url: 'Avatar URL',
Away: 'Ausente',
+ Back: 'Voltar',
Block_user: 'Bloquear usuário',
Broadcast_channel_Description: 'Somente usuários autorizados podem escrever novas mensagens, mas os outros usuários poderão responder',
Broadcast_Channel: 'Canal de Transmissão',
@@ -301,6 +302,8 @@ export default {
Search_global_users: 'Busca por usuários globais',
Search_global_users_description: 'Caso ativado, busca por usuários de outras empresas ou servidores.',
Select_Avatar: 'Selecionar Avatar',
+ Select_Channels: 'Selecionar Canais',
+ Select_Server: 'Selecionar Servidor',
Select_Users: 'Selecionar Usuários',
Send: 'Enviar',
Send_audio_message: 'Enviar mensagem de áudio',
@@ -333,6 +336,7 @@ export default {
Thread: 'Tópico',
Threads: 'Tópicos',
Timezone: 'Fuso horário',
+ To: 'Para',
topic: 'tópico',
Topic: 'Tópico',
Try_again: 'Tentar novamente',
@@ -369,6 +373,7 @@ export default {
Welcome: 'Bem vindo',
Welcome_to_RocketChat: 'Bem vindo ao Rocket.Chat',
Whats_your_2fa: 'Qual seu código de autenticação?',
+ Without_Servers: 'Sem Servidores',
Yes_action_it: 'Sim, {{action}}!',
Yesterday: 'Ontem',
You_are_in_preview_mode: 'Está é uma prévia do canal',
diff --git a/app/index.js b/app/index.js
index e98d0e133..5d2b44bac 100644
--- a/app/index.js
+++ b/app/index.js
@@ -5,18 +5,17 @@ import {
import { Provider } from 'react-redux';
import { useScreens } from 'react-native-screens'; // eslint-disable-line import/no-unresolved
import { Linking } from 'react-native';
-import firebase from 'react-native-firebase';
import PropTypes from 'prop-types';
import { appInit } from './actions';
import { deepLinkingOpen } from './actions/deepLinking';
import Navigation from './lib/Navigation';
import Sidebar from './views/SidebarView';
-import { HEADER_BACKGROUND, HEADER_TITLE, HEADER_BACK } from './constants/colors';
import parseQuery from './lib/methods/helpers/parseQuery';
import { initializePushNotifications, onNotification } from './notifications/push';
import store from './lib/createStore';
import NotificationBadge from './notifications/inApp';
+import { defaultHeader, onNavigationStateChange } from './utils/navigation';
useScreens();
@@ -34,17 +33,6 @@ const parseDeepLinking = (url) => {
return null;
};
-const defaultHeader = {
- headerStyle: {
- backgroundColor: HEADER_BACKGROUND
- },
- headerTitleStyle: {
- color: HEADER_TITLE
- },
- headerBackTitle: null,
- headerTintColor: HEADER_BACK
-};
-
// Outside
const OutsideStack = createStackNavigator({
OnboardingView: {
@@ -262,28 +250,6 @@ const App = createAppContainer(createSwitchNavigator(
}
));
-// gets the current screen from navigation state
-const getActiveRouteName = (navigationState) => {
- if (!navigationState) {
- return null;
- }
- const route = navigationState.routes[navigationState.index];
- // dive into nested navigators
- if (route.routes) {
- return getActiveRouteName(route);
- }
- return route.routeName;
-};
-
-const onNavigationStateChange = (prevState, currentState) => {
- const currentScreen = getActiveRouteName(currentState);
- const prevScreen = getActiveRouteName(prevState);
-
- if (prevScreen !== currentScreen) {
- firebase.analytics().setCurrentScreen(currentScreen);
- }
-};
-
export default class Root extends React.Component {
constructor(props) {
super(props);
diff --git a/app/lib/realm.js b/app/lib/realm.js
index 7b4277882..9980c3a1f 100644
--- a/app/lib/realm.js
+++ b/app/lib/realm.js
@@ -1,4 +1,5 @@
import Realm from 'realm';
+import RNRealmPath from 'react-native-realm-path';
// import { AsyncStorage } from 'react-native';
// Realm.clearTestState();
@@ -408,7 +409,7 @@ const inMemorySchema = [usersTypingSchema, activeUsersSchema];
class DB {
databases = {
serversDB: new Realm({
- path: 'default.realm',
+ path: `${ RNRealmPath.realmPath }default.realm`,
schema: [
userSchema,
serversSchema
@@ -426,7 +427,7 @@ class DB {
}
}),
inMemoryDB: new Realm({
- path: 'memory.realm',
+ path: `${ RNRealmPath.realmPath }memory.realm`,
schema: inMemorySchema,
schemaVersion: 2,
inMemory: true
@@ -468,7 +469,7 @@ class DB {
setActiveDB(database = '') {
const path = database.replace(/(^\w+:|^)\/\//, '');
return this.databases.activeDB = new Realm({
- path: `${ path }.realm`,
+ path: `${ RNRealmPath.realmPath }${ path }.realm`,
schema,
schemaVersion: 13,
migration: (oldRealm, newRealm) => {
diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js
index 364a43816..7b3e75ae5 100644
--- a/app/lib/rocketchat.js
+++ b/app/lib/rocketchat.js
@@ -730,14 +730,14 @@ const RocketChat = {
return JSON.parse(useMarkdown);
},
async getSortPreferences() {
- const prefs = await AsyncStorage.getItem(SORT_PREFS_KEY);
- return JSON.parse(prefs);
+ const prefs = await RNUserDefaults.objectForKey(SORT_PREFS_KEY);
+ return prefs;
},
async saveSortPreference(param) {
try {
let prefs = await RocketChat.getSortPreferences();
prefs = { ...prefs, ...param };
- return await AsyncStorage.setItem(SORT_PREFS_KEY, JSON.stringify(prefs));
+ return await RNUserDefaults.setObjectForKey(SORT_PREFS_KEY, prefs);
} catch (error) {
console.warn(error);
}
diff --git a/app/views/DirectoryView/DirectoryItem.js b/app/presentation/DirectoryItem/index.js
similarity index 94%
rename from app/views/DirectoryView/DirectoryItem.js
rename to app/presentation/DirectoryItem/index.js
index 620f5dae0..652113e62 100644
--- a/app/views/DirectoryView/DirectoryItem.js
+++ b/app/presentation/DirectoryItem/index.js
@@ -5,7 +5,9 @@ import PropTypes from 'prop-types';
import Avatar from '../../containers/Avatar';
import Touch from '../../utils/touch';
import RoomTypeIcon from '../../containers/RoomTypeIcon';
-import styles from './styles';
+import styles, { ROW_HEIGHT } from './styles';
+
+export { ROW_HEIGHT };
const DirectoryItemLabel = React.memo(({ text }) => {
if (!text) {
@@ -30,7 +32,7 @@ const DirectoryItem = ({
/>
-
+
{title}
{description}
diff --git a/app/presentation/DirectoryItem/styles.js b/app/presentation/DirectoryItem/styles.js
new file mode 100644
index 000000000..0e8382d06
--- /dev/null
+++ b/app/presentation/DirectoryItem/styles.js
@@ -0,0 +1,49 @@
+import { StyleSheet } from 'react-native';
+
+import { COLOR_WHITE } from '../../constants/colors';
+import sharedStyles from '../../views/Styles';
+
+export const ROW_HEIGHT = 54;
+
+export default StyleSheet.create({
+ directoryItemButton: {
+ height: ROW_HEIGHT,
+ backgroundColor: COLOR_WHITE
+ },
+ directoryItemContainer: {
+ flex: 1,
+ flexDirection: 'row',
+ alignItems: 'center',
+ justifyContent: 'center',
+ paddingHorizontal: 15
+ },
+ directoryItemAvatar: {
+ marginRight: 12
+ },
+ directoryItemTextTitle: {
+ flexDirection: 'row',
+ alignItems: 'center'
+ },
+ directoryItemTextContainer: {
+ flex: 1,
+ flexDirection: 'column',
+ justifyContent: 'center'
+ },
+ directoryItemName: {
+ flex: 1,
+ fontSize: 17,
+ ...sharedStyles.textMedium,
+ ...sharedStyles.textColorNormal
+ },
+ directoryItemUsername: {
+ fontSize: 14,
+ ...sharedStyles.textRegular,
+ ...sharedStyles.textColorDescription
+ },
+ directoryItemLabel: {
+ fontSize: 14,
+ paddingLeft: 10,
+ ...sharedStyles.textRegular,
+ ...sharedStyles.textColorDescription
+ }
+});
diff --git a/app/presentation/ServerItem/index.js b/app/presentation/ServerItem/index.js
new file mode 100644
index 000000000..644fa1a22
--- /dev/null
+++ b/app/presentation/ServerItem/index.js
@@ -0,0 +1,53 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { View, Text } from 'react-native';
+import FastImage from 'react-native-fast-image';
+import { RectButton } from 'react-native-gesture-handler';
+
+import log from '../../utils/log';
+import Check from '../../containers/Check';
+import styles, { ROW_HEIGHT } from './styles';
+
+export { ROW_HEIGHT };
+
+const ServerItem = React.memo(({
+ server, item, onPress, hasCheck
+}) => (
+
+
+ {item.iconURL
+ ? (
+ log('err_loading_server_icon')}
+ />
+ )
+ : (
+
+ )
+ }
+
+ {item.name || item.id}
+ {item.id}
+
+ {item.id === server && hasCheck ? : null}
+
+
+));
+
+ServerItem.propTypes = {
+ onPress: PropTypes.func.isRequired,
+ item: PropTypes.object.isRequired,
+ hasCheck: PropTypes.bool,
+ server: PropTypes.string
+};
+
+export default ServerItem;
diff --git a/app/presentation/ServerItem/styles.js b/app/presentation/ServerItem/styles.js
new file mode 100644
index 000000000..c8eb4f260
--- /dev/null
+++ b/app/presentation/ServerItem/styles.js
@@ -0,0 +1,39 @@
+import { StyleSheet } from 'react-native';
+
+import sharedStyles from '../../views/Styles';
+import { COLOR_WHITE } from '../../constants/colors';
+
+export const ROW_HEIGHT = 56;
+
+export default StyleSheet.create({
+ serverItem: {
+ height: ROW_HEIGHT,
+ backgroundColor: COLOR_WHITE,
+ justifyContent: 'center'
+ },
+ serverItemContainer: {
+ flexDirection: 'row',
+ alignItems: 'center'
+ },
+ serverIcon: {
+ width: 38,
+ height: 38,
+ marginHorizontal: 15,
+ borderRadius: 4
+ },
+ serverTextContainer: {
+ flex: 1,
+ flexDirection: 'column',
+ justifyContent: 'center'
+ },
+ serverName: {
+ fontSize: 18,
+ ...sharedStyles.textColorNormal,
+ ...sharedStyles.textSemibold
+ },
+ serverUrl: {
+ fontSize: 15,
+ ...sharedStyles.textColorDescription,
+ ...sharedStyles.textRegular
+ }
+});
diff --git a/app/share.js b/app/share.js
new file mode 100644
index 000000000..a1441164f
--- /dev/null
+++ b/app/share.js
@@ -0,0 +1,78 @@
+import React from 'react';
+import { View } from 'react-native';
+import { createAppContainer, createStackNavigator, createSwitchNavigator } from 'react-navigation';
+import { Provider } from 'react-redux';
+
+import Navigation from './lib/Navigation';
+import store from './lib/createStore';
+import { appInit } from './actions';
+import ShareListView from './views/ShareListView';
+import ShareView from './views/ShareView';
+import SelectServerView from './views/SelectServerView';
+import AuthLoadingView from './views/AuthLoadingView';
+import WithoutServersView from './views/WithoutServersView';
+import sharedStyles from './views/Styles';
+import { isNotch } from './utils/deviceInfo';
+import { defaultHeader, onNavigationStateChange } from './utils/navigation';
+
+
+const InsideNavigator = createStackNavigator({
+ ShareListView,
+ ShareView,
+ SelectServerView
+}, {
+ initialRouteName: 'ShareListView',
+ defaultNavigationOptions: defaultHeader
+});
+
+const OutsideNavigator = createStackNavigator({
+ WithoutServersView
+}, {
+ initialRouteName: 'WithoutServersView',
+ defaultNavigationOptions: defaultHeader
+});
+
+const AppContainer = createAppContainer(createSwitchNavigator({
+ OutsideStack: OutsideNavigator,
+ InsideStack: InsideNavigator,
+ AuthLoading: AuthLoadingView
+},
+{
+ initialRouteName: 'AuthLoading'
+}));
+
+class Root extends React.Component {
+ constructor(props) {
+ super(props);
+ store.dispatch(appInit());
+ this.state = {
+ isLandscape: false
+ };
+ }
+
+ handleLayout = (event) => {
+ const { width, height } = event.nativeEvent.layout;
+ this.setState({ isLandscape: width > height });
+ }
+
+ render() {
+ const { isLandscape } = this.state;
+ return (
+
+
+ {
+ Navigation.setTopLevelNavigator(navigatorRef);
+ }}
+ onNavigationStateChange={onNavigationStateChange}
+ />
+
+
+ );
+ }
+}
+
+export default Root;
diff --git a/app/utils/navigation.js b/app/utils/navigation.js
new file mode 100644
index 000000000..539214684
--- /dev/null
+++ b/app/utils/navigation.js
@@ -0,0 +1,36 @@
+import firebase from 'react-native-firebase';
+
+import { HEADER_BACKGROUND, HEADER_TITLE, HEADER_BACK } from '../constants/colors';
+
+export const defaultHeader = {
+ headerStyle: {
+ backgroundColor: HEADER_BACKGROUND
+ },
+ headerTitleStyle: {
+ color: HEADER_TITLE
+ },
+ headerBackTitle: null,
+ headerTintColor: HEADER_BACK
+};
+
+// gets the current screen from navigation state
+export const getActiveRouteName = (navigationState) => {
+ if (!navigationState) {
+ return null;
+ }
+ const route = navigationState.routes[navigationState.index];
+ // dive into nested navigators
+ if (route.routes) {
+ return getActiveRouteName(route);
+ }
+ return route.routeName;
+};
+
+export const onNavigationStateChange = (prevState, currentState) => {
+ const currentScreen = getActiveRouteName(currentState);
+ const prevScreen = getActiveRouteName(prevState);
+
+ if (prevScreen !== currentScreen) {
+ firebase.analytics().setCurrentScreen(currentScreen);
+ }
+};
diff --git a/app/utils/room.js b/app/utils/room.js
index 0e2f5dfb1..3131a6407 100644
--- a/app/utils/room.js
+++ b/app/utils/room.js
@@ -2,6 +2,27 @@ import moment from 'moment';
import I18n from '../i18n';
+export const isOwner = room => room && room.roles && room.roles.length && !!room.roles.find(role => role === 'owner');
+
+export const isMuted = (room, user) => room && room.muted && room.muted.find && !!room.muted.find(m => m === user.username);
+
+export const isReadOnly = (room, user) => {
+ if (isOwner(room)) {
+ return false;
+ }
+ return (room && room.ro) || isMuted(room, user);
+};
+
+export const isBlocked = (room) => {
+ if (room) {
+ const { t, blocked, blocker } = room;
+ if (t === 'd' && (blocked || blocker)) {
+ return true;
+ }
+ }
+ return false;
+};
+
export const capitalize = (s) => {
if (typeof s !== 'string') { return ''; }
return s.charAt(0).toUpperCase() + s.slice(1);
diff --git a/app/views/DirectoryView/index.js b/app/views/DirectoryView/index.js
index 60a12932e..55034ca08 100644
--- a/app/views/DirectoryView/index.js
+++ b/app/views/DirectoryView/index.js
@@ -7,7 +7,7 @@ import { connect } from 'react-redux';
import { SafeAreaView } from 'react-navigation';
import RocketChat from '../../lib/rocketchat';
-import DirectoryItem from './DirectoryItem';
+import DirectoryItem from '../../presentation/DirectoryItem';
import sharedStyles from '../Styles';
import I18n from '../../i18n';
import Touch from '../../utils/touch';
diff --git a/app/views/DirectoryView/styles.js b/app/views/DirectoryView/styles.js
index 59e60da2b..327c05cc2 100644
--- a/app/views/DirectoryView/styles.js
+++ b/app/views/DirectoryView/styles.js
@@ -98,46 +98,6 @@ export default StyleSheet.create({
marginHorizontal: 15,
flex: 1
},
- directoryItemButton: {
- height: 54,
- backgroundColor: COLOR_WHITE
- },
- directoryItemContainer: {
- flex: 1,
- flexDirection: 'row',
- alignItems: 'center',
- justifyContent: 'center',
- paddingHorizontal: 15
- },
- directoryItemAvatar: {
- marginRight: 12
- },
- directoryItemTextTitle: {
- flexDirection: 'row',
- alignItems: 'center'
- },
- directoryItemTextContainer: {
- flex: 1,
- flexDirection: 'column',
- justifyContent: 'center'
- },
- directoryItemName: {
- flex: 1,
- fontSize: 17,
- ...sharedStyles.textMedium,
- ...sharedStyles.textColorNormal
- },
- directoryItemUsername: {
- fontSize: 14,
- ...sharedStyles.textRegular,
- ...sharedStyles.textColorDescription
- },
- directoryItemLabel: {
- fontSize: 14,
- paddingLeft: 10,
- ...sharedStyles.textRegular,
- ...sharedStyles.textColorDescription
- },
inverted: {
transform: [{ scaleY: -1 }]
},
diff --git a/app/views/RoomView/index.js b/app/views/RoomView/index.js
index f2dfaf673..1dc669c69 100644
--- a/app/views/RoomView/index.js
+++ b/app/views/RoomView/index.js
@@ -42,6 +42,7 @@ import buildMessage from '../../lib/methods/helpers/buildMessage';
import FileModal from '../../containers/FileModal';
import ReactionsModal from '../../containers/ReactionsModal';
import { Toast } from '../../utils/info';
+import { isReadOnly, isBlocked } from '../../utils/room';
@connect(state => ({
user: {
@@ -455,37 +456,6 @@ export default class RoomView extends React.Component {
}
};
- isOwner = () => {
- const { room } = this.state;
- return room && room.roles && room.roles.length && !!room.roles.find(role => role === 'owner');
- }
-
- isMuted = () => {
- const { room } = this.state;
- const { user } = this.props;
- return room && room.muted && room.muted.find && !!room.muted.find(m => m === user.username);
- }
-
- isReadOnly = () => {
- const { room } = this.state;
- if (this.isOwner()) {
- return false;
- }
- return (room && room.ro) || this.isMuted();
- }
-
- isBlocked = () => {
- const { room } = this.state;
-
- if (room) {
- const { t, blocked, blocker } = room;
- if (t === 'd' && (blocked || blocker)) {
- return true;
- }
- }
- return false;
- }
-
// eslint-disable-next-line react/sort-comp
fetchThreadName = async(tmid) => {
try {
@@ -576,7 +546,7 @@ export default class RoomView extends React.Component {
renderFooter = () => {
const { joined, room } = this.state;
- const { navigation } = this.props;
+ const { navigation, user } = this.props;
if (!joined && !this.tmid) {
return (
@@ -593,14 +563,14 @@ export default class RoomView extends React.Component {
);
}
- if (this.isReadOnly()) {
+ if (isReadOnly(room, user)) {
return (
{I18n.t('This_room_is_read_only')}
);
}
- if (this.isBlocked()) {
+ if (isBlocked(room)) {
return (
{I18n.t('This_room_is_blocked')}
diff --git a/app/views/SelectServerView.js b/app/views/SelectServerView.js
new file mode 100644
index 000000000..4a40edb19
--- /dev/null
+++ b/app/views/SelectServerView.js
@@ -0,0 +1,114 @@
+import React from 'react';
+import {
+ FlatList, StyleSheet, View
+} from 'react-native';
+import PropTypes from 'prop-types';
+import { connect } from 'react-redux';
+import { SafeAreaView } from 'react-navigation';
+
+import I18n from '../i18n';
+import database from '../lib/realm';
+import StatusBar from '../containers/StatusBar';
+import { selectServerRequest as selectServerRequestAction } from '../actions/server';
+
+import {
+ COLOR_BACKGROUND_CONTAINER
+} from '../constants/colors';
+import Navigation from '../lib/Navigation';
+import ServerItem, { ROW_HEIGHT } from '../presentation/ServerItem';
+import sharedStyles from './Styles';
+
+const getItemLayout = (data, index) => ({ length: ROW_HEIGHT, offset: ROW_HEIGHT * index, index });
+const keyExtractor = item => item.id;
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ backgroundColor: COLOR_BACKGROUND_CONTAINER
+ },
+ list: {
+ marginVertical: 32,
+ ...sharedStyles.separatorVertical
+ },
+ separator: {
+ ...sharedStyles.separatorBottom,
+ marginLeft: 48
+ }
+});
+
+@connect(state => ({
+ server: state.server.server
+}), dispatch => ({
+ selectServerRequest: server => dispatch(selectServerRequestAction(server))
+}))
+export default class SelectServerView extends React.Component {
+ static navigationOptions = () => ({
+ title: I18n.t('Select_Server')
+ })
+
+ static propTypes = {
+ server: PropTypes.string,
+ selectServerRequest: PropTypes.func
+ }
+
+ constructor(props) {
+ super(props);
+ const { serversDB } = database.databases;
+ const servers = serversDB.objects('servers');
+ const filteredServers = servers.filter(server => server.roomsUpdatedAt);
+ this.state = {
+ servers: filteredServers
+ };
+ }
+
+ select = (server) => {
+ const {
+ server: currentServer, selectServerRequest
+ } = this.props;
+
+ if (currentServer !== server) {
+ selectServerRequest(server);
+ }
+ Navigation.navigate('ShareListView');
+ }
+
+ renderItem = ({ item }) => {
+ const { server } = this.props;
+ return (
+ this.select(item.id)}
+ item={item}
+ hasCheck
+ />
+ );
+ }
+
+ renderSeparator = () => ;
+
+ render() {
+ const { servers } = this.state;
+ return (
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/app/views/ShareListView/Header.js b/app/views/ShareListView/Header.js
new file mode 100644
index 000000000..fcd87498b
--- /dev/null
+++ b/app/views/ShareListView/Header.js
@@ -0,0 +1,92 @@
+import React, { PureComponent } from 'react';
+import {
+ View, StyleSheet, Text, Platform
+} from 'react-native';
+import PropTypes from 'prop-types';
+import { connect } from 'react-redux';
+import { TextInput } from 'react-native-gesture-handler';
+
+import I18n from '../../i18n';
+import { COLOR_WHITE, HEADER_TITLE } from '../../constants/colors';
+import sharedStyles from '../Styles';
+import { setSearch as setSearchAction } from '../../actions/rooms';
+import { isAndroid } from '../../utils/deviceInfo';
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ justifyContent: 'center'
+ },
+ search: {
+ fontSize: 20,
+ color: COLOR_WHITE,
+ ...sharedStyles.textRegular
+ },
+ title: {
+ ...Platform.select({
+ ios: {
+ fontSize: 17,
+ ...sharedStyles.textSemibold,
+ color: HEADER_TITLE
+ },
+ android: {
+ fontSize: 20,
+ ...sharedStyles.textRegular,
+ color: HEADER_TITLE
+ }
+ })
+ }
+});
+
+@connect(state => ({
+ showSearchHeader: state.rooms.showSearchHeader
+}), dispatch => ({
+ setSearch: searchText => dispatch(setSearchAction(searchText))
+}))
+class ShareListHeader extends PureComponent {
+ static propTypes = {
+ showSearchHeader: PropTypes.bool,
+ setSearch: PropTypes.func
+ }
+
+ componentDidUpdate(prevProps) {
+ const { showSearchHeader } = this.props;
+ if (showSearchHeader && prevProps.showSearchHeader !== showSearchHeader) {
+ setTimeout(() => {
+ this.searchInputRef.focus();
+ }, 300);
+ }
+ }
+
+ onSearchChangeText = (text) => {
+ const { setSearch } = this.props;
+ setSearch(text.trim());
+ }
+
+ setSearchInputRef = (ref) => {
+ this.searchInputRef = ref;
+ }
+
+ render() {
+ const {
+ showSearchHeader
+ } = this.props;
+
+ if (showSearchHeader && isAndroid) {
+ return (
+
+
+
+ );
+ }
+ return {I18n.t('Select_Channels')};
+ }
+}
+
+export default ShareListHeader;
diff --git a/app/views/ShareListView/index.js b/app/views/ShareListView/index.js
new file mode 100644
index 000000000..0a3596b70
--- /dev/null
+++ b/app/views/ShareListView/index.js
@@ -0,0 +1,494 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import {
+ View, Text, LayoutAnimation, InteractionManager, FlatList, ScrollView, ActivityIndicator, Keyboard
+} from 'react-native';
+import { SafeAreaView } from 'react-navigation';
+import ShareExtension from 'rn-extensions-share';
+import { connect } from 'react-redux';
+import RNFetchBlob from 'rn-fetch-blob';
+import * as mime from 'react-native-mime-types';
+import { isEqual } from 'lodash';
+
+import Navigation from '../../lib/Navigation';
+import database, { safeAddListener } from '../../lib/realm';
+import debounce from '../../utils/debounce';
+import { isIOS, isAndroid } from '../../utils/deviceInfo';
+import I18n from '../../i18n';
+import { CustomIcon } from '../../lib/Icons';
+import log from '../../utils/log';
+import {
+ openSearchHeader as openSearchHeaderAction,
+ closeSearchHeader as closeSearchHeaderAction
+} from '../../actions/rooms';
+import DirectoryItem, { ROW_HEIGHT } from '../../presentation/DirectoryItem';
+import ServerItem, { ROW_HEIGHT as ROW_HEIGHT_SERVER } from '../../presentation/ServerItem';
+import { CloseShareExtensionButton, CustomHeaderButtons, Item } from '../../containers/HeaderButton';
+import SearchBar from '../RoomsListView/ListHeader/SearchBar';
+import ShareListHeader from './Header';
+
+import styles from './styles';
+
+const SCROLL_OFFSET = 56;
+const getItemLayoutChannel = (data, index) => ({ length: ROW_HEIGHT, offset: ROW_HEIGHT * index, index });
+const getItemLayoutServer = (data, index) => ({ length: ROW_HEIGHT_SERVER, offset: ROW_HEIGHT_SERVER * index, index });
+const keyExtractor = item => item.rid;
+
+@connect(state => ({
+ userId: state.login.user && state.login.user.id,
+ token: state.login.user && state.login.user.token,
+ useRealName: state.settings.UI_Use_Real_Name,
+ searchText: state.rooms.searchText,
+ server: state.server.server,
+ loading: state.server.loading,
+ FileUpload_MediaTypeWhiteList: state.settings.FileUpload_MediaTypeWhiteList,
+ FileUpload_MaxFileSize: state.settings.FileUpload_MaxFileSize,
+ baseUrl: state.settings.baseUrl || state.server ? state.server.server : '',
+ sortBy: state.sortPreferences.sortBy,
+ groupByType: state.sortPreferences.groupByType,
+ showFavorites: state.sortPreferences.showFavorites
+}), dispatch => ({
+ openSearchHeader: () => dispatch(openSearchHeaderAction()),
+ closeSearchHeader: () => dispatch(closeSearchHeaderAction())
+}))
+/** @extends React.Component */
+export default class ShareListView extends React.Component {
+ static navigationOptions = ({ navigation }) => {
+ const searching = navigation.getParam('searching');
+ const cancelSearchingAndroid = navigation.getParam('cancelSearchingAndroid');
+ const initSearchingAndroid = navigation.getParam('initSearchingAndroid', () => {});
+
+ return {
+ headerBackTitle: isIOS ? I18n.t('Back') : null,
+ headerLeft: searching
+ ? (
+
+
+
+ )
+ : (
+
+ ),
+ headerTitle: ,
+ headerRight: (
+ searching
+ ? null
+ : (
+
+ {isAndroid ? : null}
+
+ )
+ )
+ };
+ }
+
+ static propTypes = {
+ navigation: PropTypes.object,
+ server: PropTypes.string,
+ useRealName: PropTypes.bool,
+ searchText: PropTypes.string,
+ FileUpload_MediaTypeWhiteList: PropTypes.string,
+ FileUpload_MaxFileSize: PropTypes.number,
+ openSearchHeader: PropTypes.func,
+ closeSearchHeader: PropTypes.func,
+ baseUrl: PropTypes.string,
+ token: PropTypes.string,
+ userId: PropTypes.string,
+ sortBy: PropTypes.string,
+ groupByType: PropTypes.bool,
+ showFavorites: PropTypes.bool,
+ loading: PropTypes.bool
+ }
+
+ constructor(props) {
+ super(props);
+ this.data = [];
+ this.state = {
+ searching: false,
+ value: '',
+ isMedia: false,
+ mediaLoading: false,
+ loading: true,
+ fileInfo: null,
+ search: [],
+ discussions: [],
+ channels: [],
+ favorites: [],
+ chats: [],
+ privateGroup: [],
+ direct: [],
+ livechat: [],
+ servers: []
+ };
+ }
+
+ async componentDidMount() {
+ this.getSubscriptions();
+
+ const { navigation } = this.props;
+ navigation.setParams({
+ initSearchingAndroid: this.initSearchingAndroid,
+ cancelSearchingAndroid: this.cancelSearchingAndroid
+ });
+
+ try {
+ const { value, type } = await ShareExtension.data();
+ let fileInfo = null;
+ const isMedia = (type === 'media');
+ if (isMedia) {
+ this.setState({ mediaLoading: true });
+ const data = await RNFetchBlob.fs.stat(this.uriToPath(value));
+ fileInfo = {
+ name: data.filename,
+ description: '',
+ size: data.size,
+ type: mime.lookup(data.path),
+ store: 'Uploads',
+ path: isIOS ? data.path : `file://${ data.path }`
+ };
+ }
+ this.setState({
+ value, fileInfo, isMedia, mediaLoading: false
+ });
+ } catch (e) {
+ log('err_process_media_share_extension', e);
+ this.setState({ mediaLoading: false });
+ }
+ }
+
+ componentWillReceiveProps(nextProps) {
+ const { searchText, loading } = this.props;
+
+ if (nextProps.server && loading !== nextProps.loading) {
+ if (nextProps.loading) {
+ this.internalSetState({ loading: true });
+ } else {
+ this.getSubscriptions();
+ }
+ } else if (searchText !== nextProps.searchText) {
+ this.search(nextProps.searchText);
+ }
+ }
+
+ shouldComponentUpdate(nextProps, nextState) {
+ const { loading, searching } = this.state;
+ if (nextState.loading !== loading) {
+ return true;
+ }
+ if (nextState.searching !== searching) {
+ return true;
+ }
+
+ const { search } = this.state;
+ if (!isEqual(nextState.search, search)) {
+ return true;
+ }
+ return false;
+ }
+
+ // eslint-disable-next-line react/sort-comp
+ internalSetState = (...args) => {
+ const { navigation } = this.props;
+ if (isIOS && navigation.isFocused()) {
+ LayoutAnimation.easeInEaseOut();
+ }
+ this.setState(...args);
+ }
+
+ getSubscriptions = debounce(() => {
+ if (this.data && this.data.removeAllListeners) {
+ this.data.removeAllListeners();
+ }
+
+ const {
+ server, sortBy, showFavorites, groupByType
+ } = this.props;
+ const { serversDB } = database.databases;
+
+ if (server) {
+ this.data = database.objects('subscriptions').filtered('archived != true && open == true');
+ if (sortBy === 'alphabetical') {
+ this.data = this.data.sorted('name', false);
+ } else {
+ this.data = this.data.sorted('roomUpdatedAt', true);
+ }
+ // servers
+ this.servers = serversDB.objects('servers');
+
+ // favorites
+ if (showFavorites) {
+ this.favorites = this.data.filtered('f == true');
+ } else {
+ this.favorites = [];
+ }
+
+ // type
+ if (groupByType) {
+ this.discussions = this.data.filtered('prid != null');
+ this.channels = this.data.filtered('t == $0 AND prid == null', 'c');
+ this.privateGroup = this.data.filtered('t == $0 AND prid == null', 'p');
+ this.direct = this.data.filtered('t == $0 AND prid == null', 'd');
+ this.livechat = this.data.filtered('t == $0 AND prid == null', 'l');
+ } else {
+ this.chats = this.data;
+ }
+ safeAddListener(this.data, this.updateState);
+ }
+ }, 300);
+
+ uriToPath = uri => decodeURIComponent(isIOS ? uri.replace(/^file:\/\//, '') : uri);
+
+ // eslint-disable-next-line react/sort-comp
+ updateState = debounce(() => {
+ this.updateStateInteraction = InteractionManager.runAfterInteractions(() => {
+ this.internalSetState({
+ chats: this.chats ? this.chats.slice() : [],
+ favorites: this.favorites ? this.favorites.slice() : [],
+ discussions: this.discussions ? this.discussions.slice() : [],
+ channels: this.channels ? this.channels.slice() : [],
+ privateGroup: this.privateGroup ? this.privateGroup.slice() : [],
+ direct: this.direct ? this.direct.slice() : [],
+ livechat: this.livechat ? this.livechat.slice() : [],
+ servers: this.servers ? this.servers.slice() : [],
+ loading: false
+ });
+ this.forceUpdate();
+ });
+ }, 300);
+
+ getRoomTitle = (item) => {
+ const { useRealName } = this.props;
+ return ((item.prid || useRealName) && item.fname) || item.name;
+ }
+
+ shareMessage = (item) => {
+ const { value, isMedia, fileInfo } = this.state;
+ const { navigation } = this.props;
+
+ navigation.navigate('ShareView', {
+ rid: item.rid,
+ value,
+ isMedia,
+ fileInfo,
+ name: this.getRoomTitle(item)
+ });
+ }
+
+ canUploadFile = () => {
+ const { FileUpload_MediaTypeWhiteList, FileUpload_MaxFileSize } = this.props;
+ const { fileInfo: file, mediaLoading, loading } = this.state;
+
+ if (loading || mediaLoading) {
+ return true;
+ }
+ if (!(file && file.path)) {
+ return true;
+ }
+ if (file.size > FileUpload_MaxFileSize) {
+ return false;
+ }
+ if (!FileUpload_MediaTypeWhiteList) {
+ return false;
+ }
+ const allowedMime = FileUpload_MediaTypeWhiteList.split(',');
+ if (allowedMime.includes(file.type)) {
+ return true;
+ }
+ const wildCardGlob = '/*';
+ const wildCards = allowedMime.filter(item => item.indexOf(wildCardGlob) > 0);
+ if (wildCards.includes(file.type.replace(/(\/.*)$/, wildCardGlob))) {
+ return true;
+ }
+ return false;
+ }
+
+ search = (text) => {
+ const result = database.objects('subscriptions').filtered('name CONTAINS[c] $0', text);
+ const subscriptions = database.objects('subscriptions');
+ const data = result.length !== subscriptions.length ? result : [];
+ this.internalSetState({
+ search: data
+ });
+ }
+
+ initSearchingAndroid = () => {
+ const { openSearchHeader, navigation } = this.props;
+ this.setState({ searching: true });
+ navigation.setParams({ searching: true });
+ openSearchHeader();
+ }
+
+ cancelSearchingAndroid = () => {
+ if (isAndroid) {
+ const { closeSearchHeader, navigation } = this.props;
+ this.setState({ searching: false });
+ navigation.setParams({ searching: false });
+ closeSearchHeader();
+ this.internalSetState({ search: [] });
+ Keyboard.dismiss();
+ }
+ }
+
+ renderListHeader = () => ;
+
+ renderSectionHeader = header => (
+
+
+ {I18n.t(header)}
+
+
+ )
+
+ renderItem = ({ item }) => {
+ const { userId, token, baseUrl } = this.props;
+ return (
+ this.shareMessage(item)}
+ testID={`share-extension-item-${ item.name }`}
+ />
+ );
+ }
+
+ renderSeparator = () => ;
+
+ renderSection = (data, header) => {
+ if (data && data.length > 0) {
+ return (
+
+ {this.renderSectionHeader(header)}
+
+
+
+
+ );
+ }
+ return null;
+ }
+
+ renderServerSelector = () => {
+ const { servers } = this.state;
+ const { server } = this.props;
+ const currentServer = servers.find(serverFiltered => serverFiltered.id === server);
+ return currentServer ? (
+
+ {this.renderSectionHeader('Select_Server')}
+
+ Navigation.navigate('SelectServerView')}
+ item={currentServer}
+ />
+
+
+ ) : null;
+ }
+
+ renderContent = () => {
+ const {
+ discussions, channels, privateGroup, direct, livechat, search, chats, favorites
+ } = this.state;
+
+ if (search.length > 0) {
+ return (
+
+ );
+ }
+
+ return (
+
+ {this.renderServerSelector()}
+ {this.renderSection(favorites, 'Favorites')}
+ {this.renderSection(discussions, 'Discussions')}
+ {this.renderSection(channels, 'Channels')}
+ {this.renderSection(direct, 'Direct_Messages')}
+ {this.renderSection(privateGroup, 'Private_Groups')}
+ {this.renderSection(livechat, 'Livechat')}
+ {this.renderSection(chats, 'Chats')}
+
+ );
+ }
+
+
+ renderScrollView = () => {
+ const { mediaLoading, loading } = this.state;
+ if (mediaLoading || loading) {
+ return ;
+ }
+
+ return (
+
+ {this.renderListHeader()}
+ {this.renderContent()}
+
+ );
+ }
+
+ renderError = () => {
+ const { fileInfo: file } = this.state;
+ const { FileUpload_MaxFileSize } = this.props;
+ const errorMessage = (FileUpload_MaxFileSize < file.size)
+ ? 'error-file-too-large'
+ : 'error-invalid-file-type';
+ return (
+
+ {I18n.t(errorMessage)}
+
+ { file.type }
+
+ );
+ }
+
+ render() {
+ const showError = !this.canUploadFile();
+ return (
+
+ { showError ? this.renderError() : this.renderScrollView() }
+
+ );
+ }
+}
diff --git a/app/views/ShareListView/styles.js b/app/views/ShareListView/styles.js
new file mode 100644
index 000000000..4269db2e3
--- /dev/null
+++ b/app/views/ShareListView/styles.js
@@ -0,0 +1,65 @@
+import { StyleSheet } from 'react-native';
+import { isIOS } from '../../utils/deviceInfo';
+import sharedStyles from '../Styles';
+
+import {
+ COLOR_BACKGROUND_CONTAINER, COLOR_WHITE, COLOR_DANGER
+} from '../../constants/colors';
+
+export default StyleSheet.create({
+ container: {
+ justifyContent: 'center',
+ alignItems: 'center',
+ flex: 1,
+ backgroundColor: COLOR_BACKGROUND_CONTAINER
+ },
+ content: {
+ flex: 1,
+ backgroundColor: isIOS ? COLOR_WHITE : '#E1E5E8'
+ },
+ flatlist: {
+ width: '100%',
+ backgroundColor: COLOR_WHITE
+ },
+ bordered: {
+ ...sharedStyles.separatorVertical
+ },
+ scroll: {
+ width: '100%'
+ },
+ headerContainer: {
+ paddingHorizontal: 15,
+ backgroundColor: COLOR_BACKGROUND_CONTAINER,
+ paddingBottom: 10,
+ paddingTop: 17
+ },
+ headerText: {
+ ...sharedStyles.textColorNormal,
+ ...sharedStyles.textRegular,
+ fontSize: 17,
+ letterSpacing: 0.27,
+ flex: 1
+ },
+ separator: {
+ ...sharedStyles.separatorBottom,
+ marginLeft: 48
+ },
+ loading: {
+ flex: 1
+ },
+ errorIcon: {
+ color: COLOR_DANGER
+ },
+ fileMime: {
+ ...sharedStyles.textColorNormal,
+ ...sharedStyles.textBold,
+ ...sharedStyles.textAlignCenter,
+ fontSize: 20,
+ marginBottom: 20
+ },
+ title: {
+ fontSize: 14,
+ ...sharedStyles.textColorTitle,
+ ...sharedStyles.textBold
+ }
+});
diff --git a/app/views/ShareView/Loading.js b/app/views/ShareView/Loading.js
new file mode 100644
index 000000000..82c3e2a81
--- /dev/null
+++ b/app/views/ShareView/Loading.js
@@ -0,0 +1,23 @@
+import React from 'react';
+import {
+ StyleSheet, ActivityIndicator, View
+} from 'react-native';
+import { COLOR_TEXT } from '../../constants/colors';
+
+const styles = StyleSheet.create({
+ container: {
+ height: '100%',
+ width: '100%',
+ position: 'absolute',
+ justifyContent: 'center',
+ alignItems: 'center'
+ }
+});
+
+const Loading = React.memo(() => (
+
+
+
+));
+
+export default Loading;
diff --git a/app/views/ShareView/index.js b/app/views/ShareView/index.js
new file mode 100644
index 000000000..f0b787d2a
--- /dev/null
+++ b/app/views/ShareView/index.js
@@ -0,0 +1,231 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import {
+ View, Text, TextInput, Image
+} from 'react-native';
+import { connect } from 'react-redux';
+import ShareExtension from 'rn-extensions-share';
+
+import {
+ COLOR_TEXT_DESCRIPTION
+} from '../../constants/colors';
+import I18n from '../../i18n';
+import RocketChat from '../../lib/rocketchat';
+import { CustomIcon } from '../../lib/Icons';
+import log from '../../utils/log';
+import styles from './styles';
+import Loading from './Loading';
+import database from '../../lib/realm';
+import { CustomHeaderButtons, Item } from '../../containers/HeaderButton';
+import { isReadOnly, isBlocked } from '../../utils/room';
+
+@connect(state => ({
+ username: state.login.user && state.login.user.username
+}))
+export default class ShareView extends React.Component {
+ static navigationOptions = ({ navigation }) => {
+ const canSend = navigation.getParam('canSend', false);
+
+ return ({
+ title: I18n.t('Share'),
+ headerRight:
+ canSend
+ ? (
+
+
+
+ )
+ : null
+ });
+ }
+
+ static propTypes = {
+ navigation: PropTypes.object,
+ username: PropTypes.string.isRequired
+ };
+
+ constructor(props) {
+ super(props);
+ const { navigation } = this.props;
+ const rid = navigation.getParam('rid', '');
+ const name = navigation.getParam('name', '');
+ const value = navigation.getParam('value', '');
+ const isMedia = navigation.getParam('isMedia', false);
+ const fileInfo = navigation.getParam('fileInfo', {});
+
+ this.rooms = database.objects('subscriptions').filtered('rid = $0', rid);
+
+ this.state = {
+ rid,
+ value,
+ isMedia,
+ name,
+ fileInfo,
+ loading: false,
+ room: this.rooms[0] || { rid },
+ file: {
+ name: fileInfo ? fileInfo.name : '',
+ description: ''
+ }
+ };
+ }
+
+ componentDidMount() {
+ const { room } = this.state;
+ const { navigation, username } = this.props;
+ navigation.setParams({ sendMessage: this._sendMessage, canSend: !(isReadOnly(room, { username }) || isBlocked(room)) });
+ }
+
+ bytesToSize = bits => `${ ((bits / 8) / 1048576).toFixed(2) }MB`;
+
+ _sendMessage = async() => {
+ const { isMedia } = this.state;
+ this.setState({ loading: true });
+
+ if (isMedia) {
+ await this.sendMediaMessage();
+ } else {
+ await this.sendTextMessage();
+ }
+
+ this.setState({ loading: false });
+ ShareExtension.close();
+ }
+
+ sendMediaMessage = async() => {
+ const { rid, fileInfo, file } = this.state;
+ const { name, description } = file;
+ const fileMessage = { ...fileInfo, name, description };
+ if (fileInfo && rid !== '') {
+ try {
+ await RocketChat.sendFileMessage(rid, fileMessage, undefined);
+ } catch (e) {
+ log('err_send_media_message', e);
+ }
+ }
+ }
+
+ sendTextMessage = async() => {
+ const { value, rid } = this.state;
+ if (value !== '' && rid !== '') {
+ try {
+ await RocketChat.sendMessage(rid, value, undefined);
+ } catch (error) {
+ log('err_share_extension_send_message', error);
+ }
+ }
+ };
+
+ renderPreview = () => {
+ const { fileInfo } = this.state;
+
+ const icon = fileInfo.type.match(/image/)
+ ?
+ : (
+
+
+
+ );
+
+ return (
+
+ {icon}
+
+ {fileInfo.name}
+ {this.bytesToSize(fileInfo.size)}
+
+
+ );
+ };
+
+ renderMediaContent = () => {
+ const { fileInfo, file } = this.state;
+ return fileInfo ? (
+
+ {this.renderPreview()}
+
+ this.setState({ file: { ...file, name } })}
+ underlineColorAndroid='transparent'
+ defaultValue={file.name}
+ placeholderTextColor={COLOR_TEXT_DESCRIPTION}
+ />
+ this.setState({ file: { ...file, description } })}
+ underlineColorAndroid='transparent'
+ defaultValue={file.description}
+ multiline
+ textAlignVertical='top'
+ placeholderTextColor={COLOR_TEXT_DESCRIPTION}
+ autoFocus
+ />
+
+
+ ) : null;
+ };
+
+ renderInput = () => {
+ const { value } = this.state;
+ return (
+ this.setState({ value: handleText })}
+ underlineColorAndroid='transparent'
+ defaultValue={value}
+ multiline
+ textAlignVertical='top'
+ placeholderTextColor={COLOR_TEXT_DESCRIPTION}
+ autoFocus
+ />
+ );
+ }
+
+ renderError = () => {
+ const { room } = this.state;
+ return (
+
+
+ {
+ isBlocked(room) ? I18n.t('This_room_is_blocked') : I18n.t('This_room_is_read_only')
+ }
+
+
+ );
+ }
+
+ render() {
+ const { username } = this.props;
+ const {
+ name, loading, isMedia, room
+ } = this.state;
+
+ if (isReadOnly(room, { username }) || isBlocked(room)) {
+ return this.renderError();
+ }
+
+ return (
+
+
+
+ {`${ I18n.t('To') }: `}
+ {`${ name }`}
+
+
+
+ {isMedia ? this.renderMediaContent() : this.renderInput()}
+
+ { loading ? : null }
+
+ );
+ }
+}
diff --git a/app/views/ShareView/styles.js b/app/views/ShareView/styles.js
new file mode 100644
index 000000000..a7c77fda2
--- /dev/null
+++ b/app/views/ShareView/styles.js
@@ -0,0 +1,116 @@
+import { StyleSheet } from 'react-native';
+
+import sharedStyles from '../Styles';
+import {
+ COLOR_BACKGROUND_CONTAINER, COLOR_WHITE
+} from '../../constants/colors';
+
+export default StyleSheet.create({
+ container: {
+ flex: 1,
+ backgroundColor: COLOR_BACKGROUND_CONTAINER
+ },
+ centered: {
+ justifyContent: 'center',
+ alignItems: 'center'
+ },
+ title: {
+ fontSize: 18,
+ ...sharedStyles.textBold,
+ ...sharedStyles.textColorNormal,
+ ...sharedStyles.textAlignCenter
+ },
+ text: {
+ paddingHorizontal: 16,
+ paddingVertical: 8,
+ ...sharedStyles.textColorNormal,
+ ...sharedStyles.textRegular
+ },
+ to: {
+ ...sharedStyles.textColorDescription,
+ ...sharedStyles.textRegular
+ },
+ toContent: {
+ width: '100%',
+ backgroundColor: COLOR_WHITE
+ },
+ toContentText: {
+ width: '100%',
+ backgroundColor: COLOR_BACKGROUND_CONTAINER,
+ ...sharedStyles.textColorNormal,
+ ...sharedStyles.textRegular
+ },
+ name: {
+ ...sharedStyles.textRegular,
+ ...sharedStyles.textColorTitle
+ },
+ content: {
+ flex: 1,
+ backgroundColor: COLOR_WHITE
+ },
+ mediaContainer: {
+ flex: 1,
+ backgroundColor: COLOR_BACKGROUND_CONTAINER
+ },
+ mediaContent: {
+ flexDirection: 'row',
+ padding: 16,
+ backgroundColor: COLOR_BACKGROUND_CONTAINER,
+ alignItems: 'center'
+ },
+ mediaImage: {
+ height: 64,
+ width: 64
+ },
+ mediaIcon: {
+ fontSize: 64,
+ ...sharedStyles.textColorNormal
+ },
+ mediaIconContainer: {
+ alignItems: 'center',
+ justifyContent: 'center'
+ },
+ mediaInfo: {
+ marginLeft: 16,
+ flex: 1
+ },
+ mediaText: {
+ fontSize: 16,
+ ...sharedStyles.textColorNormal,
+ ...sharedStyles.textRegular
+ },
+ mediaInputContent: {
+ width: '100%',
+ ...sharedStyles.separatorVertical,
+ backgroundColor: COLOR_WHITE
+ },
+ input: {
+ fontSize: 16,
+ ...sharedStyles.textColorNormal,
+ ...sharedStyles.textRegular,
+ backgroundColor: COLOR_WHITE
+ },
+ textInput: {
+ flex: 1,
+ paddingHorizontal: 16
+ },
+ mediaNameInput: {
+ marginLeft: 16,
+ paddingRight: 16,
+ paddingVertical: 8,
+ backgroundColor: COLOR_WHITE,
+ ...sharedStyles.separatorBottom
+ },
+ mediaDescriptionInput: {
+ marginLeft: 16,
+ paddingRight: 16,
+ marginVertical: 8,
+ backgroundColor: COLOR_WHITE,
+ height: 100
+ },
+ send: {
+ ...sharedStyles.textColorHeaderBack,
+ ...sharedStyles.textSemibold,
+ fontSize: 16
+ }
+});
diff --git a/app/views/Styles.js b/app/views/Styles.js
index 8f8040cca..171354876 100644
--- a/app/views/Styles.js
+++ b/app/views/Styles.js
@@ -1,7 +1,7 @@
import { StyleSheet, Platform } from 'react-native';
import {
- COLOR_DANGER, COLOR_BUTTON_PRIMARY, COLOR_SEPARATOR, COLOR_TEXT, COLOR_TEXT_DESCRIPTION, COLOR_TITLE, COLOR_BACKGROUND_CONTAINER, COLOR_WHITE, COLOR_PRIMARY
+ COLOR_DANGER, COLOR_BUTTON_PRIMARY, COLOR_SEPARATOR, COLOR_TEXT, COLOR_TEXT_DESCRIPTION, COLOR_TITLE, COLOR_BACKGROUND_CONTAINER, COLOR_WHITE, COLOR_PRIMARY, HEADER_BACK
} from '../constants/colors';
export default StyleSheet.create({
@@ -72,6 +72,9 @@ export default StyleSheet.create({
textAlignRight: {
textAlign: 'right'
},
+ textAlignCenter: {
+ textAlign: 'center'
+ },
opacity5: {
opacity: 0.5
},
@@ -176,6 +179,9 @@ export default StyleSheet.create({
textColorDescription: {
color: COLOR_TEXT_DESCRIPTION
},
+ textColorHeaderBack: {
+ color: HEADER_BACK
+ },
colorPrimary: {
color: COLOR_PRIMARY
},
@@ -192,5 +198,10 @@ export default StyleSheet.create({
borderBottomWidth: StyleSheet.hairlineWidth,
backgroundColor: COLOR_WHITE,
marginVertical: 10
+ },
+ notchLandscapeContainer: {
+ marginTop: -44,
+ paddingHorizontal: 30,
+ backgroundColor: COLOR_BACKGROUND_CONTAINER
}
});
diff --git a/app/views/WithoutServersView.js b/app/views/WithoutServersView.js
new file mode 100644
index 000000000..fd8258981
--- /dev/null
+++ b/app/views/WithoutServersView.js
@@ -0,0 +1,50 @@
+import React from 'react';
+import {
+ StyleSheet, View, Text
+} from 'react-native';
+import ShareExtension from 'rn-extensions-share';
+
+import { CloseShareExtensionButton } from '../containers/HeaderButton';
+import sharedStyles from './Styles';
+import I18n from '../i18n';
+import { COLOR_WHITE } from '../constants/colors';
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ backgroundColor: COLOR_WHITE,
+ justifyContent: 'center',
+ alignItems: 'center'
+ },
+ title: {
+ fontSize: 18,
+ ...sharedStyles.textBold,
+ ...sharedStyles.textColorNormal
+ },
+ content: {
+ fontSize: 14,
+ ...sharedStyles.textAlignCenter,
+ ...sharedStyles.textColorNormal,
+ ...sharedStyles.textRegular
+ }
+});
+
+export default class WithoutServerView extends React.Component {
+ static navigationOptions = () => ({
+ headerLeft: (
+
+ )
+ })
+
+ render() {
+ return (
+
+ {I18n.t('Without_Servers')}
+ {I18n.t('You_need_to_access_at_least_one_RocketChat_server_to_share_something')}
+
+ );
+ }
+}
diff --git a/index.js b/index.js
index 959bbd7a4..e84346a31 100644
--- a/index.js
+++ b/index.js
@@ -2,10 +2,10 @@ import 'react-native-console-time-polyfill';
import './app/ReactotronConfig';
import { AppRegistry } from 'react-native';
-import App from './app/index';
-import { name as appName } from './app.json';
+import { name as appName, share as shareName } from './app.json';
-AppRegistry.registerComponent(appName, () => App);
+AppRegistry.registerComponent(appName, () => require('./app/index').default);
+AppRegistry.registerComponent(shareName, () => require('./app/share').default);
// For storybook, comment everything above and uncomment below
// import './storybook';
diff --git a/ios/Podfile b/ios/Podfile
index 0bbc2aafe..1035be266 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -52,6 +52,40 @@ target 'RocketChatRN' do
end
+target 'ShareRocketChatRN' do
+
+ rn_path = '../node_modules/react-native'
+
+ pod 'React', path: rn_path, subspecs: [
+ 'Core',
+ 'RCTActionSheet',
+ 'RCTAnimation',
+# 'RCTGeolocation',
+ 'RCTImage',
+ 'RCTLinkingIOS',
+ 'RCTNetwork',
+ 'RCTSettings',
+ 'RCTText',
+ 'RCTVibration',
+ 'RCTWebSocket'
+ ]
+
+ pod 'RNDeviceInfo', :path => '../node_modules/react-native-device-info'
+ pod 'RNLocalize', :path => '../node_modules/react-native-localize'
+
+ pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
+ pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
+ pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
+ pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
+
+ pod 'Firebase/Core', '~> 5.20.1'
+ pod 'Fabric', '~> 1.9.0'
+ pod 'Crashlytics', '~> 3.12.0'
+ pod 'GoogleIDFASupport', '~> 3.14.0'
+ pod 'Firebase/Performance', '~> 5.20.1'
+
+end
+
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == "React"
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index beb542af3..940a0e2b9 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -145,7 +145,7 @@ PODS:
- React/RCTBlob
- RNDeviceInfo (1.6.1):
- React
- - RNImageCropPicker (0.21.1):
+ - RNImageCropPicker (0.24.1):
- QBImagePickerController
- React/Core
- RSKImageCropper
@@ -356,7 +356,7 @@ SPEC CHECKSUMS:
react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
react-native-webview: f3e28b48461c78db833f727feec08b13285e7b61
RNDeviceInfo: 958a1ed6f94e04557b865b8ef848cfc83db0ebba
- RNImageCropPicker: e608efe182652dc8690268cb99cb5a201f2b5ea3
+ RNImageCropPicker: 6134b66a3d5bc13e2895a97c630a4254006902b4
RNLocalize: 62a949d2ec5bee0eb8f39a80a48f01e2f4f67080
RNScreens: 720a9e6968beb73e8196239801e887d8401f86ed
RSKImageCropper: 98296ad26b41753f796b6898d015509598f13d97
@@ -374,6 +374,6 @@ SPEC CHECKSUMS:
UMTaskManagerInterface: 296793ab2a7e181fe5ebe2ba9b40ae208ab4b8fa
yoga: 92b2102c3d373d1a790db4ab761d2b0ffc634f64
-PODFILE CHECKSUM: 1aa23cca853663acc12b10c4eb90f42b7b91533a
+PODFILE CHECKSUM: 7875ef440f1c2fb6583ee808c642c97d1410140d
COCOAPODS: 1.6.2
diff --git a/ios/Pods/Local Podspecs/RNImageCropPicker.podspec.json b/ios/Pods/Local Podspecs/RNImageCropPicker.podspec.json
index d4f3c708c..ffcb44dd0 100644
--- a/ios/Pods/Local Podspecs/RNImageCropPicker.podspec.json
+++ b/ios/Pods/Local Podspecs/RNImageCropPicker.podspec.json
@@ -1,6 +1,6 @@
{
"name": "RNImageCropPicker",
- "version": "0.21.1",
+ "version": "0.24.1",
"summary": "Select single or multiple images, with cropping option",
"requires_arc": true,
"license": "MIT",
diff --git a/ios/Pods/Manifest.lock b/ios/Pods/Manifest.lock
index beb542af3..940a0e2b9 100644
--- a/ios/Pods/Manifest.lock
+++ b/ios/Pods/Manifest.lock
@@ -145,7 +145,7 @@ PODS:
- React/RCTBlob
- RNDeviceInfo (1.6.1):
- React
- - RNImageCropPicker (0.21.1):
+ - RNImageCropPicker (0.24.1):
- QBImagePickerController
- React/Core
- RSKImageCropper
@@ -356,7 +356,7 @@ SPEC CHECKSUMS:
react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
react-native-webview: f3e28b48461c78db833f727feec08b13285e7b61
RNDeviceInfo: 958a1ed6f94e04557b865b8ef848cfc83db0ebba
- RNImageCropPicker: e608efe182652dc8690268cb99cb5a201f2b5ea3
+ RNImageCropPicker: 6134b66a3d5bc13e2895a97c630a4254006902b4
RNLocalize: 62a949d2ec5bee0eb8f39a80a48f01e2f4f67080
RNScreens: 720a9e6968beb73e8196239801e887d8401f86ed
RSKImageCropper: 98296ad26b41753f796b6898d015509598f13d97
@@ -374,6 +374,6 @@ SPEC CHECKSUMS:
UMTaskManagerInterface: 296793ab2a7e181fe5ebe2ba9b40ae208ab4b8fa
yoga: 92b2102c3d373d1a790db4ab761d2b0ffc634f64
-PODFILE CHECKSUM: 1aa23cca853663acc12b10c4eb90f42b7b91533a
+PODFILE CHECKSUM: 7875ef440f1c2fb6583ee808c642c97d1410140d
COCOAPODS: 1.6.2
diff --git a/ios/Pods/Pods.xcodeproj/project.pbxproj b/ios/Pods/Pods.xcodeproj/project.pbxproj
index 08e11645d..3c3681ba2 100644
--- a/ios/Pods/Pods.xcodeproj/project.pbxproj
+++ b/ios/Pods/Pods.xcodeproj/project.pbxproj
@@ -380,7 +380,7 @@
5EB91821D47776A42C401D05BB09BEF9 /* QBAssetCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EE49B8A769B1E7AFEABA9B6B0B88B03 /* QBAssetCell.h */; settings = {ATTRIBUTES = (Project, ); }; };
6047C84A410D1A5644CB285592DDA5BE /* RNCWKProcessPoolManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 80EB1576F23DD23C8D061B78F428A845 /* RNCWKProcessPoolManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
60D20AECA7D7AEC05834C1EE9F61C483 /* FIRLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = 35327675F6CED1B41870E375518BCEF8 /* FIRLibrary.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 61DB05B676737659776E885C28CE048A /* Pods-RocketChatRN-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DB26A8DCF5A6E3B4A1BC4152C6D9DC6C /* Pods-RocketChatRN-dummy.m */; };
+ 61DB05B676737659776E885C28CE048A /* Pods-RocketChatRN-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 30D6FDCC52D608CFD7FA1FAE7409E462 /* Pods-RocketChatRN-dummy.m */; };
6202F0EEEFCB1ABE4656F4975FF294BC /* FIRInstanceIDVersionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A9209D5A37DA753BC42A9DD8365F66BF /* FIRInstanceIDVersionUtilities.m */; };
6262BBFAEBD554FF9B9CB958D38B9AD5 /* EXSystemBrightnessRequester.m in Sources */ = {isa = PBXBuildFile; fileRef = 5438366E2EE31FC03C47D38F45877FDD /* EXSystemBrightnessRequester.m */; };
62825760B895542D30194A59B53D82EA /* log_severity.h in Headers */ = {isa = PBXBuildFile; fileRef = BE50045174443690244903BDE53B9ED7 /* log_severity.h */; settings = {ATTRIBUTES = (Project, ); }; };
@@ -601,6 +601,7 @@
CDBC59077AD1D33760F3265595534A61 /* EXConstantsService.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F1724CF420D8B036660ABBF26E45A70 /* EXConstantsService.m */; };
CE7867F4A1D925B90477DAFC4159A3E5 /* RNCWKWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = B74B893D0180C0E463704D5CC8152049 /* RNCWKWebView.m */; };
CEC8B820873F8BAD5C806EFF198D194F /* FIRInstanceIDTokenOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = AE4BEC52BB9C31042CC4495A10E43DB1 /* FIRInstanceIDTokenOperation.m */; };
+ CF115387312D6FA99DE9939069FF05AE /* Pods-ShareRocketChatRN-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C6494BF3BBF96C9957F9676F8B880E2 /* Pods-ShareRocketChatRN-dummy.m */; };
D0D60DE080C6E14799B2BE60EAA2D6CC /* RSKImageCropViewController+Protected.h in Headers */ = {isa = PBXBuildFile; fileRef = 047F7C14D5BA3D10FDD5C05A933E8CD5 /* RSKImageCropViewController+Protected.h */; settings = {ATTRIBUTES = (Project, ); }; };
D2E942FFD868D20C41660AD7771AF1A5 /* FIRAnalyticsConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A5BB19124FE2A8CCEE96A5348423FEA /* FIRAnalyticsConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; };
D3F17A2332A6569967162E0CEE656426 /* UMReactLogHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D140AEBF119C2B4790F452A2EB892C /* UMReactLogHandler.m */; };
@@ -718,6 +719,13 @@
remoteGlobalIDString = 368FB7FBA34E3323BB42D13325551C95;
remoteInfo = FirebaseCore;
};
+ 079DD563B155F61559051A0AB3CDB5E8 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = D4C80D428A6706DF21E9315400ECC2AB;
+ remoteInfo = yoga;
+ };
0EE7E307C7B55BA48D265575BB50913B /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -739,6 +747,13 @@
remoteGlobalIDString = 86D46B5F7EA763C3041CA2087A947D2E;
remoteInfo = UMBarCodeScannerInterface;
};
+ 16DDE719E35CFE85F743225FB10B5707 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = E3A3FB14CD4ACD21565913CF4A4B097C;
+ remoteInfo = GTMSessionFetcher;
+ };
19952C7025B9E7B930FDF433845C8D60 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -753,6 +768,13 @@
remoteGlobalIDString = 7969F0F17682790DCAF63BC9AF2176ED;
remoteInfo = GoogleUtilities;
};
+ 1BE37072EED6A7F6DC4DACE2E5874457 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 39E0403E3ACE39BC0D878D82FAB8F012;
+ remoteInfo = FirebaseABTesting;
+ };
1CE3E751E533C71A2F0C6903F97BFDE8 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -781,6 +803,13 @@
remoteGlobalIDString = 012EE4243226ABBB0BCDFF486045809E;
remoteInfo = UMFontInterface;
};
+ 2565EB7D68EC6C4E0826B5CD02EBBF48 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 6653EE6BC241DCDF86799473CF05303F;
+ remoteInfo = RNLocalize;
+ };
266F38FE30CC51DE411C1C3155EC8FF9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -830,6 +859,13 @@
remoteGlobalIDString = 2543734D0A332B2588202904B99CC151;
remoteInfo = nanopb;
};
+ 33F9A9605873A5A609A49C606F05E7D4 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = DF470A1028ED32C9E70DBDAA805F8802;
+ remoteInfo = Folly;
+ };
341B458D9DE4CA0E8DF8B82F4B28C847 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -865,6 +901,13 @@
remoteGlobalIDString = 031F6220C2D49E4AD5F61FAA0ECADF64;
remoteInfo = UMFileSystemInterface;
};
+ 545A4BC910ACF774C7D1B3898D69BE10 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 2543734D0A332B2588202904B99CC151;
+ remoteInfo = nanopb;
+ };
555A65E7837B1D026AA9456B02E5BC3B /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -893,6 +936,13 @@
remoteGlobalIDString = 5AAD465FECAE9083F45E3DB9252A8302;
remoteInfo = FirebaseRemoteConfig;
};
+ 5B8C76C45A2136665C0571CC3F9AC091 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 368FB7FBA34E3323BB42D13325551C95;
+ remoteInfo = FirebaseCore;
+ };
5BFBF01F776A0AB7D0159BD242AC8FAB /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -907,6 +957,13 @@
remoteGlobalIDString = 4412C5F689DD128EFB8F42F11C502D2C;
remoteInfo = UMCore;
};
+ 5CC1BA1ACB007EE6BC3605F7D410E95B /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 66641B93FAF80FF325B2D7B4AD85056F;
+ remoteInfo = "boost-for-react-native";
+ };
5D1AD928A6543B19561055CA123DFF53 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -956,6 +1013,20 @@
remoteGlobalIDString = D35E9EC86D36A4C8BC1704199FDB3552;
remoteInfo = Fabric;
};
+ 67ED23A5BF71F7AE3FE6E11E75B1E03C /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 7C36E7C600F8DE2BE1819059C80F2182;
+ remoteInfo = GoogleIDFASupport;
+ };
+ 68B8E526790FE20F392E109CD0B77393 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 32F8EA730FE2005197F54338D2C236AC;
+ remoteInfo = GoogleToolboxForMac;
+ };
6C89FC23A5F66D3640E38053C2A0A202 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -1040,6 +1111,13 @@
remoteGlobalIDString = F1DE11E9221F196A8A9D3464F96A345A;
remoteInfo = Protobuf;
};
+ 8315DDACCEA8C95A382D0B06171F592E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 1ABBF6F89787BBEDF49B4636ADB45587;
+ remoteInfo = FirebaseAnalytics;
+ };
84B3D8E7C8B06F649E467DC4E37CAC60 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -1047,6 +1125,13 @@
remoteGlobalIDString = 42F7AF66FD1178857DC3A2834552BE76;
remoteInfo = FirebasePerformance;
};
+ 858BDA576DD1F18DF4CB1C8811669140 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = AB021401ADE9E1431240BBA948E7965E;
+ remoteInfo = GoogleAppMeasurement;
+ };
87D02EAE1DD3CC8AB9B8D646D27548A4 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -1068,6 +1153,13 @@
remoteGlobalIDString = 6653EE6BC241DCDF86799473CF05303F;
remoteInfo = RNLocalize;
};
+ 90DBDDCAD64E987D02521F576616BE62 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 29FC2A0EC130F2F2AF7AC9AE94A583B4;
+ remoteInfo = glog;
+ };
928B7C9776B0EEA71BC214E16417BEED /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -1152,6 +1244,13 @@
remoteGlobalIDString = 4412C5F689DD128EFB8F42F11C502D2C;
remoteInfo = UMCore;
};
+ A9F8BE267C4E2014D37069D20710DA93 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 7969F0F17682790DCAF63BC9AF2176ED;
+ remoteInfo = GoogleUtilities;
+ };
AADD210D1F940E270E559A5AE73B7D04 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -1159,6 +1258,13 @@
remoteGlobalIDString = 29FC2A0EC130F2F2AF7AC9AE94A583B4;
remoteInfo = glog;
};
+ AE0BA90FA1ED54B13ED8985808FB69EE /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 000000006E30;
+ remoteInfo = React;
+ };
B05FDE7687B62296694D0BBA9546545E /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -1166,6 +1272,13 @@
remoteGlobalIDString = 7969F0F17682790DCAF63BC9AF2176ED;
remoteInfo = GoogleUtilities;
};
+ B1A8886696827E049A32FEC96C61DDA5 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = D35E9EC86D36A4C8BC1704199FDB3552;
+ remoteInfo = Fabric;
+ };
B2F216FE57BD14B4B3FAF4DF6EA38D0B /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -1180,6 +1293,13 @@
remoteGlobalIDString = 000000006E30;
remoteInfo = React;
};
+ BC90676054F6FB36FB066904374641EC /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 1414ADEE4A421F3C5F9A229345CE3F61;
+ remoteInfo = DoubleConversion;
+ };
BE0D9CA338918985910CFAB12661D90F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -1264,6 +1384,13 @@
remoteGlobalIDString = 368FB7FBA34E3323BB42D13325551C95;
remoteInfo = FirebaseCore;
};
+ D435D7CC29C198156EAA2FD534ED2A4E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = F1DE11E9221F196A8A9D3464F96A345A;
+ remoteInfo = Protobuf;
+ };
D465047540D12FD9D95291AE82A76DB9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -1285,6 +1412,20 @@
remoteGlobalIDString = 000000006E30;
remoteInfo = React;
};
+ D68FB8ADB4C2F16933D16D1B7D3D01D2 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 1BF2913C5EC8E56B198C82312CA178BF;
+ remoteInfo = RNDeviceInfo;
+ };
+ D8DBA83FFFD144D24C14992C75E709A4 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 97C8CD7E4179727E4F374CABD338D2BB;
+ remoteInfo = Firebase;
+ };
D96509F89472049CDEE4F8807E7A16F7 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -1306,6 +1447,13 @@
remoteGlobalIDString = 1ABBF6F89787BBEDF49B4636ADB45587;
remoteInfo = FirebaseAnalytics;
};
+ E09E547C09587DE2571726618232E38A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 42F7AF66FD1178857DC3A2834552BE76;
+ remoteInfo = FirebasePerformance;
+ };
E4D9F6D7F5F8FF95123D92E6BAD83C17 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -1355,6 +1503,13 @@
remoteGlobalIDString = F3FBABCAF7437339A36C2DB10E815361;
remoteInfo = UMImageLoaderInterface;
};
+ E95BCD9CF05C5ADFD888F02BEEFEBBCB /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 586739D116442BA7FCD2EC0353EA0FA4;
+ remoteInfo = FirebaseInstanceID;
+ };
EA655D6AF0FE06BBD0F0B6642E88D5E9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -1397,6 +1552,13 @@
remoteGlobalIDString = 5ED05858D3E3C1599A062FB1C45FE359;
remoteInfo = EXPermissions;
};
+ F63BAD00A77209AE9E709CB7B69913E0 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = ABA9A411BB5A359862E5F1AA6238278E;
+ remoteInfo = Crashlytics;
+ };
F694606F8A3B5D15625E633C00EB1AC8 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -1411,6 +1573,13 @@
remoteGlobalIDString = ABA9A411BB5A359862E5F1AA6238278E;
remoteInfo = Crashlytics;
};
+ F97DE72A3178E774FED93FB39DDDEAD1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 5AAD465FECAE9083F45E3DB9252A8302;
+ remoteInfo = FirebaseRemoteConfig;
+ };
FA944219433ADF06588994778EB923C1 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
@@ -1432,6 +1601,7 @@
00E3A268F0A7B1393A5344E0B5030763 /* RCTVibration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTVibration.h; path = Libraries/Vibration/RCTVibration.h; sourceTree = ""; };
011AC49904E60DBE7374EF4C6C46CCC5 /* SpookyHashV2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpookyHashV2.cpp; path = folly/hash/SpookyHashV2.cpp; sourceTree = ""; };
01667AE46D9B0857D288D0322E9859D5 /* GULAppDelegateSwizzler_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppDelegateSwizzler_Private.h; path = GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h; sourceTree = ""; };
+ 0224BFAC559A614A3E5BDB8591BCB8CD /* libGTMSessionFetcher.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGTMSessionFetcher.a; path = libGTMSessionFetcher.a; sourceTree = BUILT_PRODUCTS_DIR; };
027FC199BAC70FAB4151B3A0A94AEDDB /* RCTSurface.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSurface.mm; sourceTree = ""; };
02AC66D7FCBAC97407B07ADAE16AA6DC /* RNDeviceInfo-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RNDeviceInfo-prefix.pch"; sourceTree = ""; };
02EE269B177F9131844B8B87D0E70230 /* GPBBootstrap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBBootstrap.h; path = objectivec/GPBBootstrap.h; sourceTree = ""; };
@@ -1456,7 +1626,6 @@
08279C6722BE69AD426FD48CB720E070 /* RCTImageShadowView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RCTImageShadowView.m; path = Libraries/Image/RCTImageShadowView.m; sourceTree = ""; };
08917358529F92D17A1A10E42995569A /* QBAlbumCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QBAlbumCell.h; path = QBImagePicker/QBAlbumCell.h; sourceTree = ""; };
08AB8E3961620365C25C31C68AC9511D /* RCTWrapperViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTWrapperViewController.m; sourceTree = ""; };
- 08CD4BA8C4A956EBBA8841FFA8D85D96 /* libyoga.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libyoga.a; path = libyoga.a; sourceTree = BUILT_PRODUCTS_DIR; };
09503CC93B6FBD842BB816B6EBF3599D /* UMFileSystemInterface.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = UMFileSystemInterface.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
0961D9913096F5A69A58E87F83C5974C /* RCTComponentData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTComponentData.m; sourceTree = ""; };
0972404CC5746EDD33DB926C63C39B0C /* RCTTrackingAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTrackingAnimatedNode.h; sourceTree = ""; };
@@ -1487,6 +1656,7 @@
0DC0A60A9467868CEA7A2146861B49B6 /* FIRVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVersion.m; path = Firebase/Core/FIRVersion.m; sourceTree = ""; };
0DFAC29252B21394064D91B05B3C963E /* RCTActivityIndicatorViewManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTActivityIndicatorViewManager.m; sourceTree = ""; };
0DFD0E923F04AB68A59E3051056881D3 /* RCTStatusBarManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTStatusBarManager.m; sourceTree = ""; };
+ 0E1B1F60A9524A572FA1164AE4EF3BB5 /* libGoogleUtilities.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGoogleUtilities.a; path = libGoogleUtilities.a; sourceTree = BUILT_PRODUCTS_DIR; };
0E1F25D51BE521DF18295C571C993CD4 /* EXUserNotificationRequester.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXUserNotificationRequester.m; path = EXPermissions/EXUserNotificationRequester.m; sourceTree = ""; };
0E67E298AEACB8E5074B461F7DC07845 /* RCTDisplayLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTDisplayLink.m; sourceTree = ""; };
0E94C6CB02605A72F32BBE9875D6AC50 /* RSKInternalUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSKInternalUtility.h; path = RSKImageCropper/RSKInternalUtility.h; sourceTree = ""; };
@@ -1496,6 +1666,8 @@
0F5DA0C2AD93FA52A0FCA4BD5815F600 /* EXFileSystemLocalFileHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXFileSystemLocalFileHandler.h; path = EXFileSystem/EXFileSystemLocalFileHandler.h; sourceTree = ""; };
0F679BDFCED3A61C87F3B0D401DDD7B7 /* stl_logging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stl_logging.h; path = src/glog/stl_logging.h; sourceTree = ""; };
0F6857C1E851EA0D79A81C7C0DE61524 /* RCTKeyCommands.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTKeyCommands.h; sourceTree = ""; };
+ 0F9D32450BA4C90E1EC2C7DDCD91DEC5 /* libDoubleConversion.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libDoubleConversion.a; path = libDoubleConversion.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 0FBB6CE2FC46A7EEE9B58139D2F6507F /* QBImagePicker.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = QBImagePicker.bundle; path = "QBImagePickerController-QBImagePicker.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
10C306448DF95BDD2C33FF0845BE3EE3 /* pb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb.h; sourceTree = ""; };
11CEFEA651D768ECDD7B19E6CC8AA9A1 /* FIRInstanceIDTokenDeleteOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDTokenDeleteOperation.h; path = Firebase/InstanceID/FIRInstanceIDTokenDeleteOperation.h; sourceTree = ""; };
12014BDB3AA1F3822AC982F4B7C62C30 /* RCTFrameUpdate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTFrameUpdate.h; sourceTree = ""; };
@@ -1510,7 +1682,7 @@
14932E74E710E29AFB2ABDDFFA659B8B /* YGNodePrint.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = YGNodePrint.cpp; path = yoga/YGNodePrint.cpp; sourceTree = ""; };
149920DA8D663BC274EDDD280DD0526C /* RCTNetworkTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTNetworkTask.h; path = Libraries/Network/RCTNetworkTask.h; sourceTree = ""; };
14D12918B4EE1A6B8AC37D2DDC5916FE /* pb_common.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_common.c; sourceTree = ""; };
- 14D9F44D0F4C4331D26A6FF0EC25A173 /* libGoogleToolboxForMac.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGoogleToolboxForMac.a; path = libGoogleToolboxForMac.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1557F6150561AE28AD419B52693092AE /* libEXHaptics.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libEXHaptics.a; path = libEXHaptics.a; sourceTree = BUILT_PRODUCTS_DIR; };
158650143D91AEEFB7F6C2EE77EA8B09 /* RCTDecayAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTDecayAnimation.h; sourceTree = ""; };
1590D6871326CFE7CA44DFFEA384FD03 /* glog-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "glog-dummy.m"; sourceTree = ""; };
16012A4DCE6C5D44809A303788CD7C71 /* FIRInstanceIDTokenStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDTokenStore.h; path = Firebase/InstanceID/FIRInstanceIDTokenStore.h; sourceTree = ""; };
@@ -1525,7 +1697,6 @@
16F13CD9A4A583163E1093215792869D /* RCTExceptionsManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTExceptionsManager.m; sourceTree = ""; };
173B1E8BDA805C8C633B709193D60718 /* UMTaskConsumerInterface.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UMTaskConsumerInterface.h; path = UMTaskManagerInterface/UMTaskConsumerInterface.h; sourceTree = ""; };
173CE0DAEBEE072BE0F75998A652E853 /* EXFileSystem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXFileSystem.h; path = EXFileSystem/EXFileSystem.h; sourceTree = ""; };
- 1792FEA3DE4B10EFE0ADED1FCDA8BF84 /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libReact.a; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; };
17AC175BF97175222A6FF39520436A02 /* UMFaceDetectorInterface.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = UMFaceDetectorInterface.xcconfig; sourceTree = ""; };
17D71991D0280E8C03F310F0CAABB18F /* FIROptionsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptionsInternal.h; path = Firebase/Core/Private/FIROptionsInternal.h; sourceTree = ""; };
17E93F44B9FCA03306656D60A8112F2C /* RCTDatePickerManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTDatePickerManager.m; sourceTree = ""; };
@@ -1535,6 +1706,7 @@
185F7B6A44208D005359D8A00878E2F2 /* RCTBackedTextInputDelegateAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTBackedTextInputDelegateAdapter.m; sourceTree = ""; };
191E3FE0B263B68F0AB0C60F4B2939E2 /* RCTSourceCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSourceCode.h; sourceTree = ""; };
1949B0542A654E7317ADAEEADCD4683C /* FIRInstanceID.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceID.m; path = Firebase/InstanceID/FIRInstanceID.m; sourceTree = ""; };
+ 1954559BB85761360B4335D2246E6816 /* libEXWebBrowser.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libEXWebBrowser.a; path = libEXWebBrowser.a; sourceTree = BUILT_PRODUCTS_DIR; };
199B4A5A6EAA07BC42A3B2AE3753F7F3 /* UMImageLoaderInterface.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = UMImageLoaderInterface.xcconfig; sourceTree = ""; };
19B89CE36B3D24F1BF0499BF735EF583 /* RCTImageEditingManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RCTImageEditingManager.m; path = Libraries/Image/RCTImageEditingManager.m; sourceTree = ""; };
19C738559C7A5F02105B64F39AE6B5CA /* UMReactLogHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UMReactLogHandler.h; sourceTree = ""; };
@@ -1543,16 +1715,15 @@
19F365D90299F60D2B38B6CAF1CBBDE3 /* RCTSurfaceHostingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceHostingView.h; sourceTree = ""; };
1A15FBFECB164015748AEC5366BF3741 /* FIRInstanceIDCombinedHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDCombinedHandler.h; path = Firebase/InstanceID/FIRInstanceIDCombinedHandler.h; sourceTree = ""; };
1A62C3C5141921106880025FD3F7C22E /* UMFontScalersManagerInterface.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UMFontScalersManagerInterface.h; path = UMFontInterface/UMFontScalersManagerInterface.h; sourceTree = ""; };
+ 1ABD1C4A2F2C3C0271F1F0C1B7DDBA59 /* libProtobuf.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libProtobuf.a; path = libProtobuf.a; sourceTree = BUILT_PRODUCTS_DIR; };
1ACA7C99B140EE5C9C6BDCC0C0940463 /* RCTPerfMonitor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTPerfMonitor.m; sourceTree = ""; };
1B17644C190C6921FF8F6E4980B8BE97 /* Struct.pbobjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Struct.pbobjc.h; path = objectivec/google/protobuf/Struct.pbobjc.h; sourceTree = ""; };
- 1BCC4DAA4A88371860AF545F33F3E884 /* libGTMSessionFetcher.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGTMSessionFetcher.a; path = libGTMSessionFetcher.a; sourceTree = BUILT_PRODUCTS_DIR; };
1BD414930957BB53AF468D1DDA25B014 /* RCTFrameAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTFrameAnimation.h; sourceTree = ""; };
1BFD6F1262D7CFD8E1E86E5A80CB5B15 /* CGGeometry+RSKImageCropper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CGGeometry+RSKImageCropper.m"; path = "RSKImageCropper/CGGeometry+RSKImageCropper.m"; sourceTree = ""; };
1C20DB8F540F0DE1E287FBDF42C511B3 /* RCTVirtualTextShadowView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTVirtualTextShadowView.m; sourceTree = ""; };
1C9814185C288FDB35A991A7522CC8C7 /* RCTModuloAnimatedNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTModuloAnimatedNode.m; sourceTree = ""; };
1CB3EF08CDD1CF865F3C42A5BB449708 /* Wrappers.pbobjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Wrappers.pbobjc.h; path = objectivec/google/protobuf/Wrappers.pbobjc.h; sourceTree = ""; };
1CE00249C1B2AC7A5F90B2EC58F3F2CB /* RCTLayoutAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTLayoutAnimation.m; sourceTree = ""; };
- 1D0A72FC6C9CCC0B29166D03EAE16D66 /* QBImagePicker.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = QBImagePicker.bundle; path = "QBImagePickerController-QBImagePicker.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
1D286B910787554EB729CBCE602D94C7 /* ResourceBundle-QBImagePicker-QBImagePickerController-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-QBImagePicker-QBImagePickerController-Info.plist"; sourceTree = ""; };
1D2F4AA1E8F90B87245842734E56023D /* GULSwizzledObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULSwizzledObject.h; path = GoogleUtilities/ISASwizzler/Private/GULSwizzledObject.h; sourceTree = ""; };
1D98378181E5D1EB7E3D3B9BC346926D /* RSKImageCropViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSKImageCropViewController.h; path = RSKImageCropper/RSKImageCropViewController.h; sourceTree = ""; };
@@ -1560,6 +1731,8 @@
1DC29CF604E07C4121AF8449730F6480 /* UMAccelerometerInterface.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UMAccelerometerInterface.h; path = UMSensorsInterface/UMAccelerometerInterface.h; sourceTree = ""; };
1DE37CAAC69BFC524C5C8A3CF4F6945E /* RCTConvert+Text.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "RCTConvert+Text.h"; path = "Libraries/Text/RCTConvert+Text.h"; sourceTree = ""; };
1DE4B51719C8796AC7C15A327100306E /* RCTRootViewDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRootViewDelegate.h; sourceTree = ""; };
+ 1E43EB2AFBD804F643193AB4A506FDD2 /* libRNScreens.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libRNScreens.a; path = libRNScreens.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1E5177A82CD7E641E7A8F69772502085 /* libPods-RocketChatRN.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-RocketChatRN.a"; path = "libPods-RocketChatRN.a"; sourceTree = BUILT_PRODUCTS_DIR; };
1EE49B8A769B1E7AFEABA9B6B0B88B03 /* QBAssetCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QBAssetCell.h; path = QBImagePicker/QBAssetCell.h; sourceTree = ""; };
1EEED601F3F0ADAACF378FA3F3974B85 /* RCTAccessibilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTAccessibilityManager.h; sourceTree = ""; };
1F1E9449E2E63E058F57AC955C63F663 /* RCTScrollViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTScrollViewManager.h; sourceTree = ""; };
@@ -1583,14 +1756,12 @@
23C5A22806CE71CDBCC9D7C2BAC7046D /* RCTManagedPointer.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTManagedPointer.mm; sourceTree = ""; };
243936168A9D9B27F417C64A9ED4C4DC /* YGNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YGNode.h; path = yoga/YGNode.h; sourceTree = ""; };
248BD15B47C748C548521943253B99BC /* RCTSubtractionAnimatedNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTSubtractionAnimatedNode.m; sourceTree = ""; };
- 2545972469EFD72C7704976C570D3508 /* libDoubleConversion.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libDoubleConversion.a; path = libDoubleConversion.a; sourceTree = BUILT_PRODUCTS_DIR; };
256F73640791D9E203ABC811B5F47544 /* QBSlomoIconView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QBSlomoIconView.h; path = QBImagePicker/QBSlomoIconView.h; sourceTree = ""; };
25DD481FF87F035BD9DF908A1B96A7AC /* RCTInvalidating.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTInvalidating.h; sourceTree = ""; };
264195E086498FDC318ED443955050EC /* EXWebBrowser-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "EXWebBrowser-prefix.pch"; sourceTree = ""; };
- 264805F5CDC3357EBB8F39FEAA2BB3C6 /* libFirebaseInstanceID.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libFirebaseInstanceID.a; path = libFirebaseInstanceID.a; sourceTree = BUILT_PRODUCTS_DIR; };
27021A74E2CED0F15E858A559C9D73DC /* RCTModuloAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTModuloAnimatedNode.h; sourceTree = ""; };
- 271FCAFE92CCBA2B518EB9CE1AA24F86 /* libEXFileSystem.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libEXFileSystem.a; path = libEXFileSystem.a; sourceTree = BUILT_PRODUCTS_DIR; };
2758EB1A41D3F984AABC6C651A56A2A6 /* UIView+React.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIView+React.h"; sourceTree = ""; };
+ 279714E82B7622AB40021F0705546733 /* libEXAppLoaderProvider.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libEXAppLoaderProvider.a; path = libEXAppLoaderProvider.a; sourceTree = BUILT_PRODUCTS_DIR; };
27BA61510074129562C639CBA224030B /* UIImage+RSKImageCropper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+RSKImageCropper.h"; path = "RSKImageCropper/UIImage+RSKImageCropper.h"; sourceTree = ""; };
280279ABA1A335E9477ABDECC2FD23DD /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; };
288D84180E70FD5FF4C433B8E81050E4 /* UMCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = UMCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
@@ -1608,7 +1779,6 @@
2B254C6B665958AB2EE0FF41B55E87D9 /* GULNetworkURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULNetworkURLSession.m; path = GoogleUtilities/Network/GULNetworkURLSession.m; sourceTree = ""; };
2B3472F5B5AFC91972C23EE479F38D58 /* CLSStackFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSStackFrame.h; path = iOS/Crashlytics.framework/Headers/CLSStackFrame.h; sourceTree = ""; };
2B995A7F6B28BDB8D7F8C34FF59F4A49 /* UMFaceDetectorInterface.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = UMFaceDetectorInterface.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
- 2B9D62939B89D8C781DF5C31CB9E7EB5 /* libreact-native-orientation-locker.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libreact-native-orientation-locker.a"; path = "libreact-native-orientation-locker.a"; sourceTree = BUILT_PRODUCTS_DIR; };
2BFBEC6AD5A3907A6061C1710B02F6AF /* RCTBaseTextViewManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTBaseTextViewManager.m; sourceTree = ""; };
2C25A455E6DD0CF1D341F0AF61DF00A5 /* RCTRedBox.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRedBox.h; sourceTree = ""; };
2C984E6D585D4B0C2A0A6E7D370D0F93 /* RCTConvert+Text.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "RCTConvert+Text.m"; path = "Libraries/Text/RCTConvert+Text.m"; sourceTree = ""; };
@@ -1621,13 +1791,14 @@
2F093F97CFD6E0B8D843F6EC332BD622 /* EXHaptics.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = EXHaptics.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
2F33FE55A531ACD9F959B3E74F720F24 /* FirebasePerformance.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebasePerformance.xcconfig; sourceTree = ""; };
30128AD1F92F2F61768C2C4FE2D2BB6A /* UMLogManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = UMLogManager.m; sourceTree = ""; };
+ 30D6FDCC52D608CFD7FA1FAE7409E462 /* Pods-RocketChatRN-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-RocketChatRN-dummy.m"; sourceTree = ""; };
+ 3138C521EF7F36EE8AED50D94C5EE882 /* libEXConstants.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libEXConstants.a; path = libEXConstants.a; sourceTree = BUILT_PRODUCTS_DIR; };
314B599D37DCA06E72B527C47C69E89E /* RCTMaskedViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTMaskedViewManager.h; sourceTree = ""; };
315FF43D145106CD4B9220A41A039233 /* UMUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UMUtilities.m; path = UMCore/UMUtilities.m; sourceTree = ""; };
31B2D72D412B419A09EEE2219636D0D5 /* YGEnums.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YGEnums.h; path = yoga/YGEnums.h; sourceTree = ""; };
3209D52223DC90072F96949AAFFFEF3F /* bignum-dtoa.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "bignum-dtoa.h"; path = "double-conversion/bignum-dtoa.h"; sourceTree = ""; };
3219006E7D6EEA1CA01EC2AD1F8F1AC6 /* QBAlbumCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QBAlbumCell.m; path = QBImagePicker/QBAlbumCell.m; sourceTree = ""; };
32461DFC0E47CD7259441A160789160E /* GPBArray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBArray.h; path = objectivec/GPBArray.h; sourceTree = ""; };
- 327008797512C5233D29CB631B911250 /* libRNLocalize.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libRNLocalize.a; path = libRNLocalize.a; sourceTree = BUILT_PRODUCTS_DIR; };
32DBB9B2B059385BF7CBC7C10F071CC9 /* Any.pbobjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Any.pbobjc.h; path = objectivec/google/protobuf/Any.pbobjc.h; sourceTree = ""; };
33218EF1E52206241B7FCE116C3107BE /* strtod.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = strtod.cc; path = "double-conversion/strtod.cc"; sourceTree = ""; };
33E9AF75CF68904359D675D2F6B5CA19 /* Demangle.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Demangle.cpp; path = folly/detail/Demangle.cpp; sourceTree = ""; };
@@ -1648,6 +1819,7 @@
38078D2BA55DD82B1AC04A5CAE128CFB /* RCTDevSettings.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTDevSettings.mm; sourceTree = ""; };
3877D8495364FD75AC548B8B0F16D0A7 /* GPBDictionary_PackagePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBDictionary_PackagePrivate.h; path = objectivec/GPBDictionary_PackagePrivate.h; sourceTree = ""; };
3898F03FA6F5B8EC91001D51A7ADCBF2 /* FIRApp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRApp.h; path = Firebase/Core/Public/FIRApp.h; sourceTree = ""; };
+ 3997FC6F3D10DE3F652E3AD4AB9A980A /* libreact-native-webview.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libreact-native-webview.a"; path = "libreact-native-webview.a"; sourceTree = BUILT_PRODUCTS_DIR; };
3A2CA0453EB4FA3888A09328AFB0C15A /* EXRemoteNotificationRequester.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXRemoteNotificationRequester.h; path = EXPermissions/EXRemoteNotificationRequester.h; sourceTree = ""; };
3A49939A60E602BB2BA3160182C8E331 /* FirebaseCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCore.h; path = Firebase/Core/Public/FirebaseCore.h; sourceTree = ""; };
3A67C74E067248967893327F3DAD53D7 /* NSError+FIRInstanceID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+FIRInstanceID.h"; path = "Firebase/InstanceID/NSError+FIRInstanceID.h"; sourceTree = ""; };
@@ -1667,6 +1839,7 @@
3CDA4147144E021ACD13C42D1FFCB4C7 /* EXConstantsService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXConstantsService.h; path = EXConstants/EXConstantsService.h; sourceTree = ""; };
3D45135F223366E3283A556313AD3F8A /* RCTSliderManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSliderManager.h; sourceTree = ""; };
3DBE5B5C519267A9659862AF6C8F3EC7 /* ieee.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ieee.h; path = "double-conversion/ieee.h"; sourceTree = ""; };
+ 3E1BFD391AF5C7C626832E6E549629B2 /* libGoogleToolboxForMac.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGoogleToolboxForMac.a; path = libGoogleToolboxForMac.a; sourceTree = BUILT_PRODUCTS_DIR; };
3E2D1F54C052F13ABE73A9D113CC6625 /* GPBDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBDictionary.m; path = objectivec/GPBDictionary.m; sourceTree = ""; };
3E5FF9B8F5625C54B2248B8CFBD8433E /* FIRInstanceIDLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDLogger.h; path = Firebase/InstanceID/FIRInstanceIDLogger.h; sourceTree = ""; };
3E6EA7847936E331E86B362257DCC4D6 /* RCTStatusBarManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTStatusBarManager.h; sourceTree = ""; };
@@ -1675,6 +1848,7 @@
3F1724CF420D8B036660ABBF26E45A70 /* EXConstantsService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXConstantsService.m; path = EXConstants/EXConstantsService.m; sourceTree = ""; };
3F1B13F570F57C02BADE457AB62783B3 /* RCTShadowView+Layout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RCTShadowView+Layout.m"; sourceTree = ""; };
3F6800369DA08462CB599FA34B9B109D /* RCTClipboard.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTClipboard.m; sourceTree = ""; };
+ 3FAFEC3BA6F7A549C49CE3DF0456769F /* libRSKImageCropper.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libRSKImageCropper.a; path = libRSKImageCropper.a; sourceTree = BUILT_PRODUCTS_DIR; };
404BA4400EBFEDAC8B7396B95013BE5E /* RCTPickerManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTPickerManager.m; sourceTree = ""; };
40577C9BC8C9BB454FC1C20E6308332D /* EXContactsRequester.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXContactsRequester.h; path = EXPermissions/EXContactsRequester.h; sourceTree = ""; };
41196DB3E7DD1FEA9F8F2D0D1E80351D /* react-native-document-picker.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = "react-native-document-picker.podspec"; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
@@ -1717,6 +1891,7 @@
4C2812A321DB28C5A37D494A1705FA3C /* FIRConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRConfiguration.m; path = Firebase/Core/FIRConfiguration.m; sourceTree = ""; };
4C8B860B45EC3D0A6958A4F91C0490A3 /* logging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = logging.h; path = src/glog/logging.h; sourceTree = ""; };
4D1B92FF422855E7F24CBC59BA2A31C4 /* GPBCodedOutputStream_PackagePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBCodedOutputStream_PackagePrivate.h; path = objectivec/GPBCodedOutputStream_PackagePrivate.h; sourceTree = ""; };
+ 4D2DA5811BC85AF3E1B3107B9EB5F285 /* libRNDeviceInfo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libRNDeviceInfo.a; path = libRNDeviceInfo.a; sourceTree = BUILT_PRODUCTS_DIR; };
4DB1D4150718C4CAFA487244471DCB74 /* UMUtilitiesInterface.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UMUtilitiesInterface.h; sourceTree = ""; };
4DC3650807C96F5E7FB2BB5E3F1F571D /* RSKImageCropperStrings.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = RSKImageCropperStrings.bundle; path = RSKImageCropper/RSKImageCropperStrings.bundle; sourceTree = ""; };
4DC7C3515580940D0C1C64597E302966 /* QBAlbumsViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QBAlbumsViewController.m; path = QBImagePicker/QBAlbumsViewController.m; sourceTree = ""; };
@@ -1728,9 +1903,11 @@
4F03A71B1A7A836713EA99C0895B5175 /* RCTSafeAreaShadowView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTSafeAreaShadowView.m; sourceTree = ""; };
4F20D7BC6AB73EF8EF68D083EFEB0B53 /* UMReactNativeEventEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UMReactNativeEventEmitter.h; sourceTree = ""; };
4F5B2B61643B7E9F83E3079EA2B2E2D1 /* RCTSafeAreaView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTSafeAreaView.m; sourceTree = ""; };
+ 4F6B964706F8ADC73280A6DB40F720EA /* Pods-ShareRocketChatRN.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShareRocketChatRN.debug.xcconfig"; sourceTree = ""; };
4F93B070B93F0B36E69C2FDFC7E91FDF /* RCTUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTUtils.h; sourceTree = ""; };
4FC96F0730C911C2CEE9C369BAA1957C /* RCTRootShadowView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRootShadowView.h; sourceTree = ""; };
4FEFC3824E885097B5EFA39D8520E9AC /* RCTBlobManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTBlobManager.mm; path = Libraries/Blob/RCTBlobManager.mm; sourceTree = ""; };
+ 501D8262643E75ACB8B36147ADB61F0D /* Pods-ShareRocketChatRN.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShareRocketChatRN.release.xcconfig"; sourceTree = ""; };
50211D8651BDEECDCF337C2943949119 /* GPBDescriptor_PackagePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBDescriptor_PackagePrivate.h; path = objectivec/GPBDescriptor_PackagePrivate.h; sourceTree = ""; };
50931769527BAD09EACEBAE3CBDBDDC7 /* RCTSurfaceRootView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSurfaceRootView.mm; sourceTree = ""; };
50BC3074BB06BC98F23931C70A9B5C19 /* GPBUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBUtilities.m; path = objectivec/GPBUtilities.m; sourceTree = ""; };
@@ -1743,7 +1920,6 @@
5274787BB9193393C5824E6F9B8E9BAD /* RCTTextAttributes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RCTTextAttributes.m; path = Libraries/Text/RCTTextAttributes.m; sourceTree = ""; };
527DF256BC386FD438DAA5A629668677 /* RCTRefreshControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTRefreshControl.m; sourceTree = ""; };
528FD7D8D0683E152C34D14023037CC3 /* RCTBaseTextInputShadowView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTBaseTextInputShadowView.m; sourceTree = ""; };
- 52BB1A256EC75B6208CDD28FD57A1547 /* libFirebaseCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libFirebaseCore.a; path = libFirebaseCore.a; sourceTree = BUILT_PRODUCTS_DIR; };
52DA011A6498E4ED329FDA6D3280D6C9 /* RCTVirtualTextViewManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTVirtualTextViewManager.m; sourceTree = ""; };
52E1F8271B715F55D9EFC4011B1C7EF1 /* YGValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YGValue.h; path = yoga/YGValue.h; sourceTree = ""; };
53563E1385145D00720C7953AD9E0E74 /* Crashlytics.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Crashlytics.xcconfig; sourceTree = ""; };
@@ -1762,6 +1938,7 @@
5793932406A356EA097D1934027877FD /* RCTUIManagerUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTUIManagerUtils.m; sourceTree = ""; };
579E21F0E94CEF5650570F6CF8841CC8 /* diy-fp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "diy-fp.h"; path = "double-conversion/diy-fp.h"; sourceTree = ""; };
5806880501A07C1ACB9A7138A81669B0 /* pb_decode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_decode.h; sourceTree = ""; };
+ 58706CC7A8E0E0F55DD79B0A97259068 /* libFirebaseCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libFirebaseCore.a; path = libFirebaseCore.a; sourceTree = BUILT_PRODUCTS_DIR; };
58EFA2443DE01F9B740204B2BDDAE0DE /* CLSReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSReport.h; path = iOS/Crashlytics.framework/Headers/CLSReport.h; sourceTree = ""; };
5956F9FB9211682296BEF07D54D91AA9 /* EXSystemBrightnessRequester.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXSystemBrightnessRequester.h; path = EXPermissions/EXSystemBrightnessRequester.h; sourceTree = ""; };
59580373A446659C07B9D6B12E8B769F /* FIRInstanceIDTokenInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDTokenInfo.m; path = Firebase/InstanceID/FIRInstanceIDTokenInfo.m; sourceTree = ""; };
@@ -1771,6 +1948,7 @@
59AFCE36072473C2A6DFE33FD5ED1CB2 /* RSKInternalUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSKInternalUtility.m; path = RSKImageCropper/RSKInternalUtility.m; sourceTree = ""; };
59B18FAFDBF7C97CA820446A7A40E385 /* FIRInstanceID+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FIRInstanceID+Private.m"; path = "Firebase/InstanceID/FIRInstanceID+Private.m"; sourceTree = ""; };
59EDFF0DAF963120B38FF8CB03EFD21D /* GULReachabilityChecker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULReachabilityChecker.m; path = GoogleUtilities/Reachability/GULReachabilityChecker.m; sourceTree = ""; };
+ 5A0FFFD4ADE7F817295DDA4CECEAD0FD /* libPods-ShareRocketChatRN.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-ShareRocketChatRN.a"; path = "libPods-ShareRocketChatRN.a"; sourceTree = BUILT_PRODUCTS_DIR; };
5A29582DC746F0777955025C3F67A60E /* Crashlytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Crashlytics.h; path = iOS/Crashlytics.framework/Headers/Crashlytics.h; sourceTree = ""; };
5A601E6330B922C4911EB6709D982A87 /* boost-for-react-native.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "boost-for-react-native.xcconfig"; sourceTree = ""; };
5A66D4BE8819AAEA103734F7D4F5519D /* QBImagePickerController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "QBImagePickerController-prefix.pch"; sourceTree = ""; };
@@ -1778,7 +1956,6 @@
5AA19343AAC80303C5A5B8F29E49BB8C /* RCTBaseTextInputView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBaseTextInputView.h; sourceTree = ""; };
5ACA587B793D7FC4BC535A8B27C1CEA2 /* RCTBaseTextInputViewManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTBaseTextInputViewManager.m; sourceTree = ""; };
5ACE61F08BAECB8D855C73D8A8CE5A64 /* RCTAnimationUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RCTAnimationUtils.m; path = Libraries/NativeAnimation/RCTAnimationUtils.m; sourceTree = ""; };
- 5AD048465639525B81E23944B58005C8 /* Pods-RocketChatRN-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-RocketChatRN-acknowledgements.plist"; sourceTree = ""; };
5BE41C9DFDC4FD7C408776028F523ED8 /* FirebaseABTesting.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseABTesting.framework; path = Frameworks/FirebaseABTesting.framework; sourceTree = ""; };
5BF82CB903CAEFA2CA66A7762B8FE6C8 /* EXPermissions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPermissions.h; path = EXPermissions/EXPermissions.h; sourceTree = ""; };
5C091A0338C15E8B88682282FA526CA6 /* FIRInstanceIDStringEncoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDStringEncoding.h; path = Firebase/InstanceID/FIRInstanceIDStringEncoding.h; sourceTree = ""; };
@@ -1840,6 +2017,7 @@
67DFE3C6D8C3CA832A5A9DE83A740C69 /* UMFontInterface.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = UMFontInterface.xcconfig; sourceTree = ""; };
67F9FFB21F61BADAEC011B91C6AC6F40 /* RCTSafeAreaViewManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTSafeAreaViewManager.m; sourceTree = ""; };
683B8DF13FF50A85558EDED661C1ECD8 /* RCTRootView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTRootView.m; sourceTree = ""; };
+ 6842129DEE9BB42323033ABD94A828E1 /* libreact-native-splash-screen.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libreact-native-splash-screen.a"; path = "libreact-native-splash-screen.a"; sourceTree = BUILT_PRODUCTS_DIR; };
68A1E84C5B4C1FA0364534DF5FA9CA2B /* FIRInstanceIDCheckinStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDCheckinStore.m; path = Firebase/InstanceID/FIRInstanceIDCheckinStore.m; sourceTree = ""; };
69089CC3E936539BE132560E11A43A13 /* RCTDiffClampAnimatedNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTDiffClampAnimatedNode.m; sourceTree = ""; };
691EF9B1D06BA19043426138C3BC30A5 /* RCTConvert+CoreLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RCTConvert+CoreLocation.h"; sourceTree = ""; };
@@ -1858,17 +2036,18 @@
6BEC5CB1F4874AAD0138959794C1CF02 /* QBImagePicker.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = QBImagePicker.storyboard; path = QBImagePicker/QBImagePicker.storyboard; sourceTree = ""; };
6C0A208B50BC7DD0CB91ED9CAC3066BE /* FIRInstanceIDLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDLogger.m; path = Firebase/InstanceID/FIRInstanceIDLogger.m; sourceTree = ""; };
6C39F1753DA29E5A6D9606FEEE72D98F /* RCTImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageView.h; path = Libraries/Image/RCTImageView.h; sourceTree = ""; };
+ 6C6494BF3BBF96C9957F9676F8B880E2 /* Pods-ShareRocketChatRN-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ShareRocketChatRN-dummy.m"; sourceTree = ""; };
6CEEED1B3C1D4D55294DF073F65F93AF /* UMTaskServiceInterface.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UMTaskServiceInterface.h; path = UMTaskManagerInterface/UMTaskServiceInterface.h; sourceTree = ""; };
6D048B65D5401F3B11C2CD7AD3F5FDE2 /* RSKTouchView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSKTouchView.h; path = RSKImageCropper/RSKTouchView.h; sourceTree = ""; };
6D1AC57504505A93DD8D0EA687056CBB /* FieldMask.pbobjc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FieldMask.pbobjc.m; path = objectivec/google/protobuf/FieldMask.pbobjc.m; sourceTree = ""; };
6D4CA1ACC838745B51F8A5752971E375 /* RNDocumentPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RNDocumentPicker.h; path = ios/RNDocumentPicker/RNDocumentPicker.h; sourceTree = ""; };
6D4F1380084C5CF876DBC28B169C3B82 /* Folly.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Folly.xcconfig; sourceTree = ""; };
+ 6D82F565EC3AB854EB6657E0657222C2 /* Pods-RocketChatRN.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RocketChatRN.release.xcconfig"; sourceTree = ""; };
6D833940F8920FEFC2F9755D26B57431 /* RCTBridge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTBridge.m; sourceTree = ""; };
6DB842E29EB9934D5B365DE7714ED23B /* FirebaseAnalytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseAnalytics.framework; path = Frameworks/FirebaseAnalytics.framework; sourceTree = ""; };
6DBCFE241D50787D88C02583958BE5CA /* RCTDiffClampAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTDiffClampAnimatedNode.h; sourceTree = ""; };
6DC579C09B3BA22DD3F694833A665382 /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = iOS/Crashlytics.framework; sourceTree = ""; };
6DFC645B36E2820CBD47C45BF1DFEE72 /* FIRInstanceIDCheckinPreferences_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDCheckinPreferences_Private.h; path = Firebase/InstanceID/FIRInstanceIDCheckinPreferences_Private.h; sourceTree = ""; };
- 6E0F4C92AE5D18A4897B40CC4F06BDCD /* libreact-native-splash-screen.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libreact-native-splash-screen.a"; path = "libreact-native-splash-screen.a"; sourceTree = BUILT_PRODUCTS_DIR; };
6E16EE4C9961CA3083C4F81E5FC9E601 /* fishhook.c */ = {isa = PBXFileReference; includeInIndex = 1; name = fishhook.c; path = Libraries/fishhook/fishhook.c; sourceTree = ""; };
6E516B77930E058AFB80698F795EA6B3 /* RNCWKProcessPoolManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RNCWKProcessPoolManager.m; path = ios/RNCWKProcessPoolManager.m; sourceTree = ""; };
6F5BDF1967164F406936BE6B6960EC62 /* RCTDecayAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTDecayAnimation.m; sourceTree = ""; };
@@ -1899,6 +2078,7 @@
74FDDE699F10FFBCD13225E59BBCBCEE /* UMModuleRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UMModuleRegistry.h; sourceTree = ""; };
751FA6A2DDEF00EED6F2D6EA974D5F2B /* RCTMultiplicationAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTMultiplicationAnimatedNode.h; sourceTree = ""; };
75AA52977A1E1150C14665F8A45F2C38 /* YGLayout.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = YGLayout.cpp; path = yoga/YGLayout.cpp; sourceTree = ""; };
+ 75E5F2FAE3615F969E1B0DA9DD23A307 /* Pods-ShareRocketChatRN-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ShareRocketChatRN-acknowledgements.plist"; sourceTree = ""; };
75F4782203BE073C5446F4EAF6B76DC7 /* RCTInputAccessoryViewManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTInputAccessoryViewManager.m; sourceTree = ""; };
769B813EB142B15699A2D538E9103E94 /* YGStyle.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = YGStyle.cpp; path = yoga/YGStyle.cpp; sourceTree = ""; };
76BC3A5A5F36FE17E04E6722EF998001 /* RCTScrollableProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTScrollableProtocol.h; sourceTree = ""; };
@@ -1930,7 +2110,6 @@
7C2E814399C509F6046B91DD6C7410FB /* GoogleAppMeasurement.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleAppMeasurement.framework; path = Frameworks/GoogleAppMeasurement.framework; sourceTree = ""; };
7C9755B93FBE6CDE9A073BD353CDDF02 /* EXAppLoaderInterface.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = EXAppLoaderInterface.h; sourceTree = ""; };
7C9F66BD2F5994688215F7C214C82892 /* GULUserDefaults.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULUserDefaults.m; path = GoogleUtilities/UserDefaults/GULUserDefaults.m; sourceTree = ""; };
- 7CBB70653DCBD6DD993B57C905751C64 /* Pods-RocketChatRN-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-RocketChatRN-acknowledgements.markdown"; sourceTree = ""; };
7CE016666AC050C85942B86100015D33 /* RCTSwitch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTSwitch.m; sourceTree = ""; };
7CE38D1FB16DAD234E1C5A0E15A511CA /* RCTMultilineTextInputView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTMultilineTextInputView.m; sourceTree = ""; };
7D0EBDB6E699709233FA133EA7E18B4C /* EXAppLoaderProvider-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "EXAppLoaderProvider-prefix.pch"; sourceTree = ""; };
@@ -1949,7 +2128,6 @@
808D6DDACE2479D44956ECE70452EEDB /* FirebaseRemoteConfig.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseRemoteConfig.xcconfig; sourceTree = ""; };
80EB1576F23DD23C8D061B78F428A845 /* RNCWKProcessPoolManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RNCWKProcessPoolManager.h; path = ios/RNCWKProcessPoolManager.h; sourceTree = ""; };
80F583A588A7BFDA1F7CB40F133E0521 /* GTMLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMLogger.h; path = Foundation/GTMLogger.h; sourceTree = ""; };
- 810E11EE095FF23C05B9F7D24C08A545 /* libRNImageCropPicker.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libRNImageCropPicker.a; path = libRNImageCropPicker.a; sourceTree = BUILT_PRODUCTS_DIR; };
810E7C3931779CC0C65318B4AB4B2E91 /* RCTRawTextViewManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTRawTextViewManager.m; sourceTree = ""; };
8117FC6BE8162F0A7EAEA5B3F013B8CE /* RCTI18nManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTI18nManager.h; sourceTree = ""; };
81C3ED587F3B76B9BEDE35D5AEEBA127 /* RCTModalHostViewManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTModalHostViewManager.m; sourceTree = ""; };
@@ -1957,6 +2135,7 @@
822E127F41D73E1A442BAE48920F7F3E /* FIRInstanceID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceID.h; path = Firebase/InstanceID/Public/FIRInstanceID.h; sourceTree = ""; };
82430EC7AE53BC00EED3F4C128826589 /* UMFileSystemInterface.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UMFileSystemInterface.h; path = UMFileSystemInterface/UMFileSystemInterface.h; sourceTree = ""; };
824CA65A50D94CA1CAE58408CB4B035F /* FirebaseABTesting.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseABTesting.xcconfig; sourceTree = ""; };
+ 828F786006E9475A8F48D9903907BF7D /* libQBImagePickerController.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libQBImagePickerController.a; path = libQBImagePickerController.a; sourceTree = BUILT_PRODUCTS_DIR; };
82A674770293735DCCF21931B8F94DF9 /* RCTErrorInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTErrorInfo.m; sourceTree = ""; };
82EBFF5DB156A96271B0169DA4006590 /* libAdIdAccessLibrary.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = libAdIdAccessLibrary.a; path = Libraries/libAdIdAccessLibrary.a; sourceTree = ""; };
833461056D9A489B4099E8A0F59BBFE7 /* GTMSessionFetcher-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GTMSessionFetcher-prefix.pch"; sourceTree = ""; };
@@ -1975,6 +2154,7 @@
85F0D2659222CC95642879C71B79F283 /* GULAppEnvironmentUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppEnvironmentUtil.h; path = GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h; sourceTree = ""; };
85FE911EB001F8E28B02C19EF12D70EA /* EXPermissions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPermissions.m; path = EXPermissions/EXPermissions.m; sourceTree = ""; };
86144205600214BECA2C93CEDC2A76D7 /* QBCheckmarkView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QBCheckmarkView.h; path = QBImagePicker/QBCheckmarkView.h; sourceTree = ""; };
+ 862BE059FBA2420B43E3FDA164484F62 /* libglog.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libglog.a; path = libglog.a; sourceTree = BUILT_PRODUCTS_DIR; };
86EFE06820FB134DCDDF6963B5BD7B4D /* EXRemindersRequester.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXRemindersRequester.m; path = EXPermissions/EXRemindersRequester.m; sourceTree = ""; };
86FB658177A76D66DFF67A1F1B6430D6 /* FIRInstanceIDTokenFetchOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDTokenFetchOperation.m; path = Firebase/InstanceID/FIRInstanceIDTokenFetchOperation.m; sourceTree = ""; };
87792DF843702030DB1321212D0917D6 /* RNDocumentPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RNDocumentPicker.m; path = ios/RNDocumentPicker/RNDocumentPicker.m; sourceTree = ""; };
@@ -1983,6 +2163,7 @@
885A5143A2E8D15B26B1ADCC1411E341 /* RCTResizeMode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RCTResizeMode.m; path = Libraries/Image/RCTResizeMode.m; sourceTree = ""; };
88B6BC85463371AE37E2466F947FE93E /* RCTImageBlurUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RCTImageBlurUtils.m; path = Libraries/Image/RCTImageBlurUtils.m; sourceTree = ""; };
88E55F23E75BE70319158852ED65D130 /* react-native-webview.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "react-native-webview.xcconfig"; sourceTree = ""; };
+ 8981A3DCA2B5E70074AD0F0F1AF4F345 /* Pods-ShareRocketChatRN-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ShareRocketChatRN-acknowledgements.markdown"; sourceTree = ""; };
89E05876F5441C88AA71DE839D0DA604 /* RCTURLRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTURLRequestHandler.h; sourceTree = ""; };
89F4B2BC31DD12CB078AE0B309E89C66 /* RCTScrollContentView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTScrollContentView.m; sourceTree = ""; };
8A0BC2473E7F25478CB5C6C84EE5C76A /* RCTLocalAssetImageLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RCTLocalAssetImageLoader.m; path = Libraries/Image/RCTLocalAssetImageLoader.m; sourceTree = ""; };
@@ -2011,12 +2192,11 @@
8EAABB04C2CF955ECC9E123EE5FB00E5 /* json.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = json.cpp; path = folly/json.cpp; sourceTree = ""; };
8EAC50A0BA303896C5DB958A11879863 /* YGMarker.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = YGMarker.cpp; path = yoga/YGMarker.cpp; sourceTree = ""; };
8F6C7AA84B6FE3F824F481CEAAF9162D /* RCTScrollViewManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTScrollViewManager.m; sourceTree = ""; };
- 8FBFB7E71422950FF7E6E2A83CE3F5DD /* libPods-RocketChatRN.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-RocketChatRN.a"; path = "libPods-RocketChatRN.a"; sourceTree = BUILT_PRODUCTS_DIR; };
9032CD125DB2A76C1673E807BFC4330B /* RCTProgressViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTProgressViewManager.h; sourceTree = ""; };
90AFB4C0A5A07720C95E049B54BBE4E1 /* YGMarker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YGMarker.h; path = yoga/YGMarker.h; sourceTree = ""; };
- 90D848D9D139A1A4532D897C51EE4BBF /* libRSKImageCropper.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libRSKImageCropper.a; path = libRSKImageCropper.a; sourceTree = BUILT_PRODUCTS_DIR; };
91B29A035D1983BEC980F4E3B2A01FA3 /* RCTSurfaceRootShadowViewDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceRootShadowViewDelegate.h; sourceTree = ""; };
91CFA1FE6CD4AF820B1DCF809EC664EF /* RCTVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTVersion.m; sourceTree = ""; };
+ 91E6F0DDEECEA71B48EC90595495405D /* Pods-RocketChatRN.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RocketChatRN.debug.xcconfig"; sourceTree = ""; };
91FDABE3488315384812627C640AA501 /* RCTScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTScrollView.h; sourceTree = ""; };
91FFC3ACA796AF71C4AB51C4D5637080 /* GTMSessionFetcherLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcherLogging.h; path = Source/GTMSessionFetcherLogging.h; sourceTree = ""; };
92149D25FF688D6F2730652B54F788FA /* RCTSurfaceRootView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceRootView.h; sourceTree = ""; };
@@ -2027,14 +2207,12 @@
92EDC970716B3C90FA68ABE5EA5BF251 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; };
92F98AB7A03F19964457332E08AF3429 /* RCTImageUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageUtils.h; path = Libraries/Image/RCTImageUtils.h; sourceTree = ""; };
931E1E88664BF29C0559B61CDF1BD5BA /* RSKImageCropper.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RSKImageCropper.xcconfig; sourceTree = ""; };
+ 9379920E557C34F5428A22260CA77634 /* libRNLocalize.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libRNLocalize.a; path = libRNLocalize.a; sourceTree = BUILT_PRODUCTS_DIR; };
93B0DF280628A39BA2607CDBF0F0D6BC /* UMGyroscopeInterface.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UMGyroscopeInterface.h; path = UMSensorsInterface/UMGyroscopeInterface.h; sourceTree = ""; };
- 93CBBFE3E2C071C59A60E9885A98DBA7 /* libUMCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libUMCore.a; path = libUMCore.a; sourceTree = BUILT_PRODUCTS_DIR; };
93F58CDD8D236758FC6A6A338F22F58B /* EXWebBrowser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXWebBrowser.m; path = EXWebBrowser/EXWebBrowser.m; sourceTree = ""; };
9430701CE58B271FAE3DFA22C7E837CF /* RCTGIFImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTGIFImageDecoder.h; path = Libraries/Image/RCTGIFImageDecoder.h; sourceTree = ""; };
945CFD2602A0DAA2964815C8D4D40968 /* RCTPointerEvents.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTPointerEvents.h; sourceTree = ""; };
- 946BF114C56FBABC180E8CBFEFA70E05 /* libEXHaptics.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libEXHaptics.a; path = libEXHaptics.a; sourceTree = BUILT_PRODUCTS_DIR; };
95241965EBFF9DCBC60990E0B37A7A49 /* RCTParserUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTParserUtils.m; sourceTree = ""; };
- 956F231817E6DE9D2DEC98D7B58E7657 /* libFolly.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libFolly.a; path = libFolly.a; sourceTree = BUILT_PRODUCTS_DIR; };
95C15A4BF3BF113D8E6F2239D5AFA0D3 /* GoogleToolboxForMac.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleToolboxForMac.xcconfig; sourceTree = ""; };
95CAA4B7A252E4C463547F77C5D59AF7 /* EXAppLoaderProvider.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = EXAppLoaderProvider.xcconfig; sourceTree = ""; };
961E5CFB6EF6E98C98144578CDA78057 /* GTMSessionFetcherService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcherService.m; path = Source/GTMSessionFetcherService.m; sourceTree = ""; };
@@ -2051,11 +2229,11 @@
99CA8CD51DD44873AD50DAEAB6D48398 /* RCTRefreshControlManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTRefreshControlManager.m; sourceTree = ""; };
9A035B7338F976352AC53889764F18A7 /* RCTModuleMethod.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTModuleMethod.mm; sourceTree = ""; };
9A3E729EED6E8F3264F54901D0C15D20 /* RCTKeyboardObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTKeyboardObserver.h; sourceTree = ""; };
+ 9A505FEE16C4CA075A3CA8CF51C59E00 /* libRNImageCropPicker.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libRNImageCropPicker.a; path = libRNImageCropPicker.a; sourceTree = BUILT_PRODUCTS_DIR; };
9AB317F0CFE633918FE469302716CA49 /* Assume.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Assume.cpp; path = folly/lang/Assume.cpp; sourceTree = ""; };
9B066F604AE03ED040A476A9EB44C9E5 /* RCTTextShadowView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTTextShadowView.m; sourceTree = ""; };
9B4512B42C6948CBF0F16435F219BCE3 /* RCTScrollContentShadowView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTScrollContentShadowView.h; sourceTree = ""; };
9B6EB8ABBF4DBB75EEAE28A420846B0D /* raw_logging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = raw_logging.h; path = src/glog/raw_logging.h; sourceTree = ""; };
- 9BB9F9223905CF9D09D2BE349B1B83B5 /* libRNScreens.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libRNScreens.a; path = libRNScreens.a; sourceTree = BUILT_PRODUCTS_DIR; };
9BEF5249A93D7B45781556D1E82B486A /* RCTNativeAnimatedNodesManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RCTNativeAnimatedNodesManager.m; path = Libraries/NativeAnimation/RCTNativeAnimatedNodesManager.m; sourceTree = ""; };
9C69131A88EAA9E00535742EC39AE853 /* react-native-webview-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "react-native-webview-prefix.pch"; sourceTree = ""; };
9CC41E2F70D5E57207BAE0650CF02D94 /* UMImageLoaderInterface.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = UMImageLoaderInterface.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
@@ -2093,11 +2271,10 @@
A324AC81B36A47873253C51355B17425 /* react-native-webview.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = "react-native-webview.podspec"; sourceTree = "