Bläddra i källkod

update ringtone call when background and fix bugs

alqindiirsyam 4 månader sedan
förälder
incheckning
1c910a5a03

BIN
.DS_Store


BIN
AppBuilder/.DS_Store


+ 20 - 1
AppBuilder/AppBuilder/AppDelegate.swift

@@ -9,9 +9,10 @@ import UIKit
 import NexilisLite
 import NotificationBannerSwift
 import StreamShield
+import PushKit
 
 @main
-class AppDelegate: UIResponder, UIApplicationDelegate {
+class AppDelegate: UIResponder, UIApplicationDelegate, PKPushRegistryDelegate {
     var appName = Bundle.main.infoDictionary?["CFBundleName"] as! String
     var apikey = "***REPLACE***WITH***YOUR***ACCOUNT***"
     func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
@@ -22,6 +23,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
         Nexilis.isShowForceSignIn = false
         APIS.connect(appName: appName , apiKey: apikey, delegate: self, showButton: showButton, fromMAB: true) //23091CF494A11149F5A8FC8D17FF690DC69AE656F91B86070A11506ED24144F5(BPKH) //38747683290F62E9667A018F490396EAE47BC16ADECD85B7E865C733E6DBD6A2(OneApp)
         registerForPushNotifications()
+        registerForVoIPPushNotifications()
         return true
     }
 
@@ -55,6 +57,23 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
             UIApplication.shared.registerForRemoteNotifications()
         }
     }
+    
+    func registerForVoIPPushNotifications() {
+        let mainQueue = DispatchQueue.main
+        let voipRegistry = PKPushRegistry(queue: mainQueue)
+        voipRegistry.delegate = self
+        voipRegistry.desiredPushTypes = [.voIP]
+    }
+    
+    func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType) {
+        let deviceToken = pushCredentials.token.map { String(format: "%02x", $0) }.joined()
+        APIS.sendPushToken(deviceToken, isCall: true)
+    }
+    
+    func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) {
+        print("Received VoIP Push: \(payload.dictionaryPayload)")
+        completion()
+    }
 
 
 }

+ 12 - 0
AppBuilder/AppBuilder/SecondTabViewController.swift

