Replace react-native-fcm by react-native-firebase

parent c70bf244
......@@ -2,7 +2,6 @@ import { select } from 'redux-saga/effects';
import { expectSaga } from 'redux-saga-test-plan';
import * as matchers from 'redux-saga-test-plan/matchers';
import { Platform } from 'react-native';
import FCM from 'react-native-fcm';
import pushNotificationsSaga from '../../app/sagas/pushNotifications';
import { apiRequest, tokenSelector } from '../../app/utils/url';
import * as pushActions from '../../app/actions/pushNotifications';
......@@ -12,22 +11,31 @@ jest.mock('../../app/utils/url', () => ({
tokenSelector: () => 'token',
}));
jest.mock('react-native-fcm', () => ({
getFCMToken: jest.fn(),
requestPermissions: jest.fn(),
deleteInstanceId: jest.fn(),
const mockIid = {
delete: jest.fn(),
};
const mockMessaging = {
hasPermission: jest.fn(),
getToken: jest.fn(),
requestPermission: jest.fn(),
};
jest.mock('react-native-firebase', () => ({
iid: () => mockIid,
messaging: () => mockMessaging,
}));
describe('pushNotifications saga', () => {
beforeAll(() => {
FCM.getFCMToken.mockReturnValue('token');
mockMessaging.getToken.mockReturnValue('token');
});
describe('register', () => {
beforeEach(() => {
Platform.OS = 'ios';
FCM.requestPermissions.mockReset();
FCM.getFCMToken.mockReset();
mockMessaging.requestPermission.mockReset();
mockMessaging.getToken.mockReset();
apiRequest.mockReset();
});
......@@ -38,7 +46,7 @@ describe('pushNotifications saga', () => {
.dispatch(pushActions.register())
.silentRun()
.then(() => {
expect(FCM.requestPermissions).toBeCalled();
expect(mockMessaging.requestPermission).toBeCalled();
}));
it('should not request permissions when platform is Android', () => {
......@@ -50,31 +58,29 @@ describe('pushNotifications saga', () => {
.dispatch(pushActions.register())
.silentRun()
.then(() => {
expect(FCM.requestPermissions).not.toBeCalled();
expect(mockMessaging.requestPermission).not.toBeCalled();
});
});
it('should post a token to the server', () => {
return expectSaga(pushNotificationsSaga)
.provide([
[select(tokenSelector), 'token'],
[matchers.call.like({ fn: apiRequest, args: ['events'] }), { results: 'data' }],
])
.dispatch(pushActions.register())
.silentRun()
.then(() => {
expect(apiRequest).toBeCalledWith('devices',
{
body: '{"type":"ios"}',
headers: {
Accept: 'application/json',
Authorization: 'Token token',
'Content-Type': 'application/json',
},
method: 'POST',
});
});
});
it('should post a token to the server', () => expectSaga(pushNotificationsSaga)
.provide([
[select(tokenSelector), 'token'],
[matchers.call.like({ fn: apiRequest, args: ['events'] }), { results: 'data' }],
])
.dispatch(pushActions.register())
.silentRun()
.then(() => {
expect(apiRequest).toBeCalledWith('devices',
{
body: '{"type":"ios"}',
headers: {
Accept: 'application/json',
Authorization: 'Token token',
'Content-Type': 'application/json',
},
method: 'POST',
});
}));
});
describe('invalidate', () => {
......@@ -82,7 +88,7 @@ describe('pushNotifications saga', () => {
.dispatch(pushActions.invalidate())
.silentRun()
.then(() => {
expect(FCM.deleteInstanceId).toBeCalled();
expect(mockIid.delete).toBeCalled();
}));
});
});
import { NativeModules } from 'react-native';
NativeModules.RNFirebase = {
apps: [],
};
......@@ -152,12 +152,13 @@ dependencies {
implementation project(':react-native-vector-icons')
implementation project(':react-native-snackbar')
implementation project(':react-native-linear-gradient')
implementation project(':react-native-fcm')
implementation project(':react-native-firebase')
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
implementation "com.android.support:design:${rootProject.ext.supportLibVersion}"
implementation "com.facebook.react:react-native:+" // From node_modules
implementation 'com.google.firebase:firebase-core:11.4.0'
implementation "com.google.firebase:firebase-core:16.0.1"
implementation "com.google.firebase:firebase-messaging:17.1.0"
}
// Run this once to be able to run the application with BUCK
......
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.thaliapp">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="22"/>
<application
android:name=".MainApplication"
......@@ -12,7 +11,8 @@
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/AppTheme">
android:theme="@style/AppTheme"
android:launchMode="singleTop">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
......@@ -34,18 +34,21 @@
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity"/>
<service android:name="com.evollu.react.fcm.MessagingService" android:enabled="true" android:exported="true">
<service android:name="io.invertase.firebase.messaging.RNFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name="com.evollu.react.fcm.InstanceIdService" android:exported="false">
<service android:name="io.invertase.firebase.messaging.RNFirebaseInstanceIdService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
<service android:name="io.invertase.firebase.messaging.RNFirebaseBackgroundMessagingService" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/magenta" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_notification" />
......
......@@ -3,10 +3,14 @@ package com.thaliapp;
import android.app.Application;
import com.facebook.react.ReactApplication;
import io.invertase.firebase.RNFirebasePackage;
import io.invertase.firebase.messaging.RNFirebaseMessagingPackage;
import io.invertase.firebase.notifications.RNFirebaseNotificationsPackage;
import io.invertase.firebase.instanceid.RNFirebaseInstanceIdPackage;
import io.sentry.RNSentryPackage;
import com.azendoo.reactnativesnackbar.SnackbarPackage;
import com.i18n.reactnativei18n.ReactNativeI18n;
import com.evollu.react.fcm.FIRMessagingPackage;
import com.BV.LinearGradient.LinearGradientPackage;
import com.oblador.vectoricons.VectorIconsPackage;
import com.facebook.react.ReactNativeHost;
......@@ -27,12 +31,15 @@ public class MainApplication extends Application implements ReactApplication {
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
return Arrays.asList(
new MainReactPackage(),
new RNSentryPackage(),
new SnackbarPackage(),
new ReactNativeI18n(),
new FIRMessagingPackage(),
new RNFirebasePackage(),
new RNFirebaseMessagingPackage(),
new RNFirebaseNotificationsPackage(),
new RNFirebaseInstanceIdPackage(),
new LinearGradientPackage(),
new VectorIconsPackage()
);
......
......@@ -2,15 +2,12 @@
buildscript {
repositories {
maven {
url 'https://maven.google.com/'
name 'Google'
}
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
classpath 'com.google.gms:google-services:3.2.0'
classpath 'com.android.tools.build:gradle:3.1.4'
classpath 'com.google.gms:google-services:4.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
......@@ -19,23 +16,13 @@ buildscript {
allprojects {
repositories {
maven {
url "https://maven.google.com" // Google's Maven repository
}
google()
mavenLocal()
jcenter()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
configurations.all {
resolutionStrategy {
// Fixes https://github.com/evollu/react-native-fcm/issues/857#issuecomment-375243825
force 'com.google.firebase:firebase-messaging:11.4.0'
force 'com.google.firebase:firebase-core:11.4.0'
force 'com.google.android.gms:play-services-gcm:11.4.0'
}
}
}
}
......
......@@ -5,8 +5,8 @@ include ':react-native-snackbar'
project(':react-native-snackbar').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-snackbar/android')
include ':react-native-locale-detector'
project(':react-native-locale-detector').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-locale-detector/android')
include ':react-native-fcm'
project(':react-native-fcm').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fcm/android')
include ':react-native-firebase'
project(':react-native-firebase').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-firebase/android')
include ':react-native-linear-gradient'
project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android')
include ':react-native-vector-icons'
......
import React, { Component } from 'react';
import { Linking, Platform, NativeModules } from 'react-native';
import {
Linking, Platform, NativeModules, Alert,
} from 'react-native';
import { applyMiddleware, createStore } from 'redux';
import { Provider } from 'react-redux';
import { I18nextProvider } from 'react-i18next';
import createSagaMiddleware from 'redux-saga';
import FCM, { FCMEvent } from 'react-native-fcm';
import firebase from 'react-native-firebase';
import locale from 'react-native-locale-detector';
import Moment from 'moment';
import 'moment/locale/nl';
......@@ -29,24 +31,6 @@ const sagaMiddleware = createSagaMiddleware();
const store = createStore(reducers, applyMiddleware(sagaMiddleware));
sagaMiddleware.run(sagas);
FCM.on(FCMEvent.Notification, async (notif) => {
if (notif.fcm) {
FCM.presentLocalNotification({
title: notif.fcm.title,
body: notif.fcm.body,
color: notif.fcm.color,
icon: notif.fcm.icon === null ? 'ic_notification' : notif.fcm.icon,
action: notif.fcm.action,
tag: notif.fcm.tag,
show_in_foreground: true,
});
}
});
FCM.on(FCMEvent.RefreshToken, async () => {
store.dispatch(register());
});
class Main extends Component {
constructor() {
super();
......@@ -60,9 +44,19 @@ class Main extends Component {
componentDidMount() {
store.dispatch(sessionActions.init());
this.addDeepLinkingHandler();
this.onTokenRefreshListener = firebase.messaging().onTokenRefresh(() => {
store.dispatch(register());
});
this.notificationListener = firebase.notifications().onNotification((notification) => {
Alert.alert(notification.title, notification.body, [
{ text: 'OK' },
]);
});
}
componentWillUnmount() {
this.notificationListener();
this.onTokenRefreshListener();
Linking.removeEventListener('url', this.handleOpenURL);
}
......
import { call, takeEvery, select } from 'redux-saga/effects';
import { Platform } from 'react-native';
import FCM from 'react-native-fcm';
import firebase from 'react-native-firebase';
import { Sentry } from 'react-native-sentry';
import { apiRequest, tokenSelector } from '../utils/url';
import * as pushNotificationsActions from '../actions/pushNotifications';
const register = function* register(action) {
const messaging = firebase.messaging();
const token = yield select(tokenSelector);
const { categories } = action;
......@@ -15,18 +16,20 @@ const register = function* register(action) {
return;
}
const hasPermission = yield call([messaging, 'hasPermission']);
let pushToken;
if (Platform.OS === 'ios') {
if (Platform.OS === 'ios' && !hasPermission) {
try {
// this throws an error when the permissions are denied
yield call(FCM.requestPermissions);
pushToken = yield call(FCM.getFCMToken);
yield call([messaging, 'requestPermission']);
pushToken = yield call([messaging, 'getToken']);
} catch (err) {
// return and do nothing since we have no token
return;
}
} else {
pushToken = yield call(FCM.getFCMToken);
pushToken = yield call([messaging, 'getToken']);
}
const body = {
......@@ -57,7 +60,7 @@ const register = function* register(action) {
};
const invalidate = function* invalidate() {
yield call(FCM.deleteInstanceId);
yield call([firebase.iid(), 'delete']);
};
const pushNotificationsSaga = function* pushNotificationsSaga() {
......
......@@ -22,13 +22,11 @@ const pairsToObject = (obj, pair) => {
return obj2;
};
const getStoredItems = () => AsyncStorage.multiGet([
USERNAMEKEY, TOKENKEY, DISPLAYNAMEKEY, PHOTOKEY, PUSHCATEGORYKEY,
]);
function* init() {
try {
const result = yield call(getStoredItems);
const result = yield call([AsyncStorage, 'multiGet'], [
USERNAMEKEY, TOKENKEY, DISPLAYNAMEKEY, PHOTOKEY, PUSHCATEGORYKEY,
]);
const values = result.reduce(pairsToObject, {});
const username = values[USERNAMEKEY];
......
......@@ -6,8 +6,8 @@ target 'ThaliApp' do
# use_frameworks!
# Pods for ThaliApp
pod 'Firebase/Core'
pod 'Firebase/Messaging'
pod 'Firebase/Core', '~> 5.3.0'
pod 'Firebase/Messaging', '~> 5.3.0'
target 'ThaliAppTests' do
inherit! :search_paths
......
PODS:
- Firebase/Core (4.8.0):
- FirebaseAnalytics (= 4.0.5)
- FirebaseCore (= 4.0.13)
- Firebase/Messaging (4.8.0):
- Firebase/Core
- FirebaseMessaging (= 2.0.8)
- FirebaseAnalytics (4.0.5):
- FirebaseCore (~> 4.0)
- FirebaseInstanceID (~> 2.0)
- Firebase/Core (5.3.0):
- Firebase/CoreOnly
- FirebaseAnalytics (= 5.0.1)
- Firebase/CoreOnly (5.3.0):
- FirebaseCore (= 5.0.4)
- Firebase/Messaging (5.3.0):
- Firebase/CoreOnly
- FirebaseMessaging (= 3.0.2)
- FirebaseAnalytics (5.0.1):
- FirebaseCore (~> 5.0)
- FirebaseInstanceID (~> 3.0)
- "GoogleToolboxForMac/NSData+zlib (~> 2.1)"
- nanopb (~> 0.3)
- FirebaseCore (4.0.13):
- FirebaseCore (5.0.4):
- "GoogleToolboxForMac/NSData+zlib (~> 2.1)"
- FirebaseInstanceID (2.0.8):
- FirebaseCore (~> 4.0)
- FirebaseMessaging (2.0.8):
- FirebaseAnalytics (~> 4.0)
- FirebaseCore (~> 4.0)
- FirebaseInstanceID (~> 2.0)
- FirebaseInstanceID (3.1.1):
- FirebaseCore (~> 5.0)
- FirebaseMessaging (3.0.2):
- FirebaseCore (~> 5.0)
- FirebaseInstanceID (~> 3.0)
- GoogleToolboxForMac/Logger (~> 2.1)
- Protobuf (~> 3.1)
- GoogleToolboxForMac/Defines (2.1.3)
- GoogleToolboxForMac/Logger (2.1.3):
- GoogleToolboxForMac/Defines (= 2.1.3)
- "GoogleToolboxForMac/NSData+zlib (2.1.3)":
- GoogleToolboxForMac/Defines (= 2.1.3)
- GoogleToolboxForMac/Defines (2.1.4)
- GoogleToolboxForMac/Logger (2.1.4):
- GoogleToolboxForMac/Defines (= 2.1.4)
- "GoogleToolboxForMac/NSData+zlib (2.1.4)":
- GoogleToolboxForMac/Defines (= 2.1.4)
- nanopb (0.3.8):
- nanopb/decode (= 0.3.8)
- nanopb/encode (= 0.3.8)
- nanopb/decode (0.3.8)
- nanopb/encode (0.3.8)
- Protobuf (3.5.0)
- Protobuf (3.6.0)
DEPENDENCIES:
- Firebase/Core
- Firebase/Messaging
- Firebase/Core (~> 5.3.0)
- Firebase/Messaging (~> 5.3.0)
SPEC REPOS:
https://github.com/cocoapods/specs.git:
......@@ -48,15 +49,15 @@ SPEC REPOS:
- Protobuf
SPEC CHECKSUMS:
Firebase: 710decbbc6d9d48530e9a5dba3209740c3532e05
FirebaseAnalytics: 5b02a63ead2c3f0259cfc7f15e053e440587ecf8
FirebaseCore: 3c02ec652db3d03fdc8bc6d9154af3e20d64b6f5
FirebaseInstanceID: 81df5805a08001e69138664bdd02c6719a9ac80f
FirebaseMessaging: dfdcd307c2382290a1e297a81d0f18370f5b1bcd
GoogleToolboxForMac: 2501e2ad72a52eb3dfe7bd9aee7dad11b858bd20
Firebase: 68afeeb05461db02d7c9e3215cda28068670f4aa
FirebaseAnalytics: b3628aea54c50464c32c393fb2ea032566e7ecc2
FirebaseCore: 62f1b792a49bb9e8b4073f24606d2c93ffc352f0
FirebaseInstanceID: f3f0657372592ecdfdfe2cac604a5a75758376a6
FirebaseMessaging: 6894b8fe0a0cf26c3b13dad729f1131654ae0bdb
GoogleToolboxForMac: 91c824d21e85b31c2aae9bb011c5027c9b4e738f
nanopb: 5601e6bca2dbf1ed831b519092ec110f66982ca3
Protobuf: 8a9838fba8dae3389230e1b7f8c104aa32389c03
Protobuf: 0fc0ad8bec688b2a3017a139953e01374fedbd5f
PODFILE CHECKSUM: 81d414439f1f341b58c306e954d202374221992d
PODFILE CHECKSUM: 940ed21b3453ddbab84e4d5d26bc938a052d9f59
COCOAPODS: 1.5.3
......@@ -23,7 +23,6 @@
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
150EE563EF1D49189E5DE953 /* libRNFIRMessaging.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 162DE951FF45441397E81D10 /* libRNFIRMessaging.a */; };
219D8BF2E10693BA3C26E1FA /* libPods-ThaliAppTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 910BDD5E550B32CBCAA9EB32 /* libPods-ThaliAppTests.a */; };
23AADE2280934890A3D7391E /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F80608CE5FD849848A5498D4 /* Feather.ttf */; };
2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
......@@ -48,6 +47,7 @@
3A593770638B4F798E132119 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 947AD2AB7080D11A21D8B9ED /* CoreText.framework */; };
4A52BF512BF84192BF5EE374 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C18BC9778EF94FC69E1C628D /* MaterialIcons.ttf */; };
55F8857C1B5F455D81EBEF10 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FF381FFBF70744E6865413C2 /* SimpleLineIcons.ttf */; };
5D28C0719A364B4599272F86 /* libRNFirebase.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 91FF542916634D6FAB4C5B2D /* libRNFirebase.a */; };
5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
86282F35D99D42658946ABCB /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 80528B2CE70648EEBDEA60A8 /* libz.tbd */; };
......@@ -159,6 +159,13 @@
remoteGlobalIDString = CDD7BF831B2D5126006FDA75;
remoteInfo = RNI18nTests;
};
32802C8A21221EC4008AD365 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 106552B1041F4662B4061E73 /* RNFirebase.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 134814201AA4EA6300B7C361;
remoteInfo = RNFirebase;
};
328DFE531FEAAF8100807230 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
......@@ -271,13 +278,6 @@
remoteGlobalIDString = ADD01A681E09402E00F6D226;
remoteInfo = "RCTBlob-tvOS";
};
32D561241F7592880012EC89 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 8CED7FC8420844AF92491FE8 /* RNFIRMessaging.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 134814201AA4EA6300B7C361;
remoteInfo = RNFIRMessaging;
};
3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
......@@ -419,6 +419,7 @@
099E370E94C3C98C0D230EF1 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
0E27F218F14040B7AFFA10E0 /* RNI18n.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNI18n.xcodeproj; path = "../node_modules/react-native-locale-detector/RNI18n.xcodeproj"; sourceTree = "<group>"; };
0EBF699C4D43413C9CCE8127 /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = "<group>"; };
106552B1041F4662B4061E73 /* RNFirebase.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNFirebase.xcodeproj; path = "../node_modules/react-native-firebase/ios/RNFirebase.xcodeproj"; sourceTree = "<group>"; };
139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = "<group>"; };
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = "<group>"; };
13B07F961A680F5B00A75B9A /* ThaliApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ThaliApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
......@@ -429,7 +430,6 @@
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ThaliApp/Info.plist; sourceTree = "<group>"; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ThaliApp/main.m; sourceTree = "<group>"; };
146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = "<group>"; };
162DE951FF45441397E81D10 /* libRNFIRMessaging.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNFIRMessaging.a; sourceTree = "<group>"; };
277703DF9418ADA79BE66AB4 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
290659E890FD4B2CB58F9F15 /* libRNSnackbar.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSnackbar.a; sourceTree = "<group>"; };
29771CE9CB62632CCA73722B /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
......@@ -453,8 +453,8 @@
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = "<group>"; };
887D168E428BA8BC8B4BEF89 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; };
8AB867AF03AC45AEB3C80BFA /* RNSnackbar.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNSnackbar.xcodeproj; path = "../node_modules/react-native-snackbar/ios/RNSnackbar.xcodeproj"; sourceTree = "<group>"; };
8CED7FC8420844AF92491FE8 /* RNFIRMessaging.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNFIRMessaging.xcodeproj; path = "../node_modules/react-native-fcm/ios/RNFIRMessaging.xcodeproj"; sourceTree = "<group>"; };
910BDD5E550B32CBCAA9EB32 /* libPods-ThaliAppTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ThaliAppTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
91FF542916634D6FAB4C5B2D /* libRNFirebase.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNFirebase.a; sourceTree = "<group>"; };
93DB7BC111BA461BA87006BA /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = "<group>"; };
947AD2AB7080D11A21D8B9ED /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };
9BEFAC4FDFA23ABFAA6C038A /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = System/Library/Frameworks/CoreVideo.framework; sourceTree = SDKROOT; };
......@@ -503,7 +503,6 @@
139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,
32D3E4CF1ED98F37004F54F8 /* libRNVectorIcons.a in Frameworks */,
32D3E4CE1ED98F33004F54F8 /* libBVLinearGradient.a in Frameworks */,
150EE563EF1D49189E5DE953 /* libRNFIRMessaging.a in Frameworks */,
2D1FCA53D8DB5ADD28A3D2F3 /* libPods-ThaliApp.a in Frameworks */,
E133E6C3EC124B32873102B8 /* libRNSnackbar.a in Frameworks */,
31DB89BD6ABB7E6C0D4D89C8 /* AssetsLibrary.framework in Frameworks */,
......@@ -515,6 +514,7 @@
A64C779AE827706A1A3A8C53 /* CoreMedia.framework in Frameworks */,
E9012CD6A7C0147AFA3AE7C9 /* CoreVideo.framework in Frameworks */,
86282F35D99D42658946ABCB /* libz.tbd in Frameworks */,
5D28C0719A364B4599272F86 /* libRNFirebase.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......@@ -537,7 +537,6 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
2DF0FFEE2056DD460020B375 /* libReact.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......@@ -679,12 +678,20 @@
name = Products;
sourceTree = "<group>";
};
32802C8721221EC4008AD365 /* Products */ = {
isa = PBXGroup;
children = (
32802C8B21221EC4008AD365 /* libRNFirebase.a */,
);
name = Products;
sourceTree = "<group>";
};
328DFE3B1FEAAF8100807230 /* Recovered References */ = {
isa = PBXGroup;
children = (
162DE951FF45441397E81D10 /* libRNFIRMessaging.a */,
290659E890FD4B2CB58F9F15 /* libRNSnackbar.a */,
3DAD3EA31DF850E9000B6D8A /* libReact.a */,
91FF542916634D6FAB4C5B2D /* libRNFirebase.a */,
);
name = "Recovered References";
sourceTree = "<group>";
......@@ -714,14 +721,6 @@
name = Products;
sourceTree = "<group>";
};
32D561081F7592880012EC89 /* Products */ = {
isa = PBXGroup;
children = (