diff --git a/ios/Podfile b/ios/Podfile index ff29ffff27..c81916bb55 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -44,7 +44,6 @@ target 'JitsiMeetSDK' do pod 'giphy-react-native-sdk', :path => '../node_modules/@giphy/react-native-sdk' pod 'RNCalendarEvents', :path => '../node_modules/react-native-calendar-events' pod 'RNGoogleSignin', :path => '../node_modules/@react-native-google-signin/google-signin' - pod 'RNWatch', :path => '../node_modules/react-native-watch-connectivity' # Native pod dependencies # diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 57b96016d2..0916a26c8d 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1870,8 +1870,6 @@ PODS: - React-Core - RNSVG (15.11.2): - React-Core - - RNWatch (1.1.0): - - React - SocketRocket (0.7.1) - SplashView (0.0.18): - DoubleConversion @@ -1993,7 +1991,6 @@ DEPENDENCIES: - RNScreens (from `../node_modules/react-native-screens`) - RNSound (from `../node_modules/react-native-sound`) - RNSVG (from `../node_modules/react-native-svg`) - - RNWatch (from `../node_modules/react-native-watch-connectivity`) - SplashView (from `../node_modules/react-native-splash-view`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) @@ -2203,8 +2200,6 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-sound" RNSVG: :path: "../node_modules/react-native-svg" - RNWatch: - :path: "../node_modules/react-native-watch-connectivity" SplashView: :path: "../node_modules/react-native-splash-view" Yoga: @@ -2321,11 +2316,10 @@ SPEC CHECKSUMS: RNScreens: 9ef996b6041d0960a4794a845f7d0808b171b4ef RNSound: 314cc5226453ef4a3314a196c65e8a65e5106a7b RNSVG: 67de7abef81f367387b708ba6d2acefe7d4f5895 - RNWatch: 28fe1f5e0c6410d45fd20925f4796fce05522e3f SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 SplashView: ed71a114c3ffe60dc3a9e5aa2cefb352c3794a70 Yoga: 31a098f74c16780569aebd614a0f37a907de0189 -PODFILE CHECKSUM: eac4bba07b2f30174fc20bccbaf64f86676d9b1f +PODFILE CHECKSUM: 7c37a89916893e11159576c8b308b7b5c25246c9 COCOAPODS: 1.16.2 diff --git a/ios/app/app.xcodeproj/project.pbxproj b/ios/app/app.xcodeproj/project.pbxproj index 871fe54ddb..b7ff1613a5 100644 --- a/ios/app/app.xcodeproj/project.pbxproj +++ b/ios/app/app.xcodeproj/project.pbxproj @@ -7,16 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 0B5418471F7C5D8C00A2DD86 /* MeetingRowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B5418461F7C5D8C00A2DD86 /* MeetingRowController.swift */; }; - 0B7001701F7C51CC005944F4 /* InCallController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B70016F1F7C51CC005944F4 /* InCallController.swift */; }; - 0BEA5C291F7B8F73000D0AB4 /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0BEA5C271F7B8F73000D0AB4 /* Interface.storyboard */; }; - 0BEA5C2B1F7B8F73000D0AB4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0BEA5C2A1F7B8F73000D0AB4 /* Assets.xcassets */; }; - 0BEA5C321F7B8F73000D0AB4 /* JitsiMeetCompanion Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 0BEA5C311F7B8F73000D0AB4 /* JitsiMeetCompanion Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 0BEA5C371F7B8F73000D0AB4 /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BEA5C361F7B8F73000D0AB4 /* InterfaceController.swift */; }; - 0BEA5C391F7B8F73000D0AB4 /* ExtensionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BEA5C381F7B8F73000D0AB4 /* ExtensionDelegate.swift */; }; - 0BEA5C3B1F7B8F73000D0AB4 /* ComplicationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BEA5C3A1F7B8F73000D0AB4 /* ComplicationController.swift */; }; - 0BEA5C3D1F7B8F73000D0AB4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0BEA5C3C1F7B8F73000D0AB4 /* Assets.xcassets */; }; - 0BEA5C411F7B8F73000D0AB4 /* JitsiMeetCompanion.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = 0BEA5C251F7B8F73000D0AB4 /* JitsiMeetCompanion.app */; }; 13B07FBD1A68108700A75B9A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.storyboard */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 2681BB562C7A0B42CFBA6719 /* libPods-JitsiMeet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D6152FF9E9F7B0E86F70A21D /* libPods-JitsiMeet.a */; }; @@ -36,27 +26,11 @@ DEA9F28A258A6EA800D4CD74 /* JitsiMeetSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; DED016F128ECBC9D009D5E8D /* WebRTC.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = DED016F028ECBC9D009D5E8D /* WebRTC.xcframework */; }; DED016F228ECBC9D009D5E8D /* WebRTC.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DED016F028ECBC9D009D5E8D /* WebRTC.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - E588011722789D43008B0561 /* JitsiMeetContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = E58801132278944E008B0561 /* JitsiMeetContext.swift */; }; - E5C97B63227A1EB400199214 /* JitsiMeetCommands.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5C97B62227A1EB400199214 /* JitsiMeetCommands.swift */; }; FD572B9827EDF32300A800FB /* GiphyUISDK.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD572B9727EDF32300A800FB /* GiphyUISDK.xcframework */; }; FD572B9927EDF32300A800FB /* GiphyUISDK.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FD572B9727EDF32300A800FB /* GiphyUISDK.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 0BEA5C331F7B8F73000D0AB4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0BEA5C301F7B8F73000D0AB4; - remoteInfo = "JitsiMeetCompanion Extension"; - }; - 0BEA5C3F1F7B8F73000D0AB4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0BEA5C241F7B8F73000D0AB4; - remoteInfo = JitsiMeetCompanion; - }; 4EB06029260E026600F524C5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; @@ -81,24 +55,12 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; - 0BEA5C471F7B8F73000D0AB4 /* Embed App Extensions */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 13; - files = ( - 0BEA5C321F7B8F73000D0AB4 /* JitsiMeetCompanion Extension.appex in Embed App Extensions */, - ); - name = "Embed App Extensions"; - runOnlyForDeploymentPostprocessing = 0; - }; 0BEA5C491F7B8F73000D0AB4 /* Embed Watch Content */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = "$(CONTENTS_FOLDER_PATH)/Watch"; dstSubfolderSpec = 16; files = ( - 0BEA5C411F7B8F73000D0AB4 /* JitsiMeetCompanion.app in Embed Watch Content */, ); name = "Embed Watch Content"; runOnlyForDeploymentPostprocessing = 0; @@ -118,19 +80,7 @@ /* Begin PBXFileReference section */ 0B26BE6D1EC5BC3C00EEFB41 /* JitsiMeet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = JitsiMeet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0B5418461F7C5D8C00A2DD86 /* MeetingRowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRowController.swift; sourceTree = ""; }; - 0B70016F1F7C51CC005944F4 /* InCallController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InCallController.swift; sourceTree = ""; }; 0BD6B4361EF82A6B00D1F4CD /* WebRTC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebRTC.framework; path = "../../node_modules/react-native-webrtc/ios/WebRTC.framework"; sourceTree = ""; }; - 0BEA5C251F7B8F73000D0AB4 /* JitsiMeetCompanion.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JitsiMeetCompanion.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 0BEA5C281F7B8F73000D0AB4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = ""; }; - 0BEA5C2A1F7B8F73000D0AB4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 0BEA5C2C1F7B8F73000D0AB4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 0BEA5C311F7B8F73000D0AB4 /* JitsiMeetCompanion Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "JitsiMeetCompanion Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; - 0BEA5C361F7B8F73000D0AB4 /* InterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceController.swift; sourceTree = ""; }; - 0BEA5C381F7B8F73000D0AB4 /* ExtensionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionDelegate.swift; sourceTree = ""; }; - 0BEA5C3A1F7B8F73000D0AB4 /* ComplicationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComplicationController.swift; sourceTree = ""; }; - 0BEA5C3C1F7B8F73000D0AB4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 0BEA5C3E1F7B8F73000D0AB4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* jitsi-meet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "jitsi-meet.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = src/Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; @@ -156,19 +106,10 @@ DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = JitsiMeetSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; }; DED016F028ECBC9D009D5E8D /* WebRTC.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = WebRTC.xcframework; path = ../Pods/JitsiWebRTC/WebRTC.xcframework; sourceTree = ""; }; DEFDBBDB25656E3B00344B23 /* WebRTC.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = WebRTC.xcframework; path = "../../node_modules/react-native-webrtc/ios/WebRTC.xcframework"; sourceTree = ""; }; - E58801132278944E008B0561 /* JitsiMeetContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JitsiMeetContext.swift; sourceTree = ""; }; - E5C97B62227A1EB400199214 /* JitsiMeetCommands.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JitsiMeetCommands.swift; sourceTree = ""; }; FD572B9727EDF32300A800FB /* GiphyUISDK.xcframework */ = {isa = PBXFileReference; expectedSignature = "AppleDeveloperProgram:925PGC4MV7:Giphy, Inc."; lastKnownFileType = wrapper.xcframework; name = GiphyUISDK.xcframework; path = ../Pods/Giphy/GiphySDK/GiphyUISDK.xcframework; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0BEA5C2E1F7B8F73000D0AB4 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -181,13 +122,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 1F021A8A5B056078665DE530 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 4EB06020260E026600F524C5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -216,34 +150,6 @@ name = Frameworks; sourceTree = ""; }; - 0BEA5C261F7B8F73000D0AB4 /* Watch app */ = { - isa = PBXGroup; - children = ( - 0BEA5C271F7B8F73000D0AB4 /* Interface.storyboard */, - 0BEA5C2A1F7B8F73000D0AB4 /* Assets.xcassets */, - 0BEA5C2C1F7B8F73000D0AB4 /* Info.plist */, - ); - name = "Watch app"; - path = watchos/app; - sourceTree = ""; - }; - 0BEA5C351F7B8F73000D0AB4 /* WatchKit extension */ = { - isa = PBXGroup; - children = ( - 0BEA5C361F7B8F73000D0AB4 /* InterfaceController.swift */, - 0BEA5C381F7B8F73000D0AB4 /* ExtensionDelegate.swift */, - 0BEA5C3A1F7B8F73000D0AB4 /* ComplicationController.swift */, - 0BEA5C3C1F7B8F73000D0AB4 /* Assets.xcassets */, - 0BEA5C3E1F7B8F73000D0AB4 /* Info.plist */, - 0B70016F1F7C51CC005944F4 /* InCallController.swift */, - 0B5418461F7C5D8C00A2DD86 /* MeetingRowController.swift */, - E58801132278944E008B0561 /* JitsiMeetContext.swift */, - E5C97B62227A1EB400199214 /* JitsiMeetCommands.swift */, - ); - name = "WatchKit extension"; - path = watchos/extension; - sourceTree = ""; - }; 13B07FAE1A68108700A75B9A /* src */ = { isa = PBXGroup; children = ( @@ -279,11 +185,10 @@ 0B26BE711EC5BC4D00EEFB41 /* Frameworks */, 83CBBA001A601CBA00E9B192 /* Products */, 13B07FAE1A68108700A75B9A /* src */, - 0BEA5C261F7B8F73000D0AB4 /* Watch app */, - 0BEA5C351F7B8F73000D0AB4 /* WatchKit extension */, 4EB06025260E026600F524C5 /* JitsiMeetBroadcast Extension */, CDD71F5E1157E9F283DF92A8 /* Pods */, 5C1BE20ECD5DEEB48FED90B5 /* PrivacyInfo.xcprivacy */, + DEAC44E22E97D2C200AD7BEE /* Recovered References */, ); indentWidth = 2; sourceTree = ""; @@ -293,8 +198,6 @@ isa = PBXGroup; children = ( 13B07F961A680F5B00A75B9A /* jitsi-meet.app */, - 0BEA5C251F7B8F73000D0AB4 /* JitsiMeetCompanion.app */, - 0BEA5C311F7B8F73000D0AB4 /* JitsiMeetCompanion Extension.appex */, 4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */, ); name = Products; @@ -310,44 +213,17 @@ path = ../Pods; sourceTree = ""; }; + DEAC44E22E97D2C200AD7BEE /* Recovered References */ = { + isa = PBXGroup; + children = ( + 13B07FB11A68108700A75B9A /* LaunchScreen.storyboard */, + ); + name = "Recovered References"; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 0BEA5C241F7B8F73000D0AB4 /* JitsiMeetCompanion */ = { - isa = PBXNativeTarget; - buildConfigurationList = 0BEA5C481F7B8F73000D0AB4 /* Build configuration list for PBXNativeTarget "JitsiMeetCompanion" */; - buildPhases = ( - 0BEA5C231F7B8F73000D0AB4 /* Resources */, - 0BEA5C471F7B8F73000D0AB4 /* Embed App Extensions */, - 1F021A8A5B056078665DE530 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 0BEA5C341F7B8F73000D0AB4 /* PBXTargetDependency */, - ); - name = JitsiMeetCompanion; - productName = JitsiMeetCompanion; - productReference = 0BEA5C251F7B8F73000D0AB4 /* JitsiMeetCompanion.app */; - productType = "com.apple.product-type.application.watchapp2"; - }; - 0BEA5C301F7B8F73000D0AB4 /* JitsiMeetCompanion Extension */ = { - isa = PBXNativeTarget; - buildConfigurationList = 0BEA5C461F7B8F73000D0AB4 /* Build configuration list for PBXNativeTarget "JitsiMeetCompanion Extension" */; - buildPhases = ( - 0BEA5C2D1F7B8F73000D0AB4 /* Sources */, - 0BEA5C2E1F7B8F73000D0AB4 /* Frameworks */, - 0BEA5C2F1F7B8F73000D0AB4 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "JitsiMeetCompanion Extension"; - productName = "JitsiMeetCompanion Extension"; - productReference = 0BEA5C311F7B8F73000D0AB4 /* JitsiMeetCompanion Extension.appex */; - productType = "com.apple.product-type.watchkit2-extension"; - }; 13B07F861A680F5B00A75B9A /* JitsiMeet */ = { isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "JitsiMeet" */; @@ -369,7 +245,6 @@ buildRules = ( ); dependencies = ( - 0BEA5C401F7B8F73000D0AB4 /* PBXTargetDependency */, 4EB0602A260E026600F524C5 /* PBXTargetDependency */, ); name = JitsiMeet; @@ -404,16 +279,6 @@ LastUpgradeCheck = 1020; ORGANIZATIONNAME = Jitsi; TargetAttributes = { - 0BEA5C241F7B8F73000D0AB4 = { - CreatedOnToolsVersion = 9.0; - DevelopmentTeam = FC967L3QRG; - ProvisioningStyle = Automatic; - }; - 0BEA5C301F7B8F73000D0AB4 = { - CreatedOnToolsVersion = 9.0; - DevelopmentTeam = FC967L3QRG; - ProvisioningStyle = Automatic; - }; 13B07F861A680F5B00A75B9A = { LastSwiftMigration = 1620; SystemCapabilities = { @@ -444,31 +309,12 @@ projectRoot = ""; targets = ( 13B07F861A680F5B00A75B9A /* JitsiMeet */, - 0BEA5C241F7B8F73000D0AB4 /* JitsiMeetCompanion */, - 0BEA5C301F7B8F73000D0AB4 /* JitsiMeetCompanion Extension */, 4EB06022260E026600F524C5 /* JitsiMeetBroadcastExtension */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 0BEA5C231F7B8F73000D0AB4 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 0BEA5C2B1F7B8F73000D0AB4 /* Assets.xcassets in Resources */, - 0BEA5C291F7B8F73000D0AB4 /* Interface.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 0BEA5C2F1F7B8F73000D0AB4 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 0BEA5C3D1F7B8F73000D0AB4 /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 13B07F8E1A680F5B00A75B9A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -622,20 +468,6 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 0BEA5C2D1F7B8F73000D0AB4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 0B7001701F7C51CC005944F4 /* InCallController.swift in Sources */, - E5C97B63227A1EB400199214 /* JitsiMeetCommands.swift in Sources */, - 0B5418471F7C5D8C00A2DD86 /* MeetingRowController.swift in Sources */, - E588011722789D43008B0561 /* JitsiMeetContext.swift in Sources */, - 0BEA5C391F7B8F73000D0AB4 /* ExtensionDelegate.swift in Sources */, - 0BEA5C371F7B8F73000D0AB4 /* InterfaceController.swift in Sources */, - 0BEA5C3B1F7B8F73000D0AB4 /* ComplicationController.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 13B07F871A680F5B00A75B9A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -660,16 +492,6 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0BEA5C341F7B8F73000D0AB4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 0BEA5C301F7B8F73000D0AB4 /* JitsiMeetCompanion Extension */; - targetProxy = 0BEA5C331F7B8F73000D0AB4 /* PBXContainerItemProxy */; - }; - 0BEA5C401F7B8F73000D0AB4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 0BEA5C241F7B8F73000D0AB4 /* JitsiMeetCompanion */; - targetProxy = 0BEA5C3F1F7B8F73000D0AB4 /* PBXContainerItemProxy */; - }; 4EB0602A260E026600F524C5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 4EB06022260E026600F524C5 /* JitsiMeetBroadcastExtension */; @@ -678,14 +500,6 @@ /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - 0BEA5C271F7B8F73000D0AB4 /* Interface.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 0BEA5C281F7B8F73000D0AB4 /* Base */, - ); - name = Interface.storyboard; - sourceTree = ""; - }; 13B07FB11A68108700A75B9A /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( @@ -697,155 +511,10 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 0BEA5C421F7B8F73000D0AB4 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = FC967L3QRG; - GCC_C_LANGUAGE_STANDARD = gnu11; - IBSC_MODULE = JitsiMeetCompanion_Extension; - INFOPLIST_FILE = watchos/app/Info.plist; - PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet.watchkit; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = watchos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 4; - WATCHOS_DEPLOYMENT_TARGET = 4.0; - }; - name = Debug; - }; - 0BEA5C431F7B8F73000D0AB4 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = FC967L3QRG; - GCC_C_LANGUAGE_STANDARD = gnu11; - IBSC_MODULE = JitsiMeetCompanion_Extension; - INFOPLIST_FILE = watchos/app/Info.plist; - PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet.watchkit; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = watchos; - SKIP_INSTALL = YES; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 4; - WATCHOS_DEPLOYMENT_TARGET = 4.0; - }; - name = Release; - }; - 0BEA5C441F7B8F73000D0AB4 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = FC967L3QRG; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = watchos/extension/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet.watchkit.extension; - PRODUCT_NAME = "${TARGET_NAME}"; - SDKROOT = watchos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 4; - WATCHOS_DEPLOYMENT_TARGET = 4.0; - }; - name = Debug; - }; - 0BEA5C451F7B8F73000D0AB4 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = FC967L3QRG; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = watchos/extension/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet.watchkit.extension; - PRODUCT_NAME = "${TARGET_NAME}"; - SDKROOT = watchos; - SKIP_INSTALL = YES; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 4; - WATCHOS_DEPLOYMENT_TARGET = 4.0; - }; - name = Release; - }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 756FCE06C08D9B947653C98A /* Pods-JitsiMeet.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDebug; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = app.entitlements; @@ -882,7 +551,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 3E0F4ED943C0B12BE77F6B45 /* Pods-JitsiMeet.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIconRelease; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = app.entitlements; @@ -1131,24 +799,6 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0BEA5C461F7B8F73000D0AB4 /* Build configuration list for PBXNativeTarget "JitsiMeetCompanion Extension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0BEA5C441F7B8F73000D0AB4 /* Debug */, - 0BEA5C451F7B8F73000D0AB4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 0BEA5C481F7B8F73000D0AB4 /* Build configuration list for PBXNativeTarget "JitsiMeetCompanion" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0BEA5C421F7B8F73000D0AB4 /* Debug */, - 0BEA5C431F7B8F73000D0AB4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "JitsiMeet" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index be874423db..0000000000 --- a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "images" : [ - { - "size" : "24x24", - "idiom" : "watch", - "filename" : "Icon-24@2x.png", - "scale" : "2x", - "role" : "notificationCenter", - "subtype" : "38mm" - }, - { - "size" : "27.5x27.5", - "idiom" : "watch", - "filename" : "Icon-27.5@2x.png", - "scale" : "2x", - "role" : "notificationCenter", - "subtype" : "42mm" - }, - { - "size" : "29x29", - "idiom" : "watch", - "filename" : "Icon-29@2x.png", - "role" : "companionSettings", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "watch", - "filename" : "Icon-29@3x.png", - "role" : "companionSettings", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "watch", - "filename" : "Icon-40@2x.png", - "scale" : "2x", - "role" : "appLauncher", - "subtype" : "38mm" - }, - { - "size" : "44x44", - "idiom" : "watch", - "filename" : "Icon-88@2x.png", - "scale" : "2x", - "role" : "appLauncher", - "subtype" : "40mm" - }, - { - "size" : "50x50", - "idiom" : "watch", - "filename" : "Icon-100@2x.png", - "scale" : "2x", - "role" : "appLauncher", - "subtype" : "44mm" - }, - { - "size" : "86x86", - "idiom" : "watch", - "filename" : "Icon-86@2x.png", - "scale" : "2x", - "role" : "quickLook", - "subtype" : "38mm" - }, - { - "size" : "98x98", - "idiom" : "watch", - "filename" : "Icon-98@2x.png", - "scale" : "2x", - "role" : "quickLook", - "subtype" : "42mm" - }, - { - "size" : "108x108", - "idiom" : "watch", - "filename" : "Icon-216@2x.png", - "scale" : "2x", - "role" : "quickLook", - "subtype" : "44mm" - }, - { - "size" : "1024x1024", - "idiom" : "watch-marketing", - "filename" : "Icon-1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-100@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-100@2x.png deleted file mode 100644 index 862d33bb02..0000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-100@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-1024@1x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-1024@1x.png deleted file mode 100644 index 5f5f64aeff..0000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-1024@1x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-216@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-216@2x.png deleted file mode 100644 index 58f83c649e..0000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-216@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-24@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-24@2x.png deleted file mode 100644 index b1d4b0e331..0000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-24@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-27.5@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-27.5@2x.png deleted file mode 100644 index d911a3ccae..0000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-27.5@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png deleted file mode 100644 index ea457cdc27..0000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png deleted file mode 100644 index 4024e4af00..0000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png deleted file mode 100644 index f35c5387f4..0000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-86@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-86@2x.png deleted file mode 100644 index ee7b4ea8c5..0000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-86@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-88@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-88@2x.png deleted file mode 100644 index 6022c35a6a..0000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-88@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-98@2x.png b/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-98@2x.png deleted file mode 100644 index ca29e92611..0000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/AppIcon.appiconset/Icon-98@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/Contents.json b/ios/app/watchos/app/Assets.xcassets/Contents.json deleted file mode 100644 index da4a164c91..0000000000 --- a/ios/app/watchos/app/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/app/watchos/app/Assets.xcassets/hangup.imageset/Contents.json b/ios/app/watchos/app/Assets.xcassets/hangup.imageset/Contents.json deleted file mode 100644 index e79f535411..0000000000 --- a/ios/app/watchos/app/Assets.xcassets/hangup.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "hangup@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/app/watchos/app/Assets.xcassets/hangup.imageset/hangup@2x.png b/ios/app/watchos/app/Assets.xcassets/hangup.imageset/hangup@2x.png deleted file mode 100644 index 0d89ceeb14..0000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/hangup.imageset/hangup@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/mute-off.imageset/Contents.json b/ios/app/watchos/app/Assets.xcassets/mute-off.imageset/Contents.json deleted file mode 100644 index 8a90fdc55f..0000000000 --- a/ios/app/watchos/app/Assets.xcassets/mute-off.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "mute-off@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/app/watchos/app/Assets.xcassets/mute-off.imageset/mute-off@2x.png b/ios/app/watchos/app/Assets.xcassets/mute-off.imageset/mute-off@2x.png deleted file mode 100644 index fc1f1a7588..0000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/mute-off.imageset/mute-off@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Assets.xcassets/mute-on.imageset/Contents.json b/ios/app/watchos/app/Assets.xcassets/mute-on.imageset/Contents.json deleted file mode 100644 index ace7f01dab..0000000000 --- a/ios/app/watchos/app/Assets.xcassets/mute-on.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "mute-on@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/app/watchos/app/Assets.xcassets/mute-on.imageset/mute-on@2x.png b/ios/app/watchos/app/Assets.xcassets/mute-on.imageset/mute-on@2x.png deleted file mode 100644 index 46c1f21a28..0000000000 Binary files a/ios/app/watchos/app/Assets.xcassets/mute-on.imageset/mute-on@2x.png and /dev/null differ diff --git a/ios/app/watchos/app/Base.lproj/Interface.storyboard b/ios/app/watchos/app/Base.lproj/Interface.storyboard deleted file mode 100644 index 3cdac948cc..0000000000 --- a/ios/app/watchos/app/Base.lproj/Interface.storyboard +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ios/app/watchos/app/Info.plist b/ios/app/watchos/app/Info.plist deleted file mode 100644 index 0bdc0677f8..0000000000 --- a/ios/app/watchos/app/Info.plist +++ /dev/null @@ -1,33 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Jitsi Meet - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 99.0.0 - CFBundleVersion - 1 - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - - WKCompanionAppBundleIdentifier - org.jitsi.meet - WKWatchKitApp - - - diff --git a/ios/app/watchos/extension/Assets.xcassets/Contents.json b/ios/app/watchos/extension/Assets.xcassets/Contents.json deleted file mode 100644 index da4a164c91..0000000000 --- a/ios/app/watchos/extension/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/app/watchos/extension/Assets.xcassets/jitsi.imageset/Contents.json b/ios/app/watchos/extension/Assets.xcassets/jitsi.imageset/Contents.json deleted file mode 100644 index 4a1fb76795..0000000000 --- a/ios/app/watchos/extension/Assets.xcassets/jitsi.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "jitsi@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/app/watchos/extension/Assets.xcassets/jitsi.imageset/jitsi@2x.png b/ios/app/watchos/extension/Assets.xcassets/jitsi.imageset/jitsi@2x.png deleted file mode 100644 index 059fb5c8fd..0000000000 Binary files a/ios/app/watchos/extension/Assets.xcassets/jitsi.imageset/jitsi@2x.png and /dev/null differ diff --git a/ios/app/watchos/extension/ComplicationController.swift b/ios/app/watchos/extension/ComplicationController.swift deleted file mode 100644 index d5f2b46fa7..0000000000 --- a/ios/app/watchos/extension/ComplicationController.swift +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright @ 2018-present 8x8, Inc. - * Copyright @ 2017-2018 Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import ClockKit - - -class ComplicationController: NSObject, CLKComplicationDataSource { - - // MARK: - Timeline Configuration - - func getSupportedTimeTravelDirections(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimeTravelDirections) -> Void) { - handler([]) - } - - func getPrivacyBehavior(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationPrivacyBehavior) -> Void) { - handler(.showOnLockScreen) - } - - // MARK: - Timeline Population - - func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) { - // Call the handler with the current timeline entry - getLocalizableSampleTemplate(for: complication) {template in - guard let template = template else { - handler(nil) - return - } - handler(CLKComplicationTimelineEntry(date: Date(), complicationTemplate: template)) - } - } - - func getTimelineEntries(for complication: CLKComplication, before date: Date, limit: Int, withHandler handler: @escaping ([CLKComplicationTimelineEntry]?) -> Void) { - // Call the handler with the timeline entries prior to the given date - handler(nil) - } - - func getTimelineEntries(for complication: CLKComplication, after date: Date, limit: Int, withHandler handler: @escaping ([CLKComplicationTimelineEntry]?) -> Void) { - // Call the handler with the timeline entries after to the given date - handler(nil) - } - - // MARK: - Placeholder Templates - - func getLocalizableSampleTemplate(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTemplate?) -> Void) { - // This method will be called once per supported complication, and the results will be cached - - let imageProvider = CLKImageProvider(onePieceImage: UIImage(named: "jitsi")!) - if complication.family == .circularSmall { - let small = CLKComplicationTemplateCircularSmallRingImage() - small.imageProvider = imageProvider - small.ringStyle = .closed - small.fillFraction = 0 - handler(small) - } else if complication.family == .utilitarianSmall { - let utilitarian = CLKComplicationTemplateUtilitarianSmallSquare() - utilitarian.imageProvider = imageProvider - handler(utilitarian) - } else if complication.family == .modularSmall { - let modular = CLKComplicationTemplateModularSmallRingImage() - modular.imageProvider = imageProvider - modular.ringStyle = .closed - modular.fillFraction = 0 - handler(modular) - } - } - -} diff --git a/ios/app/watchos/extension/ExtensionDelegate.swift b/ios/app/watchos/extension/ExtensionDelegate.swift deleted file mode 100644 index bb7a5fd8de..0000000000 --- a/ios/app/watchos/extension/ExtensionDelegate.swift +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright @ 2018-present 8x8, Inc. - * Copyright @ 2017-2018 Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import WatchConnectivity -import WatchKit - -class ExtensionDelegate: NSObject, WCSessionDelegate, WKExtensionDelegate { - - var currentContext : JitsiMeetContext = JitsiMeetContext() - - static var currentJitsiMeetContext: JitsiMeetContext { - get { - return (WKExtension.shared().delegate as! ExtensionDelegate).currentContext - } - } - - func applicationDidFinishLaunching() { - // Start Watch Connectivity - if WCSession.isSupported() { - let session = WCSession.default - session.delegate = self - session.activate() - } - } - - func handle(_ backgroundTasks: Set) { - // Sent when the system needs to launch the application in the background to process tasks. Tasks arrive in a set, so loop through and process each one. - for task in backgroundTasks { - // Use a switch statement to check the task type - switch task { - case let backgroundTask as WKApplicationRefreshBackgroundTask: - // Be sure to complete the background task once you’re done. - backgroundTask.setTaskCompletedWithSnapshot(false) - case let snapshotTask as WKSnapshotRefreshBackgroundTask: - // Snapshot tasks have a unique completion call, make sure to set your expiration date - snapshotTask.setTaskCompleted(restoredDefaultState: true, estimatedSnapshotExpiration: Date.distantFuture, userInfo: nil) - case let connectivityTask as WKWatchConnectivityRefreshBackgroundTask: - // Be sure to complete the connectivity task once you’re done. - connectivityTask.setTaskCompletedWithSnapshot(false) - case let urlSessionTask as WKURLSessionRefreshBackgroundTask: - // Be sure to complete the URL session task once you’re done. - urlSessionTask.setTaskCompletedWithSnapshot(false) - default: - // make sure to complete unhandled task types - task.setTaskCompletedWithSnapshot(false) - } - } - } - - func session(_ session: WCSession, activationDidCompleteWith - activationState: WCSessionActivationState, error: Error?) { - if let error = error { - print("WATCH Session activation failed with error: \(error.localizedDescription)") - return - } - print("WATCH Session activated with state: \(activationState.rawValue)") - } - - func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) { - DispatchQueue.main.async { - let newContext = JitsiMeetContext(context: applicationContext) - - print("WATCH got new context: \(newContext.description)"); - - // Update context on the root controller which displays the recent list - let controller = WKExtension.shared().rootInterfaceController as! InterfaceController - controller.updateUI(newContext) - - // If the current controller is not the in-call controller and we have a - // conference URL, show the in-call controller - if let currentController = WKExtension.shared().visibleInterfaceController as? InterfaceController { - // Go to the in-call controller only if the conference URL has changed, because the user may have - // clicked the back button - if newContext.conferenceURL != nil - && self.currentContext.conferenceURL != newContext.conferenceURL { - currentController.pushController(withName: "InCallController", context: newContext) - } - } else if let inCallController = WKExtension.shared().visibleInterfaceController as? InCallController { - if newContext.conferenceURL == nil { - inCallController.popToRootController() - } else { - inCallController.updateUI(newContext) - } - } - - self.currentContext = newContext; - } - } -} diff --git a/ios/app/watchos/extension/InCallController.swift b/ios/app/watchos/extension/InCallController.swift deleted file mode 100644 index 57c3d3bb89..0000000000 --- a/ios/app/watchos/extension/InCallController.swift +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright @ 2018-present 8x8, Inc. - * Copyright @ 2017-2018 Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import WatchConnectivity -import WatchKit -import Foundation - - -class InCallController: WKInterfaceController { - @IBOutlet var mutedButton: WKInterfaceButton! - @IBOutlet var roomLabel: WKInterfaceLabel! - @IBOutlet var timer: WKInterfaceTimer! - - @IBAction func hangupClicked() { - sendCommand(JitsiMeetCommands.CMD_HANG_UP, message: nil) - } - - @IBAction func muteClicked() { - if var micMuted = ExtensionDelegate.currentJitsiMeetContext.micMuted { - micMuted = !micMuted; - sendCommand( - JitsiMeetCommands.CMD_SET_MUTED, - message: [ - "muted": micMuted ? "true" : "false" - ]) - updateMutedButton(withMuted: micMuted) - } - } - - func sendCommand(_ command: JitsiMeetCommands, message: [String : Any]?) { - if WCSession.isSupported() { - let session = WCSession.default - var data = [String: Any]() - - if let sessionID = ExtensionDelegate.currentJitsiMeetContext.sessionID { - if message != nil { - message!.forEach { data[$0] = $1 } - } - - data["command"] = command.rawValue; - data["sessionID"] = sessionID; - - session.sendMessage(data, replyHandler: nil, errorHandler: nil) - } - } - } - - func updateUI(_ newContext: JitsiMeetContext) { - var conferenceURL = newContext.conferenceURL - - if let joinConferenceURL = newContext.joinConferenceURL { - sendCommand(JitsiMeetCommands.CMD_JOIN_CONFERENCE, message: [ "data" : joinConferenceURL ]) - conferenceURL = joinConferenceURL - } - - let newRoomName = conferenceURL != nil ? conferenceURL!.components(separatedBy: "/").last : "" - - roomLabel.setText(newRoomName) - - if let newTimestamp = newContext.conferenceTimestamp { - restartTimer(newTimestamp) - } - if let newMuted = newContext.micMuted { - updateMutedButton(withMuted: newMuted) - } - } - - func restartTimer(_ conferenceTimestamp: Int64) { - if (conferenceTimestamp != 0) { - let newDate = Date(timeIntervalSince1970: TimeInterval(conferenceTimestamp / 1000)) - timer.setDate(newDate) - timer.start(); - print("WATCH timer set date to: \(newDate) and start") - } else { - print("WATCH timer stop") - timer.stop(); - } - } - - func updateMutedButton(withMuted isMuted: Bool) { - if isMuted { - mutedButton.setBackgroundImageNamed("mute-on.png") - } else { - mutedButton.setBackgroundImageNamed("mute-off.png") - } - } - - override func awake(withContext context: Any?) { - super.awake(withContext: context) - - if let data = context as? JitsiMeetContext { - updateUI(data) - } - } -} diff --git a/ios/app/watchos/extension/Info.plist b/ios/app/watchos/extension/Info.plist deleted file mode 100644 index 3f172dc7f6..0000000000 --- a/ios/app/watchos/extension/Info.plist +++ /dev/null @@ -1,44 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Jitsi Meet Companion Extension - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - XPC! - CFBundleShortVersionString - 99.0.0 - CFBundleVersion - 1 - CLKComplicationPrincipalClass - $(PRODUCT_MODULE_NAME).ComplicationController - CLKComplicationSupportedFamilies - - CLKComplicationFamilyModularSmall - CLKComplicationFamilyUtilitarianSmall - CLKComplicationFamilyCircularSmall - - NSExtension - - NSExtensionAttributes - - WKAppBundleIdentifier - org.jitsi.meet.watchkit - - NSExtensionPointIdentifier - com.apple.watchkit - - WKExtensionDelegateClassName - $(PRODUCT_MODULE_NAME).ExtensionDelegate - - diff --git a/ios/app/watchos/extension/InterfaceController.swift b/ios/app/watchos/extension/InterfaceController.swift deleted file mode 100644 index b57219cb87..0000000000 --- a/ios/app/watchos/extension/InterfaceController.swift +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright @ 2018-present 8x8, Inc. - * Copyright @ 2017-2018 Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import WatchKit -import WatchConnectivity -import Foundation - - -class InterfaceController: WKInterfaceController { - - @IBOutlet var infoLabel: WKInterfaceLabel! - @IBOutlet var table: WKInterfaceTable! - - override func didAppear(){ - self.updateUI(ExtensionDelegate.currentJitsiMeetContext) - } - - func updateUI(_ newContext:JitsiMeetContext) { - if (newContext.recentURLs == nil || newContext.recentURLs!.count == 0) { - infoLabel.setText("There are no recent meetings. Please use the app on the phone to start a new call.") - - table.setHidden(true) - infoLabel.setHidden(false) - } else { - updateRecents(withRecents: newContext.recentURLs!, currentContext: newContext) - - table.setHidden(false) - infoLabel.setHidden(true) - } - } - - private func updateRecents(withRecents recents: NSArray, currentContext: JitsiMeetContext) { - // Updating the # of rows only if it actually changed prevents from blinking the UI - if (table.numberOfRows != recents.count) { - table.setNumberOfRows(recents.count, withRowType: "MeetingRowType") - } - - for (index, entry) in recents.enumerated() { - let entryDict = entry as! NSDictionary - let roomURL = entryDict["conference"] as! NSString - let timestamp = entryDict["date"] as! NSNumber - - // Prepare values - let room = roomURL.components(separatedBy: "/").last - let date = Date(timeIntervalSince1970: timestamp.doubleValue / 1000) // timestamp is taken with Date.now() in JS, which uses milliseconds - let dateFormatter = DateFormatter() - dateFormatter.timeZone = TimeZone.current - dateFormatter.locale = NSLocale.current - dateFormatter.dateFormat = "HH:mm yyyy-MM-dd" - let strDate = dateFormatter.string(from: date) - - // Update row controller - let controller = table.rowController(at: index) as! MeetingRowController - controller.room = room - controller.roomUrl = roomURL as String - controller.roomLabel.setText(room) - controller.timeLabel.setText(strDate) - - // Change the background for the active meeting - if (controller.roomUrl == currentContext.conferenceURL) { - controller.rowGroup.setBackgroundColor(UIColor(red: 0.125, green: 0.58, blue: 0.98, alpha: 1)) - } else { - controller.rowGroup.setBackgroundColor(UIColor(red: 0.949, green: 0.956, blue: 1, alpha: 0.14)) - } - } - } - - override func contextForSegue(withIdentifier segueIdentifier: String, in table: WKInterfaceTable, rowIndex: Int) -> Any? { - let controller = table.rowController(at: rowIndex) as! MeetingRowController - let currentContext = ExtensionDelegate.currentJitsiMeetContext - - // Copy the current context and add the joinConferenceURL to trigger the command when the in-call screen is displayed - let actionContext = JitsiMeetContext(jmContext: currentContext) - actionContext.joinConferenceURL = controller.roomUrl - - print("WATCH contextForSegue: \(actionContext.description)"); - - return actionContext; - } -} diff --git a/ios/app/watchos/extension/JitsiMeetCommands.swift b/ios/app/watchos/extension/JitsiMeetCommands.swift deleted file mode 100644 index f5d397121f..0000000000 --- a/ios/app/watchos/extension/JitsiMeetCommands.swift +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright @ 2018-present 8x8, Inc. - * Copyright @ 2017-2018 Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This needs to be in sync with features/mobile/watchos/constants.js -enum JitsiMeetCommands : String { - typealias RawValue = String - - case CMD_HANG_UP = "hangup"; - - case CMD_JOIN_CONFERENCE = "joinConference"; - - case CMD_SET_MUTED = "setMuted"; -} diff --git a/ios/app/watchos/extension/JitsiMeetContext.swift b/ios/app/watchos/extension/JitsiMeetContext.swift deleted file mode 100644 index bfdbfdfaae..0000000000 --- a/ios/app/watchos/extension/JitsiMeetContext.swift +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright @ 2018-present 8x8, Inc. - * Copyright @ 2017-2018 Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Foundation - -class JitsiMeetContext { - private var dictionary : [String : Any] - - var joinConferenceURL : String? = nil; - - init() { - dictionary = [:] - } - - init(context: [String : Any]) { - dictionary = context - } - - init(jmContext: JitsiMeetContext) { - dictionary = jmContext.dictionary - joinConferenceURL = jmContext.joinConferenceURL - } - - var conferenceURL : String? { - get { - return dictionary["conferenceURL"] as? String - } - } - - var conferenceTimestamp : Int64? { - get { - return dictionary["conferenceTimestamp"] as? Int64; - } - } - - var sessionID : Int64? { - get { - return dictionary["sessionID"] as? Int64; - } - } - - var recentURLs : NSArray? { - get { - return dictionary["recentURLs"] as? NSArray - } - } - - var micMuted : Bool? { - get { - return (dictionary["micMuted"] as? NSNumber)?.boolValue ?? nil; - } - } - - public var description: String { - return "JitsiMeetContext[conferenceURL: \(String(describing: conferenceURL)), conferenceTimestamp: \(String(describing:conferenceTimestamp)), sessionID: \(String(describing:sessionID)), recentURLs: \(String(describing:recentURLs)), joinConferenceURL: \(String(describing:joinConferenceURL)) " - } -} diff --git a/ios/app/watchos/extension/MeetingRowController.swift b/ios/app/watchos/extension/MeetingRowController.swift deleted file mode 100644 index cf1a8ad82a..0000000000 --- a/ios/app/watchos/extension/MeetingRowController.swift +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright @ 2018-present 8x8, Inc. - * Copyright @ 2017-2018 Atlassian Pty Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import WatchKit - -class MeetingRowController: NSObject { - @IBOutlet var roomLabel: WKInterfaceLabel! - @IBOutlet var timeLabel: WKInterfaceLabel! - @IBOutlet var rowGroup: WKInterfaceGroup! - - var room: String! - var roomUrl: String! -} diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile index 2d4b9c2367..fc44ef1259 100644 --- a/ios/fastlane/Fastfile +++ b/ios/fastlane/Fastfile @@ -39,36 +39,6 @@ platform :ios do end ) - # Set the (watch) app identifier - update_app_identifier( - xcodeproj: "app/app.xcodeproj", - plist_path: "watchos/app/Info.plist", - app_identifier: "com.atlassian.JitsiMeet.ios.watchkit" - ) - - # Set the (watch) extension identifier - update_app_identifier( - xcodeproj: "app/app.xcodeproj", - plist_path: "watchos/extension/Info.plist", - app_identifier: "com.atlassian.JitsiMeet.ios.watchkit.extension" - ) - - update_info_plist( - xcodeproj: "app/app.xcodeproj", - plist_path: "watchos/app/Info.plist", - block: proc do |plist| - plist["WKCompanionAppBundleIdentifier"] = "com.atlassian.JitsiMeet.ios" - end - ) - - update_info_plist( - xcodeproj: "app/app.xcodeproj", - plist_path: "watchos/extension/Info.plist", - block: proc do |plist| - plist["NSExtension"]["NSExtensionAttributes"]["WKAppBundleIdentifier"] = "com.atlassian.JitsiMeet.ios.watchkit" - end - ) - # Increment the build number by 1 increment_build_number( build_number: Time.now.to_i, diff --git a/ios/travis-ci/build-ipa.sh b/ios/travis-ci/build-ipa.sh deleted file mode 100755 index eccca231c9..0000000000 --- a/ios/travis-ci/build-ipa.sh +++ /dev/null @@ -1,127 +0,0 @@ -#!/bin/bash -set -e - -# The script is based on tutorial written by Antonis Tsakiridis published at: -# https://medium.com/@atsakiridis/continuous-deployment-for-ios-using-travis-ci-55dcea342d9 -# -# It is intended to be executed through the Travis CI REST API call, as it -# requires few arguments which are mandatory with no default values provided: -# PR_REPO_SLUG - the Github name of the repo to be merged into the origin/master -# PR_BRANCH - the branch to be merged, if set to "master" no merge will happen -# IPA_DEPLOY_LOCATION - the location understandable by the "scp" command -# executed at the end of the script to deploy the output .ipa file -# LIB_JITSI_MEET_PKG (optional) - the npm package for lib-jitsi-meet which will -# be put in place of the current version in the package.json file. -# -# Other than that the script requires the following env variables to be set -# (reading the tutorial mentioned above will help in understanding the -# variables): -# -# APPLE_CERT_URL - the URL pointing to Apple certificate (set to -# http://developer.apple.com/certificationauthority/AppleWWDRCA.cer by default) -# DEPLOY_SSH_CERT_URL - the SSH private key used by the 'scp' command to deploy -# the .ipa. It is expected to be encrypted with the $ENCRYPTION_PASSWORD. -# ENCRYPTION_PASSWORD - the password used to decrypt certificate/key files used -# in the script. -# IOS_DEV_CERT_KEY_URL - URL pointing to provisioning profile certificate key -# file (development-key.p12.enc from the tutorial) encrypted with the -# $ENCRYPTION_PASSWORD. -# IOS_DEV_CERT_URL - URL pointing to provisioning profile certificate file -# (development-cert.cer.enc from the tutorial) encrypted with the -# $ENCRYPTION_PASSWORD. -# IOS_DEV_PROV_PROFILE_URL - URL pointing to provisioning profile file -# (profile-development-olympus.mobileprovision.enc from the tutorial) encrypted -# with the $ENCRYPTION_PASSWORD. -# IOS_SIGNING_CERT_PASSWORD - the password to the provisioning profile -# certificate key (used to open development-key.p12 from the tutorial). -# IOS_TEAM_ID - the team ID inserted into build-ipa-.plist.template file in -# place of "YOUR_TEAM_ID". - - -# Travis will not print the last echo if there's no sleep 1 -function echoSleepAndExit1() { - echo $1 - sleep 1 - exit 1 -} - -echo "TRAVIS_BRANCH=${TRAVIS_BRANCH}" -echo "TRAVIS_REPO_SLUG=${TRAVIS_REPO_SLUG}" - -if [ -z $PR_REPO_SLUG ]; then - echoSleepAndExit1 "No PR_REPO_SLUG defined" -fi -if [ -z $PR_BRANCH ]; then - echoSleepAndExit1 "No PR_BRANCH defined" -fi -if [ -z $IPA_DEPLOY_LOCATION ]; then - echoSleepAndExit1 "No IPA_DEPLOY_LOCATION defined" -fi - -echo "PR_REPO_SLUG=${PR_REPO_SLUG} PR_BRANCH=${PR_BRANCH}" - -# do the merge and git log - -if [ $PR_BRANCH != "master" ]; then - echo "Will merge ${PR_REPO_SLUG}/${PR_BRANCH} into master" - git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" - git fetch origin master - git checkout master - git pull https://github.com/${PR_REPO_SLUG}.git $PR_BRANCH --no-edit -fi - -# Link this lib-jitsi-meet checkout in jitsi-meet through the package.json -if [ ! -z ${LIB_JITSI_MEET_PKG} ]; -then - echo "Adjusting lib-jitsi-meet package in package.json to ${LIB_JITSI_MEET_PKG}" - # escape for the sed - LIB_JITSI_MEET_PKG=$(echo $LIB_JITSI_MEET_PKG | sed -e 's/\\/\\\\/g; s/\//\\\//g; s/&/\\\&/g') - sed -i.bak -e "s/\"lib-jitsi-meet.*/\"lib-jitsi-meet\"\: \"${LIB_JITSI_MEET_PKG}\",/g" package.json - echo "Package.json lib-jitsi-meet line:" - grep lib-jitsi-meet package.json -else - echo "LIB_JITSI_MEET_PKG var not set - will not modify the package.json" -fi - -git log -20 --graph --pretty=format':%C(yellow)%h%Cblue%d%Creset %s %C(white) %an, %ar%Creset' - -#certificates -CERT_DIR="ios/travis-ci/certs" - -mkdir -p $CERT_DIR - -./ios/ci/setup-certificates.sh $CERT_DIR - -curl -L -o ${CERT_DIR}/id_rsa.enc ${DEPLOY_SSH_CERT_URL} -openssl aes-256-cbc -k "$ENCRYPTION_PASSWORD" -in ${CERT_DIR}/id_rsa.enc -d -a -out ${CERT_DIR}/id_rsa -chmod 0600 ${CERT_DIR}/id_rsa -ssh-add ${CERT_DIR}/id_rsa - -npm install - -# Ever since the Apple Watch app has been added the bitcode for WebRTC needs to be downloaded in order to build successfully -./node_modules/react-native-webrtc/tools/downloadBitcode.sh - -cd ios -pod install --repo-update --no-ansi -cd .. - -mkdir -p /tmp/jitsi-meet/ - -xcodebuild archive -quiet -workspace ios/jitsi-meet.xcworkspace -scheme jitsi-meet -configuration Release -archivePath /tmp/jitsi-meet/jitsi-meet.xcarchive - -sed -e "s/YOUR_TEAM_ID/${IOS_TEAM_ID}/g" ios/ci/build-ipa.plist.template > ios/ci/build-ipa.plist - -IPA_EXPORT_DIR=/tmp/jitsi-meet/jitsi-meet-ipa - -xcodebuild -quiet -exportArchive -archivePath /tmp/jitsi-meet/jitsi-meet.xcarchive -exportPath $IPA_EXPORT_DIR -exportOptionsPlist ios/ci/build-ipa.plist - -echo "Will try deploy the .ipa to: ${IPA_DEPLOY_LOCATION}" - -if [ ! -z ${SCP_PROXY_HOST} ]; -then - scp -o ProxyCommand="ssh -t -A -l %r ${SCP_PROXY_HOST} -o \"StrictHostKeyChecking no\" -o \"BatchMode yes\" -W %h:%p" -o StrictHostKeyChecking=no -o LogLevel=DEBUG "${IPA_EXPORT_DIR}/jitsi-meet.ipa" "${IPA_DEPLOY_LOCATION}" -else - scp -o StrictHostKeyChecking=no -o LogLevel=DEBUG "${IPA_EXPORT_DIR}/jitsi-meet.ipa" "${IPA_DEPLOY_LOCATION}" -fi - diff --git a/package-lock.json b/package-lock.json index a0587e45d4..32c6c2346f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -100,7 +100,6 @@ "react-native-tab-view": "3.5.2", "react-native-url-polyfill": "2.0.0", "react-native-video": "6.13.0", - "react-native-watch-connectivity": "1.1.0", "react-native-webrtc": "124.0.4", "react-native-webview": "13.13.5", "react-native-worklets-core": "https://github.com/jitsi/react-native-worklets-core.git#8c5dfab2a5907305da8971696a781b60f0f9cb18", @@ -18534,11 +18533,6 @@ "integrity": "sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==", "dev": true }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, "node_modules/lodash.throttle": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", @@ -22476,18 +22470,6 @@ "react-native": "*" } }, - "node_modules/react-native-watch-connectivity": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/react-native-watch-connectivity/-/react-native-watch-connectivity-1.1.0.tgz", - "integrity": "sha512-s+zlKOVENRXgkVQvJt5f73CyqpC6ZhKlRsXLybtaFIsR1KR3ARzExm0yTm3DAb5K9AqtCpYX+1SOd4d0Af2ZNQ==", - "dependencies": { - "lodash.sortby": "^4.7.0" - }, - "peerDependencies": { - "react": ">=15.1", - "react-native": ">=0.40" - } - }, "node_modules/react-native-webrtc": { "version": "124.0.4", "resolved": "https://registry.npmjs.org/react-native-webrtc/-/react-native-webrtc-124.0.4.tgz", @@ -39949,11 +39931,6 @@ "integrity": "sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==", "dev": true }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, "lodash.throttle": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", @@ -42706,14 +42683,6 @@ "resolved": "https://registry.npmjs.org/react-native-video/-/react-native-video-6.13.0.tgz", "integrity": "sha512-eY6jgLcmYKAAlAZhsZbp8wfCVrGu7jmUYTTspn8udN8j4jqr4Fq90ROOM/QegGkwNs4waclL0IkzGuq61kT4DQ==" }, - "react-native-watch-connectivity": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/react-native-watch-connectivity/-/react-native-watch-connectivity-1.1.0.tgz", - "integrity": "sha512-s+zlKOVENRXgkVQvJt5f73CyqpC6ZhKlRsXLybtaFIsR1KR3ARzExm0yTm3DAb5K9AqtCpYX+1SOd4d0Af2ZNQ==", - "requires": { - "lodash.sortby": "^4.7.0" - } - }, "react-native-webrtc": { "version": "124.0.4", "resolved": "https://registry.npmjs.org/react-native-webrtc/-/react-native-webrtc-124.0.4.tgz", diff --git a/package.json b/package.json index 680dffe14c..88f22663bf 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,6 @@ "react-native-tab-view": "3.5.2", "react-native-url-polyfill": "2.0.0", "react-native-video": "6.13.0", - "react-native-watch-connectivity": "1.1.0", "react-native-webrtc": "124.0.4", "react-native-webview": "13.13.5", "react-native-worklets-core": "https://github.com/jitsi/react-native-worklets-core.git#8c5dfab2a5907305da8971696a781b60f0f9cb18", diff --git a/react-native.config.js b/react-native.config.js index 597c9a73c1..513e59eaec 100644 --- a/react-native.config.js +++ b/react-native.config.js @@ -20,11 +20,6 @@ module.exports = { platforms: { ios: null } - }, - 'react-native-watch-connectivity': { - platforms: { - ios: null - } } } }; diff --git a/react/features/app/middlewares.native.ts b/react/features/app/middlewares.native.ts index 01dcab5561..200df5931a 100644 --- a/react/features/app/middlewares.native.ts +++ b/react/features/app/middlewares.native.ts @@ -9,7 +9,6 @@ import '../mobile/permissions/middleware'; import '../mobile/proximity/middleware'; import '../mobile/wake-lock/middleware'; import '../mobile/react-native-sdk/middleware'; -import '../mobile/watchos/middleware'; import '../share-room/middleware'; import '../shared-video/middleware'; import '../toolbox/middleware.native'; diff --git a/react/features/app/reducers.native.ts b/react/features/app/reducers.native.ts index 9e9915241d..2d84940c90 100644 --- a/react/features/app/reducers.native.ts +++ b/react/features/app/reducers.native.ts @@ -2,7 +2,6 @@ import '../mobile/audio-mode/reducer'; import '../mobile/background/reducer'; import '../mobile/call-integration/reducer'; import '../mobile/external-api/reducer'; -import '../mobile/watchos/reducer'; import '../share-room/reducer'; import './reducer.native'; diff --git a/react/features/app/types.ts b/react/features/app/types.ts index 65ae235733..3b2a830144 100644 --- a/react/features/app/types.ts +++ b/react/features/app/types.ts @@ -52,7 +52,6 @@ import { IMobileAudioModeState } from '../mobile/audio-mode/reducer'; import { IMobileBackgroundState } from '../mobile/background/reducer'; import { ICallIntegrationState } from '../mobile/call-integration/reducer'; import { IMobileExternalApiState } from '../mobile/external-api/reducer'; -import { IMobileWatchOSState } from '../mobile/watchos/reducer'; import { INoAudioSignalState } from '../no-audio-signal/reducer'; import { INoiseDetectionState } from '../noise-detection/reducer'; import { INoiseSuppressionState } from '../noise-suppression/reducer'; @@ -141,7 +140,6 @@ export interface IReduxState { 'features/mobile/audio-mode': IMobileAudioModeState; 'features/mobile/background': IMobileBackgroundState; 'features/mobile/external-api': IMobileExternalApiState; - 'features/mobile/watchos': IMobileWatchOSState; 'features/no-audio-signal': INoAudioSignalState; 'features/noise-detection': INoiseDetectionState; 'features/noise-suppression': INoiseSuppressionState; diff --git a/react/features/mobile/watchos/actionTypes.ts b/react/features/mobile/watchos/actionTypes.ts deleted file mode 100644 index 4d18277efc..0000000000 --- a/react/features/mobile/watchos/actionTypes.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * See {@link setConferenceTimestamp} for more details. - * { - * type: SET_CONFERENCE_TIMESTAMP, - * conferenceTimestamp: number - * } - */ -export const SET_CONFERENCE_TIMESTAMP = Symbol('WATCH_OS_SET_CONFERENCE_TIMESTAMP'); - -/** - * See {@link setSessionId} action for more details. - * { - * type: SET_SESSION_ID, - * sessionID: number - * } - */ -export const SET_SESSION_ID = Symbol('WATCH_OS_SET_SESSION_ID'); - -/** - * See {@link setWatchReachable} for more details. - * { - * type: SET_WATCH_REACHABLE, - * watchReachable: boolean - * } - */ -export const SET_WATCH_REACHABLE = Symbol('WATCH_OS_SET_WATCH_REACHABLE'); diff --git a/react/features/mobile/watchos/actions.ts b/react/features/mobile/watchos/actions.ts deleted file mode 100644 index 75961dfccc..0000000000 --- a/react/features/mobile/watchos/actions.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { SET_CONFERENCE_TIMESTAMP, SET_SESSION_ID, SET_WATCH_REACHABLE } from './actionTypes'; - -/** - * Stores a timestamp when the conference is joined, so that the watch counterpart can start counting from when - * the meeting has really started. - * - * @param {number} conferenceTimestamp - A timestamp retrieved with {@code newDate.getTime()}. - * @returns {{ - * type: SET_CONFERENCE_TIMESTAMP, - * conferenceTimestamp: number - * }} - */ -export function setConferenceTimestamp(conferenceTimestamp: number) { - return { - type: SET_CONFERENCE_TIMESTAMP, - conferenceTimestamp - }; -} - -/** - * Updates the session ID which is sent to the Watch app and then used by the app to send commands. Commands from - * the watch are accepted only if the 'sessionID' passed by the Watch matches the one currently stored in Redux. It is - * supposed to prevent from processing outdated commands. - * - * @returns {{ - * type: SET_SESSION_ID, - * sessionID: number - * }} - */ -export function setSessionId() { - return { - type: SET_SESSION_ID, - sessionID: new Date().getTime() - }; -} - -/** - * Updates the reachable status of the watch. It's used to get in sync with the watch counterpart when it gets - * reconnected, but also to prevent from sending updates if the app is not installed at all (which would fail with - * an error). - * - * @param {boolean} isReachable - Indicates whether the watch is currently reachable or not. - * @returns {{ - * type: SET_WATCH_REACHABLE, - * watchReachable: boolean - * }} - */ -export function setWatchReachable(isReachable: boolean) { - return { - type: SET_WATCH_REACHABLE, - watchReachable: isReachable - }; -} diff --git a/react/features/mobile/watchos/constants.ts b/react/features/mobile/watchos/constants.ts deleted file mode 100644 index 8de47de786..0000000000 --- a/react/features/mobile/watchos/constants.ts +++ /dev/null @@ -1,9 +0,0 @@ -// NOTE When changing any of the commands make sure to update JitsiMeetCommands enum in the WatchKit extension code. - -export const CMD_HANG_UP = 'hangup'; - -export const CMD_JOIN_CONFERENCE = 'joinConference'; - -export const CMD_SET_MUTED = 'setMuted'; - -export const MAX_RECENT_URLS = 10; diff --git a/react/features/mobile/watchos/logger.ts b/react/features/mobile/watchos/logger.ts deleted file mode 100644 index a567372abc..0000000000 --- a/react/features/mobile/watchos/logger.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { getLogger } from '../../base/logging/functions'; - -export default getLogger('mobile-app:watchos'); diff --git a/react/features/mobile/watchos/middleware.ts b/react/features/mobile/watchos/middleware.ts deleted file mode 100644 index c8a1de1f8d..0000000000 --- a/react/features/mobile/watchos/middleware.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { NativeModules, Platform } from 'react-native'; -import { updateApplicationContext, watchEvents } from 'react-native-watch-connectivity'; - -import { appNavigate } from '../../app/actions'; -import { IStore } from '../../app/types'; -import { APP_WILL_MOUNT } from '../../base/app/actionTypes'; -import { IStateful } from '../../base/app/types'; -import { CONFERENCE_JOINED } from '../../base/conference/actionTypes'; -import { getCurrentConferenceUrl } from '../../base/connection/functions'; -import { setAudioMuted } from '../../base/media/actions'; -import MiddlewareRegistry from '../../base/redux/MiddlewareRegistry'; -import StateListenerRegistry from '../../base/redux/StateListenerRegistry'; -import { toState } from '../../base/redux/functions'; - -import { setConferenceTimestamp, setSessionId, setWatchReachable } from './actions'; -import { CMD_HANG_UP, CMD_JOIN_CONFERENCE, CMD_SET_MUTED, MAX_RECENT_URLS } from './constants'; -import logger from './logger'; - -const { AppInfo } = NativeModules; -const watchOSEnabled = Platform.OS === 'ios' && !AppInfo.isLiteSDK; - -// Handles the recent URLs state sent to the watch -watchOSEnabled && StateListenerRegistry.register( - /* selector */ state => state['features/recent-list'], - /* listener */ (recentListState, { getState }) => { - _updateApplicationContext(getState); - }); - -// Handles the mic muted state sent to the watch -watchOSEnabled && StateListenerRegistry.register( - /* selector */ state => _isAudioMuted(state), - /* listener */ (isAudioMuted, { getState }) => { - _updateApplicationContext(getState); - }); - -// Handles the conference URL state sent to the watch -watchOSEnabled && StateListenerRegistry.register( - /* selector */ state => getCurrentConferenceUrl(state), - /* listener */ (currentUrl, { dispatch, getState }) => { - dispatch(setSessionId()); - _updateApplicationContext(getState); - }); - -/** - * Middleware that captures conference actions. - * - * @param {Store} store - The redux store. - * @returns {Function} - */ -watchOSEnabled && MiddlewareRegistry.register(store => next => action => { - switch (action.type) { - case APP_WILL_MOUNT: - _appWillMount(store); - break; - case CONFERENCE_JOINED: - store.dispatch(setConferenceTimestamp(new Date().getTime())); - _updateApplicationContext(store.getState()); - break; - } - - return next(action); -}); - -/** - * Registers listeners to the react-native-watch-connectivity lib. - * - * @param {Store} store - The redux store. - * @private - * @returns {void} - */ -function _appWillMount({ dispatch, getState }: IStore) { - watchEvents.addListener('reachability', reachable => { - dispatch(setWatchReachable(reachable)); - _updateApplicationContext(getState); - }); - - watchEvents.addListener('message', message => { - const { - command, - sessionID - } = message; - const currentSessionID = _getSessionId(getState()); - - if (!sessionID || sessionID !== currentSessionID) { - logger.warn( - `Ignoring outdated watch command: ${message.command}` - + ` sessionID: ${sessionID} current session ID: ${currentSessionID}`); - - return; - } - - switch (command) { - case CMD_HANG_UP: - if (typeof getCurrentConferenceUrl(getState()) !== 'undefined') { - dispatch(appNavigate(undefined)); - } - break; - case CMD_JOIN_CONFERENCE: { - const newConferenceURL: any = message.data; - const oldConferenceURL = getCurrentConferenceUrl(getState()); - - if (oldConferenceURL !== newConferenceURL) { - dispatch(appNavigate(newConferenceURL)); - } - break; - } - case CMD_SET_MUTED: - dispatch( - setAudioMuted( - message.muted === 'true', - /* ensureTrack */ true)); - break; - } - }); -} - -/** - * Gets the current Apple Watch session's ID. A new session is started whenever the conference URL has changed. It is - * used to filter out outdated commands which may arrive very later if the Apple Watch loses the connectivity. - * - * @param {Object|Function} stateful - Either the whole Redux state object or the Redux store's {@code getState} method. - * @returns {number} - * @private - */ -function _getSessionId(stateful: IStateful) { - const state = toState(stateful); - - return state['features/mobile/watchos'].sessionID; -} - -/** - * Gets the list of recent URLs to be passed over to the Watch app. - * - * @param {Object|Function} stateful - Either the whole Redux state object or the Redux store's {@code getState} method. - * @returns {Array} - * @private - */ -function _getRecentUrls(stateful: IStateful) { - const state = toState(stateful); - const recentURLs = state['features/recent-list']; - - // Trim to MAX_RECENT_URLS and reverse the list - const reversedList = recentURLs.slice(-MAX_RECENT_URLS); - - reversedList.reverse(); - - return reversedList; -} - -/** - * Determines the audio muted state to be sent to the apple watch. - * - * @param {Object|Function} stateful - Either the whole Redux state object or the Redux store's {@code getState} method. - * @returns {boolean} - * @private - */ -function _isAudioMuted(stateful: IStateful) { - const state = toState(stateful); - const { audio } = state['features/base/media']; - - return audio.muted; -} - -/** - * Sends the context to the watch os app. At the time of this writing it's the entire state of - * the 'features/mobile/watchos' reducer. - * - * @param {Object|Function} stateful - Either the whole Redux state object or the Redux store's {@code getState} method. - * @private - * @returns {void} - */ -function _updateApplicationContext(stateful: IStateful) { - const state = toState(stateful); - const { conferenceTimestamp, sessionID, watchReachable } = state['features/mobile/watchos']; - - if (!watchReachable) { - return; - } - - try { - updateApplicationContext({ - conferenceTimestamp, - conferenceURL: getCurrentConferenceUrl(state), - micMuted: _isAudioMuted(state), - recentURLs: _getRecentUrls(state), - sessionID - }); - } catch (error) { - logger.error('Failed to stringify or send the context', error); - } -} diff --git a/react/features/mobile/watchos/reducer.ts b/react/features/mobile/watchos/reducer.ts deleted file mode 100644 index a832652132..0000000000 --- a/react/features/mobile/watchos/reducer.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ReducerRegistry from '../../base/redux/ReducerRegistry'; -import { assign } from '../../base/redux/functions'; - -import { SET_CONFERENCE_TIMESTAMP, SET_SESSION_ID, SET_WATCH_REACHABLE } from './actionTypes'; - -export interface IMobileWatchOSState { - conferenceTimestamp?: number; - sessionID: number; - watchReachable?: boolean; -} - -const INITIAL_STATE = { - sessionID: new Date().getTime() -}; - -/** - * Reduces the Redux actions of the feature features/mobile/watchos. - */ -ReducerRegistry.register('features/mobile/watchos', -(state = INITIAL_STATE, action): IMobileWatchOSState => { - switch (action.type) { - case SET_CONFERENCE_TIMESTAMP: { - return assign(state, { - conferenceTimestamp: action.conferenceTimestamp - }); - } - case SET_SESSION_ID: { - return assign(state, { - sessionID: action.sessionID, - conferenceTimestamp: 0 - }); - } - case SET_WATCH_REACHABLE: { - return assign(state, { - watchReachable: action.watchReachable - }); - } - default: - return state; - } -}); diff --git a/resources/update-mobile-version.sh b/resources/update-mobile-version.sh index 5808fb2456..553ee8faa7 100755 --- a/resources/update-mobile-version.sh +++ b/resources/update-mobile-version.sh @@ -13,8 +13,6 @@ VERSION=$1 # iOS /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${VERSION}" ${THIS_DIR}/../ios/app/src/Info.plist /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${VERSION}" ${THIS_DIR}/../ios/app/broadcast-extension/Info.plist -/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${VERSION}" ${THIS_DIR}/../ios/app/watchos/app/Info.plist -/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${VERSION}" ${THIS_DIR}/../ios/app/watchos/extension/Info.plist # Android sed -i "" -e "s/appVersion=.*/appVersion=${VERSION}/" ${THIS_DIR}/../android/gradle.properties