diff --git a/android/app/build.gradle b/android/app/build.gradle
index b578c27..eafb442 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -1,6 +1,7 @@
apply plugin: "com.android.application"
apply plugin: "com.facebook.react"
+apply plugin: 'com.google.gms.google-services'
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"
import com.android.build.OutputFile
@@ -25,7 +26,7 @@ android {
applicationId "com.app.task_me"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 227
+ versionCode 228
versionName "2.3"
resValue "string", "build_config_package", "com.app.task_me"
}
@@ -87,7 +88,7 @@ dependencies {
implementation("com.facebook.react:react-android")
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0")
- implementation project(':react-native-view-pdf')
+ implementation project(':react-native-view-pdf')\
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}")
debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
diff --git a/android/app/google-services.json b/android/app/google-services.json
new file mode 100644
index 0000000..3781a1d
--- /dev/null
+++ b/android/app/google-services.json
@@ -0,0 +1,39 @@
+{
+ "project_info": {
+ "project_number": "129356575548",
+ "project_id": "taskme-dae7e",
+ "storage_bucket": "taskme-dae7e.appspot.com"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:129356575548:android:0d83a97ad1276b3ff26439",
+ "android_client_info": {
+ "package_name": "com.app.task_me"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "129356575548-iv9mo7k86o4rpgupn67s1gs67se8vioe.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyCigUJBly47PVRbCHItRMwVfxqXct2H8U4"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "129356575548-iv9mo7k86o4rpgupn67s1gs67se8vioe.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 6bd3715..4cf99d6 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -108,6 +108,8 @@
+
+
diff --git a/android/build.gradle b/android/build.gradle
index 0cc415a..d6f486d 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -24,6 +24,7 @@ buildscript {
dependencies {
classpath("com.android.tools.build:gradle")
classpath("com.facebook.react:react-native-gradle-plugin")
+ classpath 'com.google.gms:google-services:4.4.1'
}
subprojects { subproject ->
afterEvaluate{
diff --git a/ios/CallKitEventHandler.swift b/ios/CallKitEventHandler.swift
new file mode 100644
index 0000000..1efd719
--- /dev/null
+++ b/ios/CallKitEventHandler.swift
@@ -0,0 +1,25 @@
+import CallKit
+
+class CallObserver: NSObject, CXCallObserverDelegate {
+
+ let callObserver = CXCallObserver()
+
+ override init() {
+ super.init()
+ callObserver.setDelegate(self, queue: nil)
+ }
+
+ func callObserver(_ callObserver: CXCallObserver, callChanged call: CXCall) {
+ if call.hasEnded {
+ print("Call ended")
+ } else if call.isOutgoing {
+ print("Outgoing call")
+ } else if call.isOnHold {
+ print("Call on hold")
+ } else if callObserver.calls.contains(where: { $0.isMuted }) {
+ print("Call muted")
+ } else {
+ print("Call status changed")
+ }
+ }
+}
diff --git a/ios/OneSignalNotificationServiceExtension/NotificationService.swift b/ios/OneSignalNotificationServiceExtension/NotificationService.swift
index 7891846..bbe8e91 100644
--- a/ios/OneSignalNotificationServiceExtension/NotificationService.swift
+++ b/ios/OneSignalNotificationServiceExtension/NotificationService.swift
@@ -12,6 +12,8 @@ class NotificationService: UNNotificationServiceExtension {
self.receivedRequest = request
self.contentHandler = contentHandler
self.bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
+
+ print("Received silent push notification with type: silent")
if let bestAttemptContent = bestAttemptContent {
//If your SDK version is < 3.5.0 uncomment and use this code:
@@ -26,6 +28,8 @@ class NotificationService: UNNotificationServiceExtension {
//OneSignal.setLogLevel(.LL_VERBOSE, visualLevel: .LL_NONE)
//bestAttemptContent.body = "[Modified] " + bestAttemptContent.body
+ print("Received silent push notification with type: silent")
+
OneSignal.didReceiveNotificationExtensionRequest(self.receivedRequest, with: bestAttemptContent, withContentHandler: self.contentHandler)
}
}
diff --git a/ios/Podfile b/ios/Podfile
index 669985d..638c620 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -1,4 +1,3 @@
-# Resolve react_native_pods.rb with node to allow for hoisting
require Pod::Executable.execute_command('node', ['-p',
'require.resolve(
"react-native/scripts/react_native_pods.rb",
@@ -8,16 +7,6 @@ require Pod::Executable.execute_command('node', ['-p',
platform :ios, min_ios_version_supported
prepare_react_native_project!
-# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.
-# because `react-native-flipper` depends on (FlipperKit,...) that will be excluded
-#
-# To fix this you can also exclude `react-native-flipper` using a `react-native.config.js`
-# ```js
-# module.exports = {
-# dependencies: {
-# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),
-# ```
-flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : FlipperConfiguration.enabled
linkage = ENV['USE_FRAMEWORKS']
if linkage != nil
@@ -32,23 +21,19 @@ target 'taskme2' do
pod 'react-native-sqlite-storage', :path => '../node_modules/react-native-sqlite-storage'
pod 'react-native-config/Extension', :path => '../node_modules/react-native-config'
pod 'RNCallKeep', :path => '../node_modules/react-native-callkeep'
+ pod 'ReactNativeIncallManager', :path => '../node_modules/react-native-incall-manager'
- # Flags change depending on the env values.
flags = get_default_flags()
+ pod 'Firebase', :modular_headers => true
+ pod 'FirebaseCoreInternal', :modular_headers => true
+ pod 'GoogleUtilities', :modular_headers => true
+ pod 'FirebaseCore', :modular_headers => true
+
use_react_native!(
:path => config[:reactNativePath],
- # Hermes is now enabled by default. Disable by setting this flag to false.
- # Upcoming versions of React Native may rely on get_default_flags(), but
- # we make it explicit here to aid in the React Native upgrade process.
:hermes_enabled => flags[:hermes_enabled],
:fabric_enabled => flags[:fabric_enabled],
- # Enables Flipper.
- #
- # Note that if you have use_frameworks! enabled, Flipper will not work and
- # you should disable the next line.
- :flipper_configuration => flipper_config,
- # An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/.."
)
@@ -71,7 +56,6 @@ target 'taskme2' do
end
end
- # Set the preprocessing macro for the whole Pods project
existing_flags = config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
existing_flags << '_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION'
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = existing_flags
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 52f3fa2..b52f273 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -1,6 +1,5 @@
PODS:
- boost (1.76.0)
- - CocoaAsyncSocket (7.6.5)
- DoubleConversion (1.1.6)
- FBLazyVector (0.72.10)
- FBReactNativeSpec (0.72.10):
@@ -14,66 +13,126 @@ PODS:
- ffmpeg-kit-react-native/audio (5.1.0):
- ffmpeg-kit-ios-audio (= 5.1)
- React-Core
- - Flipper (0.182.0):
- - Flipper-Folly (~> 2.6)
- - Flipper-Boost-iOSX (1.76.0.1.11)
- - Flipper-DoubleConversion (3.2.0.1)
- - Flipper-Fmt (7.1.7)
- - Flipper-Folly (2.6.10):
- - Flipper-Boost-iOSX
- - Flipper-DoubleConversion
- - Flipper-Fmt (= 7.1.7)
- - Flipper-Glog
- - libevent (~> 2.1.12)
- - OpenSSL-Universal (= 1.1.1100)
- - Flipper-Glog (0.5.0.5)
- - Flipper-PeerTalk (0.0.4)
- - FlipperKit (0.182.0):
- - FlipperKit/Core (= 0.182.0)
- - FlipperKit/Core (0.182.0):
- - Flipper (~> 0.182.0)
- - FlipperKit/CppBridge
- - FlipperKit/FBCxxFollyDynamicConvert
- - FlipperKit/FBDefines
- - FlipperKit/FKPortForwarding
- - SocketRocket (~> 0.6.0)
- - FlipperKit/CppBridge (0.182.0):
- - Flipper (~> 0.182.0)
- - FlipperKit/FBCxxFollyDynamicConvert (0.182.0):
- - Flipper-Folly (~> 2.6)
- - FlipperKit/FBDefines (0.182.0)
- - FlipperKit/FKPortForwarding (0.182.0):
- - CocoaAsyncSocket (~> 7.6)
- - Flipper-PeerTalk (~> 0.0.4)
- - FlipperKit/FlipperKitHighlightOverlay (0.182.0)
- - FlipperKit/FlipperKitLayoutHelpers (0.182.0):
- - FlipperKit/Core
- - FlipperKit/FlipperKitHighlightOverlay
- - FlipperKit/FlipperKitLayoutTextSearchable
- - FlipperKit/FlipperKitLayoutIOSDescriptors (0.182.0):
- - FlipperKit/Core
- - FlipperKit/FlipperKitHighlightOverlay
- - FlipperKit/FlipperKitLayoutHelpers
- - YogaKit (~> 1.18)
- - FlipperKit/FlipperKitLayoutPlugin (0.182.0):
- - FlipperKit/Core
- - FlipperKit/FlipperKitHighlightOverlay
- - FlipperKit/FlipperKitLayoutHelpers
- - FlipperKit/FlipperKitLayoutIOSDescriptors
- - FlipperKit/FlipperKitLayoutTextSearchable
- - YogaKit (~> 1.18)
- - FlipperKit/FlipperKitLayoutTextSearchable (0.182.0)
- - FlipperKit/FlipperKitNetworkPlugin (0.182.0):
- - FlipperKit/Core
- - FlipperKit/FlipperKitReactPlugin (0.182.0):
- - FlipperKit/Core
- - FlipperKit/FlipperKitUserDefaultsPlugin (0.182.0):
- - FlipperKit/Core
- - FlipperKit/SKIOSNetworkPlugin (0.182.0):
- - FlipperKit/Core
- - FlipperKit/FlipperKitNetworkPlugin
+ - Firebase (10.23.1):
+ - Firebase/Core (= 10.23.1)
+ - Firebase/Core (10.23.1):
+ - Firebase/CoreOnly
+ - FirebaseAnalytics (~> 10.23.1)
+ - Firebase/CoreOnly (10.23.1):
+ - FirebaseCore (= 10.23.1)
+ - Firebase/Messaging (10.23.1):
+ - Firebase/CoreOnly
+ - FirebaseMessaging (~> 10.23.0)
+ - FirebaseAnalytics (10.23.1):
+ - FirebaseAnalytics/AdIdSupport (= 10.23.1)
+ - FirebaseCore (~> 10.0)
+ - FirebaseInstallations (~> 10.0)
+ - GoogleUtilities/AppDelegateSwizzler (~> 7.11)
+ - GoogleUtilities/MethodSwizzler (~> 7.11)
+ - GoogleUtilities/Network (~> 7.11)
+ - "GoogleUtilities/NSData+zlib (~> 7.11)"
+ - nanopb (< 2.30911.0, >= 2.30908.0)
+ - FirebaseAnalytics/AdIdSupport (10.23.1):
+ - FirebaseCore (~> 10.0)
+ - FirebaseInstallations (~> 10.0)
+ - GoogleAppMeasurement (= 10.23.1)
+ - GoogleUtilities/AppDelegateSwizzler (~> 7.11)
+ - GoogleUtilities/MethodSwizzler (~> 7.11)
+ - GoogleUtilities/Network (~> 7.11)
+ - "GoogleUtilities/NSData+zlib (~> 7.11)"
+ - nanopb (< 2.30911.0, >= 2.30908.0)
+ - FirebaseCore (10.23.1):
+ - FirebaseCoreInternal (~> 10.0)
+ - GoogleUtilities/Environment (~> 7.12)
+ - GoogleUtilities/Logger (~> 7.12)
+ - FirebaseCoreExtension (10.23.0):
+ - FirebaseCore (~> 10.0)
+ - FirebaseCoreInternal (10.23.0):
+ - "GoogleUtilities/NSData+zlib (~> 7.8)"
+ - FirebaseInstallations (10.23.0):
+ - FirebaseCore (~> 10.0)
+ - GoogleUtilities/Environment (~> 7.8)
+ - GoogleUtilities/UserDefaults (~> 7.8)
+ - PromisesObjC (~> 2.1)
+ - FirebaseMessaging (10.23.0):
+ - FirebaseCore (~> 10.0)
+ - FirebaseInstallations (~> 10.0)
+ - GoogleDataTransport (~> 9.3)
+ - GoogleUtilities/AppDelegateSwizzler (~> 7.8)
+ - GoogleUtilities/Environment (~> 7.8)
+ - GoogleUtilities/Reachability (~> 7.8)
+ - GoogleUtilities/UserDefaults (~> 7.8)
+ - nanopb (< 2.30911.0, >= 2.30908.0)
- fmt (6.2.1)
- glog (0.3.5)
+ - GoogleAppMeasurement (10.23.1):
+ - GoogleAppMeasurement/AdIdSupport (= 10.23.1)
+ - GoogleUtilities/AppDelegateSwizzler (~> 7.11)
+ - GoogleUtilities/MethodSwizzler (~> 7.11)
+ - GoogleUtilities/Network (~> 7.11)
+ - "GoogleUtilities/NSData+zlib (~> 7.11)"
+ - nanopb (< 2.30911.0, >= 2.30908.0)
+ - GoogleAppMeasurement/AdIdSupport (10.23.1):
+ - GoogleAppMeasurement/WithoutAdIdSupport (= 10.23.1)
+ - GoogleUtilities/AppDelegateSwizzler (~> 7.11)
+ - GoogleUtilities/MethodSwizzler (~> 7.11)
+ - GoogleUtilities/Network (~> 7.11)
+ - "GoogleUtilities/NSData+zlib (~> 7.11)"
+ - nanopb (< 2.30911.0, >= 2.30908.0)
+ - GoogleAppMeasurement/WithoutAdIdSupport (10.23.1):
+ - GoogleUtilities/AppDelegateSwizzler (~> 7.11)
+ - GoogleUtilities/MethodSwizzler (~> 7.11)
+ - GoogleUtilities/Network (~> 7.11)
+ - "GoogleUtilities/NSData+zlib (~> 7.11)"
+ - nanopb (< 2.30911.0, >= 2.30908.0)
+ - GoogleDataTransport (9.4.1):
+ - GoogleUtilities/Environment (~> 7.7)
+ - nanopb (< 2.30911.0, >= 2.30908.0)
+ - PromisesObjC (< 3.0, >= 1.2)
+ - GoogleUtilities (7.13.0):
+ - GoogleUtilities/AppDelegateSwizzler (= 7.13.0)
+ - GoogleUtilities/Environment (= 7.13.0)
+ - GoogleUtilities/ISASwizzler (= 7.13.0)
+ - GoogleUtilities/Logger (= 7.13.0)
+ - GoogleUtilities/MethodSwizzler (= 7.13.0)
+ - GoogleUtilities/Network (= 7.13.0)
+ - "GoogleUtilities/NSData+zlib (= 7.13.0)"
+ - GoogleUtilities/Privacy (= 7.13.0)
+ - GoogleUtilities/Reachability (= 7.13.0)
+ - GoogleUtilities/SwizzlerTestHelpers (= 7.13.0)
+ - GoogleUtilities/UserDefaults (= 7.13.0)
+ - GoogleUtilities/AppDelegateSwizzler (7.13.0):
+ - GoogleUtilities/Environment
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Network
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Environment (7.13.0):
+ - GoogleUtilities/Privacy
+ - PromisesObjC (< 3.0, >= 1.2)
+ - GoogleUtilities/ISASwizzler (7.13.0):
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Logger (7.13.0):
+ - GoogleUtilities/Environment
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/MethodSwizzler (7.13.0):
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Network (7.13.0):
+ - GoogleUtilities/Logger
+ - "GoogleUtilities/NSData+zlib"
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Reachability
+ - "GoogleUtilities/NSData+zlib (7.13.0)":
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Privacy (7.13.0)
+ - GoogleUtilities/Reachability (7.13.0):
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/SwizzlerTestHelpers (7.13.0):
+ - GoogleUtilities/MethodSwizzler
+ - GoogleUtilities/UserDefaults (7.13.0):
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Privacy
- hermes-engine (0.72.10):
- hermes-engine/Pre-built (= 0.72.10)
- hermes-engine/Pre-built (0.72.10)
@@ -91,6 +150,11 @@ PODS:
- libwebp/sharpyuv (1.3.2)
- libwebp/webp (1.3.2):
- libwebp/sharpyuv
+ - nanopb (2.30910.0):
+ - nanopb/decode (= 2.30910.0)
+ - nanopb/encode (= 2.30910.0)
+ - nanopb/decode (2.30910.0)
+ - nanopb/encode (2.30910.0)
- OneSignalXCFramework (3.12.6):
- OneSignalXCFramework/OneSignalCore (= 3.12.6)
- OneSignalXCFramework/OneSignalExtension (= 3.12.6)
@@ -101,7 +165,7 @@ PODS:
- OneSignalXCFramework/OneSignalOutcomes
- OneSignalXCFramework/OneSignalOutcomes (3.12.6):
- OneSignalXCFramework/OneSignalCore
- - OpenSSL-Universal (1.1.1100)
+ - PromisesObjC (2.4.0)
- RCT-Folly (2021.07.22.00):
- boost
- DoubleConversion
@@ -560,6 +624,8 @@ PODS:
- React-perflogger (= 0.72.10)
- ReactNativeExceptionHandler (2.10.10):
- React-Core
+ - ReactNativeIncallManager (4.2.0):
+ - React-Core
- rn-fetch-blob (0.12.0):
- React-Core
- RNAudioRecorderPlayer (3.6.6):
@@ -580,6 +646,14 @@ PODS:
- React-Core
- SDWebImage (~> 5.11.1)
- SDWebImageWebPCoder (~> 0.8.4)
+ - RNFBApp (19.1.2):
+ - Firebase/CoreOnly (= 10.23.1)
+ - React-Core
+ - RNFBMessaging (19.1.2):
+ - Firebase/Messaging (= 10.23.1)
+ - FirebaseCoreExtension
+ - React-Core
+ - RNFBApp
- RNFileViewer (2.1.5):
- React-Core
- RNFS (2.20.0):
@@ -630,10 +704,8 @@ PODS:
- libwebp (~> 1.0)
- SDWebImage/Core (~> 5.10)
- SocketRocket (0.6.1)
- - TOCropViewController (2.6.1)
+ - TOCropViewController (2.7.2)
- Yoga (1.14.0)
- - YogaKit (1.18.1):
- - Yoga (~> 1.14)
DEPENDENCIES:
- boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
@@ -641,31 +713,14 @@ DEPENDENCIES:
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
- ffmpeg-kit-react-native/audio (from `../node_modules/ffmpeg-kit-react-native/ffmpeg-kit-react-native.podspec`)
- - Flipper (= 0.182.0)
- - Flipper-Boost-iOSX (= 1.76.0.1.11)
- - Flipper-DoubleConversion (= 3.2.0.1)
- - Flipper-Fmt (= 7.1.7)
- - Flipper-Folly (= 2.6.10)
- - Flipper-Glog (= 0.5.0.5)
- - Flipper-PeerTalk (= 0.0.4)
- - FlipperKit (= 0.182.0)
- - FlipperKit/Core (= 0.182.0)
- - FlipperKit/CppBridge (= 0.182.0)
- - FlipperKit/FBCxxFollyDynamicConvert (= 0.182.0)
- - FlipperKit/FBDefines (= 0.182.0)
- - FlipperKit/FKPortForwarding (= 0.182.0)
- - FlipperKit/FlipperKitHighlightOverlay (= 0.182.0)
- - FlipperKit/FlipperKitLayoutPlugin (= 0.182.0)
- - FlipperKit/FlipperKitLayoutTextSearchable (= 0.182.0)
- - FlipperKit/FlipperKitNetworkPlugin (= 0.182.0)
- - FlipperKit/FlipperKitReactPlugin (= 0.182.0)
- - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.182.0)
- - FlipperKit/SKIOSNetworkPlugin (= 0.182.0)
+ - Firebase
+ - FirebaseCore
+ - FirebaseCoreInternal
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
+ - GoogleUtilities
- hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
- libevent (~> 2.1.12)
- OneSignalXCFramework (< 4.0, >= 3.0)
- - OpenSSL-Universal (= 1.1.1100)
- RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
@@ -673,7 +728,6 @@ DEPENDENCIES:
- React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
- React-Codegen (from `build/generated/ios`)
- React-Core (from `../node_modules/react-native/`)
- - React-Core/DevSupport (from `../node_modules/react-native/`)
- React-Core/RCTWebSocket (from `../node_modules/react-native/`)
- React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
- React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
@@ -720,6 +774,7 @@ DEPENDENCIES:
- React-utils (from `../node_modules/react-native/ReactCommon/react/utils`)
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- ReactNativeExceptionHandler (from `../node_modules/react-native-exception-handler`)
+ - ReactNativeIncallManager (from `../node_modules/react-native-incall-manager`)
- rn-fetch-blob (from `../node_modules/rn-fetch-blob`)
- RNAudioRecorderPlayer (from `../node_modules/react-native-audio-recorder-player`)
- RNCallKeep (from `../node_modules/react-native-callkeep`)
@@ -729,6 +784,8 @@ DEPENDENCIES:
- "RNDateTimePicker (from `../node_modules/@react-native-community/datetimepicker`)"
- RNDeviceInfo (from `../node_modules/react-native-device-info`)
- RNFastImage (from `../node_modules/react-native-fast-image`)
+ - "RNFBApp (from `../node_modules/@react-native-firebase/app`)"
+ - "RNFBMessaging (from `../node_modules/@react-native-firebase/messaging`)"
- RNFileViewer (from `../node_modules/react-native-file-viewer`)
- RNFS (from `../node_modules/react-native-fs`)
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
@@ -747,27 +804,28 @@ DEPENDENCIES:
SPEC REPOS:
trunk:
- - CocoaAsyncSocket
- ffmpeg-kit-ios-audio
- - Flipper
- - Flipper-Boost-iOSX
- - Flipper-DoubleConversion
- - Flipper-Fmt
- - Flipper-Folly
- - Flipper-Glog
- - Flipper-PeerTalk
- - FlipperKit
+ - Firebase
+ - FirebaseAnalytics
+ - FirebaseCore
+ - FirebaseCoreExtension
+ - FirebaseCoreInternal
+ - FirebaseInstallations
+ - FirebaseMessaging
- fmt
+ - GoogleAppMeasurement
+ - GoogleDataTransport
+ - GoogleUtilities
- JitsiWebRTC
- libevent
- libwebp
+ - nanopb
- OneSignalXCFramework
- - OpenSSL-Universal
+ - PromisesObjC
- SDWebImage
- SDWebImageWebPCoder
- SocketRocket
- TOCropViewController
- - YogaKit
EXTERNAL SOURCES:
boost:
@@ -886,6 +944,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon"
ReactNativeExceptionHandler:
:path: "../node_modules/react-native-exception-handler"
+ ReactNativeIncallManager:
+ :path: "../node_modules/react-native-incall-manager"
rn-fetch-blob:
:path: "../node_modules/rn-fetch-blob"
RNAudioRecorderPlayer:
@@ -904,6 +964,10 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-device-info"
RNFastImage:
:path: "../node_modules/react-native-fast-image"
+ RNFBApp:
+ :path: "../node_modules/@react-native-firebase/app"
+ RNFBMessaging:
+ :path: "../node_modules/@react-native-firebase/messaging"
RNFileViewer:
:path: "../node_modules/react-native-file-viewer"
RNFS:
@@ -937,28 +1001,30 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
boost: 7dcd2de282d72e344012f7d6564d024930a6a440
- CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
FBLazyVector: f91d538f197fa71a7d5b77ec2069d49550c0eb96
FBReactNativeSpec: b13d1c23d6ed82d6b66aad7a253edf8ba76c4a4c
ffmpeg-kit-ios-audio: 6eaf5a3c4249b767328502747a08bfd901a86d3d
ffmpeg-kit-react-native: 56ecfcd21536379dd123eade87c3b6fd55f12030
- Flipper: 6edb735e6c3e332975d1b17956bcc584eccf5818
- Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c
- Flipper-DoubleConversion: 2dc99b02f658daf147069aad9dbd29d8feb06d30
- Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b
- Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3
- Flipper-Glog: 70c50ce58ddaf67dc35180db05f191692570f446
- Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
- FlipperKit: 2efad7007d6745a3f95e4034d547be637f89d3f6
+ Firebase: cf09623f98ae25a3ad484e23c7e0e5f464152d80
+ FirebaseAnalytics: fd35d51e6da86ef1aa2c3fe1f64ab2482cc01ba5
+ FirebaseCore: c43f9f0437b50a965e930cac4ad243200d12a984
+ FirebaseCoreExtension: cb88851781a24e031d1b58e0bd01eb1f46b044b5
+ FirebaseCoreInternal: 6a292e6f0bece1243a737e81556e56e5e19282e3
+ FirebaseInstallations: 42d6ead4605d6eafb3b6683674e80e18eb6f2c35
+ FirebaseMessaging: 1b2270e66c81bbf184f70184db1d6a736ad0def5
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
+ GoogleAppMeasurement: 794d1d2f71fdf77a077a3986258a5c2dac0f9d48
+ GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a
+ GoogleUtilities: d053d902a8edaa9904e1bd00c37535385b8ed152
hermes-engine: 90e4033deb00bee33330a9f15eff0f874bd82f6d
JitsiWebRTC: 3a41671ef65a51d7204323814b055a2690b921c7
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009
+ nanopb: 438bc412db1928dac798aa6fd75726007be04262
OneSignalXCFramework: ff1c970b7aeb4ac0fe48fb35393eb5d8bf378135
- OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
+ PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
RCTRequired: b4d3068afa6f52ec5260a8417053b1f1b421483d
RCTTypeSafety: a4551b3d338c96435f63bf06d564055c1d3cc0ac
@@ -1010,6 +1076,7 @@ SPEC CHECKSUMS:
React-utils: 372b83030a74347331636909278bf0a60ec30d59
ReactCommon: 38824bfffaf4c51fbe03a2730b4fd874ef34d67b
ReactNativeExceptionHandler: b11ff67c78802b2f62eed0e10e75cb1ef7947c60
+ ReactNativeIncallManager: bfc9c67358cd524882a7c4116dcb311ac2293d4b
rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba
RNAudioRecorderPlayer: f790fc1afb118552ae6285d60adde52ee6b5d9ef
RNCallKeep: aa9b1f9286f8f60d7b7d41ee5de47de564356aac
@@ -1019,6 +1086,8 @@ SPEC CHECKSUMS:
RNDateTimePicker: fc2e4f2795877d45e84d85659bebe627eba5c931
RNDeviceInfo: db5c64a060e66e5db3102d041ebe3ef307a85120
RNFastImage: 5c9c9fed9c076e521b3f509fe79e790418a544e8
+ RNFBApp: 5cbbb49393dc840f46b227ae483d11d502ed36a8
+ RNFBMessaging: f5ed5b4ef1b17f946b785cb7fa0d8d555a5e12b2
RNFileViewer: ce7ca3ac370e18554d35d6355cffd7c30437c592
RNFS: 4ac0f0ea233904cb798630b3c077808c06931688
RNGestureHandler: 7909c50383a18f0cb10ce1db7262b9a6da504c03
@@ -1036,10 +1105,9 @@ SPEC CHECKSUMS:
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d
SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
- TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863
+ TOCropViewController: bf38459e9da6efe414de22087ebd5c530640f4bd
Yoga: d0003f849d2b5224c072cef6568b540d8bb15cd3
- YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
-PODFILE CHECKSUM: cfc20c55adde2f7a0a48df5c2ebe42052a891ffa
+PODFILE CHECKSUM: 3a44448b547a3316bb952755f0a413dd0086c662
COCOAPODS: 1.15.2
diff --git a/ios/taskme2-Bridging-Header.h b/ios/taskme2-Bridging-Header.h
new file mode 100644
index 0000000..f9917fb
--- /dev/null
+++ b/ios/taskme2-Bridging-Header.h
@@ -0,0 +1,12 @@
+//
+// taskme2-Bridging-Header.h
+// taskme2
+//
+// Created by mac on 14.04.2024.
+//
+
+#ifndef taskme2_Bridging_Header_h
+#define taskme2_Bridging_Header_h
+
+
+#endif /* taskme2_Bridging_Header_h */
diff --git a/ios/taskme2.xcodeproj/project.pbxproj b/ios/taskme2.xcodeproj/project.pbxproj
index 8718359..a4be64c 100644
--- a/ios/taskme2.xcodeproj/project.pbxproj
+++ b/ios/taskme2.xcodeproj/project.pbxproj
@@ -8,6 +8,7 @@
/* Begin PBXBuildFile section */
00E356F31AD99517003FC87E /* taskme2Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* taskme2Tests.m */; };
+ 042ADAED2BC3FCEA0086A848 /* google-services.json in Resources */ = {isa = PBXBuildFile; fileRef = 042ADAEC2BC3FCE90086A848 /* google-services.json */; };
0495CBE12BA221E800BF4228 /* CallKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0495CBE02BA221E800BF4228 /* CallKit.framework */; };
0495CBE32BA221EF00BF4228 /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0495CBE22BA221EF00BF4228 /* Intents.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
04FBB34C2A84CD0D00436C19 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FBB34B2A84CD0D00436C19 /* NotificationService.swift */; };
@@ -15,15 +16,15 @@
13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
- 331EB3F0DD322F0D1B2DA16C /* libPods-taskme2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0FD9FA6914F2DA8781CBD173 /* libPods-taskme2.a */; };
3B650248E4D64E35864131AF /* fontello.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6D174334360E40AEAC86E003 /* fontello.ttf */; };
- 3DBB925B2361D8734B3BF05F /* libPods-OneSignalNotificationServiceExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A86FA5C0ED15EDDDD22D2FCF /* libPods-OneSignalNotificationServiceExtension.a */; };
- 41B967CD27101BB7DAE20A1F /* libPods-taskme2-taskme2Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 527F61C1DD2E37B4CB3A2F5C /* libPods-taskme2-taskme2Tests.a */; };
488D245C87834B1F85544010 /* Gilroy-Semibold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 36EEF9A60D044056856CEEA6 /* Gilroy-Semibold.ttf */; };
+ 6A5616D21302CF9D1D9BD3F6 /* libPods-taskme2-taskme2Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2CBCACA16ADDD21920623ED9 /* libPods-taskme2-taskme2Tests.a */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
B6F06B90F1F9411EBC065716 /* Gilroy-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D66CD33E4DEC4377944DC7F7 /* Gilroy-Regular.ttf */; };
+ B7ADE3E710FA3434D124892E /* libPods-OneSignalNotificationServiceExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 762401719B7FB753E882DCF3 /* libPods-OneSignalNotificationServiceExtension.a */; };
BDD027C722014B7D83628596 /* Gilroy-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 00646ADD69A349E186C66A91 /* Gilroy-Bold.ttf */; };
CDBA011E492A49758920E896 /* Gilroy-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B25C228D4A644A728CA3561E /* Gilroy-Medium.ttf */; };
+ DA7F8DFBC743EB75601E61BB /* libPods-taskme2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C5ADA4DC3819471B7B74793 /* libPods-taskme2.a */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -62,6 +63,9 @@
00E356EE1AD99517003FC87E /* taskme2Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = taskme2Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
00E356F21AD99517003FC87E /* taskme2Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = taskme2Tests.m; sourceTree = ""; };
+ 042ADAEC2BC3FCE90086A848 /* google-services.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = "google-services.json"; path = "../android/app/google-services.json"; sourceTree = ""; };
+ 046E5DB62BCC260B0029BAA1 /* taskme2Stage.Debug.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = taskme2Stage.Debug.entitlements; path = taskme2/taskme2Stage.Debug.entitlements; sourceTree = ""; };
+ 046E5DB92BCC47000029BAA1 /* taskme2-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "taskme2-Bridging-Header.h"; sourceTree = ""; };
0495CBE02BA221E800BF4228 /* CallKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CallKit.framework; path = System/Library/Frameworks/CallKit.framework; sourceTree = SDKROOT; };
0495CBE22BA221EF00BF4228 /* Intents.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Intents.framework; path = System/Library/Frameworks/Intents.framework; sourceTree = SDKROOT; };
04D8E49A2B0BA79200ACC6E2 /* OneSignalNotificationServiceExtensionStage.Release.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = OneSignalNotificationServiceExtensionStage.Release.entitlements; sourceTree = ""; };
@@ -71,33 +75,33 @@
04FBB34B2A84CD0D00436C19 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; };
04FBB34D2A84CD0D00436C19 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
04FBB3552A84CDFA00436C19 /* OneSignalNotificationServiceExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = OneSignalNotificationServiceExtension.entitlements; sourceTree = ""; };
- 08D358D544954D5B56BAFFAC /* Pods-taskme2-taskme2Tests.stage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2-taskme2Tests.stage.debug.xcconfig"; path = "Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests.stage.debug.xcconfig"; sourceTree = ""; };
- 0AC2880E5264076073DF865D /* Pods-taskme2-taskme2Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2-taskme2Tests.release.xcconfig"; path = "Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests.release.xcconfig"; sourceTree = ""; };
- 0FD9FA6914F2DA8781CBD173 /* libPods-taskme2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-taskme2.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 127996D261A12456ADB5A870 /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneSignalNotificationServiceExtension.debug.xcconfig"; path = "Target Support Files/Pods-OneSignalNotificationServiceExtension/Pods-OneSignalNotificationServiceExtension.debug.xcconfig"; sourceTree = ""; };
+ 0AC17DF4CF0C564BE59C0EDD /* Pods-taskme2.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2.release.xcconfig"; path = "Target Support Files/Pods-taskme2/Pods-taskme2.release.xcconfig"; sourceTree = ""; };
13B07F961A680F5B00A75B9A /* taskme2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = taskme2.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = taskme2/AppDelegate.h; sourceTree = ""; };
13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = taskme2/AppDelegate.mm; sourceTree = ""; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = taskme2/Images.xcassets; sourceTree = ""; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = taskme2/Info.plist; sourceTree = ""; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = taskme2/main.m; sourceTree = ""; };
+ 14A2E94F8D2D1BA9A6E1875C /* Pods-OneSignalNotificationServiceExtension.stage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneSignalNotificationServiceExtension.stage.debug.xcconfig"; path = "Target Support Files/Pods-OneSignalNotificationServiceExtension/Pods-OneSignalNotificationServiceExtension.stage.debug.xcconfig"; sourceTree = ""; };
+ 1EA249EED67750313BC0DD79 /* Pods-OneSignalNotificationServiceExtension.stage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneSignalNotificationServiceExtension.stage.release.xcconfig"; path = "Target Support Files/Pods-OneSignalNotificationServiceExtension/Pods-OneSignalNotificationServiceExtension.stage.release.xcconfig"; sourceTree = ""; };
+ 2CBCACA16ADDD21920623ED9 /* libPods-taskme2-taskme2Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-taskme2-taskme2Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 36EED598BB7BB88F580BBFED /* Pods-taskme2-taskme2Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2-taskme2Tests.debug.xcconfig"; path = "Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests.debug.xcconfig"; sourceTree = ""; };
36EEF9A60D044056856CEEA6 /* Gilroy-Semibold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Gilroy-Semibold.ttf"; path = "../src/assets/fonts/Gilroy-Semibold.ttf"; sourceTree = ""; };
- 527F61C1DD2E37B4CB3A2F5C /* libPods-taskme2-taskme2Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-taskme2-taskme2Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 625CB8CD85666B1AC0D40D6F /* Pods-taskme2.stage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2.stage.release.xcconfig"; path = "Target Support Files/Pods-taskme2/Pods-taskme2.stage.release.xcconfig"; sourceTree = ""; };
+ 6683BBE85B183B391031BAE0 /* Pods-taskme2.stage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2.stage.debug.xcconfig"; path = "Target Support Files/Pods-taskme2/Pods-taskme2.stage.debug.xcconfig"; sourceTree = ""; };
+ 681CCE6F9C35606AD2E75A94 /* Pods-taskme2-taskme2Tests.stage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2-taskme2Tests.stage.release.xcconfig"; path = "Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests.stage.release.xcconfig"; sourceTree = ""; };
+ 6C5ADA4DC3819471B7B74793 /* libPods-taskme2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-taskme2.a"; sourceTree = BUILT_PRODUCTS_DIR; };
6D174334360E40AEAC86E003 /* fontello.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = fontello.ttf; path = ../src/assets/fonts/fontello.ttf; sourceTree = ""; };
- 6D9AB5D106199D173D35A220 /* Pods-taskme2.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2.debug.xcconfig"; path = "Target Support Files/Pods-taskme2/Pods-taskme2.debug.xcconfig"; sourceTree = ""; };
- 73C040992F14443E396EB91F /* Pods-taskme2.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2.release.xcconfig"; path = "Target Support Files/Pods-taskme2/Pods-taskme2.release.xcconfig"; sourceTree = ""; };
- 7B57C84A260CC1F37F7723E8 /* Pods-OneSignalNotificationServiceExtension.stage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneSignalNotificationServiceExtension.stage.release.xcconfig"; path = "Target Support Files/Pods-OneSignalNotificationServiceExtension/Pods-OneSignalNotificationServiceExtension.stage.release.xcconfig"; sourceTree = ""; };
+ 762401719B7FB753E882DCF3 /* libPods-OneSignalNotificationServiceExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-OneSignalNotificationServiceExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 7E1E35DC0A2178CF3D6329F1 /* Pods-taskme2-taskme2Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2-taskme2Tests.release.xcconfig"; path = "Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests.release.xcconfig"; sourceTree = ""; };
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = taskme2/LaunchScreen.storyboard; sourceTree = ""; };
- 821D0F756B605E607EC149FE /* Pods-taskme2-taskme2Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2-taskme2Tests.debug.xcconfig"; path = "Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests.debug.xcconfig"; sourceTree = ""; };
- 878DA92B557C81DAFFCEF3BA /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneSignalNotificationServiceExtension.release.xcconfig"; path = "Target Support Files/Pods-OneSignalNotificationServiceExtension/Pods-OneSignalNotificationServiceExtension.release.xcconfig"; sourceTree = ""; };
- A86FA5C0ED15EDDDD22D2FCF /* libPods-OneSignalNotificationServiceExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-OneSignalNotificationServiceExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8836972E3579A6C0C8AFA2CB /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneSignalNotificationServiceExtension.release.xcconfig"; path = "Target Support Files/Pods-OneSignalNotificationServiceExtension/Pods-OneSignalNotificationServiceExtension.release.xcconfig"; sourceTree = ""; };
+ 8C020F736C286F3632F7133A /* Pods-taskme2.stage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2.stage.release.xcconfig"; path = "Target Support Files/Pods-taskme2/Pods-taskme2.stage.release.xcconfig"; sourceTree = ""; };
+ 8EAFD587A49401F4A9B047A4 /* Pods-taskme2.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2.debug.xcconfig"; path = "Target Support Files/Pods-taskme2/Pods-taskme2.debug.xcconfig"; sourceTree = ""; };
+ 8F4DD1A1D2C39811661D2BC9 /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneSignalNotificationServiceExtension.debug.xcconfig"; path = "Target Support Files/Pods-OneSignalNotificationServiceExtension/Pods-OneSignalNotificationServiceExtension.debug.xcconfig"; sourceTree = ""; };
+ AEFD8315F04EAB58EA0B7902 /* Pods-taskme2-taskme2Tests.stage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2-taskme2Tests.stage.debug.xcconfig"; path = "Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests.stage.debug.xcconfig"; sourceTree = ""; };
B25C228D4A644A728CA3561E /* Gilroy-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Gilroy-Medium.ttf"; path = "../src/assets/fonts/Gilroy-Medium.ttf"; sourceTree = ""; };
- CE34B284F5419976E086BB2A /* Pods-OneSignalNotificationServiceExtension.stage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneSignalNotificationServiceExtension.stage.debug.xcconfig"; path = "Target Support Files/Pods-OneSignalNotificationServiceExtension/Pods-OneSignalNotificationServiceExtension.stage.debug.xcconfig"; sourceTree = ""; };
D66CD33E4DEC4377944DC7F7 /* Gilroy-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Gilroy-Regular.ttf"; path = "../src/assets/fonts/Gilroy-Regular.ttf"; sourceTree = ""; };
- E17C446E92AE22D017263DBA /* Pods-taskme2-taskme2Tests.stage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2-taskme2Tests.stage.release.xcconfig"; path = "Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests.stage.release.xcconfig"; sourceTree = ""; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
- FE3A727783B541D29D3F1C9F /* Pods-taskme2.stage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2.stage.debug.xcconfig"; path = "Target Support Files/Pods-taskme2/Pods-taskme2.stage.debug.xcconfig"; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -105,7 +109,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 41B967CD27101BB7DAE20A1F /* libPods-taskme2-taskme2Tests.a in Frameworks */,
+ 6A5616D21302CF9D1D9BD3F6 /* libPods-taskme2-taskme2Tests.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -113,7 +117,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 3DBB925B2361D8734B3BF05F /* libPods-OneSignalNotificationServiceExtension.a in Frameworks */,
+ B7ADE3E710FA3434D124892E /* libPods-OneSignalNotificationServiceExtension.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -123,7 +127,7 @@
files = (
0495CBE32BA221EF00BF4228 /* Intents.framework in Frameworks */,
0495CBE12BA221E800BF4228 /* CallKit.framework in Frameworks */,
- 331EB3F0DD322F0D1B2DA16C /* libPods-taskme2.a in Frameworks */,
+ DA7F8DFBC743EB75601E61BB /* libPods-taskme2.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -161,6 +165,8 @@
13B07FAE1A68108700A75B9A /* taskme2 */ = {
isa = PBXGroup;
children = (
+ 046E5DB62BCC260B0029BAA1 /* taskme2Stage.Debug.entitlements */,
+ 042ADAEC2BC3FCE90086A848 /* google-services.json */,
04D8E49B2B0BA7BA00ACC6E2 /* taskme2Stage.Release.entitlements */,
04FBB3442A84CC6700436C19 /* taskme2.entitlements */,
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
@@ -191,9 +197,9 @@
0495CBE22BA221EF00BF4228 /* Intents.framework */,
0495CBE02BA221E800BF4228 /* CallKit.framework */,
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
- 0FD9FA6914F2DA8781CBD173 /* libPods-taskme2.a */,
- 527F61C1DD2E37B4CB3A2F5C /* libPods-taskme2-taskme2Tests.a */,
- A86FA5C0ED15EDDDD22D2FCF /* libPods-OneSignalNotificationServiceExtension.a */,
+ 762401719B7FB753E882DCF3 /* libPods-OneSignalNotificationServiceExtension.a */,
+ 6C5ADA4DC3819471B7B74793 /* libPods-taskme2.a */,
+ 2CBCACA16ADDD21920623ED9 /* libPods-taskme2-taskme2Tests.a */,
);
name = Frameworks;
sourceTree = "";
@@ -208,6 +214,7 @@
83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup;
children = (
+ 046E5DB92BCC47000029BAA1 /* taskme2-Bridging-Header.h */,
13B07FAE1A68108700A75B9A /* taskme2 */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
00E356EF1AD99517003FC87E /* taskme2Tests */,
@@ -235,18 +242,18 @@
BBD78D7AC51CEA395F1C20DB /* Pods */ = {
isa = PBXGroup;
children = (
- 6D9AB5D106199D173D35A220 /* Pods-taskme2.debug.xcconfig */,
- 73C040992F14443E396EB91F /* Pods-taskme2.release.xcconfig */,
- 821D0F756B605E607EC149FE /* Pods-taskme2-taskme2Tests.debug.xcconfig */,
- 0AC2880E5264076073DF865D /* Pods-taskme2-taskme2Tests.release.xcconfig */,
- 127996D261A12456ADB5A870 /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */,
- 878DA92B557C81DAFFCEF3BA /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */,
- 7B57C84A260CC1F37F7723E8 /* Pods-OneSignalNotificationServiceExtension.stage.release.xcconfig */,
- CE34B284F5419976E086BB2A /* Pods-OneSignalNotificationServiceExtension.stage.debug.xcconfig */,
- 625CB8CD85666B1AC0D40D6F /* Pods-taskme2.stage.release.xcconfig */,
- FE3A727783B541D29D3F1C9F /* Pods-taskme2.stage.debug.xcconfig */,
- E17C446E92AE22D017263DBA /* Pods-taskme2-taskme2Tests.stage.release.xcconfig */,
- 08D358D544954D5B56BAFFAC /* Pods-taskme2-taskme2Tests.stage.debug.xcconfig */,
+ 8F4DD1A1D2C39811661D2BC9 /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */,
+ 8836972E3579A6C0C8AFA2CB /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */,
+ 1EA249EED67750313BC0DD79 /* Pods-OneSignalNotificationServiceExtension.stage.release.xcconfig */,
+ 8EAFD587A49401F4A9B047A4 /* Pods-taskme2.debug.xcconfig */,
+ 0AC17DF4CF0C564BE59C0EDD /* Pods-taskme2.release.xcconfig */,
+ 8C020F736C286F3632F7133A /* Pods-taskme2.stage.release.xcconfig */,
+ 36EED598BB7BB88F580BBFED /* Pods-taskme2-taskme2Tests.debug.xcconfig */,
+ 7E1E35DC0A2178CF3D6329F1 /* Pods-taskme2-taskme2Tests.release.xcconfig */,
+ 681CCE6F9C35606AD2E75A94 /* Pods-taskme2-taskme2Tests.stage.release.xcconfig */,
+ 14A2E94F8D2D1BA9A6E1875C /* Pods-OneSignalNotificationServiceExtension.stage.debug.xcconfig */,
+ 6683BBE85B183B391031BAE0 /* Pods-taskme2.stage.debug.xcconfig */,
+ AEFD8315F04EAB58EA0B7902 /* Pods-taskme2-taskme2Tests.stage.debug.xcconfig */,
);
path = Pods;
sourceTree = "";
@@ -258,12 +265,12 @@
isa = PBXNativeTarget;
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "taskme2Tests" */;
buildPhases = (
- A5DE24D79F33D432DF4B226D /* [CP] Check Pods Manifest.lock */,
+ 77BFDAEED4209D3227009B4B /* [CP] Check Pods Manifest.lock */,
00E356EA1AD99517003FC87E /* Sources */,
00E356EB1AD99517003FC87E /* Frameworks */,
00E356EC1AD99517003FC87E /* Resources */,
- C02CAD0DF223CD1CDAE396D6 /* [CP] Embed Pods Frameworks */,
- 064D19E25D6E401EB2248F3B /* [CP] Copy Pods Resources */,
+ E904D85E87A057ECD764E1D0 /* [CP] Embed Pods Frameworks */,
+ 37EE953DC1E3E8F4ACA1154C /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -279,7 +286,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 04FBB3512A84CD0D00436C19 /* Build configuration list for PBXNativeTarget "OneSignalNotificationServiceExtension" */;
buildPhases = (
- C3B0097ABC141CAB3164805B /* [CP] Check Pods Manifest.lock */,
+ 7F8952ECA5A62FDCBF810E6E /* [CP] Check Pods Manifest.lock */,
04FBB3452A84CD0D00436C19 /* Sources */,
04FBB3462A84CD0D00436C19 /* Frameworks */,
04FBB3472A84CD0D00436C19 /* Resources */,
@@ -297,15 +304,16 @@
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "taskme2" */;
buildPhases = (
- C70469C45B82A08695475397 /* [CP] Check Pods Manifest.lock */,
+ 9F111EC59A14F057421BB1C8 /* [CP] Check Pods Manifest.lock */,
FD10A7F022414F080027D42C /* Start Packager */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
- F6DF47B7E17A0C6FFB685404 /* [CP] Embed Pods Frameworks */,
- 82D11052B26BBE7B04DCAD66 /* [CP] Copy Pods Resources */,
04FBB3542A84CD0D00436C19 /* Embed Foundation Extensions */,
+ 8265AB58CB0D8EF5F6476DBE /* [CP] Embed Pods Frameworks */,
+ 0633F6B312E64E82A4F58621 /* [CP] Copy Pods Resources */,
+ 27A3BF627F6908DC09170CEC /* [CP-User] [RNFB] Core Configuration */,
);
buildRules = (
);
@@ -379,6 +387,7 @@
files = (
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
+ 042ADAED2BC3FCEA0086A848 /* google-services.json in Resources */,
BDD027C722014B7D83628596 /* Gilroy-Bold.ttf in Resources */,
CDBA011E492A49758920E896 /* Gilroy-Medium.ttf in Resources */,
B6F06B90F1F9411EBC065716 /* Gilroy-Regular.ttf in Resources */,
@@ -406,41 +415,54 @@
shellPath = /bin/sh;
shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n";
};
- 064D19E25D6E401EB2248F3B /* [CP] Copy Pods Resources */ = {
+ 0633F6B312E64E82A4F58621 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-resources-${CONFIGURATION}-input-files.xcfilelist",
+ "${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-resources-${CONFIGURATION}-output-files.xcfilelist",
+ "${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-resources.sh\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-resources.sh\"\n";
showEnvVarsInLog = 0;
};
- 82D11052B26BBE7B04DCAD66 /* [CP] Copy Pods Resources */ = {
+ 27A3BF627F6908DC09170CEC /* [CP-User] [RNFB] Core Configuration */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)",
+ );
+ name = "[CP-User] [RNFB] Core Configuration";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##########################################################################\n##########################################################################\n#\n# NOTE THAT IF YOU CHANGE THIS FILE YOU MUST RUN pod install AFTERWARDS\n#\n# This file is installed as an Xcode build script in the project file\n# by cocoapods, and you will not see your changes until you pod install\n#\n##########################################################################\n##########################################################################\n\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -Ku -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -Ku -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_analytics_storage\n _ANALYTICS_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_analytics_storage\")\n if [[ $_ANALYTICS_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_storage\n _ANALYTICS_AD_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_storage\")\n if [[ $_ANALYTICS_AD_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_user_data\n _ANALYTICS_AD_USER_DATA=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_user_data\")\n if [[ $_ANALYTICS_AD_USER_DATA ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_USER_DATA\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.analytics_registration_with_ad_network_enabled\n _ANALYTICS_REGISTRATION_WITH_AD_NETWORK=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_registration_with_ad_network_enabled\")\n if [[ $_ANALYTICS_REGISTRATION_WITH_AD_NETWORK ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_REGISTRATION_WITH_AD_NETWORK_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_REGISTRATION_WITH_AD_NETWORK\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n";
+ };
+ 37EE953DC1E3E8F4ACA1154C /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-resources-${CONFIGURATION}-input-files.xcfilelist",
+ "${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-resources-${CONFIGURATION}-output-files.xcfilelist",
+ "${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-resources.sh\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-resources.sh\"\n";
showEnvVarsInLog = 0;
};
- A5DE24D79F33D432DF4B226D /* [CP] Check Pods Manifest.lock */ = {
+ 77BFDAEED4209D3227009B4B /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -462,46 +484,46 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- C02CAD0DF223CD1CDAE396D6 /* [CP] Embed Pods Frameworks */ = {
+ 7F8952ECA5A62FDCBF810E6E /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
- name = "[CP] Embed Pods Frameworks";
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-OneSignalNotificationServiceExtension-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-frameworks.sh\"\n";
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- C3B0097ABC141CAB3164805B /* [CP] Check Pods Manifest.lock */ = {
+ 8265AB58CB0D8EF5F6476DBE /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
- inputPaths = (
- "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
- "${PODS_ROOT}/Manifest.lock",
- );
- name = "[CP] Check Pods Manifest.lock";
+ name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
- );
- outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-OneSignalNotificationServiceExtension-checkManifestLockResult.txt",
+ "${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
- C70469C45B82A08695475397 /* [CP] Check Pods Manifest.lock */ = {
+ 9F111EC59A14F057421BB1C8 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -523,21 +545,21 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- F6DF47B7E17A0C6FFB685404 /* [CP] Embed Pods Frameworks */ = {
+ E904D85E87A057ECD764E1D0 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ "${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ "${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-frameworks.sh\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
FD10A7F022414F080027D42C /* Start Packager */ = {
@@ -605,7 +627,7 @@
/* Begin XCBuildConfiguration section */
00E356F61AD99517003FC87E /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 821D0F756B605E607EC149FE /* Pods-taskme2-taskme2Tests.debug.xcconfig */;
+ baseConfigurationReference = 36EED598BB7BB88F580BBFED /* Pods-taskme2-taskme2Tests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
GCC_PREPROCESSOR_DEFINITIONS = (
@@ -632,7 +654,7 @@
};
00E356F71AD99517003FC87E /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 0AC2880E5264076073DF865D /* Pods-taskme2-taskme2Tests.release.xcconfig */;
+ baseConfigurationReference = 7E1E35DC0A2178CF3D6329F1 /* Pods-taskme2-taskme2Tests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
COPY_PHASE_STRIP = NO;
@@ -654,6 +676,294 @@
};
name = Release;
};
+ 046E5DB22BCC25D80029BAA1 /* Stage.Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION,
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers",
+ "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core",
+ "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios",
+ "${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers",
+ "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios",
+ );
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
+ LD_RUNPATH_SEARCH_PATHS = (
+ /usr/lib/swift,
+ "$(inherited)",
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "\"$(SDKROOT)/usr/lib/swift\"",
+ "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
+ "\"$(inherited)\"",
+ );
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ OTHER_CFLAGS = "$(inherited)";
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-DFOLLY_NO_CONFIG",
+ "-DFOLLY_MOBILE=1",
+ "-DFOLLY_USE_LIBCPP=1",
+ );
+ OTHER_LDFLAGS = "$(inherited) ";
+ REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
+ SDKROOT = iphoneos;
+ };
+ name = Stage.Debug;
+ };
+ 046E5DB32BCC25D80029BAA1 /* Stage.Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 6683BBE85B183B391031BAE0 /* Pods-taskme2.stage.debug.xcconfig */;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = taskme2/taskme2Stage.Debug.entitlements;
+ CURRENT_PROJECT_VERSION = 28;
+ DEVELOPMENT_TEAM = HQ3J3TDPR2;
+ ENABLE_BITCODE = NO;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"${PODS_ROOT}/Headers/Public\"",
+ "\"${PODS_ROOT}/Headers/Public/CocoaAsyncSocket\"",
+ "\"${PODS_ROOT}/Headers/Public/DoubleConversion\"",
+ "\"${PODS_ROOT}/Headers/Public/FBLazyVector\"",
+ "\"${PODS_ROOT}/Headers/Public/Flipper\"",
+ "\"${PODS_ROOT}/Headers/Public/Flipper-Fmt\"",
+ "\"${PODS_ROOT}/Headers/Public/Flipper-Folly\"",
+ "\"${PODS_ROOT}/Headers/Public/Flipper-PeerTalk\"",
+ "\"${PODS_ROOT}/Headers/Public/FlipperKit\"",
+ "\"${PODS_ROOT}/Headers/Public/RCT-Folly\"",
+ "\"${PODS_ROOT}/Headers/Public/RCTRequired\"",
+ "\"${PODS_ROOT}/Headers/Public/RCTTypeSafety\"",
+ "\"${PODS_ROOT}/Headers/Public/RNAudioRecorderPlayer\"",
+ "\"${PODS_ROOT}/Headers/Public/RNCAsyncStorage\"",
+ "\"${PODS_ROOT}/Headers/Public/RNCClipboard\"",
+ "\"${PODS_ROOT}/Headers/Public/RNCPicker\"",
+ "\"${PODS_ROOT}/Headers/Public/RNCallKeep\"",
+ "\"${PODS_ROOT}/Headers/Public/RNDateTimePicker\"",
+ "\"${PODS_ROOT}/Headers/Public/RNDeviceInfo\"",
+ "\"${PODS_ROOT}/Headers/Public/RNFS\"",
+ "\"${PODS_ROOT}/Headers/Public/RNFastImage\"",
+ "\"${PODS_ROOT}/Headers/Public/RNFileViewer\"",
+ "\"${PODS_ROOT}/Headers/Public/RNGestureHandler\"",
+ "\"${PODS_ROOT}/Headers/Public/RNImageCropPicker\"",
+ "\"${PODS_ROOT}/Headers/Public/RNNotifee\"",
+ "\"${PODS_ROOT}/Headers/Public/RNPDF\"",
+ "\"${PODS_ROOT}/Headers/Public/RNPermissions\"",
+ "\"${PODS_ROOT}/Headers/Public/RNReanimated\"",
+ "\"${PODS_ROOT}/Headers/Public/RNSVG\"",
+ "\"${PODS_ROOT}/Headers/Public/RNScreens\"",
+ "\"${PODS_ROOT}/Headers/Public/RNShare\"",
+ "\"${PODS_ROOT}/Headers/Public/RNSoundLevel\"",
+ "\"${PODS_ROOT}/Headers/Public/RNVectorIcons\"",
+ "\"${PODS_ROOT}/Headers/Public/React-Codegen\"",
+ "\"${PODS_ROOT}/Headers/Public/React-Core\"",
+ "\"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\"",
+ "\"${PODS_ROOT}/Headers/Public/React-RCTAnimation\"",
+ "\"${PODS_ROOT}/Headers/Public/React-RCTAppDelegate\"",
+ "\"${PODS_ROOT}/Headers/Public/React-RCTBlob\"",
+ "\"${PODS_ROOT}/Headers/Public/React-RCTText\"",
+ "\"${PODS_ROOT}/Headers/Public/React-callinvoker\"",
+ "\"${PODS_ROOT}/Headers/Public/React-cxxreact\"",
+ "\"${PODS_ROOT}/Headers/Public/React-debug\"",
+ "\"${PODS_ROOT}/Headers/Public/React-hermes\"",
+ "\"${PODS_ROOT}/Headers/Public/React-jsi\"",
+ "\"${PODS_ROOT}/Headers/Public/React-jsiexecutor\"",
+ "\"${PODS_ROOT}/Headers/Public/React-jsinspector\"",
+ "\"${PODS_ROOT}/Headers/Public/React-logger\"",
+ "\"${PODS_ROOT}/Headers/Public/React-perflogger\"",
+ "\"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\"",
+ "\"${PODS_ROOT}/Headers/Public/React-runtimescheduler\"",
+ "\"${PODS_ROOT}/Headers/Public/React-utils\"",
+ "\"${PODS_ROOT}/Headers/Public/ReactCommon\"",
+ "\"${PODS_ROOT}/Headers/Public/ReactNativeExceptionHandler\"",
+ "\"${PODS_ROOT}/Headers/Public/SDWebImage\"",
+ "\"${PODS_ROOT}/Headers/Public/SDWebImageWebPCoder\"",
+ "\"${PODS_ROOT}/Headers/Public/SocketRocket\"",
+ "\"${PODS_ROOT}/Headers/Public/TOCropViewController\"",
+ "\"${PODS_ROOT}/Headers/Public/Yoga\"",
+ "\"${PODS_ROOT}/Headers/Public/YogaKit\"",
+ "\"${PODS_ROOT}/Headers/Public/ffmpeg-kit-react-native\"",
+ "\"${PODS_ROOT}/Headers/Public/fmt\"",
+ "\"${PODS_ROOT}/Headers/Public/glog\"",
+ "\"${PODS_ROOT}/Headers/Public/hermes-engine\"",
+ "\"${PODS_ROOT}/Headers/Public/libevent\"",
+ "\"${PODS_ROOT}/Headers/Public/libwebp\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-cameraroll\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-config\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-date-picker\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-document-picker\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-html-to-pdf\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-image-picker\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-netinfo\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-onesignal\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-pager-view\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-print\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-receive-sharing-intent\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-restart\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-safe-area-context\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-splash-screen\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-sqlite-storage\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-video\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-webrtc\"",
+ "\"${PODS_ROOT}/Headers/Public/react-native-webview\"",
+ "\"${PODS_ROOT}/Headers/Public/rn-fetch-blob\"",
+ "\"$(PODS_ROOT)/DoubleConversion\"",
+ "\"$(PODS_ROOT)/boost\"",
+ "\"$(PODS_ROOT)/boost\"",
+ "\"$(PODS_ROOT)/boost-for-react-native\"",
+ "\"$(PODS_ROOT)/glog\"",
+ "\"$(PODS_ROOT)/RCT-Folly\"",
+ "\"$(PODS_ROOT)/Headers/Public/React-hermes\"",
+ "\"$(PODS_ROOT)/Headers/Public/hermes-engine\"",
+ "\"$(PODS_ROOT)/../../node_modules/react-native/ReactCommon\"",
+ "\"$(PODS_ROOT)/Headers/Private/React-Core\"",
+ "\"$(PODS_TARGET_SRCROOT)/include/\"",
+ "\"$(SRCROOT)/../node_modules/react-native-callkeep/ios/RNCallKeep\"",
+ );
+ INFOPLIST_FILE = taskme2/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = "Task me ;)";
+ INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.productivity";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ MARKETING_VERSION = 2.3;
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.app.taskme.stage;
+ PRODUCT_NAME = taskme2;
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
+ SWIFT_OBJC_BRIDGING_HEADER = "taskme2-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Stage.Debug;
+ };
+ 046E5DB42BCC25D80029BAA1 /* Stage.Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = AEFD8315F04EAB58EA0B7902 /* Pods-taskme2-taskme2Tests.stage.debug.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ INFOPLIST_FILE = taskme2Tests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-lc++",
+ "$(inherited)",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/taskme2.app/taskme2";
+ };
+ name = Stage.Debug;
+ };
+ 046E5DB52BCC25D80029BAA1 /* Stage.Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 14A2E94F8D2D1BA9A6E1875C /* Pods-OneSignalNotificationServiceExtension.stage.debug.xcconfig */;
+ buildSettings = {
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CODE_SIGN_ENTITLEMENTS = OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ DEVELOPMENT_TEAM = HQ3J3TDPR2;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = OneSignalNotificationServiceExtension/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = OneSignalNotificationServiceExtension;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ MARKETING_VERSION = 2.1;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ PRODUCT_BUNDLE_IDENTIFIER = com.app.taskme.OneSignalNotificationServiceExtension;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Stage.Debug;
+ };
04D8E4962B0BA3EF00ACC6E2 /* Stage.Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -700,6 +1010,14 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers",
+ "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core",
+ "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios",
+ "${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers",
+ "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios",
+ );
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
@@ -727,14 +1045,14 @@
};
04D8E4972B0BA3EF00ACC6E2 /* Stage.Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 625CB8CD85666B1AC0D40D6F /* Pods-taskme2.stage.release.xcconfig */;
+ baseConfigurationReference = 8C020F736C286F3632F7133A /* Pods-taskme2.stage.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = taskme2/taskme2Stage.Release.entitlements;
- CURRENT_PROJECT_VERSION = 27;
+ CURRENT_PROJECT_VERSION = 28;
DEVELOPMENT_TEAM = HQ3J3TDPR2;
HEADER_SEARCH_PATHS = (
"$(inherited)",
@@ -863,7 +1181,7 @@
};
04D8E4982B0BA3EF00ACC6E2 /* Stage.Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = E17C446E92AE22D017263DBA /* Pods-taskme2-taskme2Tests.stage.release.xcconfig */;
+ baseConfigurationReference = 681CCE6F9C35606AD2E75A94 /* Pods-taskme2-taskme2Tests.stage.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
COPY_PHASE_STRIP = NO;
@@ -887,7 +1205,7 @@
};
04D8E4992B0BA3EF00ACC6E2 /* Stage.Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 7B57C84A260CC1F37F7723E8 /* Pods-OneSignalNotificationServiceExtension.stage.release.xcconfig */;
+ baseConfigurationReference = 1EA249EED67750313BC0DD79 /* Pods-OneSignalNotificationServiceExtension.stage.release.xcconfig */;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@@ -927,7 +1245,7 @@
};
04FBB3522A84CD0D00436C19 /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 127996D261A12456ADB5A870 /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */;
+ baseConfigurationReference = 8F4DD1A1D2C39811661D2BC9 /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@@ -967,7 +1285,7 @@
};
04FBB3532A84CD0D00436C19 /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 878DA92B557C81DAFFCEF3BA /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */;
+ baseConfigurationReference = 8836972E3579A6C0C8AFA2CB /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@@ -1007,14 +1325,14 @@
};
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 6D9AB5D106199D173D35A220 /* Pods-taskme2.debug.xcconfig */;
+ baseConfigurationReference = 8EAFD587A49401F4A9B047A4 /* Pods-taskme2.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = taskme2/taskme2.entitlements;
- CURRENT_PROJECT_VERSION = 27;
+ CURRENT_PROJECT_VERSION = 28;
DEVELOPMENT_TEAM = HQ3J3TDPR2;
ENABLE_BITCODE = NO;
HEADER_SEARCH_PATHS = (
@@ -1145,14 +1463,14 @@
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 73C040992F14443E396EB91F /* Pods-taskme2.release.xcconfig */;
+ baseConfigurationReference = 0AC17DF4CF0C564BE59C0EDD /* Pods-taskme2.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = taskme2/taskme2.entitlements;
- CURRENT_PROJECT_VERSION = 27;
+ CURRENT_PROJECT_VERSION = 28;
DEVELOPMENT_TEAM = HQ3J3TDPR2;
HEADER_SEARCH_PATHS = (
"$(inherited)",
@@ -1329,6 +1647,14 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers",
+ "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core",
+ "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios",
+ "${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers",
+ "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios",
+ );
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
@@ -1400,6 +1726,14 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers",
+ "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core",
+ "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios",
+ "${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers",
+ "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios",
+ );
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
@@ -1432,6 +1766,7 @@
isa = XCConfigurationList;
buildConfigurations = (
00E356F61AD99517003FC87E /* Debug */,
+ 046E5DB42BCC25D80029BAA1 /* Stage.Debug */,
00E356F71AD99517003FC87E /* Release */,
04D8E4982B0BA3EF00ACC6E2 /* Stage.Release */,
);
@@ -1442,6 +1777,7 @@
isa = XCConfigurationList;
buildConfigurations = (
04FBB3522A84CD0D00436C19 /* Debug */,
+ 046E5DB52BCC25D80029BAA1 /* Stage.Debug */,
04FBB3532A84CD0D00436C19 /* Release */,
04D8E4992B0BA3EF00ACC6E2 /* Stage.Release */,
);
@@ -1452,6 +1788,7 @@
isa = XCConfigurationList;
buildConfigurations = (
13B07F941A680F5B00A75B9A /* Debug */,
+ 046E5DB32BCC25D80029BAA1 /* Stage.Debug */,
13B07F951A680F5B00A75B9A /* Release */,
04D8E4972B0BA3EF00ACC6E2 /* Stage.Release */,
);
@@ -1462,6 +1799,7 @@
isa = XCConfigurationList;
buildConfigurations = (
83CBBA201A601CBA00E9B192 /* Debug */,
+ 046E5DB22BCC25D80029BAA1 /* Stage.Debug */,
83CBBA211A601CBA00E9B192 /* Release */,
04D8E4962B0BA3EF00ACC6E2 /* Stage.Release */,
);
diff --git a/ios/taskme2.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/taskme2.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000..0c67376
--- /dev/null
+++ b/ios/taskme2.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/ios/taskme2/taskme2Stage.Debug.entitlements b/ios/taskme2/taskme2Stage.Debug.entitlements
new file mode 100644
index 0000000..e94a485
--- /dev/null
+++ b/ios/taskme2/taskme2Stage.Debug.entitlements
@@ -0,0 +1,17 @@
+
+
+
+
+ aps-environment
+ development
+ com.apple.developer.associated-domains
+
+ applinks:example.com
+
+ com.apple.security.application-groups
+
+ group.com.app.taskme
+ group.com.app.taskme.stage.onesignal
+
+
+
diff --git a/package-lock.json b/package-lock.json
index 7a3d1d7..547c897 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,6 +18,8 @@
"@react-native-community/clipboard": "^1.5.1",
"@react-native-community/datetimepicker": "^7.6.2",
"@react-native-community/netinfo": "^9.3.10",
+ "@react-native-firebase/app": "^19.1.2",
+ "@react-native-firebase/messaging": "^19.1.2",
"@react-native-picker/picker": "^2.4.10",
"@react-native/eslint-config": "^0.72.2",
"@react-native/metro-config": "^0.72.11",
@@ -63,6 +65,7 @@
"react-native-html-to-pdf": "^0.12.0",
"react-native-image-crop-picker": "^0.40.0",
"react-native-image-picker": "^5.6.0",
+ "react-native-incall-manager": "^4.2.0",
"react-native-keyboard-aware-scroll-view": "^0.9.5",
"react-native-masked-text": "^1.13.0",
"react-native-modal": "^13.0.1",
@@ -12351,6 +12354,14 @@
"react-native": "*"
}
},
+ "node_modules/react-native-incall-manager": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/react-native-incall-manager/-/react-native-incall-manager-4.2.0.tgz",
+ "integrity": "sha512-DC5XRQVAwNgNA6YZ3ILF6ttWXv/MUQ4omzmVDh/uHc0TW0v4f8QIdt6D9GHZhGKb3+qB7XKUxpXVBrLH+9zqfQ==",
+ "peerDependencies": {
+ "react-native": ">=0.40.0"
+ }
+ },
"node_modules/react-native-iphone-x-helper": {
"version": "1.3.1",
"license": "MIT",
@@ -22177,6 +22188,12 @@
"version": "5.7.0",
"requires": {}
},
+ "react-native-incall-manager": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/react-native-incall-manager/-/react-native-incall-manager-4.2.0.tgz",
+ "integrity": "sha512-DC5XRQVAwNgNA6YZ3ILF6ttWXv/MUQ4omzmVDh/uHc0TW0v4f8QIdt6D9GHZhGKb3+qB7XKUxpXVBrLH+9zqfQ==",
+ "requires": {}
+ },
"react-native-iphone-x-helper": {
"version": "1.3.1",
"requires": {}
diff --git a/package.json b/package.json
index 5d96ad1..9c775e9 100644
--- a/package.json
+++ b/package.json
@@ -28,6 +28,8 @@
"@react-native-community/clipboard": "^1.5.1",
"@react-native-community/datetimepicker": "^7.6.2",
"@react-native-community/netinfo": "^9.3.10",
+ "@react-native-firebase/app": "^19.1.2",
+ "@react-native-firebase/messaging": "^19.1.2",
"@react-native-picker/picker": "^2.4.10",
"@react-native/eslint-config": "^0.72.2",
"@react-native/metro-config": "^0.72.11",
@@ -73,6 +75,7 @@
"react-native-html-to-pdf": "^0.12.0",
"react-native-image-crop-picker": "^0.40.0",
"react-native-image-picker": "^5.6.0",
+ "react-native-incall-manager": "^4.2.0",
"react-native-keyboard-aware-scroll-view": "^0.9.5",
"react-native-masked-text": "^1.13.0",
"react-native-modal": "^13.0.1",
diff --git a/src/App.tsx b/src/App.tsx
index 8e6df69..c843334 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -7,7 +7,7 @@ if (__DEV__) {
}
import { ThemeProvider } from './shared/themes'
-import { AppState, LogBox, Platform } from 'react-native'
+import { Alert, AppState, LogBox, Platform } from 'react-native'
import { appService } from './services/app.service'
import 'react-native-gesture-handler'
import { BottomSheetModalProvider } from '@gorhom/bottom-sheet'
@@ -19,12 +19,18 @@ import Toast from 'react-native-toast-message'
import { toastConfig } from './config/toast.config'
import { VoipNotificationsService } from './services/system'
-import { callKeepService } from './modules/calls/services/callkeep.service'
import './modules/calls/services/calls-events.service'
+import { callKeepService } from './modules/calls/services/callkeep/callkeep'
LogBox.ignoreLogs(['Warning: ...', 'Require cycle: ...'])
LogBox.ignoreAllLogs()
+if (Platform.OS === 'android') {
+ require('./modules/calls/services/callkeep-notifications-android.service')
+}
+
+callKeepService.register()
+
const App: FC = () => {
useEffect(() => {
appService.initApp()
@@ -47,14 +53,6 @@ const App: FC = () => {
}
}, [])
- useEffect(() => {
- // console.log(callsEventsService)
- callKeepService.register()
- return () => {
- callKeepService.unregister()
- }
- }, [])
-
useEffect(() => {
if (Platform.OS === 'ios') {
VoipNotificationsService.getInstance().initListeners()
diff --git a/src/api/calls/requests.ts b/src/api/calls/requests.ts
index a842f19..38117d9 100644
--- a/src/api/calls/requests.ts
+++ b/src/api/calls/requests.ts
@@ -1,3 +1,4 @@
+import { ICall } from '@/shared'
import api from '../http.service'
import {
IAnswerCallPayload,
@@ -37,3 +38,11 @@ export const deleteCallHistoryReq = (callId: number) => {
export const getIncomeDataReq = (callId: string, targetDeviceId: string) => {
return api.post(`calls/income/${callId}`, { targetDeviceId }, {}, '')
}
+
+export const sendNegotiationReq = (callId: string, payload: any) => {
+ return api.post(`calls/negotiation/${callId}`, payload, null, '')
+}
+
+export const getCallReq = (callId: string) => {
+ return api.get(`calls/${callId}`, {}, '')
+}
diff --git a/src/api/notifications/requests.interfaces.ts b/src/api/notifications/requests.interfaces.ts
index 48aea72..f346913 100644
--- a/src/api/notifications/requests.interfaces.ts
+++ b/src/api/notifications/requests.interfaces.ts
@@ -1,6 +1,6 @@
export interface ISaveDevicePayload {
deviceUuid: string
notificationUserId: string
- isVoip?: boolean
+ type?: string
isDev?: boolean
}
diff --git a/src/config/index.ts b/src/config/index.ts
index 3833fb0..330c66b 100644
--- a/src/config/index.ts
+++ b/src/config/index.ts
@@ -7,6 +7,7 @@ export const dynamicConfig = {
baseUrl: Config.API_URL,
socketUrl: Config.SOCKET_URL,
oneSignalKey: Config.ONE_SIGNAL_KEY,
+
appStoreUrl: 'https://apps.apple.com/ua/app/task-me/id1482240685?l=uk',
googlePlayUrl:
'https://play.google.com/store/apps/details?id=com.app.task_me',
diff --git a/src/modules/calls/hooks/use-call-data.hook.ts b/src/modules/calls/hooks/use-call-data.hook.ts
index 19d8d19..e67cd21 100644
--- a/src/modules/calls/hooks/use-call-data.hook.ts
+++ b/src/modules/calls/hooks/use-call-data.hook.ts
@@ -17,6 +17,7 @@ export interface CallDataStore {
remoteRTCMessage?: any
icecandidates: any[]
connectedStatus: RTCIceConnectionState
+ isIncomeCall?: boolean // true if device answering, false if device calling
changeMod: (mod: CallMod) => void
startCall: (targetUserId: number, peerConnection: RTCPeerConnection) => void
@@ -67,6 +68,7 @@ export const useCallDataStore = create()(set => ({
remoteRTCMessage,
mod: CallMod.Incoming,
peerConnection,
+ isIncomeCall: true,
})
},
diff --git a/src/modules/calls/hooks/use-call-status.hook.ts b/src/modules/calls/hooks/use-call-status.hook.ts
index e0c880f..61917bb 100644
--- a/src/modules/calls/hooks/use-call-status.hook.ts
+++ b/src/modules/calls/hooks/use-call-status.hook.ts
@@ -1,16 +1,6 @@
import { useMemo } from 'react'
import { useCallDataStore } from './use-call-data.hook'
-const rtcStatusLabel: Record = {
- new: "З'єднання",
- checking: '',
- closed: '',
- completed: '',
- disconnected: '',
- failed: '',
- connected: '',
-}
-
export const useCallStatus = () => {
const connectedStatus = useCallDataStore(s => s.connectedStatus)
diff --git a/src/modules/calls/hooks/use-call-streams.hook.ts b/src/modules/calls/hooks/use-call-streams.hook.ts
index dbc1b17..f47a0a1 100644
--- a/src/modules/calls/hooks/use-call-streams.hook.ts
+++ b/src/modules/calls/hooks/use-call-streams.hook.ts
@@ -2,13 +2,16 @@ import { useEffect, useMemo, useState } from 'react'
import { MediaStream, mediaDevices } from 'react-native-webrtc'
import { create } from 'zustand'
import { peerConnectionService } from '../services'
-import { useEventsListener } from '@/shared'
-
+import { appEvents, useEventsListener } from '@/shared'
+import InCallManager from 'react-native-incall-manager'
+import RNCallKeep from 'react-native-callkeep'
+import { useCallDataStore } from './use-call-data.hook'
export interface ICallStreamsStore {
localStream: MediaStream
remoteStream: MediaStream
isMicOn: boolean
isCameraOn: boolean
+ isSpeakerOn: boolean
remoteVideoOn: boolean
@@ -17,6 +20,7 @@ export interface ICallStreamsStore {
setMicOn: (isMicOn: boolean) => void
setCameraOn: (isCameraOn: boolean) => void
setRemoveVideoOn: (removeVideoOn: boolean) => void
+ setSpeakerOn: (isSpeakerOn: boolean) => void
}
const callsStreamStore = create()(set => ({
@@ -25,6 +29,7 @@ const callsStreamStore = create()(set => ({
isMicOn: true,
isCameraOn: true,
remoteVideoOn: true,
+ isSpeakerOn: true,
setLocalStream(localStream) {
set({ localStream })
@@ -44,6 +49,10 @@ const callsStreamStore = create()(set => ({
setRemoveVideoOn(remoteVideoOn) {
set({ remoteVideoOn })
},
+
+ setSpeakerOn(isSpeakerOn) {
+ set({ isSpeakerOn })
+ },
}))
export const useCallsStream = callsStreamStore
@@ -70,30 +79,39 @@ export const initCallsMediaDevices = async (peerConnection: any) => {
}
export const useLocalStream = () => {
- const localMicOn = callsStreamsCtr().isMicOn
- const isCameraOn = callsStreamsCtr().isCameraOn
- const localStream = callsStreamsCtr().localStream
-
- function toogleMic() {
- callsStreamsCtr().setMicOn(!localMicOn)
+ const localMicOn = callsStreamStore(s => s.isMicOn)
+ const isCameraOn = callsStreamStore(s => s.isCameraOn)
+ const localStream = callsStreamStore(s => s.localStream)
+
+ function toogleMic(value?: boolean, slientChange = false) {
+ const isOn = value ? value : !localMicOn
+ callsStreamsCtr().setMicOn(isOn)
+ console.log('isOne', isOn)
localStream.getAudioTracks().forEach(track => {
- localMicOn ? (track.enabled = false) : (track.enabled = true)
+ !isOn ? (track.enabled = false) : (track.enabled = true)
})
peerConnectionService.sendMessage({
type: 'changeMicro',
value: !localMicOn,
})
+ // if (!slientChange) {
+ // appEvents.emit('callSettingUpdated', {})
+ // }
}
- function toogleCamera() {
- callsStreamsCtr().setCameraOn(!isCameraOn)
+ function toogleCamera(value?: boolean, slientChange = false) {
+ const isOn = value ? value : !isCameraOn
+ callsStreamsCtr().setCameraOn(isOn)
localStream.getVideoTracks().forEach(track => {
- isCameraOn ? (track.enabled = false) : (track.enabled = true)
+ !isOn ? (track.enabled = false) : (track.enabled = true)
})
peerConnectionService.sendMessage({
type: 'changeVideo',
value: !isCameraOn,
})
+ // if (!slientChange) {
+ // appEvents.emit('callSettingUpdated', {})
+ // }
}
return {
@@ -110,9 +128,33 @@ export const useRemoteStream = () => {
const remoteVideoOn = callsStreamStore(s => s.remoteVideoOn)
useEventsListener('call-channel/changeVideo', ({ value }) => {
- console.log('value', value)
callsStreamsCtr().setRemoveVideoOn(value)
})
return { isRemoteCameraOn: remoteVideoOn }
}
+
+export const useAudioOutput = () => {
+ const isSpeakerOn = callsStreamStore(s => s.isSpeakerOn)
+
+ useEffect(() => {
+ InCallManager.setForceSpeakerphoneOn(isSpeakerOn)
+ }, [])
+
+ const toggleSpeaker = async () => {
+ try {
+ callsStreamsCtr().setSpeakerOn(!isSpeakerOn)
+
+ InCallManager.setForceSpeakerphoneOn(!isSpeakerOn)
+
+ appEvents.emit('callSettingUpdated', {})
+ } catch (error) {
+ console.error('Error setting speaker mode:', error)
+ }
+ }
+
+ return {
+ isSpeakerOn,
+ toggleSpeaker,
+ }
+}
diff --git a/src/modules/calls/screens/call/index.tsx b/src/modules/calls/screens/call/index.tsx
index a60f0fe..2dbc1bd 100644
--- a/src/modules/calls/screens/call/index.tsx
+++ b/src/modules/calls/screens/call/index.tsx
@@ -3,6 +3,7 @@ import { CallingAtom, OutgoingcallAtom } from './atoms'
import { Button } from '@/shared'
import {
CallMod,
+ useAudioOutput,
useCallDataStore,
useCallFromStore,
useCallStatus,
@@ -22,13 +23,12 @@ export const CallScreen = () => {
const { title, avatarImageUrl } = useCallFromStore()
const { label } = useCallStatus()
const { toogleMic, localMicOn, isCameraOn, toogleCamera } = useLocalStream()
+ const { isSpeakerOn, toggleSpeaker } = useAudioOutput()
const { isRemoteCameraOn } = useRemoteStream()
const stopCall = () => {
callService.stop()
}
- console.log('isRemoteCameraOn', isRemoteCameraOn)
-
const templates = {
[CallMod.Speaking]: (
{
toggleSpeaker()}
iconColor="#000"
style={styles.callBtn}
/>
@@ -61,7 +61,7 @@ export const CallScreen = () => {
}
bgColor="#fff"
isAnimated={false}
- onPress={toogleCamera}
+ onPress={() => toogleCamera()}
iconColor="#000"
style={styles.callBtn}
/>
@@ -69,7 +69,7 @@ export const CallScreen = () => {
iconName={localMicOn ? 'microphone' : 'microphoneslash'}
bgColor="#fff"
isAnimated={false}
- onPress={toogleMic}
+ onPress={() => toogleMic()}
iconColor="#000"
style={styles.callBtn}
/>
diff --git a/src/modules/calls/services/call.service.ts b/src/modules/calls/services/call.service.ts
index de84276..6da0fb9 100644
--- a/src/modules/calls/services/call.service.ts
+++ b/src/modules/calls/services/call.service.ts
@@ -7,8 +7,7 @@ import { RouteKey } from '@/shared'
import { StopCall } from '../core/stop-call'
import { cancelCallReq } from '@/api/calls/requests'
import { RTCSessionDescription } from 'react-native-webrtc'
-import { callKeepService } from './callkeep.service'
-
+import { callKeepService } from './callkeep'
class CallService extends CallRoot {
public async proccesIncome(data: any) {
const peerConnection = await peerConnectionService.createIns()
diff --git a/src/modules/calls/services/callkeep-notifications-android.service.ts b/src/modules/calls/services/callkeep-notifications-android.service.ts
new file mode 100644
index 0000000..63bce0e
--- /dev/null
+++ b/src/modules/calls/services/callkeep-notifications-android.service.ts
@@ -0,0 +1,52 @@
+import messaging from '@react-native-firebase/messaging'
+import RNCallKeep from 'react-native-callkeep'
+
+messaging().setBackgroundMessageHandler(async message => {
+ const data = message.data as any
+
+ if (!data) {
+ return
+ }
+
+ if (data?.type === 'callAnswered') {
+ RNCallKeep.endAllCalls()
+ return
+ }
+
+ if (data?.uuid) {
+ RNCallKeep.displayIncomingCall(
+ data.uuid,
+ data.handle,
+ data.callerName,
+ 'number',
+ false,
+ )
+ }
+})
+
+messaging().onMessage(async message => {
+ try {
+ const data = message.data as any
+
+ if (!data) {
+ return
+ }
+
+ if (data?.type === 'callAnswered') {
+ RNCallKeep.endAllCalls()
+ return
+ }
+
+ if (data?.uuid) {
+ RNCallKeep.displayIncomingCall(
+ data.uuid,
+ data.handle,
+ data.callerName,
+ 'number',
+ false,
+ )
+ }
+ } catch (e) {
+ console.log(e)
+ }
+})
diff --git a/src/modules/calls/services/callkeep.service.ts b/src/modules/calls/services/callkeep.service.ts
deleted file mode 100644
index fdd74a1..0000000
--- a/src/modules/calls/services/callkeep.service.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-import { getIncomeDataReq } from '@/api/calls/requests'
-import RNCallKeep from 'react-native-callkeep'
-import { CallRoot } from './call-root.service'
-import { Platform } from 'react-native'
-import { appEvents } from '@/shared'
-import { DeviceInfoService } from '@/services/system'
-
-class CallKeepService extends CallRoot {
- public register() {
- this.init()
- this.initListeners()
- }
-
- public unregister() {
- this.removeListeners()
- }
-
- private async init() {
- RNCallKeep.endAllCalls()
- RNCallKeep.setup({
- ios: {
- appName: 'TaskMe',
- includesCallsInRecents: false,
- maximumCallGroups: '1',
- supportsVideo: false,
- },
- android: {
- alertTitle: 'Permissions required',
- alertDescription:
- 'This application needs to access your phone accounts',
- cancelButton: 'Cancel',
- okButton: 'ok',
- imageName: 'phone_account_icon',
- additionalPermissions: [],
- foregroundService: {
- channelId: 'com.company.my',
- channelName: 'Foreground service for my app',
- notificationTitle: 'My app is running on background',
- notificationIcon:
- 'Path to the resource icon of the notification',
- },
- },
- })
- }
-
- private initListeners() {
- RNCallKeep.addEventListener('answerCall', this.onAnswer.bind(this))
- RNCallKeep.addEventListener('endCall', this.onEnd.bind(this))
- RNCallKeep.addEventListener(
- 'didPerformSetMutedCallAction',
- this.changeMuted.bind(this),
- )
- }
- private removeListeners() {
- RNCallKeep.clearInitialEvents()
- RNCallKeep.removeEventListener('answerCall')
- RNCallKeep.removeEventListener('endCall')
- RNCallKeep.removeEventListener('didPerformSetMutedCallAction')
- }
-
- private async onAnswer(data: any) {
- try {
- appEvents.emit('closeConfirmModal', {})
-
- const id = await DeviceInfoService.getDeviceUniqueId()
- getIncomeDataReq(data.callUUID, id)
- } catch (e) {
- console.log('Error on answer', e)
- }
- }
-
- private async onEnd() {
- console.log('onend')
- }
-
- private async changeMuted() {
- console.log('changemuted')
- }
-
- public async stop() {
- RNCallKeep.endCall(this.store.callId)
- RNCallKeep.endAllCalls()
- }
-
- public async handleAcceptedIncomeInOtherDevice(uuid: string) {
- RNCallKeep.rejectCall(uuid)
- RNCallKeep.endAllCalls()
- }
-}
-
-export const callKeepService = new CallKeepService()
diff --git a/src/modules/calls/services/callkeep/callkeep-android.service.ts b/src/modules/calls/services/callkeep/callkeep-android.service.ts
new file mode 100644
index 0000000..b167dca
--- /dev/null
+++ b/src/modules/calls/services/callkeep/callkeep-android.service.ts
@@ -0,0 +1,18 @@
+import RNCallKeep from 'react-native-callkeep'
+import { CallKeepRootService } from './callkeep-root.service'
+
+export class CallkeepAndroidService extends CallKeepRootService {
+ protected async onAnswer(data: any) {
+ RNCallKeep.backToForeground()
+ RNCallKeep.setConnectionState(data.callUUID, 128)
+ await delay(100)
+ RNCallKeep.endAllCalls()
+ RNCallKeep.endCall(data.callUUID)
+
+ super.onAnswer(data)
+ }
+}
+
+function delay(ms: number) {
+ return new Promise(resolve => setTimeout(resolve, ms))
+}
diff --git a/src/modules/calls/services/callkeep/callkeep-ios.service.ts b/src/modules/calls/services/callkeep/callkeep-ios.service.ts
new file mode 100644
index 0000000..701477d
--- /dev/null
+++ b/src/modules/calls/services/callkeep/callkeep-ios.service.ts
@@ -0,0 +1,3 @@
+import { CallKeepRootService } from './callkeep-root.service'
+
+export class CallkeepIosService extends CallKeepRootService {}
diff --git a/src/modules/calls/services/callkeep/callkeep-root.service.ts b/src/modules/calls/services/callkeep/callkeep-root.service.ts
new file mode 100644
index 0000000..54ba796
--- /dev/null
+++ b/src/modules/calls/services/callkeep/callkeep-root.service.ts
@@ -0,0 +1,149 @@
+import { getCallReq, getIncomeDataReq } from '@/api/calls/requests'
+import RNCallKeep from 'react-native-callkeep'
+import { CallStatus, appEvents } from '@/shared'
+import { DeviceInfoService } from '@/services/system'
+import { CallRoot } from '../call-root.service'
+import { useLocalStream } from '../../hooks'
+
+export class CallKeepRootService extends CallRoot {
+ protected accountInited = false
+ protected waitingToAnswerData?: any
+
+ public register() {
+ this.init()
+ this.initListeners()
+ }
+
+ public unregister() {
+ this.removeListeners()
+ }
+
+ protected async init() {
+ RNCallKeep.setup({
+ ios: {
+ appName: 'TaskMe',
+ includesCallsInRecents: false,
+ maximumCallGroups: '1',
+ supportsVideo: false,
+ },
+ android: {
+ alertTitle: 'Permissions required',
+ alertDescription:
+ 'This application needs to access your phone accounts',
+ cancelButton: 'Cancel',
+ okButton: 'ok',
+ imageName: 'phone_account_icon',
+ additionalPermissions: [],
+ foregroundService: {
+ channelId: 'com.company.my',
+ channelName: 'Foreground service for my app',
+ notificationTitle: 'My app is running on background',
+ notificationIcon:
+ 'Path to the resource icon of the notification',
+ },
+ },
+ })
+
+ RNCallKeep.endAllCalls()
+ }
+
+ protected async initListeners() {
+ RNCallKeep.addEventListener('answerCall', this.onAnswer.bind(this))
+ RNCallKeep.addEventListener('endCall', this.onEnd.bind(this))
+ RNCallKeep.addEventListener(
+ 'didPerformSetMutedCallAction',
+ this.changeMuted.bind(this),
+ )
+ RNCallKeep.addEventListener(
+ 'didDisplayIncomingCall',
+ this.onDisplayIncomingCal.bind(this),
+ )
+
+ appEvents.on('onAccountWasLoaded', () => {
+ this.accountInited = true
+ })
+
+ appEvents.on(
+ 'callSettingUpdated',
+ this.onCallSettingsUpdateByApp.bind(this),
+ )
+ }
+ protected removeListeners() {
+ RNCallKeep.removeEventListener('answerCall')
+ RNCallKeep.removeEventListener('endCall')
+ RNCallKeep.removeEventListener('didPerformSetMutedCallAction')
+ }
+
+ protected async onDisplayIncomingCal(data) {
+ const { data: call } = await getCallReq(data.callUUID)
+
+ if (call.status !== CallStatus.New) {
+ RNCallKeep.endCall(data.callUUID)
+ }
+ }
+
+ protected async onAnswer(data: any) {
+ const { data: call } = await getCallReq(data.callUUID)
+ if (call.status !== CallStatus.New) {
+ appEvents.emit('openInfoModal', {
+ title: 'Звінок вже завершився',
+ message:
+ 'Ініціатор скасував виклик або виклик був прийнятий на іншому девайсі',
+ })
+
+ RNCallKeep.endAllCalls()
+
+ return
+ }
+
+ if (!this.accountInited) {
+ this.waitingToAnswerData = data
+ } else {
+ await this.startAnswering(data)
+ }
+ }
+
+ public async startAnswering(data?: any) {
+ const payload = data ? data : this.waitingToAnswerData
+ appEvents.emit('closeConfirmModal', {})
+
+ const id = await DeviceInfoService.getDeviceUniqueId()
+ await getIncomeDataReq(payload.callUUID, id)
+ }
+
+ protected async onEnd() {
+ console.log('onend')
+ }
+
+ protected async changeMuted({ muted }) {
+ console.log('changemuted', muted)
+
+ // useLocalStream().toogleMic()
+ }
+
+ protected async onCallSettingsUpdateByApp() {
+ console.log('UPDATED')
+
+ const from = this.storeFrom.title
+ const callId = this.store.callId
+
+ RNCallKeep.updateDisplay(callId, from, 'generic', {
+ hasVideo: this.streamsStore.isCameraOn,
+ })
+
+ RNCallKeep.setMutedCall(callId, this.streamsStore.isMicOn)
+ }
+
+ public async stop() {
+ RNCallKeep.endCall(this.store.callId)
+ RNCallKeep.endAllCalls()
+ }
+
+ public async handleAcceptedIncomeInOtherDevice(uuid: string) {
+ RNCallKeep.rejectCall(uuid)
+ RNCallKeep.endAllCalls()
+ }
+}
+function delay(ms: number) {
+ return new Promise(resolve => setTimeout(resolve, ms))
+}
diff --git a/src/modules/calls/services/callkeep/callkeep.ts b/src/modules/calls/services/callkeep/callkeep.ts
new file mode 100644
index 0000000..5150b12
--- /dev/null
+++ b/src/modules/calls/services/callkeep/callkeep.ts
@@ -0,0 +1,9 @@
+import { Platform } from 'react-native'
+import { CallkeepIosService } from './callkeep-ios.service'
+import { CallkeepAndroidService } from './callkeep-android.service'
+import { CallKeepRootService } from './callkeep-root.service'
+
+export const callKeepService = Platform.select({
+ ios: new CallkeepIosService(),
+ android: new CallkeepAndroidService(),
+})
diff --git a/src/modules/calls/services/callkeep/index.ts b/src/modules/calls/services/callkeep/index.ts
new file mode 100644
index 0000000..ca40ed1
--- /dev/null
+++ b/src/modules/calls/services/callkeep/index.ts
@@ -0,0 +1 @@
+export * from './callkeep'
diff --git a/src/modules/calls/services/calls-events.service.ts b/src/modules/calls/services/calls-events.service.ts
index fabe46d..3e8011f 100644
--- a/src/modules/calls/services/calls-events.service.ts
+++ b/src/modules/calls/services/calls-events.service.ts
@@ -3,9 +3,10 @@ import { CallRoot } from './call-root.service'
import { CallMod } from '../hooks'
import { callService } from './call.service'
import { DeviceInfoService, NavigationService } from '@/services/system'
-import { Alert } from 'react-native'
import { RTCIceCandidate, RTCSessionDescription } from 'react-native-webrtc'
-import { callKeepService } from './callkeep.service'
+import { callKeepService } from './callkeep'
+import { peerConnectionService } from './peer-connection.service'
+import RNCallKeep from 'react-native-callkeep'
class CallsEventsService extends CallRoot {
constructor() {
@@ -15,9 +16,12 @@ class CallsEventsService extends CallRoot {
private init() {
socketEvents.on('call/answered', data => {
+ console.log('[answered]')
this.store.peerConnection.setRemoteDescription(
new RTCSessionDescription(data.rtcMessage),
)
+
+ peerConnectionService.sendIcecandidates()
this.store.changeMod(CallMod.Speaking)
this.proccessIceCandidates()
})
@@ -26,6 +30,17 @@ class CallsEventsService extends CallRoot {
'call/ICEcandidate',
this.proccessIceCandidateEvent.bind(this),
)
+ socketEvents.on('call/negotiation', async data => {
+ this.store.peerConnection.setRemoteDescription(data.rtcMessage)
+ })
+
+ socketEvents.on('calls/answered-by-another-device', async data => {
+ console.log('calls/answered-by-another-device', data)
+ const deviceId = await DeviceInfoService.getDeviceUniqueId()
+ if (deviceId !== data.deviceUuid) {
+ RNCallKeep.endAllCalls()
+ }
+ })
}
private proccessIceCandidates() {
@@ -40,7 +55,6 @@ class CallsEventsService extends CallRoot {
}
private async proccessNewCall(data) {
- console.log('procces new call', data)
const id = await DeviceInfoService.getDeviceUniqueId()
if (data.targetUserDeviceId !== id) {
callKeepService.handleAcceptedIncomeInOtherDevice(data.callId)
diff --git a/src/modules/calls/services/index.ts b/src/modules/calls/services/index.ts
index 565a611..6c2a0c1 100644
--- a/src/modules/calls/services/index.ts
+++ b/src/modules/calls/services/index.ts
@@ -1,6 +1,6 @@
export * from './call-root.service'
export * from './call-utility.service'
export * from './call.service'
-export * from './callkeep.service'
+export * from './callkeep'
export * from './calls-events.service'
export * from './peer-connection.service'
diff --git a/src/modules/calls/services/peer-connection.service.ts b/src/modules/calls/services/peer-connection.service.ts
index c5e4ca5..6e73146 100644
--- a/src/modules/calls/services/peer-connection.service.ts
+++ b/src/modules/calls/services/peer-connection.service.ts
@@ -1,7 +1,7 @@
import { MediaStream, RTCPeerConnection } from 'react-native-webrtc'
import { iceServers } from '../configs'
import { CallRoot } from './call-root.service'
-import { iceCandidateReq } from '@/api/calls/requests'
+import { iceCandidateReq, sendNegotiationReq } from '@/api/calls/requests'
import {
CallMod,
callsStreamsCtr,
@@ -14,10 +14,14 @@ import { Alert } from 'react-native'
import { appEvents } from '@/shared'
class PeerConnectionService extends CallRoot {
+ private icecandidates: any[]
+
private dataChannel: RTCDataChannel
private remoteDataChannel: RTCDataChannel
public async createIns() {
+ this.icecandidates = []
+
const peerConnection = new RTCPeerConnection({
iceServers: iceServers,
})
@@ -45,18 +49,25 @@ class PeerConnectionService extends CallRoot {
peerConnection.addEventListener('icecandidate', event => {
if (event.candidate === null) {
+ if (this.store.isIncomeCall) {
+ this.sendIcecandidates()
+ }
return
}
- iceCandidateReq({
- targetUserId: this.store.targetUserId,
- candidates: [event.candidate],
- })
+ // iceCandidateReq({
+ // targetUserId: this.store.targetUserId,
+ // candidates: [event.candidate],
+ // })
+
+ this.icecandidates.push(event.candidate)
})
peerConnection.addEventListener('iceconnectionstatechange', event => {
this.store.setConnectedStatus(peerConnection.iceConnectionState)
+ console.log('ICESTATUS', peerConnection.iceConnectionState)
+
if (
['completed', 'connected'].includes(
peerConnection.iceConnectionState,
@@ -76,6 +87,33 @@ class PeerConnectionService extends CallRoot {
new StopCall(useCallDataStore.getState, callsStreamsCtr).stop()
}
})
+
+ peerConnection.addEventListener('negotiationneeded', async () => {
+ try {
+ console.log('Negotiation needed', peerConnection.signalingState)
+ if (peerConnection.signalingState === 'stable') {
+ const offer = await peerConnection.createOffer({})
+ await peerConnection.setLocalDescription(offer)
+
+ console.log('offer')
+ sendNegotiationReq(this.store.callId, {
+ type: 'offer',
+ description: offer,
+ })
+ } else {
+ const answer = await peerConnection.createAnswer()
+ await peerConnection.setLocalDescription(answer)
+ console.log('answer')
+
+ sendNegotiationReq(this.store.callId, {
+ type: 'answer',
+ description: answer,
+ })
+ }
+ } catch (error) {
+ console.error('Error creating offer/answer:', error)
+ }
+ })
}
private createDataChannel(peerConnection: RTCPeerConnection) {
@@ -114,6 +152,15 @@ class PeerConnectionService extends CallRoot {
}
}
}
+
+ public async sendIcecandidates() {
+ console.log('sendice')
+ await iceCandidateReq({
+ targetUserId: this.store.targetUserId,
+ candidates: [...this.icecandidates],
+ })
+ this.icecandidates = []
+ }
}
export const peerConnectionService = new PeerConnectionService()
diff --git a/src/modules/root/index.tsx b/src/modules/root/index.tsx
index 8d57bed..530f974 100644
--- a/src/modules/root/index.tsx
+++ b/src/modules/root/index.tsx
@@ -50,9 +50,6 @@ export const Navigation: FC = () => {
const { isConnected, status } = useNetConnect()
- // const isConnected = true
- // const status = 'online'
-
useSharedFiles()
useAppSocketListener()
useAppBadge()
@@ -71,7 +68,6 @@ export const Navigation: FC = () => {
if (!isAppReady && !_.isNull(isConnected)) {
handleAutoAuth()
}
- // if (isConnected && !isAppReady) handleAutoAuth()
}, [isConnected])
const modules = {
diff --git a/src/modules/root/navigation-groups/users.group.tsx b/src/modules/root/navigation-groups/users.group.tsx
index a8539c4..198db24 100644
--- a/src/modules/root/navigation-groups/users.group.tsx
+++ b/src/modules/root/navigation-groups/users.group.tsx
@@ -1,4 +1,4 @@
-import React, { FC } from 'react'
+import React, { FC, useEffect } from 'react'
import { RouteKey } from '@/shared'
import { SelectChatBgScreen } from '@/modules/settings'
import { createNativeStackNavigator } from '@react-navigation/native-stack'
@@ -28,118 +28,130 @@ import {
SendSharedFilesScreen,
} from '@/modules/chats'
import { CallScreen } from '@/modules/calls/screens/call'
+import { callKeepService } from '@/modules/calls/services'
+import { Platform } from 'react-native'
const Stack = createNativeStackNavigator()
-export const UsersGroup: FC = () => (
-
- {/* --- Tab Navigation --- */}
-
+export const UsersGroup: FC = () => {
+ useEffect(() => {
+ if (Platform.OS === 'android') {
+ callKeepService.startAnswering()
+ }
+ }, [])
+ return (
+
+ {/* --- Tab Navigation --- */}
+
- {/* --- Contacts --- */}
-
+ {/* --- Contacts --- */}
+
- {/* --- Settings --- */}
-
-
+ {/* --- Settings --- */}
+
+
- {/* --- Chats --- */}
-
-
-
-
-
-
-
+ {/* --- Chats --- */}
+
+
+
+
+
+
+
- {/* --- Tasks --- */}
-
-
-
-
-
+ {/* --- Tasks --- */}
+
+
+
+
+
-
+
-
+
- {/* --- Comments --- */}
-
+ {/* --- Comments --- */}
+
-
+
- {/* --- Users --- */}
-
+ {/* --- Users --- */}
+
- {/* --- Group --- */}
-
+ {/* --- Group --- */}
+
- {/* --- Executors --- */}
-
+ {/* --- Executors --- */}
+
-
-
-)
+
+
+ )
+}
diff --git a/src/services/domain/account.service.ts b/src/services/domain/account.service.ts
index e64e3cf..587adff 100644
--- a/src/services/domain/account.service.ts
+++ b/src/services/domain/account.service.ts
@@ -3,6 +3,7 @@ import { SetLoadingAccount, SaveAccount } from '@/store/account'
import { IUser } from '@/shared/interfaces'
import { Service } from '@/shared/abstract'
import { accountManagerInstance } from '@/managers'
+import { appEvents } from '@/shared'
class AccountService extends Service {
protected prefix = 'account'
@@ -14,6 +15,8 @@ class AccountService extends Service {
try {
const account = await this.accountManager.loadAccount()
simpleDispatch(new SaveAccount({ account }))
+
+ appEvents.emit('onAccountWasLoaded', {})
} catch (e) {
} finally {
simpleDispatch(new SetLoadingAccount({ isLoading: false }))
diff --git a/src/services/domain/auth.service.ts b/src/services/domain/auth.service.ts
index a08a9a3..6f79488 100644
--- a/src/services/domain/auth.service.ts
+++ b/src/services/domain/auth.service.ts
@@ -32,6 +32,8 @@ import { appEvents } from '@/shared'
import { accountManagerInstance as accManager } from '@/managers'
import { getErrorCode } from '@/shared/helpers'
import { configsService } from './configs.service'
+import { Platform } from 'react-native'
+import { FirebaseMessagingService } from '../system/firebas-messaging.service'
let phoneNumber: string
@@ -93,7 +95,14 @@ const loadDataAfterAuth = async (
) => {
await accountService.loadAccount(cacheInfo.accountV)
await permissionsService.loadPermissionsForUsers(cacheInfo.permissionsV)
- VoipNotificationsService.getInstance().saveUser()
+
+ if (Platform.OS === 'android') {
+ FirebaseMessagingService.getInstance().init()
+ }
+ if (Platform.OS === 'ios') {
+ VoipNotificationsService.getInstance().saveUser()
+ }
+
setAppIsReady()
}
diff --git a/src/services/system/firebas-messaging.service.ts b/src/services/system/firebas-messaging.service.ts
new file mode 100644
index 0000000..ad0a89c
--- /dev/null
+++ b/src/services/system/firebas-messaging.service.ts
@@ -0,0 +1,43 @@
+import messaging from '@react-native-firebase/messaging'
+import { DeviceInfoService } from './device-info.service'
+import { saveUserDeviceReq } from '@/api'
+
+export class FirebaseMessagingService {
+ static instance: FirebaseMessagingService
+
+ static getInstance() {
+ if (!this.instance) {
+ this.instance = new FirebaseMessagingService()
+ }
+
+ return this.instance
+ }
+
+ public async init() {
+ const token = await this.getDeviceToken()
+
+ if (token) {
+ await this.saveToken(token)
+ }
+ }
+
+ private async getDeviceToken() {
+ try {
+ const token = await messaging().getToken()
+ return token
+ } catch (error) {
+ console.error('Error getting device token:', error)
+ }
+ }
+
+ private async saveToken(token: string) {
+ const deviceUuid = await DeviceInfoService.getDeviceUniqueId()
+
+ saveUserDeviceReq({
+ deviceUuid,
+ notificationUserId: token,
+ type: 'f',
+ isDev: __DEV__,
+ })
+ }
+}
diff --git a/src/services/system/notification.service.ts b/src/services/system/notification.service.ts
index 606557a..7c5d1ac 100644
--- a/src/services/system/notification.service.ts
+++ b/src/services/system/notification.service.ts
@@ -11,6 +11,8 @@ import { navigate } from './navigation.service'
import store from '@/store'
import { selectAccount } from '@/store/account'
import { SocketIo } from './real-time.service'
+import RNCallKeep from 'react-native-callkeep'
+import { getBundleId } from 'react-native-device-info'
export const needRedirect = {
to: null,
@@ -172,6 +174,8 @@ export const initAndSaveDevice = async () => {
const pushNotificationsDevice: any = await init()
const deviceUuid = await DeviceInfoService.getDeviceUniqueId()
+ const bundleId = await getBundleId()
+ console.log(bundleId)
if (pushNotificationsDevice) {
await saveUserDeviceReq({
diff --git a/src/services/system/real-time.service.ts b/src/services/system/real-time.service.ts
index 56903e0..5c12914 100644
--- a/src/services/system/real-time.service.ts
+++ b/src/services/system/real-time.service.ts
@@ -4,6 +4,7 @@ import io from 'socket.io-client'
import { authService } from '../domain'
import { GlobalContainerService } from './global-container.service'
import { Alert } from 'react-native'
+import RNCallKeep from 'react-native-callkeep'
const store = () => GlobalContainerService.get('store')
@@ -123,15 +124,12 @@ export class SocketIo {
this._onSocketSendEvent('call/new')
this._onSocketSendEvent('call/ICEcandidate')
this._onSocketSendEvent('call/canceled')
+ this._onSocketSendEvent('calls/answered-by-another-device')
this._on('error/join-user', async () => {
await authService.refreshSession()
this.emit('join-user')
})
-
- // this._on('reconnect_attempt', error => {
- // console.log('SOCKET reconnect_attempt', error)
- // })
}
static instance: SocketIo = null
diff --git a/src/services/system/voip-notification.service.ts b/src/services/system/voip-notification.service.ts
index 684ab2c..fd45f94 100644
--- a/src/services/system/voip-notification.service.ts
+++ b/src/services/system/voip-notification.service.ts
@@ -1,6 +1,7 @@
import { saveUserDeviceReq } from '@/api'
import VoipPushNotification from 'react-native-voip-push-notification'
import { DeviceInfoService } from './device-info.service'
+
export class VoipNotificationsService {
static instance: VoipNotificationsService
@@ -20,6 +21,9 @@ export class VoipNotificationsService {
'register',
this.handleRegister.bind(this),
)
+ // VoipPushNotification.addEventListener('notification', data => {
+ // console.log('data')
+ // })
VoipPushNotification.registerVoipToken()
} catch (e) {
@@ -47,7 +51,7 @@ export class VoipNotificationsService {
saveUserDeviceReq({
deviceUuid,
notificationUserId: this.voipToken,
- isVoip: true,
+ type: 'v',
isDev: __DEV__,
})
}, 150)
diff --git a/src/shared/events/index.ts b/src/shared/events/index.ts
index bf640b4..d0cbf03 100644
--- a/src/shared/events/index.ts
+++ b/src/shared/events/index.ts
@@ -157,6 +157,8 @@ export type AppEvents = {
'call-channel/changeVideo': {
value: boolean
}
+ onAccountWasLoaded: {}
+ callSettingUpdated: {}
}
export type SocketEvents = {
@@ -244,6 +246,14 @@ export type SocketEvents = {
'call/canceled': {
callId: number
}
+ 'call/negotiation': {
+ callId: string
+ type: 'answer' | 'offer'
+ rtcMessage: any
+ }
+ 'calls/answered-by-another-device': {
+ deviceUuid: string
+ }
}
export const appEvents = new Events()