Browse Source

fix: audio & video crash
fix: ringtone, ringbacktone, busy

alqindiirsyam 5 months ago
parent
commit
c555381bfd

+ 29 - 19
AppBuilder/AppBuilder.xcodeproj/project.pbxproj

@@ -3,7 +3,7 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 70;
+	objectVersion = 54;
 	objects = {
 
 /* Begin PBXBuildFile section */
@@ -30,6 +30,8 @@
 		CD9D59E12BEE1D30008014B4 /* disini_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = CD9D59D62BEE1D30008014B4 /* disini_icon.png */; };
 		CD9D59E22BEE1D30008014B4 /* kmi_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = CD9D59D72BEE1D30008014B4 /* kmi_icon.png */; };
 		CD9D59E32BEE1D30008014B4 /* nu_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = CD9D59D82BEE1D30008014B4 /* nu_icon.png */; };
+		CDFA682D2D841F6200A13E90 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CDFA68292D841F6200A13E90 /* MainInterface.storyboard */; };
+		CDFA682E2D841F6200A13E90 /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFA682A2D841F6200A13E90 /* ShareViewController.swift */; };
 		D1E579A46512EF4E61108DA3 /* Pods_AppBuilder.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1DD646CE636AEAED9C2B9F1 /* Pods_AppBuilder.framework */; };
 /* End PBXBuildFile section */
 
@@ -96,23 +98,13 @@
 		CD9D59D72BEE1D30008014B4 /* kmi_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = kmi_icon.png; sourceTree = "<group>"; };
 		CD9D59D82BEE1D30008014B4 /* nu_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = nu_icon.png; sourceTree = "<group>"; };
 		CDE27BA42D53641D006298BD /* AppBuilder.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = AppBuilder.entitlements; sourceTree = "<group>"; };
+		CDFA68262D841F6200A13E90 /* AppBuilderShare.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = AppBuilderShare.entitlements; sourceTree = "<group>"; };
+		CDFA68272D841F6200A13E90 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		CDFA68282D841F6200A13E90 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = "<group>"; };
+		CDFA682A2D841F6200A13E90 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = "<group>"; };
 		D1DD646CE636AEAED9C2B9F1 /* Pods_AppBuilder.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AppBuilder.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
-/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
-		CD9641592D6495FE004193D0 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {
-			isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
-			membershipExceptions = (
-				Info.plist,
-			);
-			target = CD08A15D2D5EEDA5005B4EAC /* AppBuilderShare */;
-		};
-/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
-
-/* Begin PBXFileSystemSynchronizedRootGroup section */
-		CD9641552D6495F3004193D0 /* AppBuilderShare */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (CD9641592D6495FE004193D0 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = AppBuilderShare; sourceTree = "<group>"; };
-/* End PBXFileSystemSynchronizedRootGroup section */
-
 /* Begin PBXFrameworksBuildPhase section */
 		2401CE93275490DB00B323BB /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
@@ -136,7 +128,7 @@
 			isa = PBXGroup;
 			children = (
 				2401CE98275490DB00B323BB /* AppBuilder */,
-				CD9641552D6495F3004193D0 /* AppBuilderShare */,
+				CDFA682B2D841F6200A13E90 /* AppBuilderShare */,
 				D555D5E529C625D02EB38D49 /* Frameworks */,
 				6E32BCCF4DE50EE1A90E8AAE /* Pods */,
 				2401CE97275490DB00B323BB /* Products */,
@@ -192,6 +184,17 @@
 			path = Pods;
 			sourceTree = "<group>";
 		};
+		CDFA682B2D841F6200A13E90 /* AppBuilderShare */ = {
+			isa = PBXGroup;
+			children = (
+				CDFA68262D841F6200A13E90 /* AppBuilderShare.entitlements */,
+				CDFA68272D841F6200A13E90 /* Info.plist */,
+				CDFA68292D841F6200A13E90 /* MainInterface.storyboard */,
+				CDFA682A2D841F6200A13E90 /* ShareViewController.swift */,
+			);
+			path = AppBuilderShare;
+			sourceTree = "<group>";
+		};
 		D555D5E529C625D02EB38D49 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
