@kaleyra/video-react-native-module 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -105,18 +105,43 @@ Example:
105
105
  kaleyraVideo.events.onCallModuleStatusChanged = (status: String) => {};
106
106
  ```
107
107
 
108
- ## Listening for VoIP push token
108
+ ## iOS - VoIP Notifications
109
109
 
110
+ ### Setup required for VoIP notifications
111
+
112
+ If you desire to use VoIP notifications on iOS platform as first thing you should configure kaleyraVideo passing a config object as follow:
113
+
114
+ ```javascript
115
+ var kaleyraVideo = KaleyraVideo.configure({
116
+ [...]
117
+ iosConfig: {
118
+ voipHandlingStrategy: VoipHandlingStrategy.AUTOMATIC,
119
+ [...]
120
+ }
121
+ });
122
+ ```
123
+
124
+ The iOS project requires a little setup for use VoIP notifications. [Here][iOSProjectSetup] you can find a description of how the project should be configured.
125
+
126
+ ### Listening for VoIP push token
110
127
  In order to get your device push token, you must listen for the **KaleyraVideo.events.iOSVoipPushTokenUpdated** event registering a callback as follows:
111
128
 
112
129
  ```javascript
130
+ // The token is received in this listener only after calling kaleyraVideo.connect(_)
113
131
  kaleyraVideo.events.oniOSVoipPushTokenUpdated = (token: string) => {
114
132
  // register the VoIP push token on your server
115
133
  });
116
134
  ```
117
- The token provided in the callback is the **string** representation of your device token.
135
+ **Warning:** Make sure this listener is attached before calling kaleyraVideo.connect(_), otherwise the event reporting the device token could be missed.
136
+
137
+ The token provided in the callback is the **string** representation of your device token.
118
138
  Here's an example of a device token: **dec105f879924349fd2fa9aa8bb8b70431d5f41d57bfa8e31a5d80a629774fd9**
119
139
 
140
+ ### VoIP notification payload
141
+
142
+ [Here][iOSVoIPPayload] you can find an example of how your VoIP notifications payload should be structured.
143
+
144
+
120
145
  ## Module connect
121
146
 
122
147
  To connect the plugin to the Kaleyra Video system you will need to provide a Session object.
@@ -280,6 +305,18 @@ Example of acceptable payload
280
305
  }
281
306
  ```
282
307
 
308
+ ## Proguard
309
+ ```groovy
310
+ # Bandyer now Kaleyra proprietary SDK
311
+ -keep class com.bandyer.** { *; }
312
+ -keep interface com.bandyer.** { *; }
313
+ -keep enum com.bandyer.** { *; }
314
+
315
+ -keep class com.kaleyra.** { *; }
316
+ -keep interface com.kaleyra.** { *; }
317
+ -keep enum com.kaleyra.** { *; }
318
+ ```
319
+
283
320
  ## TSDoc
284
321
 
285
322
  The API documentation is available on the github pages link:
@@ -288,5 +325,7 @@ The API documentation is available on the github pages link:
288
325
  [LinkNpm]: https://www.npmjs.com/package/@kaleyra/video-react-native-module
289
326
  [BroadcastAchor]: #ios-broadcast-screen-sharing
290
327
  [BroadcastSceenSharing]: https://github.com/Bandyer/Bandyer-iOS-SDK/wiki/Screen-sharing#broadcast-screen-sharing
328
+ [iOSProjectSetup]: https://github.com/Bandyer/Bandyer-iOS-SDK/wiki/VOIP-notifications#project-setup
329
+ [iOSVoIPPayload]: https://github.com/Bandyer/Bandyer-iOS-SDK/wiki/VOIP-notifications#notification-payload-key-path
291
330
  [EventsDoc]: https://kaleyravideo.github.io/VideoReactNativeModule/interfaces/src_events_Events.Events.html
292
331
  [TSDoc]: https://kaleyravideo.github.io/VideoReactNativeModule/
