From 2ae4ba38754fe1a368e4b97a80d0ecd507a2d020 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Mon, 1 Aug 2022 17:15:59 +0200 Subject: [PATCH] feat(ios) add lite SDK target --- ios/Podfile | 32 ++ ios/Podfile.lock | 2 +- ios/scripts/release-sdk-lite.sh | 75 ++++ ios/sdk/sdk.xcodeproj/project.pbxproj | 323 +++++++++++++++++- .../xcschemes/JitsiMeetSDKLite.xcscheme | 67 ++++ ios/sdk/src/AppInfo.m | 26 +- ios/sdk/src/JitsiMeet.m | 11 +- ios/sdk/src/Lite-Info.plist | 24 ++ react-native.config.js | 23 ++ react/features/app/components/App.native.js | 8 +- react/features/dropbox/functions.native.js | 2 +- react/features/gifs/functions.js | 4 + react/features/mobile/polyfills/custom.js | 4 + react/features/mobile/polyfills/index.js | 1 + react/features/mobile/watchos/middleware.js | 5 +- 15 files changed, 594 insertions(+), 13 deletions(-) create mode 100755 ios/scripts/release-sdk-lite.sh create mode 100644 ios/sdk/sdk.xcodeproj/xcshareddata/xcschemes/JitsiMeetSDKLite.xcscheme create mode 100644 ios/sdk/src/Lite-Info.plist create mode 100644 react/features/mobile/polyfills/custom.js diff --git a/ios/Podfile b/ios/Podfile index ae9830819..0f908fdad 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -29,6 +29,14 @@ target 'JitsiMeetSDK' do :app_path => "#{Pod::Config.instance.installation_root}/.." ) + # We use auto linking, but some dependencies are excluded from the lite build + # (see react-native.config.js) so we add them here. + + 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 # @@ -36,6 +44,30 @@ target 'JitsiMeetSDK' do pod 'ObjectiveDropboxOfficial', '6.2.3' end +target 'JitsiMeetSDKLite' do + project 'sdk/sdk.xcodeproj' + + # This is a more lightweight target, which removes some functionality. + # Check the react-native.config.js for the list of excluded packages. + + # React Native and its dependencies + # + + config = use_native_modules! + use_react_native!( + :path => config["reactNativePath"], + :hermes_enabled => false, + :fabric_enabled => false, + # An absolute path to your application root. + :app_path => "#{Pod::Config.instance.installation_root}/.." + ) + + # Native pod dependencies + # + + pod 'CocoaLumberjack', '3.7.2' +end + post_install do |installer| react_native_post_install(installer) __apply_Xcode_12_5_M1_post_install_workaround(installer) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 1c7ca2e3a..4e4ebcfc8 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -767,6 +767,6 @@ SPEC CHECKSUMS: RNWatch: dae6c858a2051dbdcfb00b9a86cf4d90400263b4 Yoga: 17cd9a50243093b547c1e539c749928dd68152da -PODFILE CHECKSUM: 0e8826a5cb9ee147354a83321ecb3104132f510b +PODFILE CHECKSUM: a437875b597d999a137c671b1da54153fe31d23f COCOAPODS: 1.11.3 diff --git a/ios/scripts/release-sdk-lite.sh b/ios/scripts/release-sdk-lite.sh new file mode 100755 index 000000000..893baad26 --- /dev/null +++ b/ios/scripts/release-sdk-lite.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +set -e -u + +THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd) +PROJECT_REPO=$(realpath ${THIS_DIR}/../..) +RELEASE_REPO=$(realpath ${THIS_DIR}/../../../jitsi-meet-ios-sdk-releases) +DEFAULT_SDK_VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" ${THIS_DIR}/../sdk/src/Lite-Info.plist) +SDK_VERSION=${OVERRIDE_SDK_VERSION:-${DEFAULT_SDK_VERSION}} +DO_GIT_TAG=${GIT_TAG:-0} + + +echo "Releasing Jitsi Meet SDK Lite ${SDK_VERSION}" + +pushd ${RELEASE_REPO} + +# Generate podspec file +cat JitsiMeetSDKLite.podspec.tpl | sed -e s/VERSION/${SDK_VERSION}/g > JitsiMeetSDKLite.podspec + +# Cleanup +rm -rf lite/Frameworks/* + +popd + +# Build the SDK +pushd ${PROJECT_REPO} +rm -rf ios/sdk/out +xcodebuild clean \ + -workspace ios/jitsi-meet.xcworkspace \ + -scheme JitsiMeetSDKLite +xcodebuild archive \ + -workspace ios/jitsi-meet.xcworkspace \ + -scheme JitsiMeetSDKLite \ + -configuration Release \ + -sdk iphonesimulator \ + -destination='generic/platform=iOS Simulator' \ + -archivePath ios/sdk/out/ios-simulator \ + ENABLE_BITCODE=NO \ + SKIP_INSTALL=NO \ + BUILD_LIBRARY_FOR_DISTRIBUTION=YES +xcodebuild archive \ + -workspace ios/jitsi-meet.xcworkspace \ + -scheme JitsiMeetSDKLite \ + -configuration Release \ + -sdk iphoneos \ + -destination='generic/platform=iOS' \ + -archivePath ios/sdk/out/ios-device \ + ENABLE_BITCODE=NO \ + SKIP_INSTALL=NO \ + BUILD_LIBRARY_FOR_DISTRIBUTION=YES +xcodebuild -create-xcframework \ + -framework ios/sdk/out/ios-device.xcarchive/Products/Library/Frameworks/JitsiMeetSDK.framework \ + -framework ios/sdk/out/ios-simulator.xcarchive/Products/Library/Frameworks/JitsiMeetSDK.framework \ + -output ios/sdk/out/JitsiMeetSDK.xcframework +if [[ $DO_GIT_TAG == 1 ]]; then + git tag ios-sdk-lite-${SDK_VERSION} +fi +popd + +pushd ${RELEASE_REPO} + +# Put the new files in the repo +cp -a ${PROJECT_REPO}/ios/sdk/out/JitsiMeetSDK.xcframework lite/Frameworks/ + +# Add all files to git +if [[ $DO_GIT_TAG == 1 ]]; then + git add -A . + git commit -m "${SDK_VERSION} lite" + git tag "lite-${SDK_VERSION}" +fi + +popd + +echo "Finished! Don't forget to push the tags and releases repo artifacts." +echo "The new pod can be pushed to CocoaPods by doing: pod trunk push JitsiMeetSDKLite.podspec" diff --git a/ios/sdk/sdk.xcodeproj/project.pbxproj b/ios/sdk/sdk.xcodeproj/project.pbxproj index 8711641f7..8ce4fee5f 100644 --- a/ios/sdk/sdk.xcodeproj/project.pbxproj +++ b/ios/sdk/sdk.xcodeproj/project.pbxproj @@ -22,6 +22,7 @@ 0BCA49601EC4B6C600B793EE /* POSIX.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BCA495D1EC4B6C600B793EE /* POSIX.m */; }; 0BCA49611EC4B6C600B793EE /* Proximity.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BCA495E1EC4B6C600B793EE /* Proximity.m */; }; 0BD906EA1EC0C00300C8C18E /* JitsiMeet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BD906E81EC0C00300C8C18E /* JitsiMeet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3453F4A32680898C4A40E821 /* libPods-JitsiMeetSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 927ED7DF018DE5E12C4C3404 /* libPods-JitsiMeetSDK.a */; }; 4E51B76425E5345E0038575A /* ScheenshareEventEmiter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E51B76225E5345E0038575A /* ScheenshareEventEmiter.h */; }; 4E51B76525E5345E0038575A /* ScheenshareEventEmiter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E51B76325E5345E0038575A /* ScheenshareEventEmiter.m */; }; 4EBA6E61286072E300B31882 /* JitsiMeetViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EBA6E5F286072E300B31882 /* JitsiMeetViewController.h */; }; @@ -32,7 +33,8 @@ 4ED4FFF42721B9B90074E620 /* JitsiAudioSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 4ED4FFF22721B9B90074E620 /* JitsiAudioSession.m */; }; 4EEC9630286C73A2008705FA /* JitsiMeetView+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EEC962E286C73A2008705FA /* JitsiMeetView+Private.h */; }; 4EEC9631286C73A2008705FA /* JitsiMeetView+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EEC962F286C73A2008705FA /* JitsiMeetView+Private.m */; }; - 6F08DF7D4458EE3CF3F36F6D /* libPods-JitsiMeetSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4376CA6886DE68FD7A4294B /* libPods-JitsiMeetSDK.a */; }; + 6F08DF7D4458EE3CF3F36F6D /* BuildFile in Frameworks */ = {isa = PBXBuildFile; }; + 9A8EE79C77C17743BB66E8BD /* libPods-JitsiMeetSDKLite.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B46497DE9A95BDF5E312AF48 /* libPods-JitsiMeetSDKLite.a */; }; A4A934E9212F3ADB001E9388 /* Dropbox.m in Sources */ = {isa = PBXBuildFile; fileRef = A4A934E8212F3ADB001E9388 /* Dropbox.m */; }; C6245F5D2053091D0040BE68 /* image-resize@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6245F5B2053091D0040BE68 /* image-resize@2x.png */; }; C6245F5E2053091D0040BE68 /* image-resize@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6245F5C2053091D0040BE68 /* image-resize@3x.png */; }; @@ -54,6 +56,58 @@ DE81A2D92316AC7600AE1940 /* LogBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = DE81A2D72316AC7600AE1940 /* LogBridge.m */; }; DE81A2DE2317ED5400AE1940 /* JitsiMeetBaseLogHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = DE81A2DC2317ED5400AE1940 /* JitsiMeetBaseLogHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; DE81A2DF2317ED5400AE1940 /* JitsiMeetBaseLogHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = DE81A2DD2317ED5400AE1940 /* JitsiMeetBaseLogHandler.m */; }; + DE9A0130289A9A9A00E41CBB /* JitsiMeetUserInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DE762DB322AFDE76000DEBD6 /* JitsiMeetUserInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DE9A0131289A9A9A00E41CBB /* JitsiMeetView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B412F161EDEC65D00B1A0A6 /* JitsiMeetView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DE9A0132289A9A9A00E41CBB /* RCTBridgeWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B93EF7C1EC9DDCD0030D24D /* RCTBridgeWrapper.h */; }; + DE9A0133289A9A9A00E41CBB /* JitsiMeetBaseLogHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = DE81A2DC2317ED5400AE1940 /* JitsiMeetBaseLogHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DE9A0134289A9A9A00E41CBB /* JitsiMeetSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = DEA9F283258A5D9900D4CD74 /* JitsiMeetSDK.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DE9A0135289A9A9A00E41CBB /* ScheenshareEventEmiter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E51B76225E5345E0038575A /* ScheenshareEventEmiter.h */; }; + DE9A0136289A9A9A00E41CBB /* JitsiMeetBaseLogHandler+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DE65AACB2318028300290BEC /* JitsiMeetBaseLogHandler+Private.h */; }; + DE9A0137289A9A9A00E41CBB /* JitsiMeetRenderingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EBA6E632860B1E800B31882 /* JitsiMeetRenderingView.h */; }; + DE9A0138289A9A9A00E41CBB /* JitsiMeetViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B412F1B1EDEC80100B1A0A6 /* JitsiMeetViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DE9A0139289A9A9A00E41CBB /* JitsiAudioSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ED4FFF12721B9B90074E620 /* JitsiAudioSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DE9A013A289A9A9A00E41CBB /* JitsiMeetView+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EEC962E286C73A2008705FA /* JitsiMeetView+Private.h */; }; + DE9A013B289A9A9A00E41CBB /* JitsiMeet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BD906E81EC0C00300C8C18E /* JitsiMeet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DE9A013C289A9A9A00E41CBB /* JitsiMeetLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = DE81A2D22316AC4D00AE1940 /* JitsiMeetLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DE9A013D289A9A9A00E41CBB /* LogUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = DE65AAC92317FFCD00290BEC /* LogUtils.h */; }; + DE9A013E289A9A9A00E41CBB /* JitsiMeetViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EBA6E5F286072E300B31882 /* JitsiMeetViewController.h */; }; + DE9A013F289A9A9A00E41CBB /* JitsiMeetConferenceOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = DEAD3224220C497000E93636 /* JitsiMeetConferenceOptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DE9A0140289A9A9A00E41CBB /* ExternalAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = C81E9AB825AC5AD800B134D9 /* ExternalAPI.h */; }; + DE9A0141289A9A9A00E41CBB /* InfoPlistUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = C8AFD27D2462C613000293D2 /* InfoPlistUtil.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DE9A0143289A9A9A00E41CBB /* CallKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BB9AD7A1F5EC8F4001C08DB /* CallKit.m */; }; + DE9A0144289A9A9A00E41CBB /* JitsiMeetBaseLogHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = DE81A2DD2317ED5400AE1940 /* JitsiMeetBaseLogHandler.m */; }; + DE9A0145289A9A9A00E41CBB /* JitsiMeetRenderingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EBA6E642860B1E800B31882 /* JitsiMeetRenderingView.m */; }; + DE9A0146289A9A9A00E41CBB /* JitsiAudioSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 4ED4FFF22721B9B90074E620 /* JitsiAudioSession.m */; }; + DE9A0147289A9A9A00E41CBB /* AppInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BB9AD7C1F60356D001C08DB /* AppInfo.m */; }; + DE9A0148289A9A9A00E41CBB /* LogBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = DE81A2D72316AC7600AE1940 /* LogBridge.m */; }; + DE9A0149289A9A9A00E41CBB /* RNRootView.m in Sources */ = {isa = PBXBuildFile; fileRef = DEAFA778229EAD520033A7FA /* RNRootView.m */; }; + DE9A014A289A9A9A00E41CBB /* JitsiMeetUserInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DE762DB522AFDE8D000DEBD6 /* JitsiMeetUserInfo.m */; }; + DE9A014B289A9A9A00E41CBB /* JitsiMeetConferenceOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = DEAD3225220C497000E93636 /* JitsiMeetConferenceOptions.m */; }; + DE9A014C289A9A9A00E41CBB /* RCTBridgeWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B93EF7D1EC9DDCD0030D24D /* RCTBridgeWrapper.m */; }; + DE9A014D289A9A9A00E41CBB /* ExternalAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BA13D301EE83FF8007BEF7F /* ExternalAPI.m */; }; + DE9A014E289A9A9A00E41CBB /* POSIX.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BCA495D1EC4B6C600B793EE /* POSIX.m */; }; + DE9A014F289A9A9A00E41CBB /* InfoPlistUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = C8AFD27E2462C613000293D2 /* InfoPlistUtil.m */; }; + DE9A0150289A9A9A00E41CBB /* PiPViewCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6CC49AE207412CF000DFA42 /* PiPViewCoordinator.swift */; }; + DE9A0151289A9A9A00E41CBB /* LocaleDetector.m in Sources */ = {isa = PBXBuildFile; fileRef = DEFC743D21B178FA00E4DD96 /* LocaleDetector.m */; }; + DE9A0152289A9A9A00E41CBB /* AudioMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BCA495C1EC4B6C600B793EE /* AudioMode.m */; }; + DE9A0153289A9A9A00E41CBB /* Proximity.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BCA495E1EC4B6C600B793EE /* Proximity.m */; }; + DE9A0154289A9A9A00E41CBB /* JMCallKitEmitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69EFA09209A0F650027712B /* JMCallKitEmitter.swift */; }; + DE9A0155289A9A9A00E41CBB /* ReactUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = DEFE535521FB2E8300011A3A /* ReactUtils.m */; }; + DE9A0156289A9A9A00E41CBB /* JitsiMeetView+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EEC962F286C73A2008705FA /* JitsiMeetView+Private.m */; }; + DE9A0157289A9A9A00E41CBB /* DragGestureController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A3425E204EF76800E062DD /* DragGestureController.swift */; }; + DE9A0158289A9A9A00E41CBB /* ScheenshareEventEmiter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E51B76325E5345E0038575A /* ScheenshareEventEmiter.m */; }; + DE9A015A289A9A9A00E41CBB /* JitsiMeetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EBA6E60286072E300B31882 /* JitsiMeetViewController.m */; }; + DE9A015B289A9A9A00E41CBB /* JMCallKitProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69EFA0A209A0F660027712B /* JMCallKitProxy.swift */; }; + DE9A015C289A9A9A00E41CBB /* JitsiMeetLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = DE81A2D32316AC4D00AE1940 /* JitsiMeetLogger.m */; }; + DE9A015D289A9A9A00E41CBB /* JMCallKitListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69EFA0B209A0F660027712B /* JMCallKitListener.swift */; }; + DE9A015E289A9A9A00E41CBB /* JitsiMeetView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B412F171EDEC65D00B1A0A6 /* JitsiMeetView.m */; }; + DE9A015F289A9A9A00E41CBB /* JitsiMeet.m in Sources */ = {isa = PBXBuildFile; fileRef = DEFE535321FB1BF800011A3A /* JitsiMeet.m */; }; + DE9A0160289A9A9A00E41CBB /* JavaScriptSandbox.m in Sources */ = {isa = PBXBuildFile; fileRef = DE438CD82350934700DD541D /* JavaScriptSandbox.m */; }; + DE9A0162289A9A9A00E41CBB /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BB9AD781F5EC6D7001C08DB /* Intents.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + DE9A0163289A9A9A00E41CBB /* CallKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BB9AD761F5EC6CE001C08DB /* CallKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + DE9A0166289A9A9A00E41CBB /* CallKitIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 0BC4B8681F8C01E100CE8B21 /* CallKitIcon.png */; }; + DE9A0167289A9A9A00E41CBB /* image-resize@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6245F5B2053091D0040BE68 /* image-resize@2x.png */; }; + DE9A0168289A9A9A00E41CBB /* image-resize@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6245F5C2053091D0040BE68 /* image-resize@3x.png */; }; DEA9F284258A5D9900D4CD74 /* JitsiMeetSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = DEA9F283258A5D9900D4CD74 /* JitsiMeetSDK.h */; settings = {ATTRIBUTES = (Public, ); }; }; DEAD3226220C497000E93636 /* JitsiMeetConferenceOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = DEAD3224220C497000E93636 /* JitsiMeetConferenceOptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; DEAD3227220C497000E93636 /* JitsiMeetConferenceOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = DEAD3225220C497000E93636 /* JitsiMeetConferenceOptions.m */; }; @@ -94,11 +148,15 @@ 4ED4FFF52721BAE10074E620 /* JitsiAudioSession+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "JitsiAudioSession+Private.h"; sourceTree = ""; }; 4EEC962E286C73A2008705FA /* JitsiMeetView+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "JitsiMeetView+Private.h"; sourceTree = ""; }; 4EEC962F286C73A2008705FA /* JitsiMeetView+Private.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "JitsiMeetView+Private.m"; sourceTree = ""; }; + 86389F55993FAAF6AEB3FA3E /* Pods-JitsiMeetSDKLite.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeetSDKLite.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeetSDKLite/Pods-JitsiMeetSDKLite.release.xcconfig"; sourceTree = ""; }; 891FE43DAD30BC8976683100 /* Pods-JitsiMeetSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeetSDK.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeetSDK/Pods-JitsiMeetSDK.release.xcconfig"; sourceTree = ""; }; + 8F48C340DE0D91D1012976C5 /* Pods-JitsiMeetSDKLite.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeetSDKLite.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeetSDKLite/Pods-JitsiMeetSDKLite.debug.xcconfig"; sourceTree = ""; }; + 927ED7DF018DE5E12C4C3404 /* libPods-JitsiMeetSDK.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JitsiMeetSDK.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 98E09B5C73D9036B4ED252FC /* Pods-JitsiMeet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.debug.xcconfig"; sourceTree = ""; }; 9C77CA3CC919B081F1A52982 /* Pods-JitsiMeet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.release.xcconfig"; sourceTree = ""; }; A4A934E8212F3ADB001E9388 /* Dropbox.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Dropbox.m; sourceTree = ""; }; A4A934EB21349A06001E9388 /* Dropbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Dropbox.h; sourceTree = ""; }; + B46497DE9A95BDF5E312AF48 /* libPods-JitsiMeetSDKLite.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JitsiMeetSDKLite.a"; sourceTree = BUILT_PRODUCTS_DIR; }; C6245F5B2053091D0040BE68 /* image-resize@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "image-resize@2x.png"; path = "src/picture-in-picture/image-resize@2x.png"; sourceTree = ""; }; C6245F5C2053091D0040BE68 /* image-resize@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "image-resize@3x.png"; path = "src/picture-in-picture/image-resize@3x.png"; sourceTree = ""; }; C69EFA09209A0F650027712B /* JMCallKitEmitter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JMCallKitEmitter.swift; sourceTree = ""; }; @@ -120,6 +178,8 @@ DE81A2D72316AC7600AE1940 /* LogBridge.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LogBridge.m; sourceTree = ""; }; DE81A2DC2317ED5400AE1940 /* JitsiMeetBaseLogHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiMeetBaseLogHandler.h; sourceTree = ""; }; DE81A2DD2317ED5400AE1940 /* JitsiMeetBaseLogHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JitsiMeetBaseLogHandler.m; sourceTree = ""; }; + DE9A016F289A9A9A00E41CBB /* JitsiMeetSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JitsiMeetSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DE9A0170289A9A9A00E41CBB /* Lite-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Lite-Info.plist"; path = "/Users/saghul/work/jitsi/jitsi-meet-prs/ios/sdk/src/Lite-Info.plist"; sourceTree = ""; }; DEA9F283258A5D9900D4CD74 /* JitsiMeetSDK.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiMeetSDK.h; sourceTree = ""; }; DEAD3224220C497000E93636 /* JitsiMeetConferenceOptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiMeetConferenceOptions.h; sourceTree = ""; }; DEAD3225220C497000E93636 /* JitsiMeetConferenceOptions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JitsiMeetConferenceOptions.m; sourceTree = ""; }; @@ -131,7 +191,6 @@ DEFE535521FB2E8300011A3A /* ReactUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ReactUtils.m; sourceTree = ""; }; DEFE535721FB2E9E00011A3A /* ReactUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReactUtils.h; sourceTree = ""; }; DEFE535821FB311F00011A3A /* JitsiMeet+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "JitsiMeet+Private.h"; sourceTree = ""; }; - E4376CA6886DE68FD7A4294B /* libPods-JitsiMeetSDK.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JitsiMeetSDK.a"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -141,7 +200,18 @@ files = ( 0BB9AD791F5EC6D7001C08DB /* Intents.framework in Frameworks */, 0BB9AD771F5EC6CE001C08DB /* CallKit.framework in Frameworks */, - 6F08DF7D4458EE3CF3F36F6D /* libPods-JitsiMeetSDK.a in Frameworks */, + 6F08DF7D4458EE3CF3F36F6D /* BuildFile in Frameworks */, + 3453F4A32680898C4A40E821 /* libPods-JitsiMeetSDK.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DE9A0161289A9A9A00E41CBB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DE9A0162289A9A9A00E41CBB /* Intents.framework in Frameworks */, + DE9A0163289A9A9A00E41CBB /* CallKit.framework in Frameworks */, + 9A8EE79C77C17743BB66E8BD /* libPods-JitsiMeetSDKLite.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -173,6 +243,7 @@ isa = PBXGroup; children = ( 0BD906E51EC0C00300C8C18E /* JitsiMeetSDK.framework */, + DE9A016F289A9A9A00E41CBB /* JitsiMeetSDK.framework */, ); name = Products; sourceTree = ""; @@ -231,6 +302,7 @@ 0BA13D301EE83FF8007BEF7F /* ExternalAPI.m */, 4E51B76225E5345E0038575A /* ScheenshareEventEmiter.h */, 4E51B76325E5345E0038575A /* ScheenshareEventEmiter.m */, + DE9A0170289A9A9A00E41CBB /* Lite-Info.plist */, ); path = src; sourceTree = ""; @@ -241,7 +313,8 @@ 0BB9AD761F5EC6CE001C08DB /* CallKit.framework */, 0B93EF7A1EC608550030D24D /* CoreText.framework */, 0BB9AD781F5EC6D7001C08DB /* Intents.framework */, - E4376CA6886DE68FD7A4294B /* libPods-JitsiMeetSDK.a */, + B46497DE9A95BDF5E312AF48 /* libPods-JitsiMeetSDKLite.a */, + 927ED7DF018DE5E12C4C3404 /* libPods-JitsiMeetSDK.a */, ); name = Frameworks; sourceTree = ""; @@ -262,6 +335,8 @@ 9C77CA3CC919B081F1A52982 /* Pods-JitsiMeet.release.xcconfig */, 09A78016288AF50ACD28A10D /* Pods-JitsiMeetSDK.debug.xcconfig */, 891FE43DAD30BC8976683100 /* Pods-JitsiMeetSDK.release.xcconfig */, + 8F48C340DE0D91D1012976C5 /* Pods-JitsiMeetSDKLite.debug.xcconfig */, + 86389F55993FAAF6AEB3FA3E /* Pods-JitsiMeetSDKLite.release.xcconfig */, ); name = Pods; sourceTree = ""; @@ -314,6 +389,31 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + DE9A012F289A9A9A00E41CBB /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + DE9A0130289A9A9A00E41CBB /* JitsiMeetUserInfo.h in Headers */, + DE9A0131289A9A9A00E41CBB /* JitsiMeetView.h in Headers */, + DE9A0132289A9A9A00E41CBB /* RCTBridgeWrapper.h in Headers */, + DE9A0133289A9A9A00E41CBB /* JitsiMeetBaseLogHandler.h in Headers */, + DE9A0134289A9A9A00E41CBB /* JitsiMeetSDK.h in Headers */, + DE9A0135289A9A9A00E41CBB /* ScheenshareEventEmiter.h in Headers */, + DE9A0136289A9A9A00E41CBB /* JitsiMeetBaseLogHandler+Private.h in Headers */, + DE9A0137289A9A9A00E41CBB /* JitsiMeetRenderingView.h in Headers */, + DE9A0138289A9A9A00E41CBB /* JitsiMeetViewDelegate.h in Headers */, + DE9A0139289A9A9A00E41CBB /* JitsiAudioSession.h in Headers */, + DE9A013A289A9A9A00E41CBB /* JitsiMeetView+Private.h in Headers */, + DE9A013B289A9A9A00E41CBB /* JitsiMeet.h in Headers */, + DE9A013C289A9A9A00E41CBB /* JitsiMeetLogger.h in Headers */, + DE9A013D289A9A9A00E41CBB /* LogUtils.h in Headers */, + DE9A013E289A9A9A00E41CBB /* JitsiMeetViewController.h in Headers */, + DE9A013F289A9A9A00E41CBB /* JitsiMeetConferenceOptions.h in Headers */, + DE9A0140289A9A9A00E41CBB /* ExternalAPI.h in Headers */, + DE9A0141289A9A9A00E41CBB /* InfoPlistUtil.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -339,6 +439,28 @@ productReference = 0BD906E51EC0C00300C8C18E /* JitsiMeetSDK.framework */; productType = "com.apple.product-type.framework"; }; + DE9A012D289A9A9A00E41CBB /* JitsiMeetSDKLite */ = { + isa = PBXNativeTarget; + buildConfigurationList = DE9A016C289A9A9A00E41CBB /* Build configuration list for PBXNativeTarget "JitsiMeetSDKLite" */; + buildPhases = ( + DE9A012E289A9A9A00E41CBB /* [CP] Check Pods Manifest.lock */, + DE9A012F289A9A9A00E41CBB /* Headers */, + DE9A0142289A9A9A00E41CBB /* Sources */, + DE9A0161289A9A9A00E41CBB /* Frameworks */, + DE9A0165289A9A9A00E41CBB /* Resources */, + DE9A0169289A9A9A00E41CBB /* Copy sounds */, + DE9A016A289A9A9A00E41CBB /* Package React bundle */, + DE9A016B289A9A9A00E41CBB /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = JitsiMeetSDKLite; + productName = "Jitsi Meet SDK"; + productReference = DE9A016F289A9A9A00E41CBB /* JitsiMeetSDK.framework */; + productType = "com.apple.product-type.framework"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -369,6 +491,7 @@ projectRoot = ""; targets = ( 0BD906E41EC0C00300C8C18E /* JitsiMeetSDK */, + DE9A012D289A9A9A00E41CBB /* JitsiMeetSDKLite */, ); }; /* End PBXProject section */ @@ -384,6 +507,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + DE9A0165289A9A9A00E41CBB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DE9A0166289A9A9A00E41CBB /* CallKitIcon.png in Resources */, + DE9A0167289A9A9A00E41CBB /* image-resize@2x.png in Resources */, + DE9A0168289A9A9A00E41CBB /* image-resize@3x.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -459,6 +592,76 @@ shellPath = /bin/sh; shellScript = "SOUNDS_DIR=\"${PROJECT_DIR}/../../sounds\"\n\ncp $SOUNDS_DIR/* ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/\n"; }; + DE9A012E289A9A9A00E41CBB /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-JitsiMeetSDKLite-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + DE9A0169289A9A9A00E41CBB /* Copy sounds */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Copy sounds"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "SOUNDS_DIR=\"${PROJECT_DIR}/../../sounds\"\n\ncp $SOUNDS_DIR/* ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/\n"; + }; + DE9A016A289A9A9A00E41CBB /* Package React bundle */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Package React bundle"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\nexport NODE_ARGS=\"--max_old_space_size=4096\"\n../../node_modules/react-native/scripts/react-native-xcode.sh\n"; + }; + DE9A016B289A9A9A00E41CBB /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-JitsiMeetSDKLite/Pods-JitsiMeetSDKLite-resources.sh", + "${PODS_ROOT}/Amplitude/Sources/Resources/ComodoRsaDomainValidationCA.der", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ComodoRsaDomainValidationCA.der", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-JitsiMeetSDKLite/Pods-JitsiMeetSDKLite-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -499,6 +702,42 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + DE9A0142289A9A9A00E41CBB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DE9A0143289A9A9A00E41CBB /* CallKit.m in Sources */, + DE9A0144289A9A9A00E41CBB /* JitsiMeetBaseLogHandler.m in Sources */, + DE9A0145289A9A9A00E41CBB /* JitsiMeetRenderingView.m in Sources */, + DE9A0146289A9A9A00E41CBB /* JitsiAudioSession.m in Sources */, + DE9A0147289A9A9A00E41CBB /* AppInfo.m in Sources */, + DE9A0148289A9A9A00E41CBB /* LogBridge.m in Sources */, + DE9A0149289A9A9A00E41CBB /* RNRootView.m in Sources */, + DE9A014A289A9A9A00E41CBB /* JitsiMeetUserInfo.m in Sources */, + DE9A014B289A9A9A00E41CBB /* JitsiMeetConferenceOptions.m in Sources */, + DE9A014C289A9A9A00E41CBB /* RCTBridgeWrapper.m in Sources */, + DE9A014D289A9A9A00E41CBB /* ExternalAPI.m in Sources */, + DE9A014E289A9A9A00E41CBB /* POSIX.m in Sources */, + DE9A014F289A9A9A00E41CBB /* InfoPlistUtil.m in Sources */, + DE9A0150289A9A9A00E41CBB /* PiPViewCoordinator.swift in Sources */, + DE9A0151289A9A9A00E41CBB /* LocaleDetector.m in Sources */, + DE9A0152289A9A9A00E41CBB /* AudioMode.m in Sources */, + DE9A0153289A9A9A00E41CBB /* Proximity.m in Sources */, + DE9A0154289A9A9A00E41CBB /* JMCallKitEmitter.swift in Sources */, + DE9A0155289A9A9A00E41CBB /* ReactUtils.m in Sources */, + DE9A0156289A9A9A00E41CBB /* JitsiMeetView+Private.m in Sources */, + DE9A0157289A9A9A00E41CBB /* DragGestureController.swift in Sources */, + DE9A0158289A9A9A00E41CBB /* ScheenshareEventEmiter.m in Sources */, + DE9A015A289A9A9A00E41CBB /* JitsiMeetViewController.m in Sources */, + DE9A015B289A9A9A00E41CBB /* JMCallKitProxy.swift in Sources */, + DE9A015C289A9A9A00E41CBB /* JitsiMeetLogger.m in Sources */, + DE9A015D289A9A9A00E41CBB /* JMCallKitListener.swift in Sources */, + DE9A015E289A9A9A00E41CBB /* JitsiMeetView.m in Sources */, + DE9A015F289A9A9A00E41CBB /* JitsiMeet.m in Sources */, + DE9A0160289A9A9A00E41CBB /* JavaScriptSandbox.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ @@ -680,6 +919,73 @@ }; name = Release; }; + DE9A016D289A9A9A00E41CBB /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8F48C340DE0D91D1012976C5 /* Pods-JitsiMeetSDKLite.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = NO; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "COCOAPODS=1", + "JITSI_MEET_SDK_LITE=1", + ); + INFOPLIST_FILE = "src/Lite-Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.JitsiMeetSDK.ios; + PRODUCT_NAME = JitsiMeetSDK; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = NO; + SWIFT_OBJC_BRIDGING_HEADER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + DE9A016E289A9A9A00E41CBB /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 86389F55993FAAF6AEB3FA3E /* Pods-JitsiMeetSDKLite.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = YES; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "COCOAPODS=1", + JITSI_MEET_SDK_LITE, + ); + INFOPLIST_FILE = "src/Lite-Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.JitsiMeetSDK.ios; + PRODUCT_NAME = JitsiMeetSDK; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = NO; + SWIFT_OBJC_BRIDGING_HEADER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -701,6 +1007,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + DE9A016C289A9A9A00E41CBB /* Build configuration list for PBXNativeTarget "JitsiMeetSDKLite" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DE9A016D289A9A9A00E41CBB /* Debug */, + DE9A016E289A9A9A00E41CBB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 0BD906DC1EC0C00300C8C18E /* Project object */; diff --git a/ios/sdk/sdk.xcodeproj/xcshareddata/xcschemes/JitsiMeetSDKLite.xcscheme b/ios/sdk/sdk.xcodeproj/xcshareddata/xcschemes/JitsiMeetSDKLite.xcscheme new file mode 100644 index 000000000..6388fa7f7 --- /dev/null +++ b/ios/sdk/sdk.xcodeproj/xcshareddata/xcschemes/JitsiMeetSDKLite.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/sdk/src/AppInfo.m b/ios/sdk/src/AppInfo.m index df5f0176b..88e3d4493 100644 --- a/ios/sdk/src/AppInfo.m +++ b/ios/sdk/src/AppInfo.m @@ -37,8 +37,10 @@ RCT_EXPORT_MODULE(); = [[NSBundle mainBundle] infoDictionary]; // calendarEnabled - BOOL calendarEnabled - = infoDictionary[@"NSCalendarsUsageDescription"] != nil; + BOOL calendarEnabled = NO; +#if !defined(JITSI_MEET_SDK_LITE) + calendarEnabled = infoDictionary[@"NSCalendarsUsageDescription"] != nil; +#endif // name NSString *name = infoDictionary[@"CFBundleDisplayName"]; @@ -63,19 +65,39 @@ RCT_EXPORT_MODULE(); } } + // SDK version + NSDictionary *sdkInfoDictionary + = [[NSBundle bundleForClass:self.class] infoDictionary]; + NSString *sdkVersion = sdkInfoDictionary[@"CFBundleShortVersionString"]; + if (sdkVersion == nil) { + sdkVersion = sdkInfoDictionary[@"CFBundleVersion"]; + if (sdkVersion == nil) { + sdkVersion = @""; + } + } + // build number NSString *buildNumber = infoDictionary[@"CFBundleVersion"]; if (buildNumber == nil) { buildNumber = @""; } + // google services (sign in) BOOL isGoogleServiceEnabled = [InfoPlistUtil containsRealServiceInfoPlistInBundle:[NSBundle mainBundle]]; + // lite SDK + BOOL isLiteSDK = NO; +#if defined(JITSI_MEET_SDK_LITE) + isLiteSDK = YES; +#endif + return @{ @"calendarEnabled": [NSNumber numberWithBool:calendarEnabled], @"buildNumber": buildNumber, + @"isLiteSDK": [NSNumber numberWithBool:isLiteSDK], @"name": name, @"sdkBundlePath": sdkBundlePath, + @"sdkVersion": sdkVersion, @"version": version, @"GOOGLE_SERVICES_ENABLED": [NSNumber numberWithBool:isGoogleServiceEnabled] }; diff --git a/ios/sdk/src/JitsiMeet.m b/ios/sdk/src/JitsiMeet.m index 6af035478..ddca35d82 100644 --- a/ios/sdk/src/JitsiMeet.m +++ b/ios/sdk/src/JitsiMeet.m @@ -15,10 +15,8 @@ */ #import -#import #import -#import "Dropbox.h" #import "JitsiMeet+Private.h" #import "JitsiMeetConferenceOptions+Private.h" #import "JitsiMeetView+Private.h" @@ -27,6 +25,11 @@ #import "RNSplashScreen.h" #import "ScheenshareEventEmiter.h" +#if !defined(JITSI_MEET_SDK_LITE) +#import +#import "Dropbox.h" +#endif + @implementation JitsiMeet { RCTBridgeWrapper *_bridgeWrapper; NSDictionary *_launchOptions; @@ -76,7 +79,9 @@ _launchOptions = [launchOptions copy]; +#if !defined(JITSI_MEET_SDK_LITE) [Dropbox setAppKey]; +#endif return YES; } @@ -98,6 +103,7 @@ openURL:(NSURL *)url options:(NSDictionary *)options { +#if !defined(JITSI_MEET_SDK_LITE) if ([Dropbox application:app openURL:url options:options]) { return YES; } @@ -107,6 +113,7 @@ options:options]) { return YES; } +#endif if (_customUrlScheme == nil || ![_customUrlScheme isEqualToString:url.scheme]) { return NO; diff --git a/ios/sdk/src/Lite-Info.plist b/ios/sdk/src/Lite-Info.plist new file mode 100644 index 000000000..0e197eca5 --- /dev/null +++ b/ios/sdk/src/Lite-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 99.0.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/react-native.config.js b/react-native.config.js index bfb2a5208..22b527ac9 100644 --- a/react-native.config.js +++ b/react-native.config.js @@ -4,6 +4,29 @@ * Podfile are wrong. */ module.exports = { + // Exclude some dependencies from auto-linking for the lite SDK. + dependencies: { + '@giphy/react-native-sdk': { + platforms: { + ios: null + } + }, + '@react-native-google-signin/google-signin': { + platforms: { + ios: null + } + }, + 'react-native-calendar-events': { + platforms: { + ios: null + } + }, + 'react-native-watch-connectivity': { + platforms: { + ios: null + } + } + }, project: { ios: { project: '.ios/jitsi-meet.xcworkspace' diff --git a/react/features/app/components/App.native.js b/react/features/app/components/App.native.js index 155324db8..15897a0ed 100644 --- a/react/features/app/components/App.native.js +++ b/react/features/app/components/App.native.js @@ -1,5 +1,5 @@ import React from 'react'; -import { Platform, StyleSheet, View } from 'react-native'; +import { NativeModules, Platform, StyleSheet, View } from 'react-native'; import { SafeAreaProvider } from 'react-native-safe-area-context'; import SplashScreen from 'react-native-splash-screen'; @@ -22,6 +22,8 @@ import '../reducers'; declare var __DEV__; +const { AppInfo } = NativeModules; + const DialogContainerWrapper = Platform.select({ default: View }); @@ -84,6 +86,10 @@ export class App extends AbstractApp { await super.componentDidMount(); SplashScreen.hide(); + + const liteTxt = AppInfo.isLiteSDK ? ' (lite)' : ''; + + logger.info(`Loaded SDK ${AppInfo.sdkVersion}${liteTxt}`); } /** diff --git a/react/features/dropbox/functions.native.js b/react/features/dropbox/functions.native.js index c0717b570..dbc8ae7d1 100644 --- a/react/features/dropbox/functions.native.js +++ b/react/features/dropbox/functions.native.js @@ -65,5 +65,5 @@ export function getSpaceUsage(token: string) { export function isEnabled(state: Object) { const { dropbox = {} } = state['features/base/config']; - return Dropbox.ENABLED && typeof dropbox.appKey === 'string'; + return Boolean(Dropbox?.ENABLED && typeof dropbox.appKey === 'string'); } diff --git a/react/features/gifs/functions.js b/react/features/gifs/functions.js index 11d906bf8..e4ab46453 100644 --- a/react/features/gifs/functions.js +++ b/react/features/gifs/functions.js @@ -81,6 +81,10 @@ export function isGifEnabled(state) { const { disableThirdPartyRequests } = state['features/base/config']; const { giphy } = state['features/base/config']; + if (navigator.product === 'ReactNative' && window.JITSI_MEET_LITE_SDK) { + return false; + } + return !disableThirdPartyRequests && giphy?.enabled && Boolean(giphy?.sdkKey); } diff --git a/react/features/mobile/polyfills/custom.js b/react/features/mobile/polyfills/custom.js new file mode 100644 index 000000000..e806f7b9c --- /dev/null +++ b/react/features/mobile/polyfills/custom.js @@ -0,0 +1,4 @@ +import { NativeModules } from 'react-native'; + + +global.JITSI_MEET_LITE_SDK = Boolean(NativeModules.AppInfo.isLiteSDK); diff --git a/react/features/mobile/polyfills/index.js b/react/features/mobile/polyfills/index.js index 5092fcd21..7e018eb33 100644 --- a/react/features/mobile/polyfills/index.js +++ b/react/features/mobile/polyfills/index.js @@ -1,2 +1,3 @@ import './bundler'; import './browser'; +import './custom'; diff --git a/react/features/mobile/watchos/middleware.js b/react/features/mobile/watchos/middleware.js index e2bc31764..cc047c30f 100644 --- a/react/features/mobile/watchos/middleware.js +++ b/react/features/mobile/watchos/middleware.js @@ -1,6 +1,6 @@ // @flow -import { Platform } from 'react-native'; +import { NativeModules, Platform } from 'react-native'; import { updateApplicationContext, watchEvents } from 'react-native-watch-connectivity'; import { appNavigate } from '../../app/actions'; @@ -18,7 +18,8 @@ import { setConferenceTimestamp, setSessionId, setWatchReachable } from './actio import { CMD_HANG_UP, CMD_JOIN_CONFERENCE, CMD_SET_MUTED, MAX_RECENT_URLS } from './constants'; import logger from './logger'; -const watchOSEnabled = Platform.OS === 'ios'; +const { AppInfo } = NativeModules; +const watchOSEnabled = Platform.OS === 'ios' && !AppInfo.isLiteSDK; // Handles the recent URLs state sent to the watch watchOSEnabled && StateListenerRegistry.register(