[
  {
    "path": ".gitignore",
    "content": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n## Build generated\nbuild/\nDerivedData/\n\n## Various settings\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata/\nxcshareddata\n\n## Other\n*.moved-aside\n*.xccheckout\n*.xcscmblueprint\n*.xcuserstate\n*.DS_Store\n*.xcworkspacedata\n*.xcscheme\nxcschememanagement.plist\n*.xcbkptlist\n\n## Obj-C/Swift specific\n*.hmap\n*.ipa\n*.dSYM.zip\n*.dSYM\n*._*\n\n## Playgrounds\ntimeline.xctimeline\nplayground.xcworkspace\n\n# Swift Package Manager\n#\n# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.\n# Packages/\n# Package.pins\n# Package.resolved\n# *.xcodeproj\n#\n# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata\n# hence it is not needed unless you have added a package configuration file to your project\n# .swiftpm\n\n.build/\n\n# CocoaPods\n#\n# We recommend against adding the Pods directory to your .gitignore. However\n# you should judge for yourself, the pros and cons are mentioned at:\n# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control\n/Pods\n\n# Carthage\n#\n# Add this line if you want to avoid checking in source code from Carthage dependencies.\n# Carthage/Checkouts\n\nCarthage/Build\n\n# Accio dependency management\nDependencies/\n.accio/\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/#source-control\n\nfastlane/report.xml\nfastlane/Preview.html\nfastlane/screenshots\nfastlane/test_output\n\n# Code Injection\n#\n# After new code Injection tools there's a generated folder /iOSInjectionProject\n# https://github.com/johnno1962/injectionforxcode\n\niOSInjectionProject/\n\n# *-Info.plist\n!*-Info.sample.plist"
  },
  {
    "path": "Broadcast/Broadcast-Bridging-Header.h",
    "content": "//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n#import \"SampleHandlerUtil.h\"\n#import <AgoraReplayKitExtension/AgoraReplayKitExt.h>\n"
  },
  {
    "path": "Broadcast/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>NSExtension</key>\n\t<dict>\n\t\t<key>NSExtensionPointIdentifier</key>\n\t\t<string>com.apple.broadcast-services-upload</string>\n\t\t<key>NSExtensionPrincipalClass</key>\n\t\t<string>$(PRODUCT_MODULE_NAME).SampleHandler</string>\n\t\t<key>RPBroadcastProcessMode</key>\n\t\t<string>RPBroadcastProcessModeSampleBuffer</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Broadcast/SampleHandler.swift",
    "content": "//\n//  SampleHandler.swift\n//  Broadcast\n//\n//  Created by Thomas Woodfin twoodfin@berkeley.edu on 05/22/2022.\n//\n\nimport ReplayKit\n\nclass SampleHandler: RPBroadcastSampleHandler {\n\n    override func broadcastStarted(withSetupInfo setupInfo: [String : NSObject]?) {\n        // User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional.\n        AgoraReplayKitExt.shareInstance().start(self)\n    }\n    \n    override func broadcastPaused() {\n        AgoraReplayKitExt.shareInstance().pause()\n    }\n    \n    override func broadcastResumed() {\n        AgoraReplayKitExt.shareInstance().resume()\n    }\n    \n    override func broadcastFinished() {\n        AgoraReplayKitExt.shareInstance().stop()\n    }\n    \n    override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) {\n        AgoraReplayKitExt.shareInstance().push(sampleBuffer, with: sampleBufferType)\n    }\n}\n\nextension SampleHandler: AgoraReplayKitExtDelegate {\n    func broadcastFinished(_ broadcast: AgoraReplayKitExt, reason: AgoraReplayKitExtReason) {\n        debugPrint(\"broadcastFinished:\\(reason.rawValue)\")\n        switch reason {\n        case .connectFail:\n            let error = NSError(domain: \"ConnectFail\", code: 0, userInfo: nil)\n            finishBroadcastWithError(error)\n            break\n        case .disconnect:\n            let error = NSError(domain: \"Disconnect\", code: 0, userInfo: nil)\n            finishBroadcastWithError(error)\n            break\n        case .initiativeStop:\n            // Pass nil in objc method to avoid showing alert view\n            SampleHandlerUtil.finishBroadcast(withNilError: self)\n            break\n        default: break\n        }\n    }\n}\n"
  },
  {
    "path": "Broadcast/SampleHandlerUtil.h",
    "content": "//\n//  SampleHandlerUtil.h\n//  Broadcast\n//\n//  Created by Thomas Woodfin twoodfin@berkeley.edu on 05/22/2022.\n//\n\n#import <Foundation/Foundation.h>\n#import <ReplayKit/ReplayKit.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface SampleHandlerUtil : NSObject\n+ (void)finishBroadcastWithNilError:(nullable RPBroadcastSampleHandler *)sampleHandler;\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Broadcast/SampleHandlerUtil.m",
    "content": "//\n//  SampleHandlerUtil.m\n//  Broadcast\n//\n//  Created by Thomas Woodfin twoodfin@berkeley.edu on 05/22/2022.\n//\n\n#import \"SampleHandlerUtil.h\"\n\n@implementation SampleHandlerUtil\n+ (void)finishBroadcastWithNilError:(nullable RPBroadcastSampleHandler *)sampleHandler {\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wnonnull\"\n    [sampleHandler finishBroadcastWithError:nil];\n#pragma clang diagnostic pop\n}\n@end\n"
  },
  {
    "path": "Podfile",
    "content": "# Uncomment the next line to define a global platform for your project\n# platform :ios, '9.0'\n\ntarget 'Broadcast' do\n  # Comment the next line if you don't want to use dynamic frameworks\n  use_frameworks!\n\n  # Pods for Broadcast\n  pod 'AgoraRtcEngine_iOS'\n\nend\n\ntarget 'ScreenSharing' do\n  # Comment the next line if you don't want to use dynamic frameworks\n  use_frameworks!\n\n  # Pods for ScreenSharing\n  pod 'AGEVideoLayout'\n  pod 'AgoraRtcEngine_iOS'\n  pod 'AgoraMediaPlayer_iOS'\n\n  target 'ScreenSharingTests' do\n    inherit! :search_paths\n    # Pods for testing\n  end\n\n  target 'ScreenSharingUITests' do\n    # Pods for testing\n  end\n\nend\n"
  },
  {
    "path": "ScreenSharing/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  ScreenSharing\n//\n//  Created by Thomas Woodfin twoodfin@berkeley.edu on 05/22/2022.\n//\n\nimport UIKit\n\n@main\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n        // Override point for customization after application launch.\n        return true\n    }\n\n    // MARK: UISceneSession Lifecycle\n\n    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {\n        // Called when a new scene session is being created.\n        // Use this method to select a configuration to create the new scene with.\n        return UISceneConfiguration(name: \"Default Configuration\", sessionRole: connectingSceneSession.role)\n    }\n\n    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {\n        // Called when the user discards a scene session.\n        // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.\n        // Use this method to release any resources that were specific to the discarded scenes, as they will not return.\n    }\n\n\n}\n\n"
  },
  {
    "path": "ScreenSharing/Assets.xcassets/AccentColor.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "ScreenSharing/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"20x20\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"20x20\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"40x40\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"40x40\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"60x60\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"60x60\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"1x\",\n      \"size\" : \"20x20\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"2x\",\n      \"size\" : \"20x20\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"1x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"2x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"1x\",\n      \"size\" : \"40x40\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"2x\",\n      \"size\" : \"40x40\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"2x\",\n      \"size\" : \"76x76\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"2x\",\n      \"size\" : \"83.5x83.5\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"scale\" : \"1x\",\n      \"size\" : \"1024x1024\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "ScreenSharing/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "ScreenSharing/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"13122.16\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13104.12\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" xcode11CocoaTouchSystemColor=\"systemBackgroundColor\" cocoaTouchSystemColor=\"whiteColor\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"6Tk-OE-BBY\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "ScreenSharing/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"20037\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"QhH-33-aj3\">\n    <device id=\"retina6_1\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"20020\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"System colors in document resources\" minToolsVersion=\"11.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Navigation Controller-->\n        <scene sceneID=\"RnI-f9-ZYq\">\n            <objects>\n                <navigationController id=\"QhH-33-aj3\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"8wP-Bs-8O0\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"BYZ-38-t0r\" kind=\"relationship\" relationship=\"rootViewController\" id=\"k6h-da-M4D\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"ahJ-O2-XSx\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-838\" y=\"102\"/>\n        </scene>\n        <!--Join Channel View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"JoinChannelViewController\" customModule=\"ScreenSharing\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"video.badge.plus.fill\" catalog=\"system\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"jXh-ZS-qli\">\n                                <rect key=\"frame\" x=\"86.5\" y=\"190\" width=\"240\" height=\"128\"/>\n                                <color key=\"tintColor\" systemColor=\"systemPinkColor\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"238.5\" id=\"Inx-i7-nzD\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"130\" id=\"fzk-5O-fpg\"/>\n                                </constraints>\n                            </imageView>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"tZQ-ds-b6C\">\n                                <rect key=\"frame\" x=\"139\" y=\"475\" width=\"136\" height=\"47\"/>\n                                <color key=\"backgroundColor\" systemColor=\"tintColor\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"47\" id=\"9Hr-nD-AIi\"/>\n                                    <constraint firstAttribute=\"width\" constant=\"136\" id=\"iNF-VF-pAp\"/>\n                                </constraints>\n                                <fontDescription key=\"fontDescription\" type=\"system\" weight=\"semibold\" pointSize=\"20\"/>\n                                <inset key=\"imageEdgeInsets\" minX=\"0.0\" minY=\"0.0\" maxX=\"2.2250738585072014e-308\" maxY=\"0.0\"/>\n                                <state key=\"normal\" title=\"Join\"/>\n                                <connections>\n                                    <segue destination=\"zFi-EW-Abj\" kind=\"show\" id=\"GVi-9R-KGO\"/>\n                                </connections>\n                            </button>\n                            <textField opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" placeholder=\"Enter Channel Name\" textAlignment=\"center\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"xjJ-JC-FTh\">\n                                <rect key=\"frame\" x=\"40\" y=\"388\" width=\"334\" height=\"40\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"40\" id=\"Oaf-9h-cIV\"/>\n                                </constraints>\n                                <color key=\"textColor\" white=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"20\"/>\n                                <textInputTraits key=\"textInputTraits\"/>\n                            </textField>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Channel Name\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"djS-5a-MAR\">\n                                <rect key=\"frame\" x=\"40\" y=\"354\" width=\"135\" height=\"24\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"135\" id=\"0ca-kl-hGT\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"24\" id=\"iXT-h3-hDd\"/>\n                                </constraints>\n                                <fontDescription key=\"fontDescription\" name=\"TrebuchetMS-Bold\" family=\"Trebuchet MS\" pointSize=\"20\"/>\n                                <nil key=\"textColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <viewLayoutGuide key=\"safeArea\" id=\"6Tk-OE-BBY\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstItem=\"6Tk-OE-BBY\" firstAttribute=\"trailing\" secondItem=\"xjJ-JC-FTh\" secondAttribute=\"trailing\" constant=\"40\" id=\"4KK-cK-gE6\"/>\n                            <constraint firstItem=\"jXh-ZS-qli\" firstAttribute=\"centerX\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"centerX\" id=\"Nqn-f2-CnW\"/>\n                            <constraint firstItem=\"xjJ-JC-FTh\" firstAttribute=\"leading\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"leading\" constant=\"40\" id=\"bly-3Q-gv4\"/>\n                            <constraint firstItem=\"tZQ-ds-b6C\" firstAttribute=\"top\" secondItem=\"xjJ-JC-FTh\" secondAttribute=\"bottom\" constant=\"47\" id=\"ctT-JV-OZe\"/>\n                            <constraint firstItem=\"jXh-ZS-qli\" firstAttribute=\"top\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"top\" constant=\"100\" id=\"h6F-Po-fn1\"/>\n                            <constraint firstItem=\"xjJ-JC-FTh\" firstAttribute=\"top\" secondItem=\"djS-5a-MAR\" secondAttribute=\"bottom\" constant=\"10\" id=\"h7Y-fk-EgH\"/>\n                            <constraint firstItem=\"xjJ-JC-FTh\" firstAttribute=\"top\" secondItem=\"jXh-ZS-qli\" secondAttribute=\"bottom\" constant=\"70\" id=\"yQO-fl-gnM\"/>\n                            <constraint firstItem=\"tZQ-ds-b6C\" firstAttribute=\"centerX\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"centerX\" id=\"yXn-ZR-spq\"/>\n                            <constraint firstItem=\"djS-5a-MAR\" firstAttribute=\"leading\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"leading\" constant=\"40\" id=\"zbW-UZ-MAf\"/>\n                        </constraints>\n                    </view>\n                    <navigationItem key=\"navigationItem\" id=\"NLJ-ey-Wss\"/>\n                    <connections>\n                        <outlet property=\"channelTextField\" destination=\"xjJ-JC-FTh\" id=\"N42-kD-Wga\"/>\n                        <outlet property=\"joinButton\" destination=\"tZQ-ds-b6C\" id=\"3yf-64-SdD\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-78.260869565217391\" y=\"102.45535714285714\"/>\n        </scene>\n        <!--Screen Share Main-->\n        <scene sceneID=\"1uG-rC-toC\">\n            <objects>\n                <viewController title=\"Join Channel Audio\" id=\"zFi-EW-Abj\" userLabel=\"Screen Share Main\" customClass=\"ScreenSharingViewController\" customModule=\"ScreenSharing\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"NOz-co-GQz\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view hidden=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"fof-4v-QK2\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"413\" width=\"414\" height=\"70\"/>\n                                <subviews>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Screen on sharing, you can use another device join the same channel to interactions\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hEv-1W-d2v\">\n                                        <rect key=\"frame\" x=\"30\" y=\"0.0\" width=\"354\" height=\"39.5\"/>\n                                        <fontDescription key=\"fontDescription\" name=\"MarkerFelt-Thin\" family=\"Marker Felt\" pointSize=\"18\"/>\n                                        <color key=\"textColor\" white=\"0.33333333329999998\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                    </label>\n                                </subviews>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"hEv-1W-d2v\" secondAttribute=\"trailing\" constant=\"30\" id=\"0DG-Bw-y5W\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"70\" id=\"F3y-Tn-hOQ\"/>\n                                    <constraint firstItem=\"hEv-1W-d2v\" firstAttribute=\"leading\" secondItem=\"fof-4v-QK2\" secondAttribute=\"leading\" constant=\"30\" id=\"JwZ-dc-4Mi\"/>\n                                    <constraint firstItem=\"hEv-1W-d2v\" firstAttribute=\"top\" secondItem=\"fof-4v-QK2\" secondAttribute=\"top\" id=\"b2Y-uS-ZfD\"/>\n                                </constraints>\n                            </view>\n                        </subviews>\n                        <viewLayoutGuide key=\"safeArea\" id=\"yow-nN-W5e\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstItem=\"yow-nN-W5e\" firstAttribute=\"trailing\" secondItem=\"fof-4v-QK2\" secondAttribute=\"trailing\" id=\"9Q0-NR-kNS\"/>\n                            <constraint firstItem=\"fof-4v-QK2\" firstAttribute=\"centerX\" secondItem=\"NOz-co-GQz\" secondAttribute=\"centerX\" id=\"Ac5-Yl-fqX\"/>\n                            <constraint firstItem=\"fof-4v-QK2\" firstAttribute=\"centerY\" secondItem=\"NOz-co-GQz\" secondAttribute=\"centerY\" id=\"njc-U2-zDf\"/>\n                            <constraint firstItem=\"fof-4v-QK2\" firstAttribute=\"leading\" secondItem=\"yow-nN-W5e\" secondAttribute=\"leading\" id=\"vWY-H4-Bu1\"/>\n                        </constraints>\n                    </view>\n                    <navigationItem key=\"navigationItem\" id=\"3Lg-z8-m6Y\"/>\n                    <connections>\n                        <outlet property=\"infoContainerView\" destination=\"fof-4v-QK2\" id=\"c1W-Fp-q7p\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Y4K-5N-Y9u\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"744.92753623188412\" y=\"101.78571428571428\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"video.badge.plus.fill\" catalog=\"system\" width=\"128\" height=\"88\"/>\n        <systemColor name=\"systemPinkColor\">\n            <color red=\"1\" green=\"0.17647058823529413\" blue=\"0.33333333333333331\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </systemColor>\n        <systemColor name=\"tintColor\">\n            <color red=\"0.0\" green=\"0.47843137254901963\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </systemColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "ScreenSharing/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>UIApplicationSceneManifest</key>\n\t<dict>\n\t\t<key>UIApplicationSupportsMultipleScenes</key>\n\t\t<false/>\n\t\t<key>UISceneConfigurations</key>\n\t\t<dict>\n\t\t\t<key>UIWindowSceneSessionRoleApplication</key>\n\t\t\t<array>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>UISceneConfigurationName</key>\n\t\t\t\t\t<string>Default Configuration</string>\n\t\t\t\t\t<key>UISceneDelegateClassName</key>\n\t\t\t\t\t<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>\n\t\t\t\t\t<key>UISceneStoryboardFile</key>\n\t\t\t\t\t<string>Main</string>\n\t\t\t\t</dict>\n\t\t\t</array>\n\t\t</dict>\n\t</dict>\n\t<key>UIBackgroundModes</key>\n\t<array>\n\t\t<string>audio</string>\n\t\t<string>remote-notification</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "ScreenSharing/JoinChannelViewController.swift",
    "content": "//\n//  ViewController.swift\n//  ScreenSharing\n//\n//  Created by Thomas Woodfin twoodfin@berkeley.edu on 05/22/2022.\n//\n\nimport UIKit\n\nclass JoinChannelViewController: UIViewController {\n\n    \n    @IBOutlet weak var channelTextField: UITextField!\n    @IBOutlet weak var joinButton: UIButton!\n        \n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        setupUI()\n    }\n    \n    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n        if let screenSharingVC = segue.destination as? ScreenSharingViewController {\n            channelTextField.resignFirstResponder()\n            screenSharingVC.configs = [\"channelName\": channelTextField.text ?? \"\"]\n        }\n    }\n    \n    private func setupUI() {\n        overrideUserInterfaceStyle = .light\n        joinButton.layer.masksToBounds = true\n        joinButton.layer.cornerRadius = 10\n        channelTextField.layer.masksToBounds = true\n        channelTextField.layer.cornerRadius = 10\n        channelTextField.layer.borderColor = UIColor.darkGray.cgColor\n        channelTextField.layer.borderWidth = 1.0\n        channelTextField.text = \"ThomasWoodfin\"\n        channelTextField.isEnabled = false\n    }\n    \n\n}\n\n"
  },
  {
    "path": "ScreenSharing/SceneDelegate.swift",
    "content": "//\n//  SceneDelegate.swift\n//  ScreenSharing\n//\n//  Created by Thomas Woodfin twoodfin@berkeley.edu on 05/22/2022.\n//\n\nimport UIKit\n\nclass SceneDelegate: UIResponder, UIWindowSceneDelegate {\n\n    var window: UIWindow?\n\n\n    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {\n        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.\n        // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.\n        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).\n        guard let _ = (scene as? UIWindowScene) else { return }\n    }\n\n    func sceneDidDisconnect(_ scene: UIScene) {\n        // Called as the scene is being released by the system.\n        // This occurs shortly after the scene enters the background, or when its session is discarded.\n        // Release any resources associated with this scene that can be re-created the next time the scene connects.\n        // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).\n    }\n\n    func sceneDidBecomeActive(_ scene: UIScene) {\n        // Called when the scene has moved from an inactive state to an active state.\n        // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.\n    }\n\n    func sceneWillResignActive(_ scene: UIScene) {\n        // Called when the scene will move from an active state to an inactive state.\n        // This may occur due to temporary interruptions (ex. an incoming phone call).\n    }\n\n    func sceneWillEnterForeground(_ scene: UIScene) {\n        // Called as the scene transitions from the background to the foreground.\n        // Use this method to undo the changes made on entering the background.\n    }\n\n    func sceneDidEnterBackground(_ scene: UIScene) {\n        // Called as the scene transitions from the foreground to the background.\n        // Use this method to save data, release shared resources, and store enough scene-specific state information\n        // to restore the scene back to its current state.\n    }\n\n\n}\n\n"
  },
  {
    "path": "ScreenSharing/ScreenSharingViewController.swift",
    "content": "//\n//  ScreenSharingViewController.swift\n//  ScreenSharing\n//\n//  Created by Thomas Woodfin twoodfin@berkeley.edu on 05/22/2022.\n//\n\nimport UIKit\nimport ReplayKit\nimport AGEVideoLayout\nimport AgoraRtcKit\nimport AGEVideoLayout\n\nclass ScreenSharingViewController: UIViewController {\n    \n    @IBOutlet weak var infoContainerView: UIView!\n    \n    private var localVideoView = Bundle.loadView(fromNib: \"VideoView\", withType: VideoView.self)\n    private var remoteVideoView = Bundle.loadView(fromNib: \"VideoView\", withType: VideoView.self)\n    \n    private var isJoined: Bool = false\n    private var isScreenSharing: Bool = false\n    private var agoraKit: AgoraRtcEngineKit!\n    private var screenCaptureParams: AgoraScreenCaptureParameters2?\n    \n    public var configs: [String : Any] = [:]\n        \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        setupUI()\n        \n        guard let channelName = configs[\"channelName\"] as? String else {\n            return\n        }\n\n        let config = AgoraRtcEngineConfig()\n        config.appId = \"530490d0e19b4c5994c0b42e7c68ce19\"\n        config.areaCode = AgoraAreaCode.GLOB.rawValue\n        \n        let logConfig = AgoraLogConfig()\n        logConfig.level = .info\n        config.logConfig = logConfig\n        agoraKit = AgoraRtcEngineKit.sharedEngine(with: config, delegate: self)\n        \n        agoraKit.setChannelProfile(.liveBroadcasting)\n        agoraKit.setClientRole(.broadcaster)\n        \n        agoraKit.enableVideo()\n        agoraKit.setVideoEncoderConfiguration(AgoraVideoEncoderConfiguration(size: CGSize(width: 1280, height: 720),\n                frameRate: AgoraVideoFrameRate.fps30,\n                bitrate: AgoraVideoBitrateStandard,\n                orientationMode: AgoraVideoOutputOrientationMode.adaptative))\n        \n        let videoCanvas = AgoraRtcVideoCanvas()\n        videoCanvas.uid = 0\n        videoCanvas.view = localVideoView.videoView\n        videoCanvas.renderMode = .hidden\n        agoraKit.setupLocalVideo(videoCanvas)\n        \n        // Set audio route to speaker\n        agoraKit.setDefaultAudioRouteToSpeakerphone(true)\n        agoraKit.setAudioProfile(.default, scenario: .gameStreaming)\n        \n        let option = AgoraRtcChannelMediaOptions()\n        let result = agoraKit.joinChannel(byToken: \"006530490d0e19b4c5994c0b42e7c68ce19IADPdWaJfPthGf5EfSoS9qlpGEekabitjQPwzXtGAsNxrWQucoQAAAAAEAB9OJJ5s52MYgEAAQCznYxi\", channelId: channelName, info: nil, uid: 0, options: option)\n        if result != 0 {\n            self.showAlert(title: \"Error\", message: \"joinChannel call failed: \\(result), please check your params.\")\n        }\n    }\n    \n    override func willMove(toParent parent: UIViewController?) {\n        if parent == nil {\n            if isJoined {\n                agoraKit.leaveChannel { (stats) -> Void in\n                    debugPrint(\"Left channel, duration: \\(stats.duration)\")\n                }\n            }\n        }\n    }\n    \n    func setupUI() {\n        localVideoView.setPlaceholder(text: \"Local Host\")\n        remoteVideoView.setPlaceholder(text: \"Remote Host\")\n        let screenBounds = UIScreen.main.bounds\n        let width = screenBounds.width / 4.0\n        remoteVideoView.frame = CGRect(x: 0, y: 0, width: screenBounds.width, height: screenBounds.height)\n        localVideoView.frame = CGRect(x: screenBounds.width - width - 10, y: 90, width: width, height: width * 4 / 2)\n        self.view.addSubview(remoteVideoView)\n        self.view.addSubview(localVideoView)\n        self.view.bringSubviewToFront(infoContainerView)\n        updateButtonTitle()\n    }\n    \n    func showAlert( title: String, message: String) {\n        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)\n        alert.addAction(UIAlertAction(title: \"OK\", style: .default))\n        self.present(alert, animated: true)\n    }\n    \n    @IBAction func startShareBtnClick(_ sender: Any) {\n        \n        if isScreenSharing {\n            agoraKit.stopScreenCapture()\n        } else {\n            if screenCaptureParams == nil {\n                let screenParams = AgoraScreenCaptureParameters2()\n                screenParams.captureAudio = true\n                screenParams.captureVideo = true\n                \n                let videoParams = AgoraScreenVideoParameters()\n                videoParams.dimensions = CGSize(width: 0, height: 0)\n                videoParams.frameRate = 30\n                screenParams.videoParams = videoParams;\n                screenCaptureParams = screenParams\n            }\n            agoraKit.startScreenCapture(screenCaptureParams!)\n            \n            let pickerView = RPSystemBroadcastPickerView(frame: CGRect(x: 0, y:0, width: 50, height: 50))\n            if let url = Bundle.main.url(forResource: \"Broadcast\", withExtension: \"appex\", subdirectory: \"PlugIns\") {\n                if let bundle = Bundle(url: url) {\n                    pickerView.preferredExtension = bundle.bundleIdentifier\n                    pickerView.showsMicrophoneButton = false\n                    \n                    // Auto click RPSystemBroadcastPickerView\n                    for view in pickerView.subviews {\n                        let startButton = view as! UIButton\n                        startButton.sendActions(for: .allTouchEvents)\n                    }\n                }\n            }\n        }\n    }\n    \n    func startScreenCapture() {\n        isScreenSharing = true\n        localVideoView.isHidden = true\n        remoteVideoView.isHidden = true\n        infoContainerView.isHidden = false\n        \n        updateButtonTitle()\n    }\n    \n    func stopScreenCapture() {\n        screenCaptureParams = nil\n        isScreenSharing = false\n        localVideoView.isHidden = false\n        remoteVideoView.isHidden = false\n        infoContainerView.isHidden = true\n        \n        agoraKit.setVideoSource(AgoraRtcDefaultCamera())\n        updateButtonTitle()\n    }\n    \n    func updateButtonTitle() {\n        let title = (screenCaptureParams != nil) ? \"⏹ Screen Sharing\" : \"▶ Screen Sharing\"\n        let rightBarButton = UIBarButtonItem(title: title, style: .plain, target: self, action: #selector(startShareBtnClick))\n        self.navigationItem.rightBarButtonItem = rightBarButton\n    }\n    \n}\n\n/// agora rtc engine delegate events @available(iOS 12.0, *)\nextension ScreenSharingViewController: AgoraRtcEngineDelegate {\n    \n    func rtcEngine(_ engine: AgoraRtcEngineKit, didOccurWarning warningCode: AgoraWarningCode) {\n    }\n    \n    func rtcEngine(_ engine: AgoraRtcEngineKit, didOccurError errorCode: AgoraErrorCode) {\n        \n    }\n    \n    func rtcEngine(_ engine: AgoraRtcEngineKit, didJoinChannel channel: String, withUid uid: UInt, elapsed: Int) {\n        isJoined = true\n    }\n    \n    func rtcEngine(_ engine: AgoraRtcEngineKit, didJoinedOfUid uid: UInt, elapsed: Int) {\n    \n        let videoCanvas = AgoraRtcVideoCanvas()\n        videoCanvas.uid = uid\n        // the view to be binded\n        videoCanvas.view = remoteVideoView.videoView\n        videoCanvas.renderMode = .fill\n        agoraKit.setupRemoteVideo(videoCanvas)\n    }\n    \n    func rtcEngine(_ engine: AgoraRtcEngineKit, didOfflineOfUid uid: UInt, reason: AgoraUserOfflineReason) {\n        \n        let videoCanvas = AgoraRtcVideoCanvas()\n        videoCanvas.uid = uid\n        // the view to be binded\n        videoCanvas.view = nil\n        videoCanvas.renderMode = .hidden\n        agoraKit.setupRemoteVideo(videoCanvas)\n    }\n    \n    func rtcEngine(_ engine: AgoraRtcEngineKit, localVideoStateChange state: AgoraLocalVideoStreamState, error: AgoraLocalVideoStreamError) {\n        \n        switch error {\n        case .extensionCaptureStarted:\n            startScreenCapture()\n            break\n        case .extensionCaptureStoped:\n            stopScreenCapture()\n            break\n        case .extensionCaptureDisconnected:\n            stopScreenCapture()\n            break\n        default: break\n        }\n    }\n}\n"
  },
  {
    "path": "ScreenSharing/View/VideoView.swift",
    "content": "//\n//  VideoView.swift\n//  ScreenSharing\n//\n//  Created by Thomas Woodfin twoodfin@berkeley.edu on 05/22/2022.\n//\n\nimport UIKit\n\nextension Bundle {\n\n    static func loadView<T>(fromNib name: String, withType type: T.Type) -> T {\n        if let view = Bundle.main.loadNibNamed(name, owner: nil, options: nil)?.first as? T {\n            return view\n        }\n\n        fatalError(\"Could not load view with type \" + String(describing: type))\n    }\n}\n\nclass VideoView: UIView {\n\n    @IBOutlet weak var videoView:UIView!\n    @IBOutlet weak var placeholderLabel:UILabel!\n    \n    func setPlaceholder(text:String) {\n        placeholderLabel.text = text\n    }\n    \n    override func awakeFromNib() {\n        super.awakeFromNib()\n    }\n}\n"
  },
  {
    "path": "ScreenSharing/View/VideoView.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"20037\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina6_1\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"20020\"/>\n        <capability name=\"Named colors\" minToolsVersion=\"9.0\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\" customClass=\"VideoView\" customModule=\"ScreenSharing\" customModuleProvider=\"target\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"jNO-yh-cWz\" userLabel=\"Placeholder\">\n                    <rect key=\"frame\" x=\"207\" y=\"453\" width=\"0.0\" height=\"0.0\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"13\"/>\n                    <color key=\"textColor\" name=\"videoPlaceholder\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"z6G-aL-Ut4\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"852\"/>\n                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                </view>\n            </subviews>\n            <viewLayoutGuide key=\"safeArea\" id=\"vUN-kp-3ea\"/>\n            <color key=\"backgroundColor\" name=\"videoBackground\"/>\n            <constraints>\n                <constraint firstItem=\"z6G-aL-Ut4\" firstAttribute=\"top\" secondItem=\"vUN-kp-3ea\" secondAttribute=\"top\" id=\"D5P-vU-kKb\"/>\n                <constraint firstItem=\"z6G-aL-Ut4\" firstAttribute=\"leading\" secondItem=\"vUN-kp-3ea\" secondAttribute=\"leading\" id=\"R1u-w9-cbP\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"z6G-aL-Ut4\" secondAttribute=\"bottom\" id=\"TDk-eq-3Bf\"/>\n                <constraint firstItem=\"jNO-yh-cWz\" firstAttribute=\"centerY\" secondItem=\"vUN-kp-3ea\" secondAttribute=\"centerY\" id=\"qPg-FY-TVT\"/>\n                <constraint firstItem=\"jNO-yh-cWz\" firstAttribute=\"centerX\" secondItem=\"vUN-kp-3ea\" secondAttribute=\"centerX\" id=\"tnR-4i-aTA\"/>\n                <constraint firstItem=\"vUN-kp-3ea\" firstAttribute=\"trailing\" secondItem=\"z6G-aL-Ut4\" secondAttribute=\"trailing\" id=\"vMm-b5-ZoF\"/>\n            </constraints>\n            <connections>\n                <outlet property=\"placeholderLabel\" destination=\"jNO-yh-cWz\" id=\"FTU-Vl-aoH\"/>\n                <outlet property=\"videoView\" destination=\"z6G-aL-Ut4\" id=\"Jfc-RP-ol4\"/>\n            </connections>\n            <point key=\"canvasLocation\" x=\"260.86956521739131\" y=\"207.58928571428569\"/>\n        </view>\n    </objects>\n    <resources>\n        <namedColor name=\"videoBackground\">\n            <color red=\"0.92100000381469727\" green=\"0.92100000381469727\" blue=\"0.92100000381469727\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </namedColor>\n        <namedColor name=\"videoPlaceholder\">\n            <color red=\"0.47600001096725464\" green=\"0.47600001096725464\" blue=\"0.47600001096725464\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </namedColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "ScreenSharing.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 55;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t150C9E013168C53AC1AE6285 /* Pods_ScreenSharingTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82A94621B239387F1C9C902E /* Pods_ScreenSharingTests.framework */; };\n\t\t4B78928846FB801C8A9DDCD9 /* Pods_ScreenSharing_ScreenSharingUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E94D2CB5EA1D853253684D2 /* Pods_ScreenSharing_ScreenSharingUITests.framework */; };\n\t\t7E126BB09B9EF6EFFC4FF418 /* Pods_Broadcast.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 81C4240A462AADFCC0B35156 /* Pods_Broadcast.framework */; };\n\t\tA83BE620283B3C4500CE7021 /* ScreenSharingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A83BE61F283B3C4500CE7021 /* ScreenSharingViewController.swift */; };\n\t\tA83BE624283B3CCB00CE7021 /* VideoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A83BE622283B3CCB00CE7021 /* VideoView.swift */; };\n\t\tA83BE625283B3CCB00CE7021 /* VideoView.xib in Resources */ = {isa = PBXBuildFile; fileRef = A83BE623283B3CCB00CE7021 /* VideoView.xib */; };\n\t\tA85D7B71283A85A70053860F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A85D7B70283A85A70053860F /* AppDelegate.swift */; };\n\t\tA85D7B73283A85A70053860F /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A85D7B72283A85A70053860F /* SceneDelegate.swift */; };\n\t\tA85D7B75283A85A70053860F /* JoinChannelViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A85D7B74283A85A70053860F /* JoinChannelViewController.swift */; };\n\t\tA85D7B78283A85A70053860F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A85D7B76283A85A70053860F /* Main.storyboard */; };\n\t\tA85D7B7A283A85A90053860F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A85D7B79283A85A90053860F /* Assets.xcassets */; };\n\t\tA85D7B7D283A85A90053860F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A85D7B7B283A85A90053860F /* LaunchScreen.storyboard */; };\n\t\tA85D7B88283A85A90053860F /* ScreenSharingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A85D7B87283A85A90053860F /* ScreenSharingTests.swift */; };\n\t\tA85D7B92283A85A90053860F /* ScreenSharingUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A85D7B91283A85A90053860F /* ScreenSharingUITests.swift */; };\n\t\tA85D7B94283A85A90053860F /* ScreenSharingUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A85D7B93283A85A90053860F /* ScreenSharingUITestsLaunchTests.swift */; };\n\t\tA85D7BA7283A872C0053860F /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A85D7BA6283A872C0053860F /* ReplayKit.framework */; };\n\t\tA85D7BAA283A872C0053860F /* SampleHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = A85D7BA9283A872C0053860F /* SampleHandler.swift */; };\n\t\tA85D7BBD283A872C0053860F /* Broadcast.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = A85D7BA4283A872C0053860F /* Broadcast.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\tA85D7BC8283A8DB60053860F /* SampleHandlerUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = A85D7BC6283A8DB50053860F /* SampleHandlerUtil.m */; };\n\t\tE9AD9A20438981893C51E843 /* Pods_ScreenSharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE201948A917D346966787E3 /* Pods_ScreenSharing.framework */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tA85D7B84283A85A90053860F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = A85D7B65283A85A70053860F /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = A85D7B6C283A85A70053860F;\n\t\t\tremoteInfo = ScreenSharing;\n\t\t};\n\t\tA85D7B8E283A85A90053860F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = A85D7B65283A85A70053860F /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = A85D7B6C283A85A70053860F;\n\t\t\tremoteInfo = ScreenSharing;\n\t\t};\n\t\tA85D7BBB283A872C0053860F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = A85D7B65283A85A70053860F /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = A85D7BA3283A872C0053860F;\n\t\t\tremoteInfo = Broadcast;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\tA85D7BC4283A872C0053860F /* Embed App Extensions */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 13;\n\t\t\tfiles = (\n\t\t\t\tA85D7BBD283A872C0053860F /* Broadcast.appex in Embed App Extensions */,\n\t\t\t);\n\t\t\tname = \"Embed App Extensions\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t51174865659D68CEEB7018E3 /* Pods-Broadcast.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Broadcast.debug.xcconfig\"; path = \"Target Support Files/Pods-Broadcast/Pods-Broadcast.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t67504BE9304AB8FD65C47FF1 /* Pods-ScreenSharing.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-ScreenSharing.debug.xcconfig\"; path = \"Target Support Files/Pods-ScreenSharing/Pods-ScreenSharing.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t6860C2B1B27DF91D7F2AB4E0 /* Pods-ScreenSharingTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-ScreenSharingTests.release.xcconfig\"; path = \"Target Support Files/Pods-ScreenSharingTests/Pods-ScreenSharingTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t6C8E1905D6384D46D2A753D0 /* Pods-Broadcast.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Broadcast.release.xcconfig\"; path = \"Target Support Files/Pods-Broadcast/Pods-Broadcast.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t7B7819BD6A9CD1211A18659E /* Pods-ScreenSharing-ScreenSharingUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-ScreenSharing-ScreenSharingUITests.release.xcconfig\"; path = \"Target Support Files/Pods-ScreenSharing-ScreenSharingUITests/Pods-ScreenSharing-ScreenSharingUITests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t81C4240A462AADFCC0B35156 /* Pods_Broadcast.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Broadcast.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t82A94621B239387F1C9C902E /* Pods_ScreenSharingTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ScreenSharingTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t85CA7F7C4EE26F7549362424 /* Pods-ScreenSharing.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-ScreenSharing.release.xcconfig\"; path = \"Target Support Files/Pods-ScreenSharing/Pods-ScreenSharing.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t8E94D2CB5EA1D853253684D2 /* Pods_ScreenSharing_ScreenSharingUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ScreenSharing_ScreenSharingUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA83BE61F283B3C4500CE7021 /* ScreenSharingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenSharingViewController.swift; sourceTree = \"<group>\"; };\n\t\tA83BE622283B3CCB00CE7021 /* VideoView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoView.swift; sourceTree = \"<group>\"; };\n\t\tA83BE623283B3CCB00CE7021 /* VideoView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VideoView.xib; sourceTree = \"<group>\"; };\n\t\tA85D7B6D283A85A70053860F /* ScreenSharing.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ScreenSharing.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA85D7B70283A85A70053860F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\tA85D7B72283A85A70053860F /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = \"<group>\"; };\n\t\tA85D7B74283A85A70053860F /* JoinChannelViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinChannelViewController.swift; sourceTree = \"<group>\"; };\n\t\tA85D7B77283A85A70053860F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tA85D7B79283A85A90053860F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tA85D7B7C283A85A90053860F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\tA85D7B7E283A85A90053860F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tA85D7B83283A85A90053860F /* ScreenSharingTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ScreenSharingTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA85D7B87283A85A90053860F /* ScreenSharingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenSharingTests.swift; sourceTree = \"<group>\"; };\n\t\tA85D7B8D283A85A90053860F /* ScreenSharingUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ScreenSharingUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA85D7B91283A85A90053860F /* ScreenSharingUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenSharingUITests.swift; sourceTree = \"<group>\"; };\n\t\tA85D7B93283A85A90053860F /* ScreenSharingUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenSharingUITestsLaunchTests.swift; sourceTree = \"<group>\"; };\n\t\tA85D7BA4283A872C0053860F /* Broadcast.appex */ = {isa = PBXFileReference; explicitFileType = \"wrapper.app-extension\"; includeInIndex = 0; path = Broadcast.appex; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA85D7BA6283A872C0053860F /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; };\n\t\tA85D7BA9283A872C0053860F /* SampleHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleHandler.swift; sourceTree = \"<group>\"; };\n\t\tA85D7BAB283A872C0053860F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tA85D7BB2283A872C0053860F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\tA85D7BC5283A8DB50053860F /* Broadcast-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"Broadcast-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\tA85D7BC6283A8DB50053860F /* SampleHandlerUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SampleHandlerUtil.m; sourceTree = \"<group>\"; };\n\t\tA85D7BC7283A8DB50053860F /* SampleHandlerUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SampleHandlerUtil.h; sourceTree = \"<group>\"; };\n\t\tAC92BB00DDA1BE984B2FDA52 /* Pods-ScreenSharingTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-ScreenSharingTests.debug.xcconfig\"; path = \"Target Support Files/Pods-ScreenSharingTests/Pods-ScreenSharingTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tCE201948A917D346966787E3 /* Pods_ScreenSharing.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ScreenSharing.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tDA987504A54F394A4D7385E1 /* Pods-ScreenSharing-ScreenSharingUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-ScreenSharing-ScreenSharingUITests.debug.xcconfig\"; path = \"Target Support Files/Pods-ScreenSharing-ScreenSharingUITests/Pods-ScreenSharing-ScreenSharingUITests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tA85D7B6A283A85A70053860F /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE9AD9A20438981893C51E843 /* Pods_ScreenSharing.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA85D7B80283A85A90053860F /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t150C9E013168C53AC1AE6285 /* Pods_ScreenSharingTests.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA85D7B8A283A85A90053860F /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4B78928846FB801C8A9DDCD9 /* Pods_ScreenSharing_ScreenSharingUITests.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA85D7BA1283A872C0053860F /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA85D7BA7283A872C0053860F /* ReplayKit.framework in Frameworks */,\n\t\t\t\t7E126BB09B9EF6EFFC4FF418 /* Pods_Broadcast.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t99A3D396B3470A55D04C32B9 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t51174865659D68CEEB7018E3 /* Pods-Broadcast.debug.xcconfig */,\n\t\t\t\t6C8E1905D6384D46D2A753D0 /* Pods-Broadcast.release.xcconfig */,\n\t\t\t\t67504BE9304AB8FD65C47FF1 /* Pods-ScreenSharing.debug.xcconfig */,\n\t\t\t\t85CA7F7C4EE26F7549362424 /* Pods-ScreenSharing.release.xcconfig */,\n\t\t\t\tDA987504A54F394A4D7385E1 /* Pods-ScreenSharing-ScreenSharingUITests.debug.xcconfig */,\n\t\t\t\t7B7819BD6A9CD1211A18659E /* Pods-ScreenSharing-ScreenSharingUITests.release.xcconfig */,\n\t\t\t\tAC92BB00DDA1BE984B2FDA52 /* Pods-ScreenSharingTests.debug.xcconfig */,\n\t\t\t\t6860C2B1B27DF91D7F2AB4E0 /* Pods-ScreenSharingTests.release.xcconfig */,\n\t\t\t);\n\t\t\tpath = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA83BE621283B3CB900CE7021 /* View */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA83BE622283B3CCB00CE7021 /* VideoView.swift */,\n\t\t\t\tA83BE623283B3CCB00CE7021 /* VideoView.xib */,\n\t\t\t);\n\t\t\tpath = View;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA85D7B64283A85A70053860F = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA85D7B6F283A85A70053860F /* ScreenSharing */,\n\t\t\t\tA85D7B86283A85A90053860F /* ScreenSharingTests */,\n\t\t\t\tA85D7B90283A85A90053860F /* ScreenSharingUITests */,\n\t\t\t\tA85D7BA8283A872C0053860F /* Broadcast */,\n\t\t\t\tA85D7BA5283A872C0053860F /* Frameworks */,\n\t\t\t\tA85D7B6E283A85A70053860F /* Products */,\n\t\t\t\t99A3D396B3470A55D04C32B9 /* Pods */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA85D7B6E283A85A70053860F /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA85D7B6D283A85A70053860F /* ScreenSharing.app */,\n\t\t\t\tA85D7B83283A85A90053860F /* ScreenSharingTests.xctest */,\n\t\t\t\tA85D7B8D283A85A90053860F /* ScreenSharingUITests.xctest */,\n\t\t\t\tA85D7BA4283A872C0053860F /* Broadcast.appex */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA85D7B6F283A85A70053860F /* ScreenSharing */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA83BE621283B3CB900CE7021 /* View */,\n\t\t\t\tA85D7B70283A85A70053860F /* AppDelegate.swift */,\n\t\t\t\tA85D7B72283A85A70053860F /* SceneDelegate.swift */,\n\t\t\t\tA85D7B74283A85A70053860F /* JoinChannelViewController.swift */,\n\t\t\t\tA83BE61F283B3C4500CE7021 /* ScreenSharingViewController.swift */,\n\t\t\t\tA85D7B76283A85A70053860F /* Main.storyboard */,\n\t\t\t\tA85D7B79283A85A90053860F /* Assets.xcassets */,\n\t\t\t\tA85D7B7B283A85A90053860F /* LaunchScreen.storyboard */,\n\t\t\t\tA85D7B7E283A85A90053860F /* Info.plist */,\n\t\t\t);\n\t\t\tpath = ScreenSharing;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA85D7B86283A85A90053860F /* ScreenSharingTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA85D7B87283A85A90053860F /* ScreenSharingTests.swift */,\n\t\t\t);\n\t\t\tpath = ScreenSharingTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA85D7B90283A85A90053860F /* ScreenSharingUITests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA85D7B91283A85A90053860F /* ScreenSharingUITests.swift */,\n\t\t\t\tA85D7B93283A85A90053860F /* ScreenSharingUITestsLaunchTests.swift */,\n\t\t\t);\n\t\t\tpath = ScreenSharingUITests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA85D7BA5283A872C0053860F /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA85D7BA6283A872C0053860F /* ReplayKit.framework */,\n\t\t\t\tA85D7BB2283A872C0053860F /* UIKit.framework */,\n\t\t\t\t81C4240A462AADFCC0B35156 /* Pods_Broadcast.framework */,\n\t\t\t\tCE201948A917D346966787E3 /* Pods_ScreenSharing.framework */,\n\t\t\t\t8E94D2CB5EA1D853253684D2 /* Pods_ScreenSharing_ScreenSharingUITests.framework */,\n\t\t\t\t82A94621B239387F1C9C902E /* Pods_ScreenSharingTests.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA85D7BA8283A872C0053860F /* Broadcast */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA85D7BC7283A8DB50053860F /* SampleHandlerUtil.h */,\n\t\t\t\tA85D7BC6283A8DB50053860F /* SampleHandlerUtil.m */,\n\t\t\t\tA85D7BA9283A872C0053860F /* SampleHandler.swift */,\n\t\t\t\tA85D7BC5283A8DB50053860F /* Broadcast-Bridging-Header.h */,\n\t\t\t\tA85D7BAB283A872C0053860F /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Broadcast;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tA85D7B6C283A85A70053860F /* ScreenSharing */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = A85D7B97283A85A90053860F /* Build configuration list for PBXNativeTarget \"ScreenSharing\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tB2AF917EF1AC32987CF1A804 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tA85D7B69283A85A70053860F /* Sources */,\n\t\t\t\tA85D7B6A283A85A70053860F /* Frameworks */,\n\t\t\t\tA85D7B6B283A85A70053860F /* Resources */,\n\t\t\t\tA85D7BC4283A872C0053860F /* Embed App Extensions */,\n\t\t\t\t0014FB08756F107174FBAC0A /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tA85D7BBC283A872C0053860F /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = ScreenSharing;\n\t\t\tproductName = ScreenSharing;\n\t\t\tproductReference = A85D7B6D283A85A70053860F /* ScreenSharing.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tA85D7B82283A85A90053860F /* ScreenSharingTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = A85D7B9A283A85A90053860F /* Build configuration list for PBXNativeTarget \"ScreenSharingTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8C77C13B9DFCDA82C85B3FE1 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tA85D7B7F283A85A90053860F /* Sources */,\n\t\t\t\tA85D7B80283A85A90053860F /* Frameworks */,\n\t\t\t\tA85D7B81283A85A90053860F /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tA85D7B85283A85A90053860F /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = ScreenSharingTests;\n\t\t\tproductName = ScreenSharingTests;\n\t\t\tproductReference = A85D7B83283A85A90053860F /* ScreenSharingTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tA85D7B8C283A85A90053860F /* ScreenSharingUITests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = A85D7B9D283A85A90053860F /* Build configuration list for PBXNativeTarget \"ScreenSharingUITests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t7BFB8C8DF418CE5FC492490B /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tA85D7B89283A85A90053860F /* Sources */,\n\t\t\t\tA85D7B8A283A85A90053860F /* Frameworks */,\n\t\t\t\tA85D7B8B283A85A90053860F /* Resources */,\n\t\t\t\tA9BA3C0E5E5AA85A4398A951 /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tA85D7B8F283A85A90053860F /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = ScreenSharingUITests;\n\t\t\tproductName = ScreenSharingUITests;\n\t\t\tproductReference = A85D7B8D283A85A90053860F /* ScreenSharingUITests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.ui-testing\";\n\t\t};\n\t\tA85D7BA3283A872C0053860F /* Broadcast */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = A85D7BC1283A872C0053860F /* Build configuration list for PBXNativeTarget \"Broadcast\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE76C7D0CF26C6CA8BE4D602C /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tA85D7BA0283A872C0053860F /* Sources */,\n\t\t\t\tA85D7BA1283A872C0053860F /* Frameworks */,\n\t\t\t\tA85D7BA2283A872C0053860F /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Broadcast;\n\t\t\tproductName = Broadcast;\n\t\t\tproductReference = A85D7BA4283A872C0053860F /* Broadcast.appex */;\n\t\t\tproductType = \"com.apple.product-type.app-extension\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tA85D7B65283A85A70053860F /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tBuildIndependentTargetsInParallel = 1;\n\t\t\t\tLastSwiftUpdateCheck = 1330;\n\t\t\t\tLastUpgradeCheck = 1330;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tA85D7B6C283A85A70053860F = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 13.3;\n\t\t\t\t\t};\n\t\t\t\t\tA85D7B82283A85A90053860F = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 13.3;\n\t\t\t\t\t\tTestTargetID = A85D7B6C283A85A70053860F;\n\t\t\t\t\t};\n\t\t\t\t\tA85D7B8C283A85A90053860F = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 13.3;\n\t\t\t\t\t\tTestTargetID = A85D7B6C283A85A70053860F;\n\t\t\t\t\t};\n\t\t\t\t\tA85D7BA3283A872C0053860F = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 13.3;\n\t\t\t\t\t\tLastSwiftMigration = 1330;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = A85D7B68283A85A70053860F /* Build configuration list for PBXProject \"ScreenSharing\" */;\n\t\t\tcompatibilityVersion = \"Xcode 13.0\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = A85D7B64283A85A70053860F;\n\t\t\tproductRefGroup = A85D7B6E283A85A70053860F /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tA85D7B6C283A85A70053860F /* ScreenSharing */,\n\t\t\t\tA85D7B82283A85A90053860F /* ScreenSharingTests */,\n\t\t\t\tA85D7B8C283A85A90053860F /* ScreenSharingUITests */,\n\t\t\t\tA85D7BA3283A872C0053860F /* Broadcast */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tA85D7B6B283A85A70053860F /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA83BE625283B3CCB00CE7021 /* VideoView.xib in Resources */,\n\t\t\t\tA85D7B7D283A85A90053860F /* LaunchScreen.storyboard in Resources */,\n\t\t\t\tA85D7B7A283A85A90053860F /* Assets.xcassets in Resources */,\n\t\t\t\tA85D7B78283A85A70053860F /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA85D7B81283A85A90053860F /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA85D7B8B283A85A90053860F /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA85D7BA2283A872C0053860F /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t0014FB08756F107174FBAC0A /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-ScreenSharing/Pods-ScreenSharing-frameworks-${CONFIGURATION}-input-files.xcfilelist\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-ScreenSharing/Pods-ScreenSharing-frameworks-${CONFIGURATION}-output-files.xcfilelist\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-ScreenSharing/Pods-ScreenSharing-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t7BFB8C8DF418CE5FC492490B /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-ScreenSharing-ScreenSharingUITests-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"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\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t8C77C13B9DFCDA82C85B3FE1 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-ScreenSharingTests-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"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\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tA9BA3C0E5E5AA85A4398A951 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-ScreenSharing-ScreenSharingUITests/Pods-ScreenSharing-ScreenSharingUITests-frameworks-${CONFIGURATION}-input-files.xcfilelist\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-ScreenSharing-ScreenSharingUITests/Pods-ScreenSharing-ScreenSharingUITests-frameworks-${CONFIGURATION}-output-files.xcfilelist\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-ScreenSharing-ScreenSharingUITests/Pods-ScreenSharing-ScreenSharingUITests-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tB2AF917EF1AC32987CF1A804 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-ScreenSharing-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"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\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tE76C7D0CF26C6CA8BE4D602C /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-Broadcast-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"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\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tA85D7B69283A85A70053860F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA85D7B75283A85A70053860F /* JoinChannelViewController.swift in Sources */,\n\t\t\t\tA83BE624283B3CCB00CE7021 /* VideoView.swift in Sources */,\n\t\t\t\tA83BE620283B3C4500CE7021 /* ScreenSharingViewController.swift in Sources */,\n\t\t\t\tA85D7B71283A85A70053860F /* AppDelegate.swift in Sources */,\n\t\t\t\tA85D7B73283A85A70053860F /* SceneDelegate.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA85D7B7F283A85A90053860F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA85D7B88283A85A90053860F /* ScreenSharingTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA85D7B89283A85A90053860F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA85D7B92283A85A90053860F /* ScreenSharingUITests.swift in Sources */,\n\t\t\t\tA85D7B94283A85A90053860F /* ScreenSharingUITestsLaunchTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA85D7BA0283A872C0053860F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA85D7BC8283A8DB60053860F /* SampleHandlerUtil.m in Sources */,\n\t\t\t\tA85D7BAA283A872C0053860F /* SampleHandler.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\tA85D7B85283A85A90053860F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = A85D7B6C283A85A70053860F /* ScreenSharing */;\n\t\t\ttargetProxy = A85D7B84283A85A90053860F /* PBXContainerItemProxy */;\n\t\t};\n\t\tA85D7B8F283A85A90053860F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = A85D7B6C283A85A70053860F /* ScreenSharing */;\n\t\t\ttargetProxy = A85D7B8E283A85A90053860F /* PBXContainerItemProxy */;\n\t\t};\n\t\tA85D7BBC283A872C0053860F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = A85D7BA3283A872C0053860F /* Broadcast */;\n\t\t\ttargetProxy = A85D7BBB283A872C0053860F /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\tA85D7B76283A85A70053860F /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tA85D7B77283A85A70053860F /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA85D7B7B283A85A90053860F /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tA85D7B7C283A85A90053860F /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\tA85D7B95283A85A90053860F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++17\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.4;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tA85D7B96283A85A90053860F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++17\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.4;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA85D7B98283A85A90053860F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 67504BE9304AB8FD65C47FF1 /* Pods-ScreenSharing.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_TEAM = MTXUJ7K3EY;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = ScreenSharing/Info.plist;\n\t\t\t\tINFOPLIST_KEY_NSCameraUsageDescription = \"The app is required camera permission to display.\";\n\t\t\t\tINFOPLIST_KEY_NSMicrophoneUsageDescription = \"The app is required Microphone permission to display.\";\n\t\t\t\tINFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;\n\t\t\t\tINFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;\n\t\t\t\tINFOPLIST_KEY_UIMainStoryboardFile = Main;\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = \"UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight\";\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = \"UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.tbl.ScreenSharing;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tA85D7B99283A85A90053860F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 85CA7F7C4EE26F7549362424 /* Pods-ScreenSharing.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_TEAM = MTXUJ7K3EY;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = ScreenSharing/Info.plist;\n\t\t\t\tINFOPLIST_KEY_NSCameraUsageDescription = \"The app is required camera permission to display.\";\n\t\t\t\tINFOPLIST_KEY_NSMicrophoneUsageDescription = \"The app is required Microphone permission to display.\";\n\t\t\t\tINFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;\n\t\t\t\tINFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;\n\t\t\t\tINFOPLIST_KEY_UIMainStoryboardFile = Main;\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = \"UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight\";\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = \"UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.tbl.ScreenSharing;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA85D7B9B283A85A90053860F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = AC92BB00DDA1BE984B2FDA52 /* Pods-ScreenSharingTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_TEAM = MTXUJ7K3EY;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.4;\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.tbl.ScreenSharingTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = NO;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/ScreenSharing.app/ScreenSharing\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tA85D7B9C283A85A90053860F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 6860C2B1B27DF91D7F2AB4E0 /* Pods-ScreenSharingTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_TEAM = MTXUJ7K3EY;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.4;\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.tbl.ScreenSharingTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = NO;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/ScreenSharing.app/ScreenSharing\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA85D7B9E283A85A90053860F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = DA987504A54F394A4D7385E1 /* Pods-ScreenSharing-ScreenSharingUITests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_TEAM = MTXUJ7K3EY;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.tbl.ScreenSharingUITests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = NO;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_TARGET_NAME = ScreenSharing;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tA85D7B9F283A85A90053860F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7B7819BD6A9CD1211A18659E /* Pods-ScreenSharing-ScreenSharingUITests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_TEAM = MTXUJ7K3EY;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.tbl.ScreenSharingUITests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = NO;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_TARGET_NAME = ScreenSharing;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA85D7BC2283A872C0053860F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 51174865659D68CEEB7018E3 /* Pods-Broadcast.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_TEAM = MTXUJ7K3EY;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = Broadcast/Info.plist;\n\t\t\t\tINFOPLIST_KEY_CFBundleDisplayName = Broadcast;\n\t\t\t\tINFOPLIST_KEY_NSHumanReadableCopyright = \"\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.tbl.ScreenSharing.Broadcast;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Broadcast/Broadcast-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tA85D7BC3283A872C0053860F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 6C8E1905D6384D46D2A753D0 /* Pods-Broadcast.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_TEAM = MTXUJ7K3EY;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = Broadcast/Info.plist;\n\t\t\t\tINFOPLIST_KEY_CFBundleDisplayName = Broadcast;\n\t\t\t\tINFOPLIST_KEY_NSHumanReadableCopyright = \"\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.tbl.ScreenSharing.Broadcast;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Broadcast/Broadcast-Bridging-Header.h\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tA85D7B68283A85A70053860F /* Build configuration list for PBXProject \"ScreenSharing\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA85D7B95283A85A90053860F /* Debug */,\n\t\t\t\tA85D7B96283A85A90053860F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tA85D7B97283A85A90053860F /* Build configuration list for PBXNativeTarget \"ScreenSharing\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA85D7B98283A85A90053860F /* Debug */,\n\t\t\t\tA85D7B99283A85A90053860F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tA85D7B9A283A85A90053860F /* Build configuration list for PBXNativeTarget \"ScreenSharingTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA85D7B9B283A85A90053860F /* Debug */,\n\t\t\t\tA85D7B9C283A85A90053860F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tA85D7B9D283A85A90053860F /* Build configuration list for PBXNativeTarget \"ScreenSharingUITests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA85D7B9E283A85A90053860F /* Debug */,\n\t\t\t\tA85D7B9F283A85A90053860F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tA85D7BC1283A872C0053860F /* Build configuration list for PBXNativeTarget \"Broadcast\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA85D7BC2283A872C0053860F /* Debug */,\n\t\t\t\tA85D7BC3283A872C0053860F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = A85D7B65283A85A70053860F /* Project object */;\n}\n"
  },
  {
    "path": "ScreenSharingTests/ScreenSharingTests.swift",
    "content": "//\n//  ScreenSharingTests.swift\n//  ScreenSharingTests\n//\n//  Created by Thomas Woodfin twoodfin@berkeley.edu on 05/22/2022.\n//\n\nimport XCTest\n@testable import ScreenSharing\n\nclass ScreenSharingTests: XCTestCase {\n\n    override func setUpWithError() throws {\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n\n    override func tearDownWithError() throws {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n    }\n\n    func testExample() throws {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n        // Any test you write for XCTest can be annotated as throws and async.\n        // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.\n        // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.\n    }\n\n    func testPerformanceExample() throws {\n        // This is an example of a performance test case.\n        self.measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n\n}\n"
  },
  {
    "path": "ScreenSharingUITests/ScreenSharingUITests.swift",
    "content": "//\n//  ScreenSharingUITests.swift\n//  ScreenSharingUITests\n//\n//  Created by Thomas Woodfin twoodfin@berkeley.edu on 05/22/2022.\n//\n\nimport XCTest\n\nclass ScreenSharingUITests: XCTestCase {\n\n    override func setUpWithError() throws {\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n\n        // In UI tests it is usually best to stop immediately when a failure occurs.\n        continueAfterFailure = false\n\n        // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.\n    }\n\n    override func tearDownWithError() throws {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n    }\n\n    func testExample() throws {\n        // UI tests must launch the application that they test.\n        let app = XCUIApplication()\n        app.launch()\n\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n\n    func testLaunchPerformance() throws {\n        if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) {\n            // This measures how long it takes to launch your application.\n            measure(metrics: [XCTApplicationLaunchMetric()]) {\n                XCUIApplication().launch()\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "ScreenSharingUITests/ScreenSharingUITestsLaunchTests.swift",
    "content": "//\n//  ScreenSharingUITestsLaunchTests.swift\n//  ScreenSharingUITests\n//\n//  Created by Thomas Woodfin twoodfin@berkeley.edu on 05/22/2022.\n//\n\nimport XCTest\n\nclass ScreenSharingUITestsLaunchTests: XCTestCase {\n\n    override class var runsForEachTargetApplicationUIConfiguration: Bool {\n        true\n    }\n\n    override func setUpWithError() throws {\n        continueAfterFailure = false\n    }\n\n    func testLaunch() throws {\n        let app = XCUIApplication()\n        app.launch()\n\n        // Insert steps here to perform after app launch but before taking a screenshot,\n        // such as logging into a test account or navigating somewhere in the app\n\n        let attachment = XCTAttachment(screenshot: app.screenshot())\n        attachment.name = \"Launch Screen\"\n        attachment.lifetime = .keepAlways\n        add(attachment)\n    }\n}\n"
  }
]