From daeec87404c039fd0976b1416df0a1106d0657c2 Mon Sep 17 00:00:00 2001 From: "benoit.martins" Date: Fri, 22 Sep 2023 14:49:56 +0200 Subject: [PATCH] Added Xcode Project --- Linphone.xcodeproj/project.pbxproj | 433 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 13710 bytes .../xcschemes/xcschememanagement.plist | 14 + Linphone.xcworkspace/contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 5 + .../UserInterfaceState.xcuserstate | Bin 0 -> 43728 bytes .../WorkspaceSettings.xcsettings | 14 + Linphone/.DS_Store | Bin 0 -> 6148 bytes .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 63 +++ Linphone/Assets.xcassets/Contents.json | 6 + Linphone/Linphone.entitlements | 10 + Linphone/LinphoneApp.swift | 29 ++ .../Preview Assets.xcassets/Contents.json | 6 + Linphone/core/CoreContext.swift | 54 +++ Linphone/ui/.DS_Store | Bin 0 -> 6148 bytes Linphone/ui/assistant/AssistantView.swift | 90 ++++ .../viewmodel/AccountLoginViewModel.swift | 110 +++++ Linphone/ui/main/ContentView.swift | 33 ++ Podfile | 25 + Podfile.lock | 21 + 24 files changed, 957 insertions(+) create mode 100644 Linphone.xcodeproj/project.pbxproj create mode 100644 Linphone.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Linphone.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Linphone.xcodeproj/project.xcworkspace/xcuserdata/martinsb.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Linphone.xcodeproj/xcuserdata/martinsb.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 Linphone.xcworkspace/contents.xcworkspacedata create mode 100644 Linphone.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Linphone.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 Linphone.xcworkspace/xcuserdata/martinsb.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Linphone.xcworkspace/xcuserdata/martinsb.xcuserdatad/WorkspaceSettings.xcsettings create mode 100644 Linphone/.DS_Store create mode 100644 Linphone/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Linphone/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Linphone/Assets.xcassets/Contents.json create mode 100644 Linphone/Linphone.entitlements create mode 100644 Linphone/LinphoneApp.swift create mode 100644 Linphone/Preview Content/Preview Assets.xcassets/Contents.json create mode 100644 Linphone/core/CoreContext.swift create mode 100644 Linphone/ui/.DS_Store create mode 100644 Linphone/ui/assistant/AssistantView.swift create mode 100644 Linphone/ui/assistant/viewmodel/AccountLoginViewModel.swift create mode 100644 Linphone/ui/main/ContentView.swift create mode 100644 Podfile create mode 100644 Podfile.lock diff --git a/Linphone.xcodeproj/project.pbxproj b/Linphone.xcodeproj/project.pbxproj new file mode 100644 index 000000000..d58787b09 --- /dev/null +++ b/Linphone.xcodeproj/project.pbxproj @@ -0,0 +1,433 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + D719ABB72ABC67BF00B41C10 /* LinphoneApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = D719ABB62ABC67BF00B41C10 /* LinphoneApp.swift */; }; + D719ABB92ABC67BF00B41C10 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D719ABB82ABC67BF00B41C10 /* ContentView.swift */; }; + D719ABBB2ABC67BF00B41C10 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D719ABBA2ABC67BF00B41C10 /* Assets.xcassets */; }; + D719ABBF2ABC67BF00B41C10 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D719ABBE2ABC67BF00B41C10 /* Preview Assets.xcassets */; }; + D719ABC92ABC6FD700B41C10 /* CoreContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D719ABC82ABC6FD700B41C10 /* CoreContext.swift */; }; + D719ABCC2ABC769C00B41C10 /* AssistantView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D719ABCB2ABC769C00B41C10 /* AssistantView.swift */; }; + D719ABCF2ABC779A00B41C10 /* AccountLoginViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D719ABCE2ABC779A00B41C10 /* AccountLoginViewModel.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D719ABB32ABC67BF00B41C10 /* Linphone.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Linphone.app; sourceTree = BUILT_PRODUCTS_DIR; }; + D719ABB62ABC67BF00B41C10 /* LinphoneApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinphoneApp.swift; sourceTree = ""; }; + D719ABB82ABC67BF00B41C10 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + D719ABBA2ABC67BF00B41C10 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + D719ABBC2ABC67BF00B41C10 /* Linphone.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Linphone.entitlements; sourceTree = ""; }; + D719ABBE2ABC67BF00B41C10 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + D719ABC82ABC6FD700B41C10 /* CoreContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreContext.swift; sourceTree = ""; }; + D719ABCB2ABC769C00B41C10 /* AssistantView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssistantView.swift; sourceTree = ""; }; + D719ABCE2ABC779A00B41C10 /* AccountLoginViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountLoginViewModel.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D719ABB02ABC67BF00B41C10 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1CF963E4850D8355137FE34F /* Pods */ = { + isa = PBXGroup; + children = ( + ); + path = Pods; + sourceTree = ""; + }; + D719ABAA2ABC67BF00B41C10 = { + isa = PBXGroup; + children = ( + D719ABB52ABC67BF00B41C10 /* Linphone */, + D719ABB42ABC67BF00B41C10 /* Products */, + 1CF963E4850D8355137FE34F /* Pods */, + ); + sourceTree = ""; + }; + D719ABB42ABC67BF00B41C10 /* Products */ = { + isa = PBXGroup; + children = ( + D719ABB32ABC67BF00B41C10 /* Linphone.app */, + ); + name = Products; + sourceTree = ""; + }; + D719ABB52ABC67BF00B41C10 /* Linphone */ = { + isa = PBXGroup; + children = ( + D719ABC72ABC6FB200B41C10 /* core */, + D719ABC52ABC6EE800B41C10 /* ui */, + D719ABB62ABC67BF00B41C10 /* LinphoneApp.swift */, + D719ABBA2ABC67BF00B41C10 /* Assets.xcassets */, + D719ABBC2ABC67BF00B41C10 /* Linphone.entitlements */, + D719ABBD2ABC67BF00B41C10 /* Preview Content */, + ); + path = Linphone; + sourceTree = ""; + }; + D719ABBD2ABC67BF00B41C10 /* Preview Content */ = { + isa = PBXGroup; + children = ( + D719ABBE2ABC67BF00B41C10 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + D719ABC52ABC6EE800B41C10 /* ui */ = { + isa = PBXGroup; + children = ( + D719ABCA2ABC761800B41C10 /* assistant */, + D719ABC62ABC6F0200B41C10 /* main */, + ); + path = ui; + sourceTree = ""; + }; + D719ABC62ABC6F0200B41C10 /* main */ = { + isa = PBXGroup; + children = ( + D719ABD02ABC7C4F00B41C10 /* viewmodel */, + D719ABB82ABC67BF00B41C10 /* ContentView.swift */, + ); + path = main; + sourceTree = ""; + }; + D719ABC72ABC6FB200B41C10 /* core */ = { + isa = PBXGroup; + children = ( + D719ABC82ABC6FD700B41C10 /* CoreContext.swift */, + ); + path = core; + sourceTree = ""; + }; + D719ABCA2ABC761800B41C10 /* assistant */ = { + isa = PBXGroup; + children = ( + D719ABCD2ABC777600B41C10 /* viewmodel */, + D719ABCB2ABC769C00B41C10 /* AssistantView.swift */, + ); + path = assistant; + sourceTree = ""; + }; + D719ABCD2ABC777600B41C10 /* viewmodel */ = { + isa = PBXGroup; + children = ( + D719ABCE2ABC779A00B41C10 /* AccountLoginViewModel.swift */, + ); + path = viewmodel; + sourceTree = ""; + }; + D719ABD02ABC7C4F00B41C10 /* viewmodel */ = { + isa = PBXGroup; + children = ( + ); + path = viewmodel; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + D719ABB22ABC67BF00B41C10 /* Linphone */ = { + isa = PBXNativeTarget; + buildConfigurationList = D719ABC22ABC67BF00B41C10 /* Build configuration list for PBXNativeTarget "Linphone" */; + buildPhases = ( + D719ABAF2ABC67BF00B41C10 /* Sources */, + D719ABB02ABC67BF00B41C10 /* Frameworks */, + D719ABB12ABC67BF00B41C10 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Linphone; + productName = Linphone; + productReference = D719ABB32ABC67BF00B41C10 /* Linphone.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D719ABAB2ABC67BF00B41C10 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1430; + LastUpgradeCheck = 1430; + TargetAttributes = { + D719ABB22ABC67BF00B41C10 = { + CreatedOnToolsVersion = 14.3.1; + }; + }; + }; + buildConfigurationList = D719ABAE2ABC67BF00B41C10 /* Build configuration list for PBXProject "Linphone" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = D719ABAA2ABC67BF00B41C10; + productRefGroup = D719ABB42ABC67BF00B41C10 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D719ABB22ABC67BF00B41C10 /* Linphone */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D719ABB12ABC67BF00B41C10 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D719ABBF2ABC67BF00B41C10 /* Preview Assets.xcassets in Resources */, + D719ABBB2ABC67BF00B41C10 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D719ABAF2ABC67BF00B41C10 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D719ABB92ABC67BF00B41C10 /* ContentView.swift in Sources */, + D719ABC92ABC6FD700B41C10 /* CoreContext.swift in Sources */, + D719ABCF2ABC779A00B41C10 /* AccountLoginViewModel.swift in Sources */, + D719ABB72ABC67BF00B41C10 /* LinphoneApp.swift in Sources */, + D719ABCC2ABC769C00B41C10 /* AssistantView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D719ABC02ABC67BF00B41C10 /* 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++20"; + 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; + DEAD_CODE_STRIPPING = YES; + 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; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + D719ABC12ABC67BF00B41C10 /* 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++20"; + 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; + DEAD_CODE_STRIPPING = YES; + 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; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + D719ABC32ABC67BF00B41C10 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = Linphone/Linphone.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + DEVELOPMENT_ASSET_PATHS = "\"Linphone/Preview Content\""; + DEVELOPMENT_TEAM = Z2V957B3D6; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 13.3; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.Linphone; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + D719ABC42ABC67BF00B41C10 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = Linphone/Linphone.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + DEVELOPMENT_ASSET_PATHS = "\"Linphone/Preview Content\""; + DEVELOPMENT_TEAM = Z2V957B3D6; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 13.3; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.Linphone; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D719ABAE2ABC67BF00B41C10 /* Build configuration list for PBXProject "Linphone" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D719ABC02ABC67BF00B41C10 /* Debug */, + D719ABC12ABC67BF00B41C10 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D719ABC22ABC67BF00B41C10 /* Build configuration list for PBXNativeTarget "Linphone" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D719ABC32ABC67BF00B41C10 /* Debug */, + D719ABC42ABC67BF00B41C10 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D719ABAB2ABC67BF00B41C10 /* Project object */; +} diff --git a/Linphone.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Linphone.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/Linphone.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Linphone.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Linphone.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/Linphone.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Linphone.xcodeproj/project.xcworkspace/xcuserdata/martinsb.xcuserdatad/UserInterfaceState.xcuserstate b/Linphone.xcodeproj/project.xcworkspace/xcuserdata/martinsb.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..2b2a4d04aa06e3f26fd9b969621fefd5ae829222 GIT binary patch literal 13710 zcmeHtd3=+__V+AFp=sJ|%~rOyY0@@J>0XKobcG6(LTOnFjiF6TpiN4WLJ@(9%H{^B zD5xw=Sw#gwuPcHJDhP^&i@V~^Rj>PY5xu|jJWrCgPh#-nYNQ|P;03?~7ve4=ExjgO}DGqPLTo*h|P4Ro$rl)x3%yTyQ zeM*E^ZnMi}mDS^&i=B-{p+T>sfhfAB+VAi?8Q!PBDJTX>krwHY9$AnT*-!==jxtde z%0@Y;43(p?XdJ3QSEKQ00-A`Xq3LJ_nu(fFGn$KBXdZGSKWaxy&~=ER09uLGptWcn zT958V8_~UJE82#hL{Fio(INBXVG)$dGrE0ie5p-&}--vdL4D6v*cf) zNfNP<3^JT#k}Og{MvzftG$|#OWD=<&lgSh^i_9htGKb71tz;4DAdATj>1oFgBSkI2X5bMiI$ zk^Dq{Cx1{(W2ltI(m1N2S~`R#(PWxUb7(HjqxrOej-Xf4Vp>AS(+PAUt)$g-Dy^Y2 z=xpks^JxohrEcn{?Q}7{j$Ti1psVQ3bUnSDZlL$l`{-u+DE$Y0j6P1Epik1L=+pEN zeTE*UN9eQkIr=<(fgYvD=xg*eJzJCFZf|Khjbc$8k|8-#AWul$#lD&F9g@o0 zl!g|E&lf}rq-2EAAc{w7CSuR9M7untD7!RsL}_7;tt2-;$CjH@Twp6MF3GkPj3_TG z$Sce#EXpsk%i}9b%cgm}^L=fO24|_Kp}p1V_J;{4pk!p;g$AL)Xb2jLhM`21#KbI$ z4PXOVG?TEHUC4k^kP(?+NE$LSDT`$R_B0Gp!*^;uH@nN-=vh?mb+kI|@=?9XO?AvE z@wok7PfLr_YtPLqEzT>-$*~pWp4OX^z=OTAdWzHM_jnyJoY&e?hu>kB4}+ma z4SrDj$WHWSO|I{u>hZM9ad<1jRPAzIPan@wuP*(PC3!j4#H_5G?4{PkC0V(dnbyR@ z%*>@r!#kXduH<$&59Ol*Gy)Z(k?0B*$7D>-6imrfEPfa4>nJoDjX_25s|5B{!_3UW zhQqH+mTH&FfqwN|&!S4lLRYf`Rwpz?9*ewASfc_))%aa4F2Bp^o91ft&lQGMxP5Ja za2{{Zu*jRehH(TUug`|L${Jmvm!iXKsYFwdxeHA~RcJEPG9A-*p=x-nVF~b<#_^gs zy}{Gy%z*dDyZjjuLK%^L2S%%%Ex?eoG13dTJJ#!IZxcEIrF~(Fb?6#o-i~IW*{B}b z*&sHU4PisKBL|v;8jynxV@WI-K7n$4xvRzR^zx@(ym%sT0Z0ziCOCZl2qmuBF4xq! zoBAEB6XtL>)>QPJC(O@$)PgkIwz0%+il?SV6cfngd8Q3uj=qD9Qmi59aIPSrUH?Dw5+0FR|;8Cq_a zC&0#YVqe9Xz$wl)uhR#L?%=p!CT5(Zz|C{Q<`EMr5^HrsXSn>%R(_=*D}XfqqJ{>i z&*y9ewQ<(_8aTzR^7ufcJnq@P(6Lp(JHG8vQn|8wz`*F3scjDb+!+7?&W>>|w?8P6 zOrPL#x6SpqopRJ28z+nDZ*FHto5Rf+WS)9X(b4*xa|P2Lff*Gsosw=sw)8WGSF3Er>js6Sm;Ku z&~3r*>mqwRnMsQd)piQ?Ovy0OxqZK>%ueL zj_%}Ux`SCe(FSJYW=d-JIlWb0XOq+GbvBlOa5j6qi_1FvPF{v8N`2kD9o>ZP*~T&i z#_vO$>mzIzdA*LsUFbfv1^K|v@{bX@2ovr^4uLq8nc!ILY4_XZ>Pz_GB?08n&?bxvck?cD zV_#GOu>e>qbv8MGK&f+1d$V9+5<^W@oX72hBf12QeDxC@9j;c_wa&&6^eFhZn*qEz z7C8+$jb21A0k*viKJRe=@yhDR4oz^nn|a&TtF6}2((aUFIbv4{hkpW{tn1YuM6V)W z?}nL^+MMnRH#h-4IkL-@q5YWPZ1PX_OmQ{O^$P-Z8r{>0&ae`e5f+j+(EG@|6U5^! z^fmy)yXZX-ic(g_%Gp>pZYTNxokJhO=f~hHRj{ksT==|`^ORr}!fpalaBD(KR|#$7 zV52~yp|N4UZ?@3Jop4r;rH;ef@qn+qIU53Yy1k{5v({DMKu&QkXa|P}goX3!d~zCQ z^WW$@&QyPmzCquz@oWN{*oD3aS>4AfK{iKm>?pa_7x_Y@c~l3;4GSoA@>>qJxpXmD zH&;WrMcA1O=wc`OjZI>8Z=yc{6%ocrh6$!vgvB@t55NO)Gvb4EddcxB`xF zcSkNB!YWvDswW#s#r68Hn66%I1bA|v}9O;l~{%2u^MZz7VU%03cJ%2JPo{|t?z+P zL7CMNzh{ca;|K4;DYV0ztqzyFXE^K;zul9X!gKcYu~}>iv$HvDG8<)=509W~pUo5| z?D4ZA_{tv_9)vD-;lX$a9?GiOG&Y0PoyJKx8CE66DcCr(hguEK2kb%(s|A_m{C5y7 zPAM~di(E~h7~uKfG@Ndi4+j13v1LG!Gav$zxx7Ja<}BJ@jtTQ%MfjIYzm*7%d zHj{IlgiT`(c8y(L_w*l9}nT*2~b-+tl%7XZ60KHxf!l(&&q7Xav5ucu8 z?5j&bT*)nji?#mN_|v!w);AdxzZ#F^BHB3)pA(Qb!|QAT6-F3Rj~u+<7=1;90}Y2i)qBbgs!0-To1SZvUk`#cE{xi*bE5h z!t($Dn>hqzZom{Dn-7@cz8q89@PaU=FfVHftGd9=B2IBT@M3%|Yh@nR)}y%1oZ`ZK zf1;;h{pqD!;ii?mN-gN4Qhk(2P?wM`!E5oo;1}U_cs;%y-+}MM8}MEDZoCn1!uK#g zYiA4DBG$ncvuoKBb{$*FmhHv&LCOIB@iyFvgJ5@zcn3;j%fS$G|JSoM>?R-|VCx{r z1zVKRbAZAQX9&>-_%#3_mv@5so9J?bE7JzfVZYs+ER=X4&*x}{;~UoRmTE3p@)B? zKcYg+B}~YL3xBryqIUmWj~95ld~-NZDEG890vPwVv5UNpHUK!M;4ecb8Dn*V zygiOCZs+_2-dEr}1@6CYU|1H8;O8JX#m}-EI`Q-DMlLu_D0Q~@9m2W);ES61Hr4SX^_g#ar& z=UMzVcsTeC{3d>j-OO%bw|3!oK+fJ{w}D)()Gu=d;-4$%UZ<}YntE$e3vXw zz@~5Tx8Qh3grv9Y7sTIj;M9L7cw%8!&@SwDU)SVE{8I!*?qzrNg^}Ml7`cdl$A7T9 z*+#ahUlFA$HPNumYzy1UwrwXmqQ@y@ z5bI<+0k?Lu)ajhd&F%jT-s|Rm%@l-42ynQqh(raEAS1N>B$=dgWDF#Q7>S7mSr^;R zc5Daa*@sU6-UNW()dIo{s)cBZi(nzI=Ul{{x^IeO5g$0fjwkf(4P`p28$4~Gfr))O z`PV&Oh(L-^S_cQ(vtHpzvMmgKNqo#27<-Z$r1`8+L7u-1^Z;uaeo zTu83q29IQWI?0vnem-&lD<0Ve-c#pQgN#A<1W6GoW_#KGNQgqpNCnb#k#aJYjAIY5 z2iZeiM1|7G1ULsZ+s6`T!*o3k-z@H_C)+89M{bQ19nEf+zr7Ixbnmv_0XnHB(=MAo z9_F73r>tfVvqZy~br<`*QBUm13~94eISQ|`fjA?pY+{eHRAEIfZbkFReD)9aM9+%c z#CsVlX{IvK{euIWSjTC(i2cb6k039u(YKAz$bOa^ajp+kVx*8GlPi>5%1f)$Ckz@q zWazNOq+~;i(Uh8&Znju0mf@L}%Iy#3kv$9jo?3vS6aaHy?r+c*o`CQii@Z4><3TT{eY>PjtA!d~%^>PcYvj zIQ=p+6&&m-kluxfAsa97ASkpC(lNqwWqa!!j*cQSLde>4ZLowIcPme~vDXT+;pGZn zufNFnYVd=LfEznt`%1W~j1ayKxqRYC%vVub3#+N9D20*^ygSz07XDexC3BdVQAQL; zWKdMWP*9O6G^be%L(wccI+_iT!w(4)K_NyzaGyM3MB&IQuDoj0=rKjbC8gshOqqF& zV~(?>)xE$k)RLeelwVSkS5{J1V9O~iD757kWtZ4Scx|Tn)As#yBC{n}K}r>4FL^h^!KTAaZ(w^a<8D9B=egvrdM5{!%iS810in>HQM7uV~;s4`EW_5r%;u2stF)R&cq}P&^|@5a(G6zqpEnTQH@(r%~Z<@_;f- z@j%Gvcl4cx&+~JITqs}4!ui<9ggSvCf$cCkj_dG-?k5M4If$j?0Bd5$gX9tND0_u{ z%56n~kV@e{b3*B^>h`uaaAz+~tn?WZp85&$6gX`-hBb7Or`ZXX8tynuUV#(=IYOQ# z&ynZJ3*;zyk-S7+CdbHec9OlyUSp@&>#UodW@p$x*;)3+UUEW65s*{3lXOG4X(ayy zm;Fs}%DDfxAw}>3xXJ<*DL4n{~|>|K7kYg`INmCN)eFr{iX=Q zqVNs*4l)GfTlP*T`JTP|_c8?JXYwB|kUmC!Wh>cxL2>~C>G!!n`mzuj?#qz>@+pB3 zMM`KCWCAFqA}VI**oW++F8m&30^WfvKmf7n!)Ye_hW)~RW&dFp*l*m9S^EG$2qZ&saTs;N z*=~S2AxRs?6k#}@HSx6jLO>%l@~(6L(}%}Tb$FYdp-gLNxTPO%?0woeKouzT&rE1^ zak~quXMnko9rK09oBGTYY8Bdg^TJ1{v=Fp`j%44mx-;}Du5 zd-fgsoc(Ozt|bf~oVp@>BBgXJfHN(l ziB{R=L;7%h>3MX~$#e>rNc!tx{nsZT1nV<-?~Uz;sqn&T=`!!Db$uJ^X($O0 z9x;bDL1a!FXd`v9-`OARzg@JM&ZVvZMgc4e;DH=?3u&&e>j!E) zjeRX^@nYdcK49c7nq4+=-|-xQFt;AMfK%PJ0LGov8^DB1UWG2Ybkl_(1&e40=Z$kk zC*j<)w?+jp<-H+r(3S{}k26TGja-|cOX+fM)@1=K?xZY$qk7K@bKXc-(3LY_Rv%wo z3*Z5eVCLM;5t%uew#>||?0oo0Y=?XQX@SKDwViOb^h54EpupN(A65fD;0EPyi1O;2{A# zlqJq|`N~>c&D764EwB<~yGI+eo@_c0)Gtm)lc;RE*&A}T+OzocWD3u;|( ziwZIz!W-44-gJ!KvZpWmfpzto)4JT2~c!hij(rm6dJH67cUuuJEsb z+o*NnV>(VxfXr}ho%Cb?Cxvo(^b~h_f*T1pa=>cSGojl#-0wHg#UPFWL)gGRV|5Tb z=}|JW!aeGda1(MeMCY?mJ>2o#PY!`Ad5XLNw|d`)8@->xZQg&8FR7BI!+qT{I+j+z zUEPTQij(24?i@gpCIFCma8uV!+o+cY;NI<*A`JvWQ$-%p&7zH=u;)S1KGDOXgQ7=8 zFNj_gy(~H|Iw5*hbV}4MIwSgAbU_>kfl!`!oVZpzP24D+FK!ik#0$h7;%mj%iI<6) zxJ&$)_?Y;t_yh5W;*Z6jia!^B3*pg^;-AI8iZ4VdqKr|aqGm)jMKwpwjhYwbi&_@7 zD(cRtO;N$9Ls7@0PDZ^J)g5&v>TJ|^Q5Obi2j~Y38n|-c+JTP`JUsAx^u*}e=$2?7 zWPxsoUJ<=I`ljexq92Jq6n#AUWb|v%-O*>F&qiO6P>DzqC6P&nN{kYlBwtb@nJJki zsh3>!fp~ z?b1ck#nL6xrPAfnfb=%$I_d4wJEeC?H%jl3-Y4BJeNlQwdM*~ll2}=+CRP`l5IZ>5 z5NnK0jZKfW#Eyxrj&;VmV;98wV%uZyiaii}Huij6R9r%wDXuiGJZ@av)o~NzD&wl+ zro>H+YmH-ZYvXpsJsEd4?#;Nj>b&AvJYhEW#7qumQ%S*u9pvz50MX(&y)M) zYvi}dx62=tKQ4b#{RK*mDj)DhsQr^9cBpo#_Nex%9#rj9J*+yYdQ|n8 z>Wu1#cx`-P{OtG};vb6dj{iO%Du>Z{b{>PhO!>S}e3dYXEMdZxNrJx|@D z_NW)Aed=}U&FY|fyLzX3ulhmtKJ~-uBkB|C*VJ#S-%`J${zUzq`d9S@^+oj`8nI@8 zCR!7tiPa=)iZpi3T#ZY!P_sm{RI^-jqh_UMwdN+xI?YziZp{(RQO$drZ?pro60KAl zr?B{h^Q1EA{bu zjb5i8rccrv^hSNEK2Kk)uhG}*=j*+CzkZ>ksN5)jzI(QvbC6sQ$SAg#K0iDgAr;PxPPZ&+EU?f2aRJ|C9a~{eKc@f;2&&keHC1 zkdk0Zuq6yn$V$jb$V(WTP?azv!I88gX;sp?q%BE1k{(EUBI(tnQ%T)PXOhk)y_xiO z(z{9TC!I_BDCw7^|0MmE^m{T&rpZys(aAB%amk8gRkAsGY;s-l+~noS>ysZ!K9&4Y z^6v(TL1s`GR0f?P!7$h`)G*!PG|V;3Gqf5!h6RRYh7E?h4Vw)28a5lY8afSKh8>1o zhCPP8hUW|~7+y5IY&dQ>VR+SW%Ft~%V>oMg)9|+8mlRFP$dp+rEM;fP>nT4O9FZp)AOdIsRL8hsmZA+sZcdZHK$rrGg7Zey()EdYEf!QYFX;o z)QZ%O)ZM9Xq>0n=((2Qi)8?hMq`A|Ur>#l5IqlZ8wQ1|q?n&E~_CVT0Y5UV2O?xcu ziL|HEo=ZEH_I}#u=>yW^(lgRa)9cfH=`1~vetr6l>Fd*PProC5LwYd1D}8(V&h&%n zPo_Ve{!IFj^q10)r=LtemEN8HgV|!9YIc|#&CTX{=2o-E++hxw*O+fNZ!m8$?=atQ ze$4!&`H=aD`FZnE^Q-1J%paORvB)esi`kN88EF}7x!N+(Qe~;O)L58hjpcUB220Sg z!?N45*Yc2MzvUUrOO`X1e_6h=d}I0E@{{FP%WsxHtk^2D4zLck4z(s(4OXKy&1$h` zShK9T)&gsxwbWW?^;>VXZnHjSJz+g-{nAElQd^;Iv~7Z|+E#CCw#~D(*xa@ywq-VE vyTP{7w%WGdcBkzw+eTZbEoj?rd(d{k_K58tp+q1NzUe#R6rk{Jd;EU@3y?6I literal 0 HcmV?d00001 diff --git a/Linphone.xcodeproj/xcuserdata/martinsb.xcuserdatad/xcschemes/xcschememanagement.plist b/Linphone.xcodeproj/xcuserdata/martinsb.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 000000000..31e3717b8 --- /dev/null +++ b/Linphone.xcodeproj/xcuserdata/martinsb.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + Linphone.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/Linphone.xcworkspace/contents.xcworkspacedata b/Linphone.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..c96eedd87 --- /dev/null +++ b/Linphone.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/Linphone.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Linphone.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/Linphone.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Linphone.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Linphone.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..0c67376eb --- /dev/null +++ b/Linphone.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,5 @@ + + + + + diff --git a/Linphone.xcworkspace/xcuserdata/martinsb.xcuserdatad/UserInterfaceState.xcuserstate b/Linphone.xcworkspace/xcuserdata/martinsb.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..ad787a03f6985fe28758e544e02ffe5c84513224 GIT binary patch literal 43728 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 literal 0 HcmV?d00001 diff --git a/Linphone.xcworkspace/xcuserdata/martinsb.xcuserdatad/WorkspaceSettings.xcsettings b/Linphone.xcworkspace/xcuserdata/martinsb.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..bbfef027f --- /dev/null +++ b/Linphone.xcworkspace/xcuserdata/martinsb.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,14 @@ + + + + + BuildLocationStyle + UseAppPreferences + CustomBuildLocationType + RelativeToDerivedData + DerivedDataLocationStyle + Default + ShowSharedSchemesAutomaticallyEnabled + + + diff --git a/Linphone/.DS_Store b/Linphone/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ec9d1dc224bc482e05b77058533914b4c2cd94a1 GIT binary patch literal 6148 zcmeHK!EVz)5S>i}b*NB-M5SJkEOCuOXiKGvi<6cE5(k748~_EoG1S7{jbf)piX!<8 zAH$U|;a@nxo84`dIP}5+p=d{%eY3kWW6yJTH%mlfFdaQ4Y7>zMWo+I;^9SL1))i^k z5sni&M?pDt=`)>DwBqds90QJl|BV4&yW7;qy3Hw}#r1nN@-$PYai(H;@;1?jc7JJs zg>3_?UD1S+n%}qU{Ngen+kD^SahB#qulGYVHkvnXZhD*EmiI0^Q)O60#WWv8lQ-OZ zsZH4cDLa?yi>{0Wb~P=xEndP`7*};)gcF%5`4MC6 zzeCR`B}rpC11}P+cA*m7rqB%bx$Wo6jEQ@QUS#&pN~S)tj*%~?64^dbQOm&ZwU}X> zp7WQX3wS4p@#$EFo@hN literal 0 HcmV?d00001 diff --git a/Linphone/Assets.xcassets/AccentColor.colorset/Contents.json b/Linphone/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 000000000..eb8789700 --- /dev/null +++ b/Linphone/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Linphone/Assets.xcassets/AppIcon.appiconset/Contents.json b/Linphone/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..532cd729c --- /dev/null +++ b/Linphone/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,63 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Linphone/Assets.xcassets/Contents.json b/Linphone/Assets.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/Linphone/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Linphone/Linphone.entitlements b/Linphone/Linphone.entitlements new file mode 100644 index 000000000..f2ef3ae02 --- /dev/null +++ b/Linphone/Linphone.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.files.user-selected.read-only + + + diff --git a/Linphone/LinphoneApp.swift b/Linphone/LinphoneApp.swift new file mode 100644 index 000000000..6536d8c3d --- /dev/null +++ b/Linphone/LinphoneApp.swift @@ -0,0 +1,29 @@ +/* +* Copyright (c) 2010-2023 Belledonne Communications SARL. +* +* This file is part of linphone-iphone +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*/ + +import SwiftUI + +@main +struct LinphoneApp: App { + var body: some Scene { + WindowGroup { + ContentView() + } + } +} diff --git a/Linphone/Preview Content/Preview Assets.xcassets/Contents.json b/Linphone/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/Linphone/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Linphone/core/CoreContext.swift b/Linphone/core/CoreContext.swift new file mode 100644 index 000000000..fbc995456 --- /dev/null +++ b/Linphone/core/CoreContext.swift @@ -0,0 +1,54 @@ +/* +* Copyright (c) 2010-2023 Belledonne Communications SARL. +* +* This file is part of Linphone +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*/ + +import linphonesw + +class CoreContext : ObservableObject { + + static let shared = CoreContext() + + var mCore: Core! + var mRegistrationDelegate : CoreDelegate! + + var coreVersion: String = Core.getVersion + @Published var loggedIn: Bool = false + + private init() { + + LoggingService.Instance.logLevel = LogLevel.Debug + + try? mCore = Factory.Instance.createCore(configPath: "", factoryConfigPath: "", systemContext: nil) + try? mCore.start() + + // Create a Core listener to listen for the callback we need + // In this case, we want to know about the account registration status + mRegistrationDelegate = CoreDelegateStub(onAccountRegistrationStateChanged: { (core: Core, account: Account, state: RegistrationState, message: String) in + + // If account has been configured correctly, we will go through Progress and Ok states + // Otherwise, we will be Failed. + 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: mRegistrationDelegate) + } +} diff --git a/Linphone/ui/.DS_Store b/Linphone/ui/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9bbad94a3ae4f85c2f8481ca6cd960f65801c524 GIT binary patch literal 6148 zcmeHKO>fgc5S>i}wN)YIP^2DL>NSGUmP%DGZfFm^Vgv_3!6s3$aCfWNA%`fE&+U)t zm0!Z&DQ|YS6;Z;qL}4qWUbKB1}b-t zifYQpP<>u5^_GTpRDj1W#+X&O3i!kL*{^wNb7c9~IDx;obB1UoBcE1Rf$=lHDvPS_ z^?s?=M*GRr&1f^)iaw{`>@=;jdQ$bX@kg$`v$o9d<1Bw)jHZLm_8V*JtT3aoBNW3C zx_tUjn4z8a?ZgZ#$4z}AilcbY*_qAuULSS!{=wnAt7k`hy{5@;62NHXhLe PlZ}9rK?+geQ5E. +*/ + +import SwiftUI + +struct AssistantView: View { + + var coreContext = CoreContext.shared + @ObservedObject var accountLoginViewModel : AccountLoginViewModel + + var body: some View { + VStack { + HStack { + Text("Username:") + .font(.title) + TextField("", text : $accountLoginViewModel.username) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .disabled(coreContext.loggedIn) + } + HStack { + Text("Password:") + .font(.title) + TextField("", text : $accountLoginViewModel.passwd) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .disabled(coreContext.loggedIn) + } + HStack { + Text("Domain:") + .font(.title) + TextField("", text : $accountLoginViewModel.domain) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .disabled(coreContext.loggedIn) + } + Picker(selection: $accountLoginViewModel.transportType, label: Text("Transport:")) { + Text("TLS").tag("TLS") + Text("TCP").tag("TCP") + Text("UDP").tag("UDP") + }.pickerStyle(SegmentedPickerStyle()).padding() + VStack { + HStack { + Button(action: { + if (self.coreContext.loggedIn) + { + self.accountLoginViewModel.unregister() + self.accountLoginViewModel.delete() + } else { + self.accountLoginViewModel.login() + } + }) + { + Text(coreContext.loggedIn ? "Log out & \ndelete account" : "Create & \nlog in account") + .font(.largeTitle) + .foregroundColor(Color.white) + .frame(width: 220.0, height: 90) + .background(Color.gray) + } + + } + HStack { + Text("Login State : ") + .font(.footnote) + Text(coreContext.loggedIn ? "Looged in" : "Unregistered") + .font(.footnote) + .foregroundColor(coreContext.loggedIn ? Color.green : Color.black) + }.padding(.top, 10.0) + } + Group { + Spacer() + Text("Core Version is \(coreContext.coreVersion)") + } + } + .padding() + } +} diff --git a/Linphone/ui/assistant/viewmodel/AccountLoginViewModel.swift b/Linphone/ui/assistant/viewmodel/AccountLoginViewModel.swift new file mode 100644 index 000000000..4ae39cee8 --- /dev/null +++ b/Linphone/ui/assistant/viewmodel/AccountLoginViewModel.swift @@ -0,0 +1,110 @@ +/* +* Copyright (c) 2010-2023 Belledonne Communications SARL. +* +* This file is part of Linphone +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*/ + +import linphonesw + +class AccountLoginViewModel : ObservableObject { + + var coreContext = CoreContext.shared + @Published var username : String = "user" + @Published var passwd : String = "pwd" + @Published var domain : String = "sip.example.org" + @Published var transportType : String = "TLS" + + init() {} + + func login() { + do { + // Get the transport protocol to use. + // TLS is strongly recommended + // Only use UDP if you don't have the choice + var transport : TransportType + if (transportType == "TLS") { transport = TransportType.Tls } + else if (transportType == "TCP") { transport = TransportType.Tcp } + else { transport = TransportType.Udp } + + // To configure a SIP account, we need an Account object and an AuthInfo object + // The first one is how to connect to the proxy server, the second one stores the credentials + + // The auth info can be created from the Factory as it's only a data class + // userID is set to null as it's the same as the username in our case + // ha1 is set to null as we are using the clear text password. Upon first register, the hash will be computed automatically. + // The realm will be determined automatically from the first register, as well as the algorithm + let authInfo = try Factory.Instance.createAuthInfo(username: username, userid: "", passwd: passwd, ha1: "", realm: "", domain: domain) + + // Account object replaces deprecated ProxyConfig object + // Account object is configured through an AccountParams object that we can obtain from the Core + + let accountParams = try coreContext.mCore!.createAccountParams() + + // A SIP account is identified by an identity address that we can construct from the username and domain + let identity = try Factory.Instance.createAddress(addr: String("sip:" + username + "@" + domain)) + try! accountParams.setIdentityaddress(newValue: identity) + + // We also need to configure where the proxy server is located + let address = try Factory.Instance.createAddress(addr: String("sip:" + domain)) + + // We use the Address object to easily set the transport protocol + try address.setTransport(newValue: transport) + try accountParams.setServeraddress(newValue: address) + // And we ensure the account will start the registration process + accountParams.registerEnabled = true + + // Now that our AccountParams is configured, we can create the Account object + let account = try coreContext.mCore!.createAccount(params: accountParams) + + // Now let's add our objects to the Core + coreContext.mCore!.addAuthInfo(info: authInfo) + try coreContext.mCore!.addAccount(account: account) + + // Also set the newly added account as default + coreContext.mCore!.defaultAccount = account + + } catch { NSLog(error.localizedDescription) } + } + + func unregister() { + // Here we will disable the registration of our Account + if let account = coreContext.mCore!.defaultAccount { + + let params = account.params + // Returned params object is const, so to make changes we first need to clone it + let clonedParams = params?.clone() + + // Now let's make our changes + clonedParams?.registerEnabled = false + + // And apply them + account.params = clonedParams + } + } + + func delete() { + // To completely remove an Account + if let account = coreContext.mCore!.defaultAccount { + coreContext.mCore!.removeAccount(account: account) + + // To remove all accounts use + coreContext.mCore!.clearAccounts() + + // Same for auth info + coreContext.mCore!.clearAllAuthInfo() + } + } +} diff --git a/Linphone/ui/main/ContentView.swift b/Linphone/ui/main/ContentView.swift new file mode 100644 index 000000000..083a0011d --- /dev/null +++ b/Linphone/ui/main/ContentView.swift @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2010-2023 Belledonne Communications SARL. +* +* This file is part of linphone-iphone +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*/ + +import SwiftUI + +struct ContentView: View { + + var body: some View { + AssistantView(accountLoginViewModel: AccountLoginViewModel()) + } +} + +struct ContentView_Previews: PreviewProvider { + static var previews: some View { + AssistantView(accountLoginViewModel: AccountLoginViewModel()) + } +} diff --git a/Podfile b/Podfile new file mode 100644 index 000000000..2a03bdc6d --- /dev/null +++ b/Podfile @@ -0,0 +1,25 @@ +# Uncomment the next line to define a global platform for your project +platform :ios, '15.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.3.0-alpha' + else + pod 'linphone-sdk', :path => ENV['PODFILE_PATH'] # local sdk + end + +end + + + +target 'Linphone' do + # Comment the next line if you don't want to use dynamic frameworks + use_frameworks! + + # Pods for LoginTutorial + pod 'SwiftLint' + basic_pods + +end diff --git a/Podfile.lock b/Podfile.lock new file mode 100644 index 000000000..d2285071e --- /dev/null +++ b/Podfile.lock @@ -0,0 +1,21 @@ +PODS: + - "linphone-sdk (5.3.0-alpha.173+990473d73)" + - SwiftLint (0.52.4) + +DEPENDENCIES: + - linphone-sdk (~> 5.3.0-alpha) + - SwiftLint + +SPEC REPOS: + https://github.com/CocoaPods/Specs.git: + - SwiftLint + https://gitlab.linphone.org/BC/public/podspec.git: + - linphone-sdk + +SPEC CHECKSUMS: + linphone-sdk: 9f39eda481406fdc22ebb406e40ee56e6c12fcc6 + SwiftLint: 1cc5cd61ba9bacb2194e340aeb47a2a37fda00b3 + +PODFILE CHECKSUM: bd475905201c295afc656eeac0cc62b9ab7159d5 + +COCOAPODS: 1.12.1