@@ -1 +1 @@
1
- React/1.0.0
1
+ React/1.1.0
@@ -7,7 +7,7 @@ import Foundation
7
7
  class _KaleyraVideoHybridVersionInfo: NSObject {
8
8
 
9
9
  @objc
10
- static let krvVersion: String = "1.0.0"
10
+ static let krvVersion: String = "1.1.0"
11
11
 
12
12
  @objc
13
13
  static let krvPlatform: String = "react"
@@ -28,22 +28,13 @@ apply plugin: 'kotlin-android'
28
28
  apply plugin: 'kotlin-kapt'
29
29
 
30
30
  android {
31
- compileSdkVersion 31
31
+ compileSdkVersion project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 33
32
32
 
33
33
  defaultConfig {
34
- minSdkVersion 21
34
+ minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 22
35
35
  testInstrumentationRunner "com.kaleyra.video_hybrid_native_bridge.utils.RandomRunner"
36
36
  }
37
37
 
38
- compileOptions {
39
- sourceCompatibility JavaVersion.VERSION_1_8
40
- targetCompatibility JavaVersion.VERSION_1_8
41
- }
42
-
43
- kotlinOptions {
44
- jvmTarget = '1.8'
45
- }
46
-
47
38
  sourceSets {
48
39
  main.java.srcDirs += 'src/main/kotlin'
49
40
  }
@@ -56,12 +47,12 @@ android {
56
47
 
57
48
  dependencies {
58
49
  implementation 'com.google.code.gson:gson:2.9.1'
59
- implementation "com.kaleyra:collaboration-suite-utils:3.0.3"
60
- implementation "com.bandyer:bandyer-android-sdk:3.6.1"
50
+ implementation "com.kaleyra:collaboration-suite-utils:3.0.6"
51
+ implementation "com.bandyer:bandyer-android-sdk:3.7.2"
61
52
  implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
62
53
  compileOnly "org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.1"
63
- implementation "androidx.room:room-runtime:2.4.2"
64
- kapt "androidx.room:room-compiler:2.4.2"
54
+ implementation "androidx.room:room-runtime:2.4.0-beta02"
55
+ kapt "androidx.room:room-compiler:2.4.0-beta02"
65
56
 
66
57
  /*** Testing ***/
67
58
  testImplementation 'junit:junit:4.13.2'
@@ -11,9 +11,6 @@ import android.content.Intent
11
11
  import android.content.pm.PackageManager
12
12
  import android.os.Bundle
13
13
  import android.util.Log
14
- //import com.bandyer.flutter_plugin.exceptions.PluginNotificationKeyNotFound
15
- //import com.bandyer.flutter_plugin.exceptions.NotificationPayloadDataPathNotDefined
16
- //import com.bandyer.flutter_plugin.extensions.asJSONObject
17
14
  import org.json.JSONObject
18
15
 
19
16
  /**
@@ -36,20 +33,20 @@ class KaleyraVideoNotificationReceiver : BroadcastReceiver() {
36
33
  return
37
34
  }
38
35
 
39
- // check if a bandyer notification service was defined in the manifest
40
- val serviceIntent = Intent().setAction("com.bandyer.NotificationEvent").setPackage(context.packageName)
36
+ // check if a kaleyra video notification service was defined in the manifest
37
+ val serviceIntent = Intent().setAction("com.kaleyra.VideoNotificationEvent").setPackage(context.packageName)
41
38
  val resolveInfo = context.packageManager.queryIntentServices(serviceIntent, PackageManager.GET_RESOLVED_FILTER)
42
39
  if (resolveInfo.size < 1) return
43
40
 
44
- val bandyerPayloadPath: String
41
+ val kaleyraVideoPayloadPath: String
45
42
  try {
46
- bandyerPayloadPath = resolveInfo[0].filter.getDataPath(0).path
43
+ kaleyraVideoPayloadPath = resolveInfo[0].filter.getDataPath(0).path
47
44
  } catch (e: Throwable) {
48
- throw Throwable("You have not defined data path in your intent-filter!! Bandyer requires it to know where to find the payload!")
45
+ throw Throwable("You have not defined data path in your intent-filter!! Kaleyra video requires it to know where to find the payload!")
49
46
  }
50
47
 
51
- val payload = getBandyerPayload(intent, bandyerPayloadPath)
52
- // if bandyer can handle payload proceed
48
+ val payload = getNotificationPayload(intent, kaleyraVideoPayloadPath)
49
+ // if kaleyra video can handle payload proceed
53
50
  if (payload == null) {
54
51
  resultCode = Activity.RESULT_OK
55
52
  return
@@ -66,32 +63,32 @@ class KaleyraVideoNotificationReceiver : BroadcastReceiver() {
66
63
  resultCode = Activity.RESULT_OK
67
64
  }
68
65
 
69
- private fun getBandyerPayload(intent: Intent, bandyerPayloadPath: String): String? {
66
+ private fun getNotificationPayload(intent: Intent, notificationPayloadPath: String): String? {
70
67
  try {
71
- val keyPath = bandyerPayloadPath.split("\\.".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
68
+ val keyPath = notificationPayloadPath.split("\\.".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
72
69
  val payload = intent.extras!!.asJSONObject()
73
- if (!payload.toString().isBandyerNotification()) return null
70
+ if (!payload.toString().isKaleyraNotification()) return null
74
71
  if (!payload.has(keyPath[0]))
75
72
  throw PluginNotificationKeyNotFound("\nRequired jsonObject:" + keyPath[0] + " is not contained in " + payload.keys().asString())
76
- var bandyerData = payload.getString(keyPath[0])
73
+ var kaleyraPayloadData = payload.getString(keyPath[0])
77
74
  for (i in 1 until keyPath.size) {
78
- val data = JSONObject(bandyerData)
75
+ val data = JSONObject(kaleyraPayloadData)
79
76
  if (!data.has(keyPath[i]))
80
77
  throw PluginNotificationKeyNotFound("\nRequired jsonObject:" + keyPath[i] + " is not contained in " + payload.keys().asString())
81
- bandyerData = JSONObject(bandyerData).getString(keyPath[i])
78
+ kaleyraPayloadData = JSONObject(kaleyraPayloadData).getString(keyPath[i])
82
79
  }
83
- return bandyerData
80
+ return kaleyraPayloadData
84
81
  } catch (e: Throwable) {
85
82
  if (e is PluginNotificationKeyNotFound) {
86
83
  Log.w(
87
- "BandyerNotReceiver", "Failed to handle notification!!!" + e.message +
88
- "\nThis notification will not be handled by Bandyer!" +
89
- "\nBandyer payload not found in the following path: " + bandyerPayloadPath
84
+ "KaleyraNotReceiver", "Failed to handle notification!!!" + e.message +
85
+ "\nThis notification will not be handled by Kaleyra!" +
86
+ "\nKaleyra payload not found in the following path: " + notificationPayloadPath
90
87
  )
91
88
  } else
92
89
  Log.w(
93
- "BandyerNotReceiver", "Failed to handle notification!!!" +
94
- "\nThis notification will not be handled by Bandyer!" +
90
+ "KaleyraNotReceiver", "Failed to handle notification!!!" +
91
+ "\nThis notification will not be handled by Kaleyra!" +
95
92
  e.localizedMessage!!
96
93
  )
97
94
  }
@@ -109,7 +106,7 @@ class KaleyraVideoNotificationReceiver : BroadcastReceiver() {
109
106
  return value.toString()
110
107
  }
111
108
 
112
- private fun String.isBandyerNotification(): Boolean = contains("on_call_incoming") || contains("on_message_sent");
109
+ private fun String.isKaleyraNotification(): Boolean = contains("on_call_incoming") || contains("on_message_sent");
113
110
 
114
111
  private fun isGcmMessage(intent: Intent): Boolean {
115
112
  if (GCM_RECEIVE_ACTION == intent.action) {
@@ -42,13 +42,13 @@ class KaleyraVideoNotificationService : JobIntentService() {
42
42
  val extras = intent.extras ?: return
43
43
  val payload = extras.getString("payload") ?: return
44
44
  try {
45
- val bandyerPayload = JSONObject(payload).get("payload").toString()
46
- val bandyerToken = JSONObject(payload).getString("user_token")
45
+ val webHookPayload = JSONObject(payload).get("payload").toString()
46
+ val userToken = JSONObject(payload).getString("user_token")
47
47
 
48
48
  val scope = CoroutineScope(Executors.newSingleThreadExecutor().asCoroutineDispatcher())
49
49
  val plugin = VideoSDKHybridBridge(
50
50
  contextContainer = ServiceContextContainer(),
51
- tokenProvider = SingleTokenProvider(bandyerToken),
51
+ tokenProvider = SingleTokenProvider(userToken),
52
52
  backgroundScope = scope,
53
53
  eventsReporter = NoOpEventsReporter(),
54
54
  eventsEmitter = NoOpEventsEmitter(),
@@ -59,10 +59,10 @@ class KaleyraVideoNotificationService : JobIntentService() {
59
59
  plugin.addUsersDetails(plugin.cachedUserDetails.toTypedArray())
60
60
  plugin.configureBridge(savedConfiguration)
61
61
  plugin.connect(savedUsed)
62
- plugin.handlePushNotificationPayload(bandyerPayload)
62
+ plugin.handlePushNotificationPayload(webHookPayload)
63
63
  }
64
64
  } catch (exception: Throwable) {
65
- Log.e("BandyerNotService", "" + exception.message)
65
+ Log.e("KaleyraNotService", "" + exception.message)
66
66
  }
67
67
  }
68
68
 
@@ -7,8 +7,8 @@
7
7
  objects = {
8
8
 
9
9
  /* Begin PBXBuildFile section */
10
- 2B02758D547CD158CD0323B4 /* Pods_KaleyraVideoHybridNativeBridge.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF8359579961024B3EFBCA2D /* Pods_KaleyraVideoHybridNativeBridge.framework */; };
11
- 6CAC870A6BDFEA0054DF5578 /* Pods_KaleyraVideoHybridNativeBridge_KaleyraVideoHybridNativeBridgeTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E96C905FFBA0F1343AD217EF /* Pods_KaleyraVideoHybridNativeBridge_KaleyraVideoHybridNativeBridgeTests.framework */; };
10
+ 76F386C72A8629D7FEEA9772 /* Pods_KaleyraVideoHybridNativeBridge.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C77C58764B5DB5F383BE462 /* Pods_KaleyraVideoHybridNativeBridge.framework */; };
11
+ 9F6CF28AAAF0D5AA9DD43E82 /* Pods_KaleyraVideoHybridNativeBridge_KaleyraVideoHybridNativeBridgeTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C1BE0F8F5443147BF27F063 /* Pods_KaleyraVideoHybridNativeBridge_KaleyraVideoHybridNativeBridgeTests.framework */; };
12
12
  F931C8AF29DECE2400194E1D /* URL+FromString.swift in Sources */ = {isa = PBXBuildFile; fileRef = F931C8AE29DECE2400194E1D /* URL+FromString.swift */; };