@@ -2136,6 +2136,12 @@ extension SecondTabViewController: UITableViewDelegate, UITableViewDataSource {
                 if FileManager.default.fileExists(atPath: audioURL.path) {
                     do {
                         if audioPlayer == nil || audioPlayer?.url != audioURL {
+                            do {
+                                try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
+                                try AVAudioSession.sharedInstance().setActive(true)
+                            } catch {
+                                
+                            }
                             audioPlayer = try AVAudioPlayer(contentsOf: audioURL)
                             audioPlayer?.prepareToPlay()
                             audioPlayer?.play()
@@ -2154,6 +2160,12 @@ extension SecondTabViewController: UITableViewDelegate, UITableViewDataSource {
                             let tempPath = cachesDirectory.appendingPathComponent(sender.audio_id)
                             try audioData.write(to: tempPath)
                             if audioPlayer == nil || audioPlayer?.url != tempPath {
+                                do {
+                                    try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
+                                    try AVAudioSession.sharedInstance().setActive(true)
+                                } catch {
+                                    
+                                }
                                 audioPlayer = try AVAudioPlayer(contentsOf: tempPath)
                                 audioPlayer?.prepareToPlay()
                                 audioPlayer?.play()

+ 1 - 1
NexilisLite/NexilisLite.podspec

@@ -24,7 +24,7 @@ Pod::Spec.new do |spec|
   spec.resource_bundles = { 'NexilisLite' => ['NexilisLite/Resource/**/*']}
   spec.swift_version = '5.5.1'
   spec.dependency 'FMDB', '~> 2.7.12'
-  spec.dependency 'nuSDKService', '4.0.17'
+  spec.dependency 'nuSDKService', '4.0.18'
   spec.dependency 'NotificationBannerSwift'
   spec.dependency 'Alamofire', '~> 5.10.2'
   spec.dependency 'SDWebImage', '~> 5.20.0'

+ 29 - 4
NexilisLite/NexilisLite/Source/APIS.swift

@@ -930,6 +930,17 @@ public class APIS: NSObject {
                                         }
                                         Nexilis.saveMessage(message: messageToSave, withStatus: false, fromAPNS: true)
                                         DispatchQueue.global().async {
+                                            if !Nexilis.afterConnect && API.nGetCLXConnState() == 0 {
+                                                let id = Utils.getConnectionID()
+                                                do {
+                                                    try API.initConnection(sAPIK: Nexilis.sAPIKey, cbiI: Callback(), sTCPAddr: Nexilis.ADDRESS, nTCPPort: Nexilis.PORT, sUserID: id, sStartWH: "09:00")
+                                                } catch {
+                                                    
+                                                }
+                                            }
+                                            while API.nGetCLXConnState() == 0 {
+                                                Thread.sleep(forTimeInterval: 1)
+                                            }
                                             _ = Nexilis.write(message: CoreMessage_TMessageBank.getAckMessage(messageId: message[CoreMessage_TMessageKey.MESSAGE_ID] ?? ""))
                                         }
                                     } catch {
@@ -938,7 +949,6 @@ public class APIS: NSObject {
                                     APIS.addNotificationNexilis(messageToSave)
                                 }
                             } else if code == "CL03" {
-                                print("Print notif call")
                                 let callFromName = data["call-from-name"] as? String ?? ""
                                 let callFrom = data["call-from"] as? String ?? ""
                                 let callType = data["call-type"] as? String ?? ""
@@ -952,7 +962,7 @@ public class APIS: NSObject {
     //                                            print("Incoming call reported successfully")
     //                                        }
     //                                    }
-                                copySoundToLocalPath("pb_call_in_ios", false)
+//                                copySoundToLocalPath("pb_call_in_ios", false)
                                 let center = UNUserNotificationCenter.current()
                                 let content = UNMutableNotificationContent()
                                 content.title = callFromName
@@ -962,7 +972,7 @@ public class APIS: NSObject {
                                     content.body = "Incoming Video Call".localized()
                                 }
                                 content.userInfo = ["id" : callFrom, "type" : code, "callType": callType]
-                                content.sound = UNNotificationSound(named: UNNotificationSoundName("pb_call_in_ios.mp3"))
+                                content.sound = nil
                                 let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
                                 let request = UNNotificationRequest(identifier: callFrom, content: content, trigger: trigger)
                                 center.add(request) { error in
@@ -970,9 +980,20 @@ public class APIS: NSObject {
                                         print("Error scheduling notification: \(error.localizedDescription)")
                                     }
                                 }
+                                let session = AVAudioSession.sharedInstance()
+                                do {
+                                    try session.setCategory(.playback, options: [.duckOthers])
+                                    try session.setActive(true)
+                                } catch {
+                                    print("Audio session error: \(error)")
+                                }
+                                Nexilis.playRingtoneCall()
                             } else if code == "CL02" {
-                                let callFrom = data["call-from"] as? String ?? ""
+                                let callFrom = data["call-cancel"] as? String ?? ""
 //                                if let uuidCall = uuidCall {
+                                    print("STOP RINGTONE CALL")
+                                    Nexilis.stopRingtoneCall()
+                                    print("removeDeliveredNotifications \(callFrom)")
                                     Nexilis.callAPNActivated = false
                                     let center = UNUserNotificationCenter.current()
                                     center.removeDeliveredNotifications(withIdentifiers: [callFrom])
@@ -1239,6 +1260,10 @@ public class APIS: NSObject {
                         UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
                     }
                 } else if type == "CL03" {
+                    Nexilis.stopRingtoneCall()
+                    if !Nexilis.callAPNActivated {
+                        return
+                    }
                     let callType = userInfo["callType"] ?? ""
                     if callType == "1" {
                         if let user = User.getData(pin: id), user.firstName == "User".localized() {

+ 40 - 2
NexilisLite/NexilisLite/Source/Nexilis.swift

@@ -178,7 +178,7 @@ public class Nexilis: NSObject {
                 if address.isEmpty {
                     return
                 }
-                print("HUHU>> \(API.sGetVersion())")
+//                print("HUHU>> \(API.sGetVersion())")
                 var id = Utils.getConnectionID()
                 Nexilis.ADDRESS = address.components(separatedBy: ":")[0]
                 Nexilis.PORT = Int(address.components(separatedBy: ":")[1]) ?? 0
@@ -318,6 +318,7 @@ public class Nexilis: NSObject {
             do {
                 Nexilis.sharedAudioPlayer = try AVAudioPlayer(contentsOf: a)
                 Nexilis.sharedAudioPlayer?.prepareToPlay()
+                Nexilis.sharedAudioPlayer?.numberOfLoops = -1
                 Nexilis.sharedAudioPlayer?.play()
             } catch {
                 
@@ -343,8 +344,8 @@ public class Nexilis: NSObject {
             do {
                 Nexilis.sharedAudioPlayer = try AVAudioPlayer(contentsOf: a)
                 Nexilis.sharedAudioPlayer?.prepareToPlay()
-                Nexilis.sharedAudioPlayer?.play()
                 Nexilis.sharedAudioPlayer?.numberOfLoops = -1
+                Nexilis.sharedAudioPlayer?.play()
             } catch {
                 
             }
@@ -369,6 +370,7 @@ public class Nexilis: NSObject {
             do {
                 Nexilis.sharedAudioPlayer = try AVAudioPlayer(contentsOf: a)
                 Nexilis.sharedAudioPlayer?.prepareToPlay()
+                Nexilis.sharedAudioPlayer?.numberOfLoops = -1
                 Nexilis.sharedAudioPlayer?.play()
             } catch {
                 
@@ -3886,6 +3888,12 @@ extension Nexilis: MessageDelegate {
                                                         func playAudio() {
                                                             if FileManager.default.fileExists(atPath: audioURL.path) {
                                                                 do {
+                                                                    do {
+                                                                        try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
+                                                                        try AVAudioSession.sharedInstance().setActive(true)
+                                                                    } catch {
+                                                                        
+                                                                    }
                                                                     Nexilis.sharedAudioPlayer = try AVAudioPlayer(contentsOf: audioURL)
                                                                     Nexilis.sharedAudioPlayer?.prepareToPlay()
                                                                     Nexilis.sharedAudioPlayer?.play()
@@ -3899,6 +3907,12 @@ extension Nexilis: MessageDelegate {
                                                                         let tempPath = cachesDirectory.appendingPathComponent(nameSound)
                                                                         try audioData.write(to: tempPath)
                                                                         do {
+                                                                            do {
+                                                                                try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
+                                                                                try AVAudioSession.sharedInstance().setActive(true)
+                                                                            } catch {
+                                                                                
+                                                                            }
                                                                             Nexilis.sharedAudioPlayer = try AVAudioPlayer(contentsOf: tempPath)
                                                                             Nexilis.sharedAudioPlayer?.prepareToPlay()
                                                                             Nexilis.sharedAudioPlayer?.play()
@@ -3918,6 +3932,12 @@ extension Nexilis: MessageDelegate {
                                                         soundURL = Bundle.resourcesMediaBundle(for: Nexilis.self).url(forResource: nameSound, withExtension: "mp3")
                                                     }
                                                     do {
+                                                        do {
+                                                            try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
+                                                            try AVAudioSession.sharedInstance().setActive(true)
+                                                        } catch {
+                                                            
+                                                        }
                                                         Nexilis.sharedAudioPlayer = try AVAudioPlayer(contentsOf: soundURL!)
                                                         Nexilis.sharedAudioPlayer?.prepareToPlay()
                                                         Nexilis.sharedAudioPlayer?.play()
@@ -3987,6 +4007,12 @@ extension Nexilis: MessageDelegate {
                                     func playAudio() {
                                         if FileManager.default.fileExists(atPath: audioURL.path) {
                                             do {
+                                                do {
+                                                    try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
+                                                    try AVAudioSession.sharedInstance().setActive(true)
+                                                } catch {
+                                                    
+                                                }
                                                 Nexilis.sharedAudioPlayer = try AVAudioPlayer(contentsOf: audioURL)
                                                 Nexilis.sharedAudioPlayer?.prepareToPlay()
                                                 Nexilis.sharedAudioPlayer?.play()
@@ -4000,6 +4026,12 @@ extension Nexilis: MessageDelegate {
                                                     let tempPath = cachesDirectory.appendingPathComponent(nameSound)
                                                     try audioData.write(to: tempPath)
                                                     do {
+                                                        do {
+                                                            try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
+                                                            try AVAudioSession.sharedInstance().setActive(true)
+                                                        } catch {
+                                                            
+                                                        }
                                                         Nexilis.sharedAudioPlayer = try AVAudioPlayer(contentsOf: tempPath)
                                                         Nexilis.sharedAudioPlayer?.prepareToPlay()
                                                         Nexilis.sharedAudioPlayer?.play()
@@ -4019,6 +4051,12 @@ extension Nexilis: MessageDelegate {
                                     soundURL = Bundle.resourcesMediaBundle(for: Nexilis.self).url(forResource: nameSound, withExtension: "mp3")
                                 }
                                 do {
+                                    do {
+                                        try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
+                                        try AVAudioSession.sharedInstance().setActive(true)
+                                    } catch {
+                                        
+                                    }
                                     Nexilis.sharedAudioPlayer = try AVAudioPlayer(contentsOf: soundURL!)
                                     Nexilis.sharedAudioPlayer?.prepareToPlay()
                                     Nexilis.sharedAudioPlayer?.play()

+ 2 - 3
NexilisLite/NexilisLite/Source/View/Call/QmeraAudioViewController.swift

@@ -299,7 +299,6 @@ class QmeraAudioViewController: UIViewController {
         UIDevice.current.isProximityMonitoringEnabled = false
         Nexilis.floatingButton.isHidden = false
         Nexilis.callAPNActivated = false
-        backToDefaultAudioSession()
     }
     
     deinit {
@@ -308,8 +307,6 @@ class QmeraAudioViewController: UIViewController {
         Nexilis.callAPNActivated = false
         NotificationCenter.default.removeObserver(self)
         AVAudioSession.sharedInstance().removeObserver(self, forKeyPath: "outputVolume")
-        QmeraAudioViewController.isLoop = false
-        backToDefaultAudioSession()
     }
     
     private func backToDefaultAudioSession() {
@@ -484,6 +481,7 @@ class QmeraAudioViewController: UIViewController {
     
     private func outgoingView() {
 //        Nexilis.setSpeakerphoneOn(isSpeaker)
+        backToDefaultAudioSession()
         Nexilis.playRingbacktoneCall()
         status.text = "Connecting..."
         view.addSubview(end)
@@ -493,6 +491,7 @@ class QmeraAudioViewController: UIViewController {
     }
     
     private func incomingView() {
+        backToDefaultAudioSession()
         Nexilis.playRingtoneCall()
         status.text = "Incoming..."
         

+ 4 - 3
NexilisLite/NexilisLite/Source/View/Call/QmeraVideoViewController.swift

@@ -181,8 +181,6 @@ class QmeraVideoViewController: UIViewController {
         NotificationCenter.default.removeObserver(self)
         Nexilis.floatingButton.isHidden = false
         Nexilis.callAPNActivated = false
-        QmeraVideoViewController.isLoop = false
-        backToDefaultAudioSession()
     }
     
     override func viewWillDisappear(_ animated: Bool) {
@@ -193,7 +191,6 @@ class QmeraVideoViewController: UIViewController {
             navigationController?.navigationBar.topItem?.backBarButtonItem = nil
             navigationController?.interactivePopGestureRecognizer?.isEnabled = true
             NotificationCenter.default.removeObserver(self)
-            backToDefaultAudioSession()
         }
         Nexilis.floatingButton.isHidden = false
         Nexilis.callAPNActivated = false
@@ -477,6 +474,7 @@ class QmeraVideoViewController: UIViewController {
             labelIncomingOutgoing.centerXAnchor.constraint(equalTo: view.centerXAnchor)
         ])
         if isInisiator {
+            backToDefaultAudioSession()
             Nexilis.playRingbacktoneCall()
             labelIncomingOutgoing.text = "Connecting".localized()
             if ticketId.isEmpty {
@@ -519,6 +517,7 @@ class QmeraVideoViewController: UIViewController {
                 }
             }
         } else {
+            backToDefaultAudioSession()
             Nexilis.playRingtoneCall()
             labelIncomingOutgoing.text = "Incoming video call".localized() + "..."
         }
@@ -626,6 +625,7 @@ class QmeraVideoViewController: UIViewController {
                 }
                 Nexilis.stopRingtoneCall()
                 Nexilis.stopRingbacktoneCall()
+                QmeraVideoViewController.isLoop = false
                 self.endAllCall()
                 self.dismiss(animated: true, completion: nil)
             }))
@@ -669,6 +669,7 @@ class QmeraVideoViewController: UIViewController {
                 self.wbTimer.invalidate()
                 self.vcTimer.invalidate()
                 self.labelTimerVC.text = "Video call is over".localized()
+                QmeraVideoViewController.isLoop = false
                 self.endAllCall()
                 DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                     if self.isInisiator && !self.isPresent {

+ 8 - 4
NexilisLite/NexilisLite/Source/View/Chat/EditorGroup.swift

@@ -2734,7 +2734,9 @@ extension EditorGroup: UITextViewDelegate, CustomTextViewPasteDelegate {
                         if self.showingLink != text {
                             self.showingLink = text
                             self.deleteLinkPreview()
-                            self.buildPreviewLink(imageUrl: imageUrl, title: title, description: description, stringURl: link)
+                            if !textFieldSend.text.isEmpty || textFieldSend.text.contains(text){
+                                self.buildPreviewLink(imageUrl: imageUrl, title: title, description: description, stringURl: text)
+                            }
                         }
                     }
                 } else {
@@ -2774,7 +2776,9 @@ extension EditorGroup: UITextViewDelegate, CustomTextViewPasteDelegate {
                         if self.showingLink != text {
                             self.showingLink = text
                             self.deleteLinkPreview()
-                            self.buildPreviewLink(imageUrl: imageUrl, title: title, description: description, stringURl: text)
+                            if !self.textFieldSend.text.isEmpty || self.textFieldSend.text.contains(text){
+                                self.buildPreviewLink(imageUrl: imageUrl, title: title, description: description, stringURl: text)
+                            }
                         }
                     },
                                               onError: { error in
@@ -3265,7 +3269,7 @@ extension EditorGroup: UIContextMenuInteractionDelegate {
         
         if dataMessages[indexPath!.row]["status"]  as? String ?? "" == "0" {
             children = [resend, delete]
-        } else if (dataMessages[indexPath!.row]["lock"] != nil && dataMessages[indexPath!.row]["lock"]  as? String ?? "" == "1") {
+        } else if (dataMessages[indexPath!.row]["lock"] != nil && dataMessages[indexPath!.row]["lock"]  as? String ?? "" == "1") || dataMessages[indexPath!.row]["message_scope_id"]  as? String ?? "" == "18" || dataMessages[indexPath!.row]["credential"]  as? String ?? "" == "1" {
             children = [delete]
         } else if (groupImages[dataMessages[indexPath!.row]["message_id"]  as? String ?? ""] != nil) {
             forward.title = "Forward All".localized()
@@ -4718,7 +4722,7 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource, AVAudioPlayer
                     textChat = textChat.components(separatedBy: "■")[0]
                     textChat = textChat.trimmingCharacters(in: .whitespacesAndNewlines)
                 }
-                if !fileChat.isEmpty {
+                if !fileChat.isEmpty && dataMessages[indexPath.row]["lock"] as? String != "2" {
                     textChat = textChat.components(separatedBy: "|")[1]
                 }
                 let finalAtribute = textChat.richText(group_id: self.dataGroup["group_id"]  as? String ?? "")

+ 7 - 3
NexilisLite/NexilisLite/Source/View/Chat/EditorPersonal.swift

@@ -3789,7 +3789,9 @@ extension EditorPersonal: UITextViewDelegate, CustomTextViewPasteDelegate {
                         if self.showingLink != text {
                             self.showingLink = text
                             self.deleteLinkPreview()
-                            self.buildPreviewLink(imageUrl: imageUrl, title: title, description: description, stringURl: link)
+                            if !textFieldSend.text.isEmpty || textFieldSend.text.contains(text){
+                                self.buildPreviewLink(imageUrl: imageUrl, title: title, description: description, stringURl: text)
+                            }
                         }
                     }
                 } else {
@@ -3829,7 +3831,9 @@ extension EditorPersonal: UITextViewDelegate, CustomTextViewPasteDelegate {
                         if self.showingLink != text {
                             self.showingLink = text
                             self.deleteLinkPreview()
-                            self.buildPreviewLink(imageUrl: imageUrl, title: title, description: description, stringURl: text)
+                            if !self.textFieldSend.text.isEmpty || self.textFieldSend.text.contains(text){
+                                self.buildPreviewLink(imageUrl: imageUrl, title: title, description: description, stringURl: text)
+                            }
                         }
                     },
                                               onError: { error in
@@ -5953,7 +5957,7 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource, AVAudioPla
                     textChat = textChat.components(separatedBy: "■")[0]
                     textChat = textChat.trimmingCharacters(in: .whitespacesAndNewlines)
                 }
-                if !fileChat.isEmpty {
+                if !fileChat.isEmpty && dataMessages[indexPath.row]["lock"] as? String != "2" {
                     textChat = textChat.components(separatedBy: "|")[1]
                 }
                 let finalAtribute = textChat.richText()

+ 18 - 0
NexilisLite/NexilisLite/Source/View/Control/NotificationSound.swift

@@ -143,6 +143,12 @@ public class NotificationSound: UIViewController, UITableViewDelegate, UITableVi
                 func playAudio() {
                     if FileManager.default.fileExists(atPath: audioURL.path) {
                         do {
+                            do {
+                                try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
+                                try AVAudioSession.sharedInstance().setActive(true)
+                            } catch {
+                                
+                            }
                             Nexilis.sharedAudioPlayer = try AVAudioPlayer(contentsOf: audioURL)
                             Nexilis.sharedAudioPlayer?.prepareToPlay()
                             Nexilis.sharedAudioPlayer?.play()
@@ -156,6 +162,12 @@ public class NotificationSound: UIViewController, UITableViewDelegate, UITableVi
                                 let tempPath = cachesDirectory.appendingPathComponent(nameSound)
                                 try audioData.write(to: tempPath)
                                 do {
+                                    do {
+                                        try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
+                                        try AVAudioSession.sharedInstance().setActive(true)
+                                    } catch {
+                                        
+                                    }
                                     Nexilis.sharedAudioPlayer = try AVAudioPlayer(contentsOf: tempPath)
                                     Nexilis.sharedAudioPlayer?.prepareToPlay()
                                     Nexilis.sharedAudioPlayer?.play()
@@ -175,6 +187,12 @@ public class NotificationSound: UIViewController, UITableViewDelegate, UITableVi
                 soundURL = Bundle.resourcesMediaBundle(for: Nexilis.self).url(forResource: nameSound, withExtension: "mp3")
             }
             do {
+                do {
+                    try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
+                    try AVAudioSession.sharedInstance().setActive(true)
+                } catch {
+                    
+                }
                 Nexilis.sharedAudioPlayer = try AVAudioPlayer(contentsOf: soundURL!)
                 Nexilis.sharedAudioPlayer?.prepareToPlay()
                 Nexilis.sharedAudioPlayer?.play()

+ 1 - 1
NexilisLite/Podfile

@@ -7,7 +7,7 @@ target 'NexilisLite' do
 
   # Pods for NexilisLite
 
-  pod 'nuSDKService', '4.0.17'
+  pod 'nuSDKService', '4.0.18'
   pod 'FMDB', '~> 2.7.12'
   pod 'NotificationBannerSwift', :git => 'https://github.com/Daltron/NotificationBanner.git', :tag => '4.0.0'
   pod 'Alamofire', '~> 5.10.2'

+ 1 - 1
StreamShield/Podfile

@@ -6,6 +6,6 @@ target 'StreamShield' do
   use_frameworks!
 
   # Pods for StreamShield
-  pod 'nuSDKService', '~> 4.0.17'
+  pod 'nuSDKService', '~> 4.0.18'
 
 end

+ 1 - 1
StreamShield/StreamShield.podspec

@@ -22,7 +22,7 @@ Pod::Spec.new do |spec|
   spec.source_files = 'StreamShield/Source/**/*'
   spec.resource_bundles = { 'StreamShield' => ['StreamShield/Resource/**/*']}
   spec.swift_version = '5.5.1'
-  spec.dependency 'nuSDKService', '~> 4.0.17'
+  spec.dependency 'nuSDKService', '~> 4.0.18'
   spec.ios.vendored_frameworks = "StreamShield.framework"
   spec.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64', 'ENABLE_BITCODE' => 'NO' }
   spec.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64', 'ENABLE_BITCODE' => 'NO' }