@@ -237,9 +240,6 @@
 			);
 			dependencies = (
 			);
-			fileSystemSynchronizedGroups = (
-				CD9641552D6495F3004193D0 /* AppBuilderShare */,
-			);
 			name = AppBuilderShare;
 			productName = AppBuilderShare;
 			productReference = CD08A15E2D5EEDA5005B4EAC /* AppBuilderShare.appex */;
@@ -307,6 +307,7 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				CDFA682D2D841F6200A13E90 /* MainInterface.storyboard in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -374,6 +375,7 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				CDFA682E2D841F6200A13E90 /* ShareViewController.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -404,6 +406,14 @@
 			name = LaunchScreen.storyboard;
 			sourceTree = "<group>";
 		};
+		CDFA68292D841F6200A13E90 /* MainInterface.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				CDFA68282D841F6200A13E90 /* Base */,
+			);
+			name = MainInterface.storyboard;
+			sourceTree = "<group>";
+		};
 /* End PBXVariantGroup section */
 
 /* Begin XCBuildConfiguration section */

+ 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.7'
+  spec.dependency 'nuSDKService', '4.0.7'
   spec.dependency 'NotificationBannerSwift'
   spec.dependency 'Alamofire', '~> 5.10.2'
   spec.dependency 'SDWebImage', '~> 5.20.0'

BIN
NexilisLite/NexilisLite/Resource/Sound/pb_call_in_ios.mp3


+ 23 - 29
NexilisLite/NexilisLite/Source/Nexilis.swift