13
13
  F931C8B229DECF7600194E1D /* URL+FromStringTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F931C8B129DECF7600194E1D /* URL+FromStringTests.swift */; };
14
14
  F931C8B429DEF24600194E1D /* KaleyraVideoSDKUserInterfacePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F931C8B329DEF24600194E1D /* KaleyraVideoSDKUserInterfacePresenter.swift */; };
@@ -27,7 +27,7 @@
27
27
  F9875C7529A661FC00A91C93 /* KaleyraVideoHybridNativeBridge.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9875C6C29A661FC00A91C93 /* KaleyraVideoHybridNativeBridge.framework */; };
28
28
  F9875C7B29A661FC00A91C93 /* KaleyraVideoHybridNativeBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = F9875C6F29A661FC00A91C93 /* KaleyraVideoHybridNativeBridge.h */; settings = {ATTRIBUTES = (Public, ); }; };
29
29
  F9875CC129A663B300A91C93 /* MainQueueDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9875C8529A663B200A91C93 /* MainQueueDispatcher.swift */; };
30
- F9875CC229A663B300A91C93 /* Lock.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9875C8629A663B200A91C93 /* Lock.swift */; };
30
+ F9875CC229A663B300A91C93 /* Locking.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9875C8629A663B200A91C93 /* Locking.swift */; };
31
31
  F9875CC329A663B300A91C93 /* DispatchQueue+isMain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9875C8729A663B200A91C93 /* DispatchQueue+isMain.swift */; };
32
32
  F9875CC429A663B300A91C93 /* DTOs.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9875C8929A663B200A91C93 /* DTOs.swift */; };
33
33
  F9875CC529A663B300A91C93 /* CallType+Bandyer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9875C8A29A663B200A91C93 /* CallType+Bandyer.swift */; };
@@ -133,6 +133,8 @@
133
133
  F9B7E5A929E5912700AB9208 /* CreateCallOptions+Equatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9B7E5A829E5912700AB9208 /* CreateCallOptions+Equatable.swift */; };
134
134
  F9B7E5AB29E5913E00AB9208 /* CreateCallOptions+EquatableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9B7E5AA29E5913E00AB9208 /* CreateCallOptions+EquatableTests.swift */; };
135
135
  F9B7E5AE29E5A4BA00AB9208 /* CallWindowProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9B7E5AD29E5A4BA00AB9208 /* CallWindowProtocol.swift */; };
136
+ F9BEA4C02A7A9F940066988B /* AtomicTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9BEA4BF2A7A9F940066988B /* AtomicTests.swift */; };
137
+ F9BEA4C22A7A9FA60066988B /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9BEA4C12A7A9FA60066988B /* Atomic.swift */; };
136
138
  F9C6F96629DDBB610094DB30 /* CallDoubles.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C6F96529DDBB610094DB30 /* CallDoubles.swift */; };
137
139
  F9C6F96829DDBD980094DB30 /* CallRegistryDoubles.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C6F96729DDBD980094DB30 /* CallRegistryDoubles.swift */; };
138
140
  F9DEA4DA29E83C840011D222 /* MainQueueRelay.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9DEA4D929E83C840011D222 /* MainQueueRelay.swift */; };
@@ -163,12 +165,12 @@
163
165
  /* End PBXContainerItemProxy section */
164
166
 
165
167
  /* Begin PBXFileReference section */
