From 6f02c72b462dc2da68464aadd425853928f5a946 Mon Sep 17 00:00:00 2001 From: QuentinArguillere Date: Thu, 25 Nov 2021 14:53:45 +0100 Subject: [PATCH] Add simple project of incoming/outgoing call tests --- .../project.pbxproj | 418 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 ++++ .../Assets.xcassets/Contents.json | 6 + .../AudioRouteInvestigationApp.swift | 142 ++++++ .../AudioRouteInvestigation/ContentView.swift | 82 ++++ .../Preview Assets.xcassets/Contents.json | 6 + ios/swift/AudioRouteInvestigation/Podfile | 24 + 10 files changed, 802 insertions(+) create mode 100644 ios/swift/AudioRouteInvestigation/AudioRouteInvestigation.xcodeproj/project.pbxproj create mode 100644 ios/swift/AudioRouteInvestigation/AudioRouteInvestigation.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/swift/AudioRouteInvestigation/AudioRouteInvestigation.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/Assets.xcassets/Contents.json create mode 100644 ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/AudioRouteInvestigationApp.swift create mode 100644 ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/ContentView.swift create mode 100644 ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/Preview Content/Preview Assets.xcassets/Contents.json create mode 100644 ios/swift/AudioRouteInvestigation/Podfile diff --git a/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation.xcodeproj/project.pbxproj b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation.xcodeproj/project.pbxproj new file mode 100644 index 0000000..b3c0f68 --- /dev/null +++ b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation.xcodeproj/project.pbxproj @@ -0,0 +1,418 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 6644275A274F952D00EF03AA /* AudioRouteInvestigationApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66442759274F952D00EF03AA /* AudioRouteInvestigationApp.swift */; }; + 6644275C274F952D00EF03AA /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6644275B274F952D00EF03AA /* ContentView.swift */; }; + 6644275E274F952F00EF03AA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6644275D274F952F00EF03AA /* Assets.xcassets */; }; + 66442761274F952F00EF03AA /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 66442760274F952F00EF03AA /* Preview Assets.xcassets */; }; + EFDB99DC9232C7DED75C1132 /* Pods_AudioRouteInvestigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82346E676A805A0558805BF9 /* Pods_AudioRouteInvestigation.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 57D00E4F6DE7380AAF3F0C47 /* Pods-AudioRouteInvestigation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AudioRouteInvestigation.release.xcconfig"; path = "Target Support Files/Pods-AudioRouteInvestigation/Pods-AudioRouteInvestigation.release.xcconfig"; sourceTree = ""; }; + 66442756274F952D00EF03AA /* AudioRouteInvestigation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AudioRouteInvestigation.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 66442759274F952D00EF03AA /* AudioRouteInvestigationApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioRouteInvestigationApp.swift; sourceTree = ""; }; + 6644275B274F952D00EF03AA /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 6644275D274F952F00EF03AA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 66442760274F952F00EF03AA /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 82346E676A805A0558805BF9 /* Pods_AudioRouteInvestigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AudioRouteInvestigation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8DBEF2EA75C5F7144D91A733 /* Pods-AudioRouteInvestigation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AudioRouteInvestigation.debug.xcconfig"; path = "Target Support Files/Pods-AudioRouteInvestigation/Pods-AudioRouteInvestigation.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 66442753274F952D00EF03AA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EFDB99DC9232C7DED75C1132 /* Pods_AudioRouteInvestigation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 23C37AA5C87C768D9E2DB7FB /* Pods */ = { + isa = PBXGroup; + children = ( + 8DBEF2EA75C5F7144D91A733 /* Pods-AudioRouteInvestigation.debug.xcconfig */, + 57D00E4F6DE7380AAF3F0C47 /* Pods-AudioRouteInvestigation.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + 6644274D274F952D00EF03AA = { + isa = PBXGroup; + children = ( + 66442758274F952D00EF03AA /* AudioRouteInvestigation */, + 66442757274F952D00EF03AA /* Products */, + 23C37AA5C87C768D9E2DB7FB /* Pods */, + 6C18380DFC079682CAFAE959 /* Frameworks */, + ); + sourceTree = ""; + }; + 66442757274F952D00EF03AA /* Products */ = { + isa = PBXGroup; + children = ( + 66442756274F952D00EF03AA /* AudioRouteInvestigation.app */, + ); + name = Products; + sourceTree = ""; + }; + 66442758274F952D00EF03AA /* AudioRouteInvestigation */ = { + isa = PBXGroup; + children = ( + 66442759274F952D00EF03AA /* AudioRouteInvestigationApp.swift */, + 6644275B274F952D00EF03AA /* ContentView.swift */, + 6644275D274F952F00EF03AA /* Assets.xcassets */, + 6644275F274F952F00EF03AA /* Preview Content */, + ); + path = AudioRouteInvestigation; + sourceTree = ""; + }; + 6644275F274F952F00EF03AA /* Preview Content */ = { + isa = PBXGroup; + children = ( + 66442760274F952F00EF03AA /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + 6C18380DFC079682CAFAE959 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 82346E676A805A0558805BF9 /* Pods_AudioRouteInvestigation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 66442755274F952D00EF03AA /* AudioRouteInvestigation */ = { + isa = PBXNativeTarget; + buildConfigurationList = 66442764274F952F00EF03AA /* Build configuration list for PBXNativeTarget "AudioRouteInvestigation" */; + buildPhases = ( + 59A6F8BC0224E743CE93CA1E /* [CP] Check Pods Manifest.lock */, + 66442752274F952D00EF03AA /* Sources */, + 66442753274F952D00EF03AA /* Frameworks */, + 66442754274F952D00EF03AA /* Resources */, + 6B7520AC43BE168C1B667379 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = AudioRouteInvestigation; + productName = AudioRouteInvestigation; + productReference = 66442756274F952D00EF03AA /* AudioRouteInvestigation.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 6644274E274F952D00EF03AA /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1310; + LastUpgradeCheck = 1310; + TargetAttributes = { + 66442755274F952D00EF03AA = { + CreatedOnToolsVersion = 13.1; + }; + }; + }; + buildConfigurationList = 66442751274F952D00EF03AA /* Build configuration list for PBXProject "AudioRouteInvestigation" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 6644274D274F952D00EF03AA; + productRefGroup = 66442757274F952D00EF03AA /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 66442755274F952D00EF03AA /* AudioRouteInvestigation */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 66442754274F952D00EF03AA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 66442761274F952F00EF03AA /* Preview Assets.xcassets in Resources */, + 6644275E274F952F00EF03AA /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 59A6F8BC0224E743CE93CA1E /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-AudioRouteInvestigation-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 6B7520AC43BE168C1B667379 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-AudioRouteInvestigation/Pods-AudioRouteInvestigation-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-AudioRouteInvestigation/Pods-AudioRouteInvestigation-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AudioRouteInvestigation/Pods-AudioRouteInvestigation-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 66442752274F952D00EF03AA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6644275C274F952D00EF03AA /* ContentView.swift in Sources */, + 6644275A274F952D00EF03AA /* AudioRouteInvestigationApp.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 66442762274F952F00EF03AA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 66442763274F952F00EF03AA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 66442765274F952F00EF03AA /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8DBEF2EA75C5F7144D91A733 /* Pods-AudioRouteInvestigation.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"AudioRouteInvestigation/Preview Content\""; + DEVELOPMENT_TEAM = Z2V957B3D6; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSMicrophoneUsageDescription = "Microphone access"; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = BC.AudioRouteInvestigation; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 66442766274F952F00EF03AA /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 57D00E4F6DE7380AAF3F0C47 /* Pods-AudioRouteInvestigation.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"AudioRouteInvestigation/Preview Content\""; + DEVELOPMENT_TEAM = Z2V957B3D6; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSMicrophoneUsageDescription = "Microphone access"; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = BC.AudioRouteInvestigation; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 66442751274F952D00EF03AA /* Build configuration list for PBXProject "AudioRouteInvestigation" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 66442762274F952F00EF03AA /* Debug */, + 66442763274F952F00EF03AA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 66442764274F952F00EF03AA /* Build configuration list for PBXNativeTarget "AudioRouteInvestigation" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 66442765274F952F00EF03AA /* Debug */, + 66442766274F952F00EF03AA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 6644274E274F952D00EF03AA /* Project object */; +} diff --git a/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/Assets.xcassets/AccentColor.colorset/Contents.json b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/Assets.xcassets/Contents.json b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/AudioRouteInvestigationApp.swift b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/AudioRouteInvestigationApp.swift new file mode 100644 index 0000000..86bd34d --- /dev/null +++ b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/AudioRouteInvestigationApp.swift @@ -0,0 +1,142 @@ +// +// AudioRouteInvestigationApp.swift +// AudioRouteInvestigation +// +// Created by QuentinArguillere on 25/11/2021. +// + +import SwiftUI +import linphonesw + +class AudioRouteInvestigation : ObservableObject +{ + var mCore: Core! + var mCoreDelegate : CoreDelegate! + + /* PLEASE FILL THESE FIELDS WITH YOUR SETTINGS */ + var username : String = "user" + var passwd : String = "password" + var domain : String = "sip.linphone.org" + var remoteAddress : String = "sip:remote@sip.linphone.org" + + @Published var loggedIn = false + @Published var callMsg : String = "" + @Published var isCallOutgoing : Bool = false + @Published var isCallIncoming : Bool = false + @Published var isCallRunning : Bool = false + @Published var isCallPaused = false + + init() { + LoggingService.Instance.logLevel = LogLevel.Debug + try? mCore = Factory.Instance.createCore(configPath: "", factoryConfigPath: "", systemContext: nil) + + //self.mCore.defaultOutputAudioDevice = self.mCore.audioDevices.first { $0.type == AudioDeviceType.Speaker } + + mCoreDelegate = CoreDelegateStub( onCallStateChanged: { (core: Core, call: Call, state: Call.State, message: String) in + self.callMsg = message + + if (state == .IncomingReceived) { + self.isCallIncoming = true + } else if (state == .OutgoingProgress) { + self.isCallOutgoing = true + } else if (state == .StreamsRunning) { + self.isCallOutgoing = false + self.isCallIncoming = false + self.isCallRunning = true + //self.mCore.outputAudioDevice = self.mCore.audioDevices.first { $0.type == AudioDeviceType.Speaker } + } else if (state == .Released) { + self.isCallOutgoing = false + self.isCallIncoming = false + self.isCallRunning = false + self.isCallPaused = false + } + }, onAccountRegistrationStateChanged: { (core: Core, account: Account, state: RegistrationState, message: String) in + NSLog("New registration state is \(state) for user id \( String(describing: account.params?.identityAddress?.asString()))\n") + if (state == .Ok) { + self.loggedIn = true + } else if (state == .Cleared) { + self.loggedIn = false + } + }) + mCore.addDelegate(delegate: mCoreDelegate) + + + try? mCore.start() + login() + } + + func login() { + do { + let authInfo = try Factory.Instance.createAuthInfo(username: username, userid: "", passwd: passwd, ha1: "", realm: "", domain: domain) + let accountParams = try mCore.createAccountParams() + let identity = try Factory.Instance.createAddress(addr: String("sip:" + username + "@" + domain)) + try! accountParams.setIdentityaddress(newValue: identity) + let address = try Factory.Instance.createAddress(addr: String("sip:" + domain)) + try address.setTransport(newValue: TransportType.Tls) + try accountParams.setServeraddress(newValue: address) + accountParams.registerEnabled = true + let account = try mCore.createAccount(params: accountParams) + mCore.addAuthInfo(info: authInfo) + try mCore.addAccount(account: account) + mCore.defaultAccount = account + } catch { NSLog(error.localizedDescription) } + } + + func outgoingCall() { + do { + let remoteAddress = try Factory.Instance.createAddress(addr: remoteAddress) + let params = try mCore.createCallParams(call: nil) + params.mediaEncryption = MediaEncryption.None + + + //mCore.defaultOutputAudioDevice = mCore.audioDevices.first { $0.type == AudioDeviceType.Speaker } + let call = mCore.inviteAddressWithParams(addr: remoteAddress, params: params) + //call?.outputAudioDevice = mCore.audioDevices.first { $0.type == AudioDeviceType.Speaker } + + } catch { NSLog(error.localizedDescription) } + + } + + func incomingCall() { + try? mCore.currentCall?.accept() + } + + func terminateCall() { + do { + if (mCore.callsNb == 0) { return } + let coreCall = (mCore.currentCall != nil) ? mCore.currentCall : mCore.calls[0] + if let call = coreCall { + try call.terminate() + } + } catch { NSLog(error.localizedDescription) } + } + + func pauseOrResume() { + do { + if (mCore.callsNb == 0) { return } + let coreCall = (mCore.currentCall != nil) ? mCore.currentCall : mCore.calls[0] + + if let call = coreCall { + if (call.state != Call.State.Paused && call.state != Call.State.Pausing) { + try call.pause() + isCallPaused = true + } else if (call.state != Call.State.Resuming) { + try call.resume() + isCallPaused = false + } + } + } catch { NSLog(error.localizedDescription) } + } +} + + +@main +struct AudioRouteInvestigationApp: App { + + @ObservedObject var audioRouteInvestigation = AudioRouteInvestigation() + var body: some Scene { + WindowGroup { + ContentView(audioRouteInvestigation: audioRouteInvestigation) + } + } +} diff --git a/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/ContentView.swift b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/ContentView.swift new file mode 100644 index 0000000..0b3def1 --- /dev/null +++ b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/ContentView.swift @@ -0,0 +1,82 @@ +// +// ContentView.swift +// AudioRouteInvestigation +// +// Created by QuentinArguillere on 25/11/2021. +// + +import SwiftUI +import linphonesw + +struct ContentView: View { + + @ObservedObject var audioRouteInvestigation : AudioRouteInvestigation + + func callStateString() -> String { + if (audioRouteInvestigation.isCallOutgoing) { + return "Call Outgoing" + } else if (audioRouteInvestigation.isCallIncoming) { + return "Call Incoming" + } else if (audioRouteInvestigation.isCallRunning) { + return "Call running" + } else { + return "No Call" + } + } + + var body: some View { + + VStack { + VStack { + HStack { + Text(audioRouteInvestigation.username) + Text(audioRouteInvestigation.loggedIn ? "REGISTERED" : "UNREGISTERED").foregroundColor(audioRouteInvestigation.loggedIn ? Color.green : Color.red) + } + Button(action: { + if (self.audioRouteInvestigation.isCallIncoming) { + self.audioRouteInvestigation.incomingCall() + } else { + self.audioRouteInvestigation.outgoingCall() + } + }){ + Text( self.audioRouteInvestigation.isCallIncoming ? "Accept Incoming Call" : "Start Outgoing Call") + .font(.largeTitle) + .foregroundColor(Color.white) + .frame(width: 340.0, height: 45.0) + .background(Color.gray) + }.disabled(audioRouteInvestigation.isCallRunning) + Button(action: audioRouteInvestigation.pauseOrResume) { + Text(audioRouteInvestigation.isCallPaused ? "Resume call" : "Pause call") + .font(.largeTitle) + .foregroundColor(Color.white) + .frame(width: 340.0, height: 42.0) + .background(Color.gray) + }.padding(.top, 50).disabled(!audioRouteInvestigation.isCallRunning) + Button(action: audioRouteInvestigation.terminateCall) { + Text( "Terminate call") + .font(.largeTitle) + .foregroundColor(Color.white) + .frame(width: 340.0, height: 42.0) + .background(Color.gray) + }.padding(.top, 50).disabled(!audioRouteInvestigation.isCallRunning) + HStack { + Text("Call state: ").font(.title3).underline() + Text(callStateString()) + Spacer() + } + HStack { + Text("Current Call msg: ").font(.title3).underline() + Text(audioRouteInvestigation.callMsg) + Spacer() + }.padding(.top, 50) + } + } + .padding() + } +} + +struct ContentView_Previews: PreviewProvider { + static var previews: some View { + ContentView(audioRouteInvestigation: AudioRouteInvestigation()) + } +} diff --git a/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/Preview Content/Preview Assets.xcassets/Contents.json b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/ios/swift/AudioRouteInvestigation/AudioRouteInvestigation/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/swift/AudioRouteInvestigation/Podfile b/ios/swift/AudioRouteInvestigation/Podfile new file mode 100644 index 0000000..a2415c8 --- /dev/null +++ b/ios/swift/AudioRouteInvestigation/Podfile @@ -0,0 +1,24 @@ +# Uncomment the next line to define a global platform for your project +platform :ios, '11.0' +source "https://gitlab.linphone.org/BC/public/podspec.git" +source "https://github.com/CocoaPods/Specs.git" + +def basic_pods + if ENV['PODFILE_PATH'].nil? + pod 'linphone-sdk', '~> 5.0.53' + else + pod 'linphone-sdk', :path => ENV['PODFILE_PATH'] # local sdk + end + +end + + + +target 'AudioRouteInvestigation' do + # Comment the next line if you don't want to use dynamic frameworks + use_frameworks! + + # Pods for AudioRouteInvestigation + basic_pods + +end