@@ -125,9 +125,9 @@ public class Nexilis: NSObject {
     
     public static var callAPNActivated = false
     
-    static var ringtonePlayer: AVAudioPlayer?
-    static var ringbacktonePlayer: AVAudioPlayer?
-    static var busyPlayer: AVAudioPlayer?
+    private static var ringtonePlayer: AVAudioPlayer?
+    private static var ringbacktonePlayer: AVAudioPlayer?
+    private static var busyPlayer: AVAudioPlayer?
     static var sharedAudioPlayer: AVAudioPlayer?
     
     private func createDelegate() {
@@ -304,61 +304,55 @@ public class Nexilis: NSObject {
         _ = LocationManager()
     }
     
+    private static var ringtoneID: SystemSoundID = 0
+    
     public static func playRingtoneCall() {
-        var ringtonePath = Bundle.resourceBundle(for: Nexilis.self).url(forResource: "pb_call_in_long", withExtension: "mp3")
+        var ringtonePath = Bundle.resourceBundle(for: Nexilis.self).url(forResource: "pb_call_in_ios", withExtension: "mp3")
         if ringtonePath == nil {
-            ringtonePath = Bundle.resourcesMediaBundle(for: Nexilis.self).url(forResource: "pb_call_in_long", withExtension: "mp3")
+            ringtonePath = Bundle.resourcesMediaBundle(for: Nexilis.self).url(forResource: "pb_call_in_ios", withExtension: "mp3")
         }
-        do {
-            ringtonePlayer = try AVAudioPlayer(contentsOf:ringtonePath!)
-            ringtonePlayer?.numberOfLoops = -1
-            ringtonePlayer?.prepareToPlay()
-            ringtonePlayer?.play()
-        } catch {
-            
+        if let a = ringtonePath {
+            AudioServicesCreateSystemSoundID(a as CFURL, &ringtoneID)
+            AudioServicesPlaySystemSound(ringtoneID)
         }
     }
     
     public static func stopRingtoneCall() {
-        ringtonePlayer?.stop()
+        AudioServicesDisposeSystemSoundID(ringtoneID)
     }
     
+    private static var ringBackToneID: SystemSoundID = 0
+    
     public static func playRingbacktoneCall() {
         var ringbacktonePath = Bundle.resourceBundle(for: Nexilis.self).url(forResource: "pb_call_out", withExtension: "mp3")
         if ringbacktonePath == nil {
             ringbacktonePath = Bundle.resourcesMediaBundle(for: Nexilis.self).url(forResource: "pb_call_out", withExtension: "mp3")
         }
-        do {
-            ringbacktonePlayer = try AVAudioPlayer(contentsOf:ringbacktonePath!)
-            ringbacktonePlayer?.numberOfLoops = -1
-            ringbacktonePlayer?.prepareToPlay()
-            ringbacktonePlayer?.play()
-        } catch {
-            
+        if let a = ringbacktonePath {
+            AudioServicesCreateSystemSoundID(a as CFURL, &ringBackToneID)
+            AudioServicesPlaySystemSound(ringBackToneID)
         }
     }
     
     public static func stopRingbacktoneCall() {
-        ringbacktonePlayer?.stop()
+        AudioServicesDisposeSystemSoundID(ringBackToneID)
     }
     
+    private static var busyToneID: SystemSoundID = 0
+    
     public static func playBusyCall() {
         var busyPath = Bundle.resourceBundle(for: Nexilis.self).url(forResource: "pb_call_busy", withExtension: "mp3")
         if busyPath == nil {
             busyPath = Bundle.resourcesMediaBundle(for: Nexilis.self).url(forResource: "pb_call_busy", withExtension: "mp3")
         }
-        do {
-            busyPlayer = try AVAudioPlayer(contentsOf:busyPath!)
-            busyPlayer?.numberOfLoops = 1
-            busyPlayer?.prepareToPlay()
-            busyPlayer?.play()
-        } catch {
-            
+        if let a = busyPath {
+            AudioServicesCreateSystemSoundID(a as CFURL, &busyToneID)
+            AudioServicesPlaySystemSound(busyToneID)
         }
     }
     
     public static func stopBusyCall() {
-        busyPlayer?.stop()
+        AudioServicesDisposeSystemSoundID(busyToneID)
     }
     
     public static func addFB(viewController: UIViewController, fromMAB: Bool) {

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

@@ -274,16 +274,17 @@ class QmeraAudioViewController: UIViewController {
     
     override func viewWillDisappear(_ animated: Bool) {
         UIDevice.current.isProximityMonitoringEnabled = false
-        NotificationCenter.default.removeObserver(self)
         Nexilis.floatingButton.isHidden = false
         Nexilis.callAPNActivated = false
     }
     
     deinit {
+        print("DEINIT.....!!!!!!")
         UIDevice.current.isProximityMonitoringEnabled = false
-        NotificationCenter.default.removeObserver(self)
         Nexilis.floatingButton.isHidden = false
         Nexilis.callAPNActivated = false
+        NotificationCenter.default.removeObserver(self)
+        AVAudioSession.sharedInstance().removeObserver(self, forKeyPath: "outputVolume")
     }
     
     override func viewDidAppear(_ animated: Bool) {

+ 11 - 11
NexilisLite/NexilisLite/Source/View/Call/VideoConferenceViewController.swift

@@ -449,7 +449,7 @@ class VideoConferenceViewController: UIViewController {
                         }
                     }
                 } else {
-                    Nexilis.ringbacktonePlayer?.play()
+                    Nexilis.playRingbacktoneCall()
                     API.initiateCCall(sParty: dataPerson[0]["f_pin"]!, nCamIdx: 1, nResIdx: 2, nVQuality: 4, ivRemoteView: listRemoteViewFix, ivLocalView: cameraView, ivRemoteZ: zoomView)
                 }
             } else {
@@ -516,7 +516,7 @@ class VideoConferenceViewController: UIViewController {
         DispatchQueue.main.async { [self] in
             let data:[AnyHashable : Any] = notification.userInfo!
             if let l_pin = data["l_pin"] as? String {
-                Nexilis.ringtonePlayer?.play()
+                Nexilis.playRingtoneCall()
                 API.initiateCCall(sParty: l_pin, nCamIdx: 1, nResIdx: 2, nVQuality: 4, ivRemoteView: listRemoteViewFix, ivLocalView: cameraView, ivRemoteZ: zoomView)
             }
         }
@@ -1023,9 +1023,9 @@ class VideoConferenceViewController: UIViewController {
     
     func endAllCall() {
         if isInisiator {
-            Nexilis.ringbacktonePlayer?.stop()
+            Nexilis.stopRingbacktoneCall()
         } else {
-            Nexilis.ringtonePlayer?.stop()
+            Nexilis.stopRingtoneCall()
         }
 //        let onGoingCC: String = SecureUserDefaults.shared.value(forKey: "onGoingCC") ?? ""
 //        if !onGoingCC.isEmpty {
@@ -1221,7 +1221,7 @@ class VideoConferenceViewController: UIViewController {
         }
         else if (state == Nexilis.VIDEO_CALL_OFFHOOK) {
             if isInisiator {
-                Nexilis.ringbacktonePlayer?.stop()
+                Nexilis.stopRingbacktoneCall()
             }
             let channel = arrayMessage[3]
             remoteChannel[String(channel)] = String(arrayMessage[5])
@@ -1341,9 +1341,9 @@ class VideoConferenceViewController: UIViewController {
             }
         } else if (state == Nexilis.VIDEO_CALL_END || state == Nexilis.AUDIO_CALL_END) {
             if isInisiator {
-                Nexilis.ringbacktonePlayer?.stop()
+                Nexilis.stopRingbacktoneCall()
             } else {
-                Nexilis.ringtonePlayer?.stop()
+                Nexilis.stopRingtoneCall()
             }
             let onGoingCC: String = SecureUserDefaults.shared.value(forKey: "onGoingCC") ?? ""
             if !onGoingCC.isEmpty {
@@ -1483,9 +1483,9 @@ class VideoConferenceViewController: UIViewController {
             }
         } else if (state == Nexilis.OFFLINE) {
             if isInisiator {
-                Nexilis.ringbacktonePlayer?.stop()
+                Nexilis.stopRingbacktoneCall()
             } else {
-                Nexilis.ringtonePlayer?.stop()
+                Nexilis.stopRingtoneCall()
             }
             let onGoingCC: String = SecureUserDefaults.shared.value(forKey: "onGoingCC") ?? ""
             DispatchQueue.main.async {
@@ -1554,9 +1554,9 @@ class VideoConferenceViewController: UIViewController {
             }
         } else if (state == Nexilis.BUSY) {
             if isInisiator {
-                Nexilis.ringbacktonePlayer?.stop()
+                Nexilis.stopRingbacktoneCall()
             } else {
-                Nexilis.ringtonePlayer?.stop()
+                Nexilis.stopRingtoneCall()
             }
             let onGoingCC: String = SecureUserDefaults.shared.value(forKey: "onGoingCC") ?? ""
             DispatchQueue.main.async { [self] in

+ 1 - 1
NexilisLite/Podfile

@@ -7,7 +7,7 @@ target 'NexilisLite' do
 
   # Pods for NexilisLite
 
-  pod 'nuSDKService', '~> 4.0.8'
+  pod 'nuSDKService', '4.0.7'
   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.5'
+  pod 'nuSDKService', '4.0.7'
 
 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.5'
+  spec.dependency 'nuSDKService', '4.0.7'
   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' }

+ 28 - 25
StreamShield/StreamShield.xcodeproj/project.pbxproj

@@ -8,6 +8,9 @@
 
 /* Begin PBXBuildFile section */
 		4CA3A8D13EA830BD06994857 /* Pods_StreamShield.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97DA666C9445DC5537AF51DD /* Pods_StreamShield.framework */; };
+		CDFA683B2D841F8E00A13E90 /* SecurityShield.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFA68362D841F8E00A13E90 /* SecurityShield.swift */; };
+		CDFA683C2D841F8E00A13E90 /* StreamShield.docc in Sources */ = {isa = PBXBuildFile; fileRef = CDFA68392D841F8E00A13E90 /* StreamShield.docc */; };
+		CDFA683D2D841F8E00A13E90 /* StreamShield.h in Headers */ = {isa = PBXBuildFile; fileRef = CDFA68382D841F8E00A13E90 /* StreamShield.h */; settings = {ATTRIBUTES = (Public, ); }; };
 /* End PBXBuildFile section */
 
 /* Begin PBXFileReference section */
@@ -15,29 +18,11 @@
 		699A8C56FF5DC7FA59223CC2 /* Pods-StreamShield.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StreamShield.debug.xcconfig"; path = "Target Support Files/Pods-StreamShield/Pods-StreamShield.debug.xcconfig"; sourceTree = "<group>"; };
 		97DA666C9445DC5537AF51DD /* Pods_StreamShield.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_StreamShield.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		CDB6D7EC2CD3553900615C4D /* StreamShield.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = StreamShield.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		CDFA68362D841F8E00A13E90 /* SecurityShield.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecurityShield.swift; sourceTree = "<group>"; };
+		CDFA68382D841F8E00A13E90 /* StreamShield.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StreamShield.h; sourceTree = "<group>"; };
+		CDFA68392D841F8E00A13E90 /* StreamShield.docc */ = {isa = PBXFileReference; lastKnownFileType = folder.documentationcatalog; path = StreamShield.docc; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
-/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
-		CDB6D7F32CD3553900615C4D /* Exceptions for "StreamShield" folder in "StreamShield" target */ = {
-			isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
-			publicHeaders = (
-				StreamShield.h,
-			);
-			target = CDB6D7EB2CD3553900615C4D /* StreamShield */;
-		};
-/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
-
-/* Begin PBXFileSystemSynchronizedRootGroup section */
-		CDB6D7EE2CD3553900615C4D /* StreamShield */ = {
-			isa = PBXFileSystemSynchronizedRootGroup;
-			exceptions = (
-				CDB6D7F32CD3553900615C4D /* Exceptions for "StreamShield" folder in "StreamShield" target */,
-			);
-			path = StreamShield;
-			sourceTree = "<group>";
-		};
-/* End PBXFileSystemSynchronizedRootGroup section */
-
 /* Begin PBXFrameworksBuildPhase section */
 		CDB6D7E92CD3553900615C4D /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
@@ -70,7 +55,7 @@
 		CDB6D7E22CD3553900615C4D = {
 			isa = PBXGroup;
 			children = (
-				CDB6D7EE2CD3553900615C4D /* StreamShield */,
+				CDFA683A2D841F8E00A13E90 /* StreamShield */,
 				CDB6D7ED2CD3553900615C4D /* Products */,
 				4DE9A009F0C99904D2388707 /* Pods */,
 				407A271A712B5439E6100999 /* Frameworks */,
@@ -85,6 +70,24 @@
 			name = Products;
 			sourceTree = "<group>";
 		};
+		CDFA68372D841F8E00A13E90 /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				CDFA68362D841F8E00A13E90 /* SecurityShield.swift */,
+			);
+			path = Source;
+			sourceTree = "<group>";
+		};
+		CDFA683A2D841F8E00A13E90 /* StreamShield */ = {
+			isa = PBXGroup;
+			children = (
+				CDFA68372D841F8E00A13E90 /* Source */,
+				CDFA68382D841F8E00A13E90 /* StreamShield.h */,
+				CDFA68392D841F8E00A13E90 /* StreamShield.docc */,
+			);
+			path = StreamShield;
+			sourceTree = "<group>";
+		};
 /* End PBXGroup section */
 
 /* Begin PBXHeadersBuildPhase section */
@@ -92,6 +95,7 @@
 			isa = PBXHeadersBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				CDFA683D2D841F8E00A13E90 /* StreamShield.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -112,9 +116,6 @@
 			);
 			dependencies = (
 			);
-			fileSystemSynchronizedGroups = (
-				CDB6D7EE2CD3553900615C4D /* StreamShield */,
-			);
 			name = StreamShield;
 			productName = StreamShield;
 			productReference = CDB6D7EC2CD3553900615C4D /* StreamShield.framework */;
@@ -193,6 +194,8 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				CDFA683B2D841F8E00A13E90 /* SecurityShield.swift in Sources */,
+				CDFA683C2D841F8E00A13E90 /* StreamShield.docc in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};