166
- 0DBF27EF0DFAE2D959FEA905 /* Pods-KaleyraVideoHybridNativeBridge.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KaleyraVideoHybridNativeBridge.release.xcconfig"; path = "Target Support Files/Pods-KaleyraVideoHybridNativeBridge/Pods-KaleyraVideoHybridNativeBridge.release.xcconfig"; sourceTree = "<group>"; };
167
- A0F266EFACC797DFE10AE19D /* Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.debug.xcconfig"; path = "Target Support Files/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.debug.xcconfig"; sourceTree = "<group>"; };
168
- D402E93B64728382079177EC /* Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.release.xcconfig"; path = "Target Support Files/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.release.xcconfig"; sourceTree = "<group>"; };
169
- DB98873C21689B5D31B12E28 /* Pods-KaleyraVideoHybridNativeBridge.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KaleyraVideoHybridNativeBridge.debug.xcconfig"; path = "Target Support Files/Pods-KaleyraVideoHybridNativeBridge/Pods-KaleyraVideoHybridNativeBridge.debug.xcconfig"; sourceTree = "<group>"; };
170
- DF8359579961024B3EFBCA2D /* Pods_KaleyraVideoHybridNativeBridge.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_KaleyraVideoHybridNativeBridge.framework; sourceTree = BUILT_PRODUCTS_DIR; };
171
- E96C905FFBA0F1343AD217EF /* Pods_KaleyraVideoHybridNativeBridge_KaleyraVideoHybridNativeBridgeTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_KaleyraVideoHybridNativeBridge_KaleyraVideoHybridNativeBridgeTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
168
+ 2C1BE0F8F5443147BF27F063 /* Pods_KaleyraVideoHybridNativeBridge_KaleyraVideoHybridNativeBridgeTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_KaleyraVideoHybridNativeBridge_KaleyraVideoHybridNativeBridgeTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
169
+ 31B2D50C090D5E6076BD39E0 /* Pods-KaleyraVideoHybridNativeBridge.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KaleyraVideoHybridNativeBridge.release.xcconfig"; path = "Target Support Files/Pods-KaleyraVideoHybridNativeBridge/Pods-KaleyraVideoHybridNativeBridge.release.xcconfig"; sourceTree = "<group>"; };
170
+ 3C77C58764B5DB5F383BE462 /* Pods_KaleyraVideoHybridNativeBridge.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_KaleyraVideoHybridNativeBridge.framework; sourceTree = BUILT_PRODUCTS_DIR; };
171
+ 8AFE6A0D76614CF3A1055AFB /* Pods-KaleyraVideoHybridNativeBridge.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KaleyraVideoHybridNativeBridge.debug.xcconfig"; path = "Target Support Files/Pods-KaleyraVideoHybridNativeBridge/Pods-KaleyraVideoHybridNativeBridge.debug.xcconfig"; sourceTree = "<group>"; };
172
+ 9FDA74BAD258248FC14F9BB1 /* Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.debug.xcconfig"; path = "Target Support Files/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.debug.xcconfig"; sourceTree = "<group>"; };
173
+ B73D5754EF9B7B724563F429 /* Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.release.xcconfig"; path = "Target Support Files/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.release.xcconfig"; sourceTree = "<group>"; };
172
174
  F931C8AE29DECE2400194E1D /* URL+FromString.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URL+FromString.swift"; sourceTree = "<group>"; };
173
175
  F931C8B129DECF7600194E1D /* URL+FromStringTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URL+FromStringTests.swift"; sourceTree = "<group>"; };
174
176
  F931C8B329DEF24600194E1D /* KaleyraVideoSDKUserInterfacePresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KaleyraVideoSDKUserInterfacePresenter.swift; sourceTree = "<group>"; };
@@ -188,7 +190,7 @@
188
190
  F9875C6F29A661FC00A91C93 /* KaleyraVideoHybridNativeBridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KaleyraVideoHybridNativeBridge.h; sourceTree = "<group>"; };
189
191
  F9875C7429A661FC00A91C93 /* KaleyraVideoHybridNativeBridgeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KaleyraVideoHybridNativeBridgeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
190
192
  F9875C8529A663B200A91C93 /* MainQueueDispatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainQueueDispatcher.swift; sourceTree = "<group>"; };
191
- F9875C8629A663B200A91C93 /* Lock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Lock.swift; sourceTree = "<group>"; };
193
+ F9875C8629A663B200A91C93 /* Locking.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Locking.swift; sourceTree = "<group>"; };
192
194
  F9875C8729A663B200A91C93 /* DispatchQueue+isMain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DispatchQueue+isMain.swift"; sourceTree = "<group>"; };
193
195
  F9875C8929A663B200A91C93 /* DTOs.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DTOs.swift; sourceTree = "<group>"; };
194
196
  F9875C8A29A663B200A91C93 /* CallType+Bandyer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CallType+Bandyer.swift"; sourceTree = "<group>"; };
@@ -294,6 +296,8 @@
294
296
  F9B7E5A829E5912700AB9208 /* CreateCallOptions+Equatable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CreateCallOptions+Equatable.swift"; sourceTree = "<group>"; };
295
297
  F9B7E5AA29E5913E00AB9208 /* CreateCallOptions+EquatableTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CreateCallOptions+EquatableTests.swift"; sourceTree = "<group>"; };
296
298
  F9B7E5AD29E5A4BA00AB9208 /* CallWindowProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallWindowProtocol.swift; sourceTree = "<group>"; };
299
+ F9BEA4BF2A7A9F940066988B /* AtomicTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AtomicTests.swift; sourceTree = "<group>"; };
300
+ F9BEA4C12A7A9FA60066988B /* Atomic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Atomic.swift; sourceTree = "<group>"; };
297
301
  F9C6F96529DDBB610094DB30 /* CallDoubles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallDoubles.swift; sourceTree = "<group>"; };
298
302
  F9C6F96729DDBD980094DB30 /* CallRegistryDoubles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallRegistryDoubles.swift; sourceTree = "<group>"; };
299
303
  F9DEA4D929E83C840011D222 /* MainQueueRelay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainQueueRelay.swift; sourceTree = "<group>"; };
@@ -318,7 +322,7 @@
318
322
  isa = PBXFrameworksBuildPhase;
319
323
  buildActionMask = 2147483647;
320
324
  files = (
321
- 2B02758D547CD158CD0323B4 /* Pods_KaleyraVideoHybridNativeBridge.framework in Frameworks */,
325
+ 76F386C72A8629D7FEEA9772 /* Pods_KaleyraVideoHybridNativeBridge.framework in Frameworks */,
322
326
  );
323
327
  runOnlyForDeploymentPostprocessing = 0;
324
328
  };
@@ -327,7 +331,7 @@
327
331
  buildActionMask = 2147483647;
328
332
  files = (
329
333
  F9875C7529A661FC00A91C93 /* KaleyraVideoHybridNativeBridge.framework in Frameworks */,
330
- 6CAC870A6BDFEA0054DF5578 /* Pods_KaleyraVideoHybridNativeBridge_KaleyraVideoHybridNativeBridgeTests.framework in Frameworks */,
334
+ 9F6CF28AAAF0D5AA9DD43E82 /* Pods_KaleyraVideoHybridNativeBridge_KaleyraVideoHybridNativeBridgeTests.framework in Frameworks */,
331
335
  );
332
336
  runOnlyForDeploymentPostprocessing = 0;
333
337
  };
@@ -337,19 +341,19 @@
337
341
  A04417F243B917842D1D4244 /* Pods */ = {
338
342
  isa = PBXGroup;
339
343
  children = (
340
- DB98873C21689B5D31B12E28 /* Pods-KaleyraVideoHybridNativeBridge.debug.xcconfig */,
341
- 0DBF27EF0DFAE2D959FEA905 /* Pods-KaleyraVideoHybridNativeBridge.release.xcconfig */,
342
- A0F266EFACC797DFE10AE19D /* Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.debug.xcconfig */,
343
- D402E93B64728382079177EC /* Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.release.xcconfig */,
344
+ 8AFE6A0D76614CF3A1055AFB /* Pods-KaleyraVideoHybridNativeBridge.debug.xcconfig */,
345
+ 31B2D50C090D5E6076BD39E0 /* Pods-KaleyraVideoHybridNativeBridge.release.xcconfig */,
346
+ 9FDA74BAD258248FC14F9BB1 /* Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.debug.xcconfig */,
347
+ B73D5754EF9B7B724563F429 /* Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.release.xcconfig */,
344
348
  );
345
349
  path = Pods;
346
350
  sourceTree = "<group>";
347
351
  };
348
- E07C6F68F7D3EA2B93AA305D /* Frameworks */ = {
352
+ BFFEF6AB45F582862D1DA1C9 /* Frameworks */ = {
349
353
  isa = PBXGroup;
350
354
  children = (
351
- DF8359579961024B3EFBCA2D /* Pods_KaleyraVideoHybridNativeBridge.framework */,
352
- E96C905FFBA0F1343AD217EF /* Pods_KaleyraVideoHybridNativeBridge_KaleyraVideoHybridNativeBridgeTests.framework */,
355
+ 3C77C58764B5DB5F383BE462 /* Pods_KaleyraVideoHybridNativeBridge.framework */,
356
+ 2C1BE0F8F5443147BF27F063 /* Pods_KaleyraVideoHybridNativeBridge_KaleyraVideoHybridNativeBridgeTests.framework */,
353
357
  );
354
358
  name = Frameworks;
355
359
  sourceTree = "<group>";
@@ -394,7 +398,7 @@
394
398
  F9875C7829A661FC00A91C93 /* Tests */,
395
399
  F9875C6D29A661FC00A91C93 /* Products */,
396
400
  A04417F243B917842D1D4244 /* Pods */,
397
- E07C6F68F7D3EA2B93AA305D /* Frameworks */,
401
+ BFFEF6AB45F582862D1DA1C9 /* Frameworks */,
398
402
  );
399
403
  sourceTree = "<group>";
400
404
  };
@@ -440,8 +444,9 @@
440
444
  F9875C8429A663B200A91C93 /* Concurrency */ = {
441
445
  isa = PBXGroup;
442
446
  children = (
447
+ F9BEA4C12A7A9FA60066988B /* Atomic.swift */,
443
448
  F9875C8729A663B200A91C93 /* DispatchQueue+isMain.swift */,
444
- F9875C8629A663B200A91C93 /* Lock.swift */,
449
+ F9875C8629A663B200A91C93 /* Locking.swift */,
445
450
  F9875C8529A663B200A91C93 /* MainQueueDispatcher.swift */,
446
451
  F9DEA4D929E83C840011D222 /* MainQueueRelay.swift */,
447
452
  );
@@ -623,6 +628,7 @@
623
628
  F9875D0229A6650A00A91C93 /* Concurrency */ = {
624
629
  isa = PBXGroup;
625
630
  children = (
631
+ F9BEA4BF2A7A9F940066988B /* AtomicTests.swift */,
626
632
  F9875D0329A6650A00A91C93 /* DispatchQueue+isMainTests.swift */,
627
633
  F9875D0429A6650A00A91C93 /* MainQueueDispatcherTests.swift */,
628
634
  F9DEA4DB29E83F400011D222 /* MainQueueRelayTests.swift */,
@@ -826,7 +832,7 @@
826
832
  isa = PBXNativeTarget;
827
833
  buildConfigurationList = F9875C7E29A661FC00A91C93 /* Build configuration list for PBXNativeTarget "KaleyraVideoHybridNativeBridge" */;
828
834
  buildPhases = (
829
- 92FFBE44402D6C9E05C87171 /* [CP] Check Pods Manifest.lock */,
835
+ D4A6F65CD1B366B5FE70494E /* [CP] Check Pods Manifest.lock */,
830
836
  F9875C6729A661FC00A91C93 /* Headers */,
831
837
  F9875C6829A661FC00A91C93 /* Sources */,
832
838
  F9875C6929A661FC00A91C93 /* Frameworks */,
@@ -845,11 +851,11 @@
845
851
  isa = PBXNativeTarget;
846
852
  buildConfigurationList = F9875C8129A661FC00A91C93 /* Build configuration list for PBXNativeTarget "KaleyraVideoHybridNativeBridgeTests" */;
847
853
  buildPhases = (
848
- CFC0DB906A26CB7EDC9B4893 /* [CP] Check Pods Manifest.lock */,
854
+ 1D220D8FD79E0C49D895887D /* [CP] Check Pods Manifest.lock */,
849
855
  F9875C7029A661FC00A91C93 /* Sources */,
850
856
  F9875C7129A661FC00A91C93 /* Frameworks */,
851
857
  F9875C7229A661FC00A91C93 /* Resources */,
852
- DE341C4DFCB8029DEE8B4F5F /* [CP] Embed Pods Frameworks */,
858
+ 85937B93FAE28ABA6CBBA1CF /* [CP] Embed Pods Frameworks */,
853
859
  );
854
860
  buildRules = (
855
861
  );
@@ -928,7 +934,7 @@
928
934
  /* End PBXResourcesBuildPhase section */
929
935
 
930
936
  /* Begin PBXShellScriptBuildPhase section */
931
- 92FFBE44402D6C9E05C87171 /* [CP] Check Pods Manifest.lock */ = {
937
+ 1D220D8FD79E0C49D895887D /* [CP] Check Pods Manifest.lock */ = {
932
938
  isa = PBXShellScriptBuildPhase;
933
939
  buildActionMask = 2147483647;
934
940
  files = (
@@ -943,50 +949,50 @@
943
949
  outputFileListPaths = (
944
950
  );
945
951
  outputPaths = (
946
- "$(DERIVED_FILE_DIR)/Pods-KaleyraVideoHybridNativeBridge-checkManifestLockResult.txt",
952
+ "$(DERIVED_FILE_DIR)/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests-checkManifestLockResult.txt",
947
953
  );
948
954
  runOnlyForDeploymentPostprocessing = 0;
949
955
  shellPath = /bin/sh;
950
956
  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";
951
957
  showEnvVarsInLog = 0;
952
958
  };
953
- CFC0DB906A26CB7EDC9B4893 /* [CP] Check Pods Manifest.lock */ = {
959
+ 85937B93FAE28ABA6CBBA1CF /* [CP] Embed Pods Frameworks */ = {
954
960
  isa = PBXShellScriptBuildPhase;
955
961
  buildActionMask = 2147483647;
956
962
  files = (
957
963
  );
958
964
  inputFileListPaths = (
965
+ "${PODS_ROOT}/Target Support Files/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
959
966
  );
960
- inputPaths = (
961
- "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
962
- "${PODS_ROOT}/Manifest.lock",
963
- );
964
- name = "[CP] Check Pods Manifest.lock";
967
+ name = "[CP] Embed Pods Frameworks";
965
968
  outputFileListPaths = (
966
- );
967
- outputPaths = (
968
- "$(DERIVED_FILE_DIR)/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests-checkManifestLockResult.txt",
969
+ "${PODS_ROOT}/Target Support Files/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
969
970
  );
970
971
  runOnlyForDeploymentPostprocessing = 0;
971
972
  shellPath = /bin/sh;
972
- 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";
973
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests-frameworks.sh\"\n";
973
974
  showEnvVarsInLog = 0;
974
975
  };
975
- DE341C4DFCB8029DEE8B4F5F /* [CP] Embed Pods Frameworks */ = {
976
+ D4A6F65CD1B366B5FE70494E /* [CP] Check Pods Manifest.lock */ = {
976
977
  isa = PBXShellScriptBuildPhase;
977
978
  buildActionMask = 2147483647;
978
979
  files = (
979
980
  );
980
981
  inputFileListPaths = (
981
- "${PODS_ROOT}/Target Support Files/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
982
982
  );
983
- name = "[CP] Embed Pods Frameworks";
983
+ inputPaths = (
984
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
985
+ "${PODS_ROOT}/Manifest.lock",
986
+ );
987
+ name = "[CP] Check Pods Manifest.lock";
984
988
  outputFileListPaths = (
985
- "${PODS_ROOT}/Target Support Files/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
989
+ );
990
+ outputPaths = (
991
+ "$(DERIVED_FILE_DIR)/Pods-KaleyraVideoHybridNativeBridge-checkManifestLockResult.txt",
986
992
  );
987
993
  runOnlyForDeploymentPostprocessing = 0;
988
994
  shellPath = /bin/sh;
989
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests/Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests-frameworks.sh\"\n";
995
+ 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";
990
996
  showEnvVarsInLog = 0;
991
997
  };
992
998
  /* End PBXShellScriptBuildPhase section */
@@ -1000,6 +1006,7 @@
1000
1006
  F931C8B429DEF24600194E1D /* KaleyraVideoSDKUserInterfacePresenter.swift in Sources */,
1001
1007
  F9875CC329A663B300A91C93 /* DispatchQueue+isMain.swift in Sources */,
1002
1008
  F9875CE729A663B300A91C93 /* ChatClientEventsReporter.swift in Sources */,
1009
+ F9BEA4C22A7A9FA60066988B /* Atomic.swift in Sources */,
1003
1010
  F9B7E59929E5602800AB9208 /* CallOptions+Bandyer.swift in Sources */,
1004
1011
  F967342529D2EFE500F9B914 /* TokenProvider.swift in Sources */,
1005
1012
  F9875CDE29A663B300A91C93 /* Array+JSON.swift in Sources */,
@@ -1018,7 +1025,7 @@
1018
1025
  F96C93F729E8442F004FA995 /* UserInterfacePresenter+MainQueueRelay.swift in Sources */,
1019
1026
  F9875CD829A663B300A91C93 /* AccessTokenRequest+Encodable.swift in Sources */,
1020
1027
  F9875CE229A663B300A91C93 /* RecordingType+Decodable.swift in Sources */,
1021
- F9875CC229A663B300A91C93 /* Lock.swift in Sources */,
1028
+ F9875CC229A663B300A91C93 /* Locking.swift in Sources */,
1022
1029
  F9875CC929A663B300A91C93 /* CallType+Decodable.swift in Sources */,
1023
1030
  F9875CD729A663B300A91C93 /* AccessTokenResponse+Decodable.swift in Sources */,
1024
1031
  F9DEA4DA29E83C840011D222 /* MainQueueRelay.swift in Sources */,
@@ -1100,6 +1107,7 @@
1100
1107
  F9875D3429A6650A00A91C93 /* CreateCallOptions+IntentTests.swift in Sources */,
1101
1108
  F9B7E5A129E5663900AB9208 /* AudioCallOptions+EquatableTests.swift in Sources */,
1102
1109
  F9875D5329A6650A00A91C93 /* TestHelpers.swift in Sources */,
1110
+ F9BEA4C02A7A9F940066988B /* AtomicTests.swift in Sources */,
1103
1111
  F9875D5729A6650A00A91C93 /* UnitTestCase.swift in Sources */,
1104
1112
  F9B7E5A729E5888E00AB9208 /* KaleyraVideoConfiguration+UserInterfacePresenterConfigurationTests.swift in Sources */,
1105
1113
  F9875D3E29A6650A00A91C93 /* RegionTests.swift in Sources */,
@@ -1267,7 +1275,7 @@
1267
1275
  };
1268
1276
  F9875C7F29A661FC00A91C93 /* Debug */ = {
1269
1277
  isa = XCBuildConfiguration;
1270
- baseConfigurationReference = DB98873C21689B5D31B12E28 /* Pods-KaleyraVideoHybridNativeBridge.debug.xcconfig */;
1278
+ baseConfigurationReference = 8AFE6A0D76614CF3A1055AFB /* Pods-KaleyraVideoHybridNativeBridge.debug.xcconfig */;
1271
1279
  buildSettings = {
1272
1280
  CODE_SIGN_STYLE = Automatic;
1273
1281
  CURRENT_PROJECT_VERSION = 1;
@@ -1279,7 +1287,7 @@
1279
1287
  GENERATE_INFOPLIST_FILE = YES;
1280
1288
  INFOPLIST_KEY_NSHumanReadableCopyright = "";
1281
1289
  INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1282
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
1290
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
1283
1291
  LD_RUNPATH_SEARCH_PATHS = (
1284
1292
  "$(inherited)",
1285
1293
  "@executable_path/Frameworks",
@@ -1297,7 +1305,7 @@
1297
1305
  };
1298
1306
  F9875C8029A661FC00A91C93 /* Release */ = {
1299
1307
  isa = XCBuildConfiguration;
1300
- baseConfigurationReference = 0DBF27EF0DFAE2D959FEA905 /* Pods-KaleyraVideoHybridNativeBridge.release.xcconfig */;
1308
+ baseConfigurationReference = 31B2D50C090D5E6076BD39E0 /* Pods-KaleyraVideoHybridNativeBridge.release.xcconfig */;
1301
1309
  buildSettings = {
1302
1310
  CODE_SIGN_STYLE = Automatic;
1303
1311
  CURRENT_PROJECT_VERSION = 1;
@@ -1309,7 +1317,7 @@
1309
1317
  GENERATE_INFOPLIST_FILE = YES;
1310
1318
  INFOPLIST_KEY_NSHumanReadableCopyright = "";
1311
1319
  INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1312
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
1320
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
1313
1321
  LD_RUNPATH_SEARCH_PATHS = (
1314
1322
  "$(inherited)",
1315
1323
  "@executable_path/Frameworks",
@@ -1327,14 +1335,14 @@
1327
1335
  };
1328
1336
  F9875C8229A661FC00A91C93 /* Debug */ = {
1329
1337
  isa = XCBuildConfiguration;
1330
- baseConfigurationReference = A0F266EFACC797DFE10AE19D /* Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.debug.xcconfig */;
1338
+ baseConfigurationReference = 9FDA74BAD258248FC14F9BB1 /* Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.debug.xcconfig */;
1331
1339
  buildSettings = {
1332
1340
  ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)";
1333
1341
  CODE_SIGN_STYLE = Automatic;
1334
1342
  CURRENT_PROJECT_VERSION = 1;
1335
1343
  DEVELOPMENT_TEAM = TQ49746752;
1336
1344
  GENERATE_INFOPLIST_FILE = YES;
1337
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
1345
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
1338
1346
  MARKETING_VERSION = 1.0;
1339
1347
  PRODUCT_BUNDLE_IDENTIFIER = com.kaleyra.VideoHybidNativeBridgeTests;
1340
1348
  PRODUCT_NAME = "$(TARGET_NAME)";
@@ -1346,14 +1354,14 @@
1346
1354
  };
1347
1355
  F9875C8329A661FC00A91C93 /* Release */ = {
1348
1356
  isa = XCBuildConfiguration;
1349
- baseConfigurationReference = D402E93B64728382079177EC /* Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.release.xcconfig */;
1357
+ baseConfigurationReference = B73D5754EF9B7B724563F429 /* Pods-KaleyraVideoHybridNativeBridge-KaleyraVideoHybridNativeBridgeTests.release.xcconfig */;
1350
1358
  buildSettings = {
1351
1359
  ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)";
1352
1360
  CODE_SIGN_STYLE = Automatic;
1353
1361
  CURRENT_PROJECT_VERSION = 1;
1354
1362
  DEVELOPMENT_TEAM = TQ49746752;
1355
1363
  GENERATE_INFOPLIST_FILE = YES;
1356
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
1364
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
1357
1365
  MARKETING_VERSION = 1.0;
1358
1366
  PRODUCT_BUNDLE_IDENTIFIER = com.kaleyra.VideoHybidNativeBridgeTests;
1359
1367
  PRODUCT_NAME = "$(TARGET_NAME)";
@@ -1,12 +1,12 @@
1
1
  # Copyright © 2018-2023 Kaleyra S.p.a. All Rights Reserved.
2
2
  # See LICENSE for licensing information
3
3
 
4
- platform :ios, '10.0'
4
+ platform :ios, '12.0'
5
5
 
6
6
  target 'KaleyraVideoHybridNativeBridge' do
7
7
  use_frameworks!
8
8
 
9
- pod "Bandyer", "3.6.2"
9
+ pod "Bandyer"
10
10
 
11
11
  target 'KaleyraVideoHybridNativeBridgeTests' do
12
12
  use_frameworks!
@@ -15,14 +15,3 @@ target 'KaleyraVideoHybridNativeBridge' do
15
15
  end
16
16
 
17
17
  end
18
-
19
- #This post_install script is needed after updating Xcode to 14.3 version, otherwise there will be compilation issues.
20
- post_install do |installer|
21
- installer.generated_projects.each do |project|
22
- project.targets.each do |target|
23
- target.build_configurations.each do |config|
24
- config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '10.0'
25
- end
26
- end
27
- end
28
- end
@@ -1,9 +1,9 @@
1
1
  PODS:
2
- - Bandyer (3.6.2)
3
- - SwiftHamcrest (2.2.0)
2
+ - Bandyer (3.9.0)
3
+ - SwiftHamcrest (2.2.4)
4
4
 
5
5
  DEPENDENCIES:
6
- - Bandyer (= 3.6.2)
6
+ - Bandyer
7
7
  - SwiftHamcrest (~> 2.2)
8
8
 
9
9
  SPEC REPOS:
@@ -12,9 +12,9 @@ SPEC REPOS:
12
12
  - SwiftHamcrest
13
13
 
14
14
  SPEC CHECKSUMS:
15
- Bandyer: bed6cd784597ce404e271d4287c9b2df950b4d79
16
- SwiftHamcrest: 7162cfe5a0b399c573fef5c2534d69c5f7e182d6
15
+ Bandyer: 64a80517e7e1aff3ea49e0c32c1872e80fac17b6
16
+ SwiftHamcrest: a45dd878978049c0953259aa01c34fd7258d0340
17
17
 
18
- PODFILE CHECKSUM: 1248a988a6a0f668e8e04a03bc1a06d6218db5d5
18
+ PODFILE CHECKSUM: 66fc4f81333eb6e98b7f40196dbf5ee1fa5c1996
19
19
 
20
- COCOAPODS: 1.12.1
20
+ COCOAPODS: 1.14.2
@@ -18,6 +18,7 @@ protocol BandyerSDKProtocol: AnyObject {
18
18
  func connect(_ session: Bandyer.Session)
19
19
  func verifiedUser(_ verified: Bool, for call: Bandyer.Call, completion: ((Error?) -> Void)?)
20
20
  func disconnect()
21
+ func reset()
21
22
  }
22
23
 
23
24
  @available(iOS 12.0, *)
@@ -0,0 +1,116 @@
1
+ // Copyright © 2018-2023 Kaleyra S.p.a. All Rights Reserved.
2
+ // See LICENSE for licensing information
3
+
4
+ import Foundation
5
+
6
+ @propertyWrapper
7
+ class Atomic<Value> {
8
+
9
+ private var value: Value
10
+ private let lock: Locking
11
+
12
+ init(wrappedValue: Value, lock: Locking = NSLock()) {
13
+ self.value = wrappedValue
14
+ self.lock = lock
15
+ }
16
+
17
+ init(_ value: Value, lock: Locking = NSLock()) {
18
+ self.value = value
19
+ self.lock = lock
20
+ }
21
+
22
+ var wrappedValue: Value {
23
+ get {
24
+ lock.sync {
25
+ value
26
+ }
27
+ }
28
+
29
+ set {
30
+ lock.sync {
31
+ value = newValue
32
+ }
33
+ }
34
+ }
35
+
36
+ var projectedValue: Atomic<Value> { self }
37
+
38
+ func `do`(_ body: (inout Value) throws -> Void) rethrows {
39
+ try lock.sync { try body(&value) }
40
+ }
41
+
42
+ func `do`<T>(_ body: (inout Value) throws -> T) rethrows -> T {
43
+ try lock.sync { try body(&value) }
44
+ }
45
+
46
+ func swap(_ newValue: Value) -> Value {
47
+ lock.sync {
48
+ let oldValue = value
49
+ value = newValue
50
+ return oldValue
51
+ }
52
+ }
53
+ }
54
+
55
+ extension Atomic: Equatable where Value: Equatable {
56
+
57
+ static func == (lhs: Atomic<Value>, rhs: Atomic<Value>) -> Bool {
58
+ lhs.wrappedValue == rhs.wrappedValue
59
+ }
60
+ }
61
+
62
+ extension Atomic where Value: Equatable {
63
+
64
+ static func == (lhs: Atomic<Value>, rhs: Value) -> Bool {
65
+ lhs.wrappedValue == rhs
66
+ }
67
+
68
+ static func == (lhs: Value, rhs: Atomic<Value>) -> Bool {
69
+ lhs == rhs.wrappedValue
70
+ }
71
+ }
72
+
73
+ extension Atomic where Value: AdditiveArithmetic {
74
+
75
+ static func += (lhs: Atomic<Value>, rhs: Value) {
76
+ lhs.do { $0 += rhs }
77
+ }
78
+
79
+ static func += (lhs: inout Value, rhs: Atomic<Value>) {
80
+ lhs += rhs.wrappedValue
81
+ }
82
+
83
+ static func -= (lhs: Atomic<Value>, rhs: Value) {
84
+ lhs.do { $0 -= rhs }
85
+ }
86
+
87
+ static func -= (lhs: inout Value, rhs: Atomic<Value>) {
88
+ lhs -= rhs.wrappedValue
89
+ }
90
+ }
91
+
92
+ extension Atomic where Value: Collection {
93
+
94
+ var count: Int { wrappedValue.count }
95
+
96
+ var isEmpty: Bool { wrappedValue.isEmpty }
97
+
98
+ subscript(index: Value.Index) -> Value.Element {
99
+ wrappedValue[index]
100
+ }
101
+
102
+ func dropFirst(_ k: Int = 1) -> Value.SubSequence {
103
+ wrappedValue.dropFirst(k)
104
+ }
105
+
106
+ func dropLast(_ k: Int = 1) -> Value.SubSequence {
107
+ wrappedValue.dropLast(k)
108
+ }
109
+ }
110
+
111
+ extension Atomic where Value: RangeReplaceableCollection {
112
+
113
+ func append(_ newElement: Value.Element) {
114
+ self.do { $0.append(newElement) }
115
+ }
116
+ }
@@ -3,12 +3,12 @@
3
3
 
4
4
  import Foundation
5
5
 
6
- protocol Lock {
6
+ protocol Locking {
7
7
 
8
8
  func sync<T>(_ work: () throws -> T) rethrows -> T
9
9
  }
10
10
 
11
- extension Lock where Self: NSLocking {
11
+ extension Locking where Self: NSLocking {
12
12
 
13
13
  func sync<T>(_ work: () throws -> T) rethrows -> T {
14
14
  lock()
@@ -17,5 +17,5 @@ extension Lock where Self: NSLocking {
17
17
  }
18
18
  }
19
19
 
20
- extension NSLock: Lock {}
21
- extension NSRecursiveLock: Lock {}
20
+ extension NSLock: Locking {}
21
+ extension NSRecursiveLock: Locking {}
@@ -83,7 +83,6 @@ class VideoHybridNativeBridge {
83
83
 
84
84
  func connect(userID: String) throws {
85
85
  try checkIsConfigured()
86
-
87
86
  let provider = accessTokenProviderFactory()
88
87
  sdk.connect(Bandyer.Session(userId: userID, tokenProvider: provider))
89
88
  }
@@ -120,7 +119,6 @@ class VideoHybridNativeBridge {
120
119
  try checkIsConfigured()
121
120
 
122
121
  sdk.disconnect()
123
- reporter.stop()
124
122
  }
125
123
 
126
124
  func addUsersDetails(_ details: [UserDetails]) {
@@ -138,6 +136,10 @@ class VideoHybridNativeBridge {
138
136
  sdk.verifiedUser(verify, for: call, completion: nil)
139
137
  }
140
138
 
139
+ func reset() {
140
+ sdk.reset()
141
+ }
142
+
141
143
  // MARK: - Private Functions
142
144
 
143
145
  private func configurePushEventsReporterIfNeeded(config: KaleyraVideoConfiguration) {
@@ -155,10 +157,6 @@ class VideoHybridNativeBridge {
155
157
 
156
158
  // MARK: - Unsupported Features on iOS Platform
157
159
 
158
- func reset() {
159
- debugPrint("Reset is not supported for iOS platform.")
160
- }
161
-
162
160
  func clearUserCache() {
163
161
  debugPrint("clearUserCache() is not supported for iOS platform.")
164
162
  }
@@ -8,7 +8,7 @@ import Bandyer
8
8
  class UsersDetailsCache {
9
9
 
10
10
  private lazy var items = [String : Bandyer.UserDetails]()
11
- private let lock: Lock = NSRecursiveLock()
11
+ private let lock: Locking = NSRecursiveLock()
12
12
 
13
13
  func setItem(_ item: Bandyer.UserDetails, forKey key: String) {
14
14
  lock.sync {
@@ -6,42 +6,11 @@ import Foundation
6
6
  @available(iOS 12.0, *)
7
7
  class FormatterProxy: Formatter {
8
8
 
9
- private static let defaultFormatter = UserDetailsFormatter(format: "${useralias}")
10
-
11
- private let lock: Lock = NSRecursiveLock()
12
- private var _formatter: Formatter
13
-
14
- var formatter: Formatter! {
15
- get {
16
- lock.sync {
17
- _formatter
18
- }
19
- }
20
-
21
- set {
22
- lock.sync {
23
- guard newValue != nil else {
24
- _formatter = Self.defaultFormatter
25
- return
26
- }
27
-
28
- _formatter = newValue
29
- }
30
- }
31
- }
32
-
33
- override init() {
34
- _formatter = Self.defaultFormatter
35
- super.init()
36
- }
37
-
38
- required init?(coder: NSCoder) {
39
- _formatter = Self.defaultFormatter
40
- super.init(coder: coder)
41
- }
9
+ @Atomic
10
+ var formatter: Formatter?
42
11
 
43
12
  override func string(for obj: Any?) -> String? {
44
- formatter.string(for: obj)
13
+ formatter?.string(for: obj)
45
14
  }
46
15
 
47
16
  }
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@kaleyra/video-react-native-module",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
+ "private": false,
4
5
  "description": "Kaleyra Video module for react native.",
5
6
  "main": "lib/commonjs/index.js",
6
7
  "module": "lib/module/index.js",
@@ -17,7 +17,7 @@ Pod::Spec.new do |s|
17
17
  s.source_files = "ios/**/*.{h,m,mm,swift}", "native-bridge/iOS/Source/**/*.swift"
18
18
 
19
19
  s.dependency "React-Core"
20
- s.dependency "Bandyer", "~> 3.6.3"
20
+ s.dependency "Bandyer", "~> 3.10.0"
21
21
 
22
22
  # Don't install the dependencies when we run `pod install` in the old architecture.
23
23
  if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then