From aeb6990aba6f3b51ca92b1c371e69ad14c7a4927 Mon Sep 17 00:00:00 2001 From: Carlos Santos <4a.santos@gmail.com> Date: Wed, 7 Aug 2024 12:37:13 +0200 Subject: [PATCH] Added Livekit ios example Integrated token request using an application server Downgraded features for adapting others tutorials ios: Updated assets and remove unncessary code Updated schemas and app name Added configure urls view and refactored code ios: Refactored code removed broadcastExt renamed project to OpenViduIOS refactored code Updated Readme removed connection time element Added participants name and moved leave room button to topbar Refactored code Update README.md Renamed and improve project structure --- application-client/openvidu-ios/LICENSE | 201 +++++++ .../OpenViduIOS.xcodeproj/project.pbxproj | 552 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/swiftpm/Package.resolved | 60 ++ .../UserInterfaceState.xcuserstate | Bin 0 -> 118715 bytes .../xcschemes/BroadcastExt.xcscheme | 97 +++ .../xcschemes/OpenViduTutorial.xcscheme | 78 +++ .../xcdebugger/Breakpoints_v2.xcbkptlist | 56 ++ application-client/openvidu-ios/README.md | 23 + .../Colors/AccentColor.colorset/Contents.json | 38 ++ .../Assets.xcassets/Colors/Contents.json | 6 + .../Colors/OVBlue.colorset/Contents.json | 20 + .../Colors/OVGray.colorset/Contents.json | 20 + .../Colors/OVGray2.colorset/Contents.json | 20 + .../Colors/OVYellow.colorset/Contents.json | 20 + .../Shared/Assets.xcassets/Contents.json | 6 + .../Assets.xcassets/Icons/Contents.json | 6 + .../Icons/iOS.appiconset/Contents.json | 116 ++++ .../iOS.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 664 bytes .../iOS.appiconset/Icon-App-20x20@2x 1.png | Bin 0 -> 1300 bytes .../iOS.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1300 bytes .../iOS.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1798 bytes .../iOS.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 928 bytes .../iOS.appiconset/Icon-App-29x29@2x 1.png | Bin 0 -> 1772 bytes .../iOS.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1772 bytes .../iOS.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 2593 bytes .../iOS.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1300 bytes .../iOS.appiconset/Icon-App-40x40@2x 1.png | Bin 0 -> 2384 bytes .../iOS.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 2384 bytes .../iOS.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 3491 bytes .../iOS.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 3491 bytes .../iOS.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 5092 bytes .../iOS.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 2246 bytes .../iOS.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 4437 bytes .../iOS.appiconset/Icon-App-83.5x83.5@2x.png | Bin 0 -> 4851 bytes .../Icons/iOS.appiconset/ios.png | Bin 0 -> 30601 bytes .../Assets.xcassets/Images/Contents.json | 6 + .../Images/logo.imageset/Contents.json | 23 + .../Images/logo.imageset/logo 1.png | Bin 0 -> 41816 bytes .../Images/logo.imageset/logo 2.png | Bin 0 -> 76402 bytes .../Images/logo.imageset/logo.png | Bin 0 -> 17335 bytes .../Shared/Contexts/AppContext.swift | 35 ++ .../Shared/Contexts/RoomContext.swift | 116 ++++ .../openvidu-ios/Shared/Custom.swift | 114 ++++ .../openvidu-ios/Shared/OpenViduApp.swift | 188 ++++++ .../Shared/Support/Binding+OptionSet.swift | 47 ++ .../openvidu-ios/Shared/Support/Bundle.swift | 30 + .../Shared/Support/Participant+Helpers.swift | 28 + .../Shared/Support/SecureStore.swift | 87 +++ .../Shared/Support/TokenModel.swift | 27 + .../Shared/Utils/HttpClient.swift | 55 ++ .../Shared/Views/ConfigureUrlsView.swift | 95 +++ .../Shared/Views/ConnectView.swift | 125 ++++ .../Shared/Views/ParticipantView.swift | 103 ++++ .../openvidu-ios/Shared/Views/RoomView.swift | 385 ++++++++++++ .../openvidu-ios/iOS/Info.plist | 77 +++ .../openvidu-ios/iOS/iOS.entitlements | 20 + 58 files changed, 2895 insertions(+) create mode 100644 application-client/openvidu-ios/LICENSE create mode 100644 application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.pbxproj create mode 100644 application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.xcworkspace/xcuserdata/openvidu.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 application-client/openvidu-ios/OpenViduIOS.xcodeproj/xcshareddata/xcschemes/BroadcastExt.xcscheme create mode 100644 application-client/openvidu-ios/OpenViduIOS.xcodeproj/xcshareddata/xcschemes/OpenViduTutorial.xcscheme create mode 100644 application-client/openvidu-ios/OpenViduIOS.xcodeproj/xcuserdata/openvidu.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 application-client/openvidu-ios/README.md create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Colors/AccentColor.colorset/Contents.json create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Colors/Contents.json create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Colors/OVBlue.colorset/Contents.json create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Colors/OVGray.colorset/Contents.json create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Colors/OVGray2.colorset/Contents.json create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Colors/OVYellow.colorset/Contents.json create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Contents.json create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/Contents.json create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Contents.json create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-20x20@1x.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-20x20@2x 1.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-20x20@2x.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-20x20@3x.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-29x29@1x.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-29x29@2x 1.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-29x29@2x.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-29x29@3x.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-40x40@1x.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-40x40@2x 1.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-40x40@2x.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-40x40@3x.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-60x60@2x.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-60x60@3x.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-76x76@1x.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-76x76@2x.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/ios.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Images/Contents.json create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Images/logo.imageset/Contents.json create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Images/logo.imageset/logo 1.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Images/logo.imageset/logo 2.png create mode 100644 application-client/openvidu-ios/Shared/Assets.xcassets/Images/logo.imageset/logo.png create mode 100644 application-client/openvidu-ios/Shared/Contexts/AppContext.swift create mode 100644 application-client/openvidu-ios/Shared/Contexts/RoomContext.swift create mode 100644 application-client/openvidu-ios/Shared/Custom.swift create mode 100644 application-client/openvidu-ios/Shared/OpenViduApp.swift create mode 100644 application-client/openvidu-ios/Shared/Support/Binding+OptionSet.swift create mode 100644 application-client/openvidu-ios/Shared/Support/Bundle.swift create mode 100644 application-client/openvidu-ios/Shared/Support/Participant+Helpers.swift create mode 100644 application-client/openvidu-ios/Shared/Support/SecureStore.swift create mode 100644 application-client/openvidu-ios/Shared/Support/TokenModel.swift create mode 100644 application-client/openvidu-ios/Shared/Utils/HttpClient.swift create mode 100644 application-client/openvidu-ios/Shared/Views/ConfigureUrlsView.swift create mode 100644 application-client/openvidu-ios/Shared/Views/ConnectView.swift create mode 100644 application-client/openvidu-ios/Shared/Views/ParticipantView.swift create mode 100644 application-client/openvidu-ios/Shared/Views/RoomView.swift create mode 100644 application-client/openvidu-ios/iOS/Info.plist create mode 100644 application-client/openvidu-ios/iOS/iOS.entitlements diff --git a/application-client/openvidu-ios/LICENSE b/application-client/openvidu-ios/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/application-client/openvidu-ios/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.pbxproj b/application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.pbxproj new file mode 100644 index 00000000..994b611e --- /dev/null +++ b/application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.pbxproj @@ -0,0 +1,552 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 5807F0662C610D09000F07E5 /* ConfigureUrlsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5807F0652C610D09000F07E5 /* ConfigureUrlsView.swift */; }; + 58FE57B12C4E637800759796 /* HttpClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58FE57B02C4E637800759796 /* HttpClient.swift */; }; + 58FE57B32C4E699200759796 /* TokenModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58FE57B22C4E699200759796 /* TokenModel.swift */; }; + 680FE2F227A8EF7700B6F6DB /* SFSafeSymbols in Frameworks */ = {isa = PBXBuildFile; productRef = 680FE2F127A8EF7700B6F6DB /* SFSafeSymbols */; }; + 6813CEFD2C09D2E30025091A /* Binding+OptionSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6813CEFC2C09D2E30025091A /* Binding+OptionSet.swift */; }; + 6816968E2AF96240008ED486 /* Participant+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6816968D2AF96240008ED486 /* Participant+Helpers.swift */; }; + 6816B1B0272D9198005ADB85 /* ParticipantView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6816B1AF272D9198005ADB85 /* ParticipantView.swift */; }; + 681E3F39271FC772007BB547 /* RoomContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 681E3F38271FC772007BB547 /* RoomContext.swift */; }; + 681E3F3F271FC795007BB547 /* Custom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 681E3F3E271FC795007BB547 /* Custom.swift */; }; + 681E3F43271FC7AD007BB547 /* RoomView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 681E3F41271FC7AC007BB547 /* RoomView.swift */; }; + 681E3F45271FC7AD007BB547 /* ConnectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 681E3F42271FC7AD007BB547 /* ConnectView.swift */; }; + 6847616427B44A1A001611BE /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6847616327B44A1A001611BE /* Bundle.swift */; }; + 6867533B27A65652003707B9 /* AppContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6867533A27A65652003707B9 /* AppContext.swift */; }; + 68816CC127B4D6BC00E24622 /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = 68816CC027B4D6BC00E24622 /* KeychainAccess */; }; + 68816CC527B4DCD500E24622 /* SecureStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68816CC427B4DCD500E24622 /* SecureStore.swift */; }; + 688D931A283FE244003CA647 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 68B3853E271E780700711D5F /* Assets.xcassets */; }; + 68B3854C271E780700711D5F /* OpenViduApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68B3853C271E780600711D5F /* OpenViduApp.swift */; }; + 68FBA43F2A38B49C0015853E /* LiveKit in Frameworks */ = {isa = PBXBuildFile; productRef = 68FBA43E2A38B49C0015853E /* LiveKit */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 68EA18EB27F2E91100F9AE48 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 5807F0652C610D09000F07E5 /* ConfigureUrlsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConfigureUrlsView.swift; sourceTree = ""; }; + 58FE57B02C4E637800759796 /* HttpClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HttpClient.swift; sourceTree = ""; }; + 58FE57B22C4E699200759796 /* TokenModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokenModel.swift; sourceTree = ""; }; + 6813CEFC2C09D2E30025091A /* Binding+OptionSet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Binding+OptionSet.swift"; sourceTree = ""; }; + 6816968D2AF96240008ED486 /* Participant+Helpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Participant+Helpers.swift"; sourceTree = ""; }; + 6816B1AF272D9198005ADB85 /* ParticipantView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParticipantView.swift; sourceTree = ""; }; + 681E3F38271FC772007BB547 /* RoomContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RoomContext.swift; sourceTree = ""; }; + 681E3F3E271FC795007BB547 /* Custom.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Custom.swift; sourceTree = ""; }; + 681E3F41271FC7AC007BB547 /* RoomView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RoomView.swift; sourceTree = ""; }; + 681E3F42271FC7AD007BB547 /* ConnectView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectView.swift; sourceTree = ""; }; + 683F05F4273F96B20080C7AC /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; }; + 683F0603273FAD690080C7AC /* iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iOS.entitlements; sourceTree = ""; }; + 6847616327B44A1A001611BE /* Bundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bundle.swift; sourceTree = ""; }; + 6865EA2527513B4500FFAFC3 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6867533A27A65652003707B9 /* AppContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppContext.swift; sourceTree = ""; }; + 68816CC427B4DCD500E24622 /* SecureStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureStore.swift; sourceTree = ""; }; + 68B3853C271E780600711D5F /* OpenViduApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenViduApp.swift; sourceTree = ""; }; + 68B3853E271E780700711D5F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 68B38543271E780700711D5F /* OpenViduIOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OpenViduIOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 68DEF27E2919EEFA00258494 /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.1.sdk/System/Library/Frameworks/ReplayKit.framework; sourceTree = DEVELOPER_DIR; }; + 9E7835E62751A71500559DEC /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 68B38540271E780700711D5F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 68FBA43F2A38B49C0015853E /* LiveKit in Frameworks */, + 680FE2F227A8EF7700B6F6DB /* SFSafeSymbols in Frameworks */, + 68816CC127B4D6BC00E24622 /* KeychainAccess in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 58FE57AF2C4E62FD00759796 /* Utils */ = { + isa = PBXGroup; + children = ( + 58FE57B02C4E637800759796 /* HttpClient.swift */, + ); + path = Utils; + sourceTree = ""; + }; + 58FE57B42C4FAFD600759796 /* Contexts */ = { + isa = PBXGroup; + children = ( + 6867533A27A65652003707B9 /* AppContext.swift */, + 681E3F38271FC772007BB547 /* RoomContext.swift */, + ); + path = Contexts; + sourceTree = ""; + }; + 681E3F47271FCB40007BB547 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 68DEF27E2919EEFA00258494 /* ReplayKit.framework */, + 9E7835E62751A71500559DEC /* CoreGraphics.framework */, + 683F05F4273F96B20080C7AC /* ReplayKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 683720D427A0640D007DA986 /* Support */ = { + isa = PBXGroup; + children = ( + 6847616327B44A1A001611BE /* Bundle.swift */, + 68816CC427B4DCD500E24622 /* SecureStore.swift */, + 6816968D2AF96240008ED486 /* Participant+Helpers.swift */, + 6813CEFC2C09D2E30025091A /* Binding+OptionSet.swift */, + 58FE57B22C4E699200759796 /* TokenModel.swift */, + ); + path = Support; + sourceTree = ""; + }; + 6865EA2427513B4500FFAFC3 /* iOS */ = { + isa = PBXGroup; + children = ( + 6865EA2527513B4500FFAFC3 /* Info.plist */, + 683F0603273FAD690080C7AC /* iOS.entitlements */, + ); + path = iOS; + sourceTree = ""; + }; + 6884B77A2750505B00732D47 /* Views */ = { + isa = PBXGroup; + children = ( + 6816B1AF272D9198005ADB85 /* ParticipantView.swift */, + 5807F0652C610D09000F07E5 /* ConfigureUrlsView.swift */, + 681E3F41271FC7AC007BB547 /* RoomView.swift */, + 681E3F42271FC7AD007BB547 /* ConnectView.swift */, + ); + path = Views; + sourceTree = ""; + }; + 68B38536271E780600711D5F = { + isa = PBXGroup; + children = ( + 68B3853B271E780600711D5F /* Shared */, + 6865EA2427513B4500FFAFC3 /* iOS */, + 68B38544271E780700711D5F /* Products */, + 681E3F47271FCB40007BB547 /* Frameworks */, + ); + sourceTree = ""; + }; + 68B3853B271E780600711D5F /* Shared */ = { + isa = PBXGroup; + children = ( + 58FE57B42C4FAFD600759796 /* Contexts */, + 58FE57AF2C4E62FD00759796 /* Utils */, + 683720D427A0640D007DA986 /* Support */, + 6884B77A2750505B00732D47 /* Views */, + 681E3F3E271FC795007BB547 /* Custom.swift */, + 68B3853C271E780600711D5F /* OpenViduApp.swift */, + 68B3853E271E780700711D5F /* Assets.xcassets */, + ); + path = Shared; + sourceTree = ""; + }; + 68B38544271E780700711D5F /* Products */ = { + isa = PBXGroup; + children = ( + 68B38543271E780700711D5F /* OpenViduIOS.app */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 68B38542271E780700711D5F /* OpenViduIOS (iOS) */ = { + isa = PBXNativeTarget; + buildConfigurationList = 68B38554271E780700711D5F /* Build configuration list for PBXNativeTarget "OpenViduIOS (iOS)" */; + buildPhases = ( + 68B3853F271E780700711D5F /* Sources */, + 68B38540271E780700711D5F /* Frameworks */, + 68B38541271E780700711D5F /* Resources */, + 68EA18EB27F2E91100F9AE48 /* Embed Foundation Extensions */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "OpenViduIOS (iOS)"; + packageProductDependencies = ( + 680FE2F127A8EF7700B6F6DB /* SFSafeSymbols */, + 68816CC027B4D6BC00E24622 /* KeychainAccess */, + 68FBA43E2A38B49C0015853E /* LiveKit */, + ); + productName = "Multiplatform-SwiftUI (iOS)"; + productReference = 68B38543271E780700711D5F /* OpenViduIOS.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 68B38537271E780600711D5F /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1330; + LastUpgradeCheck = 1520; + TargetAttributes = { + 68B38542271E780700711D5F = { + CreatedOnToolsVersion = 13.0; + }; + }; + }; + buildConfigurationList = 68B3853A271E780600711D5F /* Build configuration list for PBXProject "OpenViduIOS" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 68B38536271E780600711D5F; + packageReferences = ( + 685271E727407BBC006B4D6A /* XCRemoteSwiftPackageReference "swift-protobuf" */, + 680FE2F027A8EF7700B6F6DB /* XCRemoteSwiftPackageReference "SFSafeSymbols" */, + 68816CBF27B4D6BC00E24622 /* XCRemoteSwiftPackageReference "KeychainAccess" */, + 68FBA43D2A38B49C0015853E /* XCRemoteSwiftPackageReference "client-sdk-swift" */, + ); + productRefGroup = 68B38544271E780700711D5F /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 68B38542271E780700711D5F /* OpenViduIOS (iOS) */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 68B38541271E780700711D5F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 688D931A283FE244003CA647 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 68B3853F271E780700711D5F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 681E3F45271FC7AD007BB547 /* ConnectView.swift in Sources */, + 6867533B27A65652003707B9 /* AppContext.swift in Sources */, + 5807F0662C610D09000F07E5 /* ConfigureUrlsView.swift in Sources */, + 681E3F39271FC772007BB547 /* RoomContext.swift in Sources */, + 681E3F43271FC7AD007BB547 /* RoomView.swift in Sources */, + 6816B1B0272D9198005ADB85 /* ParticipantView.swift in Sources */, + 68816CC527B4DCD500E24622 /* SecureStore.swift in Sources */, + 6813CEFD2C09D2E30025091A /* Binding+OptionSet.swift in Sources */, + 6816968E2AF96240008ED486 /* Participant+Helpers.swift in Sources */, + 68B3854C271E780700711D5F /* OpenViduApp.swift in Sources */, + 58FE57B12C4E637800759796 /* HttpClient.swift in Sources */, + 58FE57B32C4E699200759796 /* TokenModel.swift in Sources */, + 681E3F3F271FC795007BB547 /* Custom.swift in Sources */, + 6847616427B44A1A001611BE /* Bundle.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 68B38552271E780700711D5F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_BITCODE = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "GL_SILENCE_DEPRECATION=1", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 68B38553271E780700711D5F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_BITCODE = NO; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = "GL_SILENCE_DEPRECATION=1"; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 68B38555271E780700711D5F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = iOS; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + CODE_SIGN_ENTITLEMENTS = "$(SRCROOT)/iOS/iOS.entitlements"; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1.0; + DEVELOPMENT_TEAM = N5K98M7Q94; + ENABLE_HARDENED_RUNTIME = NO; + ENABLE_PREVIEWS = YES; + INFOPLIST_FILE = iOS/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "OpenVidu iOS"; + INFOPLIST_KEY_NSCameraUsageDescription = "Please allow Camera access"; + INFOPLIST_KEY_NSMicrophoneUsageDescription = "Please allow Microphone access"; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = io.openvidu.ios; + PRODUCT_NAME = OpenViduIOS; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 68B38556271E780700711D5F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = iOS; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + CODE_SIGN_ENTITLEMENTS = "$(SRCROOT)/iOS/iOS.entitlements"; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1.0; + DEVELOPMENT_TEAM = N5K98M7Q94; + ENABLE_HARDENED_RUNTIME = NO; + "ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = YES; + ENABLE_PREVIEWS = YES; + INFOPLIST_FILE = iOS/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "OpenVidu iOS"; + INFOPLIST_KEY_NSCameraUsageDescription = "Please allow Camera access"; + INFOPLIST_KEY_NSMicrophoneUsageDescription = "Please allow Microphone access"; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = io.openvidu.ios; + "PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]" = io.test.prueba; + "PRODUCT_BUNDLE_IDENTIFIER[sdk=macosx*]" = io.test.prueba; + PRODUCT_NAME = OpenViduIOS; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 68B3853A271E780600711D5F /* Build configuration list for PBXProject "OpenViduIOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 68B38552271E780700711D5F /* Debug */, + 68B38553271E780700711D5F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 68B38554271E780700711D5F /* Build configuration list for PBXNativeTarget "OpenViduIOS (iOS)" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 68B38555271E780700711D5F /* Debug */, + 68B38556271E780700711D5F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 680FE2F027A8EF7700B6F6DB /* XCRemoteSwiftPackageReference "SFSafeSymbols" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/SFSafeSymbols/SFSafeSymbols"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.3.0; + }; + }; + 685271E727407BBC006B4D6A /* XCRemoteSwiftPackageReference "swift-protobuf" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/apple/swift-protobuf.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.26.0; + }; + }; + 68816CBF27B4D6BC00E24622 /* XCRemoteSwiftPackageReference "KeychainAccess" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/kishikawakatsumi/KeychainAccess.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 4.2.2; + }; + }; + 68FBA43D2A38B49C0015853E /* XCRemoteSwiftPackageReference "client-sdk-swift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/livekit/client-sdk-swift"; + requirement = { + kind = exactVersion; + version = 2.0.11; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 680FE2F127A8EF7700B6F6DB /* SFSafeSymbols */ = { + isa = XCSwiftPackageProductDependency; + package = 680FE2F027A8EF7700B6F6DB /* XCRemoteSwiftPackageReference "SFSafeSymbols" */; + productName = SFSafeSymbols; + }; + 68816CC027B4D6BC00E24622 /* KeychainAccess */ = { + isa = XCSwiftPackageProductDependency; + package = 68816CBF27B4D6BC00E24622 /* XCRemoteSwiftPackageReference "KeychainAccess" */; + productName = KeychainAccess; + }; + 68FBA43E2A38B49C0015853E /* LiveKit */ = { + isa = XCSwiftPackageProductDependency; + package = 68FBA43D2A38B49C0015853E /* XCRemoteSwiftPackageReference "client-sdk-swift" */; + productName = LiveKit; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 68B38537271E780600711D5F /* Project object */; +} diff --git a/application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 00000000..2139e3fb --- /dev/null +++ b/application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,60 @@ +{ + "originHash" : "bf59b79f5d4ea0a54ef7e929b035c5821f5094ee990a7a369ad0cb3713f6c62d", + "pins" : [ + { + "identity" : "client-sdk-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/livekit/client-sdk-swift", + "state" : { + "revision" : "367d95fc9a16bab88c3ec73e019726f4608b2c18", + "version" : "2.0.11" + } + }, + { + "identity" : "keychainaccess", + "kind" : "remoteSourceControl", + "location" : "https://github.com/kishikawakatsumi/KeychainAccess.git", + "state" : { + "revision" : "84e546727d66f1adc5439debad16270d0fdd04e7", + "version" : "4.2.2" + } + }, + { + "identity" : "sfsafesymbols", + "kind" : "remoteSourceControl", + "location" : "https://github.com/SFSafeSymbols/SFSafeSymbols", + "state" : { + "revision" : "e2e28f4e56e1769c2ec3c61c9355fc64eb7a535a", + "version" : "5.3.0" + } + }, + { + "identity" : "swift-log", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-log.git", + "state" : { + "revision" : "9cb486020ebf03bfa5b5df985387a14a98744537", + "version" : "1.6.1" + } + }, + { + "identity" : "swift-protobuf", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-protobuf.git", + "state" : { + "revision" : "d57a5aecf24a25b32ec4a74be2f5d0a995a47c4b", + "version" : "1.27.0" + } + }, + { + "identity" : "webrtc-xcframework", + "kind" : "remoteSourceControl", + "location" : "https://github.com/livekit/webrtc-xcframework.git", + "state" : { + "revision" : "5640582dbac33b193608574d4aa2a8d5d825db74", + "version" : "125.6422.2" + } + } + ], + "version" : 3 +} diff --git a/application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.xcworkspace/xcuserdata/openvidu.xcuserdatad/UserInterfaceState.xcuserstate b/application-client/openvidu-ios/OpenViduIOS.xcodeproj/project.xcworkspace/xcuserdata/openvidu.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..8a448fa5a3509c604b91c88cbab1d53090d5e13a GIT binary patch literal 118715 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 literal 0 HcmV?d00001 diff --git a/application-client/openvidu-ios/OpenViduIOS.xcodeproj/xcshareddata/xcschemes/BroadcastExt.xcscheme b/application-client/openvidu-ios/OpenViduIOS.xcodeproj/xcshareddata/xcschemes/BroadcastExt.xcscheme new file mode 100644 index 00000000..d80a4317 --- /dev/null +++ b/application-client/openvidu-ios/OpenViduIOS.xcodeproj/xcshareddata/xcschemes/BroadcastExt.xcscheme @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/application-client/openvidu-ios/OpenViduIOS.xcodeproj/xcshareddata/xcschemes/OpenViduTutorial.xcscheme b/application-client/openvidu-ios/OpenViduIOS.xcodeproj/xcshareddata/xcschemes/OpenViduTutorial.xcscheme new file mode 100644 index 00000000..4c04749e --- /dev/null +++ b/application-client/openvidu-ios/OpenViduIOS.xcodeproj/xcshareddata/xcschemes/OpenViduTutorial.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/application-client/openvidu-ios/OpenViduIOS.xcodeproj/xcuserdata/openvidu.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/application-client/openvidu-ios/OpenViduIOS.xcodeproj/xcuserdata/openvidu.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 00000000..01b2a19f --- /dev/null +++ b/application-client/openvidu-ios/OpenViduIOS.xcodeproj/xcuserdata/openvidu.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + diff --git a/application-client/openvidu-ios/README.md b/application-client/openvidu-ios/README.md new file mode 100644 index 00000000..d0a57e39 --- /dev/null +++ b/application-client/openvidu-ios/README.md @@ -0,0 +1,23 @@ +# Basic iOS + +Basic client application built for iOS using Swift. It internally uses [LiveKit Swift SDK (iOS/macOS)](https://github.com/livekit/client-sdk-swift). + +For further information, check the [tutorial documentation](https://livekit-tutorials.openvidu.io/tutorials/application-client/ios/). + +## Prerequisites + +- [Xcode](https://apps.apple.com/es/app/xcode/id497799835?mt=12) + +## Run + +1. Download repository + +```bash +git clone https://github.com/OpenVidu/openvidu-livekit-tutorials.git +``` + +2. Launch Xcode and open `OpenViduIOS.xcodeproj` + +3. **Run** the project from the menu **Product** → **Run** or by ⌘R. + +If you encounter code signing issues, make sure you change the **Team** and **bundle id** from the previous step. diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/AccentColor.colorset/Contents.json b/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/AccentColor.colorset/Contents.json new file mode 100644 index 00000000..22c4bb0a --- /dev/null +++ b/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/AccentColor.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/Contents.json b/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/OVBlue.colorset/Contents.json b/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/OVBlue.colorset/Contents.json new file mode 100644 index 00000000..fbdef902 --- /dev/null +++ b/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/OVBlue.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "display-p3", + "components" : { + "alpha" : "1.000", + "blue" : "0xAA", + "green" : "0x88", + "red" : "0x00" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/OVGray.colorset/Contents.json b/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/OVGray.colorset/Contents.json new file mode 100644 index 00000000..f3b13148 --- /dev/null +++ b/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/OVGray.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "display-p3", + "components" : { + "alpha" : "1.000", + "blue" : "0x4D", + "green" : "0x4D", + "red" : "0x4D" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/OVGray2.colorset/Contents.json b/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/OVGray2.colorset/Contents.json new file mode 100644 index 00000000..a35f84ea --- /dev/null +++ b/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/OVGray2.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "display-p3", + "components" : { + "alpha" : "1.000", + "blue" : "0x29", + "green" : "0x27", + "red" : "0x1E" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/OVYellow.colorset/Contents.json b/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/OVYellow.colorset/Contents.json new file mode 100644 index 00000000..9fe8035b --- /dev/null +++ b/application-client/openvidu-ios/Shared/Assets.xcassets/Colors/OVYellow.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "display-p3", + "components" : { + "alpha" : "1.000", + "blue" : "0x00", + "green" : "0xCB", + "red" : "0xFE" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Contents.json b/application-client/openvidu-ios/Shared/Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/application-client/openvidu-ios/Shared/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/Contents.json b/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Contents.json b/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Contents.json new file mode 100644 index 00000000..98c276d2 --- /dev/null +++ b/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Contents.json @@ -0,0 +1,116 @@ +{ + "images" : [ + { + "filename" : "Icon-App-20x20@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "Icon-App-20x20@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "filename" : "Icon-App-29x29@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "Icon-App-29x29@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "filename" : "Icon-App-40x40@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "Icon-App-40x40@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "filename" : "Icon-App-60x60@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "filename" : "Icon-App-60x60@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "filename" : "Icon-App-20x20@1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "filename" : "Icon-App-20x20@2x 1.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "Icon-App-29x29@1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "filename" : "Icon-App-29x29@2x 1.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "Icon-App-40x40@1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "filename" : "Icon-App-40x40@2x 1.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "Icon-App-76x76@1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "filename" : "Icon-App-76x76@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "filename" : "Icon-App-83.5x83.5@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "filename" : "ios.png", + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-20x20@1x.png b/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4df0a955382a80e170856457e20ead6ab7e903eb GIT binary patch literal 664 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 literal 0 HcmV?d00001 diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-29x29@2x 1.png b/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-29x29@2x 1.png new file mode 100644 index 0000000000000000000000000000000000000000..eeb3c5538981b46f341936517d577214312a1874 GIT binary patch literal 1772 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

BJC z$^j_xLJWi%y9L!!4`E?>V_w2&rtSBSRA}YUF4JrVkUv}45u~>dX$m0%fA%OSTdc{P z&A39-K!ee}(ZsZEI}0JbJwvXW&r+NKgHTmUrm!6|@c?KpKp@@Fgs99$mo0D}J}n9! z25+W+&YreFQVA0@$3zVn>F9GAtIf`J?<%xNpGjm8bbcgdc3GLnXM;NY3(XdUu9*2X zrp}YjNW>=|vw73<9-d;h14Npz%U|aQjDnX&3*WU!`PY5;cxNc?rD+8yj8_w$4A^vy zOx8=XW)!jMl{E9|@c^Cd#o)Jkw>{5lL&&U@`*^-7=D_W!EA{Dw^zw+9B3mn}lIh8a zL`HV?4lnP@`Y#PtSVI*(Zn8*4Zeeu9E-^T66>zc`2NniKWEI+TXCGWWQDUe}UnbN0 zgodV`-<1*kqnu%_&T>RVw@Y60Gd@={!frpE)_|Lgcgf)2)1biphh^^d@M9%&1)GH^ znT<=PMoZ=+DtpUFd9043SmvONsH=Z1#|Xg-1Q^ z$VAEw6sq~G7Vo|F+E!i^#i=w$DCo@w3~d7S`LnC}jBM6+imAw(Tk|$e0pD3%bNZu9 zE&O|GMy%=lp9P*Lt;l4;_vyIA+g=IAbtm173|=|zZ_k-j=^RzW@U1x=`tN#(+VHf|ZF)oe*rnyMAmfE`4x!;fmxj5{+nEJ|6l1wNvT6q6^kZ0H7YocX} z>JzvvXwLD-rqEO&PS?$SQpGS3^bU#^53&J9MgO(O&WFJ-^*6NgYL5=ePIG0IV@HOZ z9N^&@d%2c^B*)qiP{p%bw+d8!O8G_Pdr?_e$Hhuo0kO@GIZ9Mza>q<@2@%)@Qm7bR zc!2=b(h;bqhpTAHm2~mOr7Z3xF#VZ9sBwUsPJC&^kqjK{X zS0vjk8?)C3KZIM#5wt`uK0_OIz!`>g>*&*9tFO+93@_NNsY>{X^sW6gSzNZ>wb-87 zQX;vIYcAHyH1Qz9a@TA4Dn`daQ%EDUU)QUp06aemp9p*6SElt^F4u?2!0+#})+3dP zI-@H!w%QafIx2U)mB8>zkJ)I;&)NV}S@FBjDhV4!mk(WvEu`VSU!^Gg5# literal 0 HcmV?d00001 diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-40x40@1x.png b/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..ab6643475544a562f302c327522378410967a8df GIT binary patch literal 1300 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 Yh@XgP#NkfLucrjCFtNsz8@WCFAF`u*mH+?% literal 0 HcmV?d00001 diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-40x40@2x.png b/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d5a92d4d7b27387fa9fb5800825e45e947d0ac4f GIT binary patch literal 2384 zcma);`9Bkk1IL$mo(;onqMn%}$A*X)Npj5H#7K@da?~R=MsuIJ;xV43r;_DZxo-~| zCbvZ7CX8B+gqWMKZ{Ppm`Qh{Vygskj=jZq9lVoFU2IfD*4*&qb7Ume-ueABUfWQ6n zRLDjd000uVz!=&G(^hFN_uw~9M>lgnd>}C2-cO$-J?`>$SH!*;%Evly=hg_%$2^tJ z5e0HuE|~DN3itvsQo#UTqw6k7R`MNCG5cc6Il6&boW97Uh*2gQ)z?Y-?gF13o2jQ| zCw{_0-;wbj?**RiQ!FdRhxF6-cevbu+x=DZEior8yI!dG{b-?BE1Z|fXo>UWfj$OZ zHUIC0I0-&uiy0!4w~;vx48k(32&74O6k8}k*vcXMDhqY!unkDLM^zms!rUYW;?)|& zf%jgH^_ZT#WE|Go{DUfiNeF;S!Y|imEm>ya^jq$FT%tO<;b(Th!{I-xUad@Pj7GPu zgDU-QF+1!&&bBVEZP_aEf+-k_>QWTXEx8ADr;856)n-%{Um!= zT@(g^DHf-~yiLm0lMgCAhUI%!ub&DRH>;7!pdxw1TD6|y)D50!MGW)Db-bz@d0~E_ zfu!4X$HSP&@|YW2Sd)P#rVRU@Bj-k3(2p_q_WUP4mhjWLy0z%#Ret&@wXLcy5nTlR zJ-gcbs~0{i?aQ-%1mXPARZG<-=p)fnnwI7ZM?3{(d)oVHRCn7|QKbKyP$c>k} z12W2i2n_1IO<=G!F`hVQT#j_y8UKH$TF<`x`E9eIC~lbdOf9YZ_RLO{TrxZP%eA9f z_Ho?_ePBVz-3^gz*AVV1&pSxTbDd|03YT_S=fq=3TP9Cl3hltq9=2!({;+b_ig|I5 zcXs(m7N2h*Pm?k7fqc?)wsw;=;b?V8JF4V5qeHzSnO~Hd>c3`77Y!`*l)ea_>eRIG z=;h~C9oIGV>&!t?oe!GGhox&i@Y9Eov%4j z_eMPPk6%3KML;X;kiwq?^ww5dMosL&4q$dXCv@Q6yW~ZRnoIeywEy5fdc|BS(DS5D zZ&WOuU)CHpP^Xiq)t_wGAew|0#}hFvN*~mMYvzsZKMzI}gdA3ROz_p;?ln7N-ywzQ z>>|0I7oIB-^$iMila3n&x`+gsZQc>tyH}=f*<70)pri$~&!<5R1Q{W9FOS88vO=5o zdtVfjnj0+j0nZjTR(>=)x}0cys&o9r8Z1$an9E4TA65;0oH7f7zHNqTuZsjl?gv23 zY(6g}ZI}SVc`5(e!~7#x#VfEb9>(xm*byH(Ez8qwFPO~&6 z(^~uF0Dbd4%B!GfF^%T6mq#2+%j$qx=a^opCgM@+taCyB`M!!u591=?lwP=Eabc!M zd&lXWEWMOMd2xHt^xP#GoEXy7>84-(9k-Nnf3Y(DYD`Y;LlO*yYG0h%@3U&$pQ`Gc zgImco1E?+Uu-m*$lk6~SX4^uQ9h1D=bd|ho2$M!*p6L&X8k~DJ>Dx8|G~_h#JZ?+R ze849vFxl(@qcK!@z?<@K-RAGW~bBwdcUD&8pz!1-e4ZIdks^aLyS|lz~%t=a@$!`?_?C?0v?VN zeU@~)11iAh?cNU#F2p`|oYq>rVI?O-T^zVT&LR&>-K37m153^xV z$weT0zIV1MNO656r$pR$ag_Tyv%DlPD{IteC{)UB`RB#vNafhY)PjKWn&YrcKrV$l zCzC9g9>Ayj7w2`|VAM*rsB`1bM{l-uY184q)1S6}`HJbXn2rpE02!tk_-+{Z}XnSSLEa3T?>l{tXy8CR!U9BXuV93LXGHue;0>R Yh@XgP#NkfLucrjCFtNsz8@WCFAF`u*mH+?% literal 0 HcmV?d00001 diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-40x40@3x.png b/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..87cceab506f6fa5315a4aeb5b404f98dabcae438 GIT binary patch literal 3491 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 OuTv%l7GRvd2l_vCNY(fN literal 0 HcmV?d00001 diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-60x60@2x.png b/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..87cceab506f6fa5315a4aeb5b404f98dabcae438 GIT binary patch literal 3491 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 OuTv%l7GRvd2l_vCNY(fN literal 0 HcmV?d00001 diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-60x60@3x.png b/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..2a9551241e079fea4ef1d8f4d655151dd608249e GIT binary patch literal 5092 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 AM*si- literal 0 HcmV?d00001 diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-76x76@2x.png b/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6f6a36ad518d77573217e2666f5b280dbaf9a4 GIT binary patch literal 4437 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 literal 0 HcmV?d00001 diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-83.5x83.5@2x.png b/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ae3deec61896be612f7056bdda0239b884529149 GIT binary patch literal 4851 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 literal 0 HcmV?d00001 diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/ios.png b/application-client/openvidu-ios/Shared/Assets.xcassets/Icons/iOS.appiconset/ios.png new file mode 100644 index 0000000000000000000000000000000000000000..53d9d34f7c7b21766d5fc786e7cb5451ba2859d2 GIT binary patch literal 30601 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%0DiL%GwnbZ%AR--NoKw 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 literal 0 HcmV?d00001 diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Images/logo.imageset/logo 2.png b/application-client/openvidu-ios/Shared/Assets.xcassets/Images/logo.imageset/logo 2.png new file mode 100644 index 0000000000000000000000000000000000000000..bbe90369c516930ab8abddcfa786b204636473ee GIT binary patch literal 76402 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 z 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 Yt{8C9qhMKE5cm-YV`PD@HNal}Kh-TRE&u=k literal 0 HcmV?d00001 diff --git a/application-client/openvidu-ios/Shared/Assets.xcassets/Images/logo.imageset/logo.png b/application-client/openvidu-ios/Shared/Assets.xcassets/Images/logo.imageset/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7a73eee3d3d378c5762a8f5391bb55a0b725d762 GIT binary patch literal 17335 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 b6AM!H@{7`Ezq647Dq`?-^>bP0l+XkK&A#}Z literal 0 HcmV?d00001 diff --git a/application-client/openvidu-ios/Shared/Contexts/AppContext.swift b/application-client/openvidu-ios/Shared/Contexts/AppContext.swift new file mode 100644 index 00000000..8a2a025b --- /dev/null +++ b/application-client/openvidu-ios/Shared/Contexts/AppContext.swift @@ -0,0 +1,35 @@ +/* + * Copyright 2024 OpenVidu + * + * 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 Combine +import LiveKit +import SwiftUI + +// This class contains the logic to control behavior of the whole app. +final class AppContext: ObservableObject { + private let store: ValueStore + + @Published var applicationServerUrl: String = "" { + didSet { store.value.applicationServerUrl = applicationServerUrl } + } + + public init(store: ValueStore) { + self.store = store + + applicationServerUrl = store.value.applicationServerUrl + } + +} diff --git a/application-client/openvidu-ios/Shared/Contexts/RoomContext.swift b/application-client/openvidu-ios/Shared/Contexts/RoomContext.swift new file mode 100644 index 00000000..553e3d6c --- /dev/null +++ b/application-client/openvidu-ios/Shared/Contexts/RoomContext.swift @@ -0,0 +1,116 @@ +/* + * Copyright 2024 LiveKit + * + * 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 LiveKit +import SwiftUI + +// This class contains the logic to control behavior of the room. +final class RoomContext: ObservableObject { + let jsonEncoder = JSONEncoder() + let jsonDecoder = JSONDecoder() + + private let store: ValueStore + + // Used to show connection error dialog + @Published var shouldShowDisconnectReason: Bool = false + public var latestError: LiveKitError? + + public let room = Room() + + @Published var livekitUrl: String = "" { + didSet { store.value.livekitUrl = livekitUrl } + } + + @Published var name: String = "" { + didSet { store.value.name = name } + } + + @Published var localParticipantName: String = "" { + didSet { store.value.localParticipantName = localParticipantName } + } + + @Published var token: String = "" { + didSet { store.value.token = token } + } + + @Published var textFieldString: String = "" + + var _connectTask: Task? + + public init(store: ValueStore) { + self.store = store + room.add(delegate: self) + + livekitUrl = store.value.livekitUrl + name = store.value.name + token = store.value.token + localParticipantName = store.value.localParticipantName + + #if os(iOS) + UIApplication.shared.isIdleTimerDisabled = true + #endif + } + + deinit { + #if os(iOS) + UIApplication.shared.isIdleTimerDisabled = false + #endif + print("RoomContext.deinit") + } + + func cancelConnect() { + _connectTask?.cancel() + } + + @MainActor + func connect() async throws -> Room { + + let connectTask = Task.detached { [weak self] in + guard let self else { return } + try await self.room.connect(url: self.livekitUrl,token: self.token) + } + + _connectTask = connectTask + try await connectTask.value + + return room + } + + func disconnect() async { + await room.disconnect() + } + +} + +extension RoomContext: RoomDelegate { + + func room(_ room: Room, didUpdateConnectionState connectionState: ConnectionState, from oldValue: ConnectionState) { + print("Did update connectionState \(oldValue) -> \(connectionState)") + + if case .disconnected = connectionState, + let error = room.disconnectError, + error.type != .cancelled + { + latestError = room.disconnectError + + Task.detached { @MainActor [weak self] in + guard let self else { return } + self.shouldShowDisconnectReason = true + } + } + } + +} diff --git a/application-client/openvidu-ios/Shared/Custom.swift b/application-client/openvidu-ios/Shared/Custom.swift new file mode 100644 index 00000000..ddf30f49 --- /dev/null +++ b/application-client/openvidu-ios/Shared/Custom.swift @@ -0,0 +1,114 @@ +/* + * Copyright 2024 LiveKit + * + * 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 SwiftUI + +extension Color { + static let ovYellow = Color("OVYellow") + static let ovBlue = Color("OVBlue") + static let ovGray = Color("OVGray") + static let ovGray2 = Color("OVGray2") +} + +struct LazyView: View { + let build: () -> Content + init(_ build: @autoclosure @escaping () -> Content) { + self.build = build + } + + var body: Content { + build() + } +} + +// Default button style for this example +struct LKButton: View { + let title: String + let action: () -> Void + + var body: some View { + Button(action: action, + label: { + Text(title.uppercased()) + .fontWeight(.bold) + .padding(.horizontal, 12) + .padding(.vertical, 10) + }) + .background(Color.ovBlue) + .cornerRadius(8) + } +} + +#if os(iOS) + extension LKTextField.`Type` { + func toiOSType() -> UIKeyboardType { + switch self { + case .URL: return .URL + case .ascii: return .asciiCapable + default: return .default + } + } + } +#endif + +#if os(macOS) + // Avoid showing focus border around textfield for macOS + extension NSTextField { + override open var focusRingType: NSFocusRingType { + get { .none } + set {} + } + } +#endif + +struct LKTextField: View { + enum `Type` { + case `default` + case URL + case ascii + case secret + } + + let title: String + @Binding var text: String + var type: Type = .default + + var body: some View { + VStack(alignment: .leading, spacing: 10.0) { + Text(title) + .fontWeight(.bold) + + Group { + if type == .secret { + SecureField("", text: $text) + } else { + TextField("", text: $text) + } + } + .textFieldStyle(.plain) + .disableAutocorrection(true) + .padding() + .overlay(RoundedRectangle(cornerRadius: 10.0) + .strokeBorder(Color.white.opacity(0.3), + style: StrokeStyle(lineWidth: 1.0))) + #if os(iOS) + .autocapitalization(.none) + .keyboardType(type.toiOSType()) + #endif + + }.frame(maxWidth: .infinity) + } +} diff --git a/application-client/openvidu-ios/Shared/OpenViduApp.swift b/application-client/openvidu-ios/Shared/OpenViduApp.swift new file mode 100644 index 00000000..eb4dbb36 --- /dev/null +++ b/application-client/openvidu-ios/Shared/OpenViduApp.swift @@ -0,0 +1,188 @@ +/* + * Copyright 2024 LiveKit + * + * 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 KeychainAccess +import LiveKit +import Logging +import SwiftUI + +let sync = ValueStore(store: Keychain(service: "io.openvidu.ios"), + key: "preferences", + default: Preferences()) + +struct RoomSwitchView: View { + @EnvironmentObject var appCtx: AppContext + @EnvironmentObject var roomCtx: RoomContext + @EnvironmentObject var room: Room + + var shouldShowRoomView: Bool { + room.connectionState == .connected || room.connectionState == .reconnecting + } + + var shouldShowConfigureUrlsView: Bool { + appCtx.applicationServerUrl.isEmpty || roomCtx.livekitUrl.isEmpty + + } + + func computeTitle() -> String { + if shouldShowRoomView { + var elements: [String] = [] + if let roomName = room.name { + elements.append(roomName) + } + if let localParticipantName = room.localParticipant.name { + elements.append(localParticipantName) + } + if let localParticipantIdentity = room.localParticipant.identity { + elements.append(String(describing: localParticipantIdentity)) + } + return elements.joined(separator: " ") + } + + return "OpenVidu" + } + + var body: some View { + ZStack { + Color.black + .ignoresSafeArea() + + if shouldShowRoomView { + RoomView() + } else { + if shouldShowConfigureUrlsView { + ConfigureUrlsView() + } else { + ConnectView() + } + } + } + .navigationTitle(computeTitle()) + } +} + +// Attaches RoomContext and Room to the environment +struct RoomContextView: View { + @EnvironmentObject var appCtx: AppContext + @StateObject var roomCtx = RoomContext(store: sync) + + var body: some View { + RoomSwitchView() + .environmentObject(roomCtx) + .environmentObject(roomCtx.room) + .environment(\.colorScheme, .dark) + .foregroundColor(Color.white) + .onDisappear { + print("\(String(describing: type(of: self))) onDisappear") + Task { + await roomCtx.disconnect() + } + } + .onOpenURL(perform: { url in + + guard let urlComponent = URLComponents(url: url, resolvingAgainstBaseURL: false) else { return } + guard let host = url.host else { return } + + let secureValue = urlComponent.queryItems?.first(where: { $0.name == "secure" })?.value?.lowercased() + let secure = ["true", "1"].contains { $0 == secureValue } + + let tokenValue = urlComponent.queryItems?.first(where: { $0.name == "token" })?.value ?? "" + + var builder = URLComponents() + builder.scheme = secure ? "wss" : "ws" + builder.host = host + builder.port = url.port + + guard let builtUrl = builder.url?.absoluteString else { return } + + print("built URL: \(builtUrl), token: \(tokenValue)") + + Task { @MainActor in + roomCtx.livekitUrl = builtUrl + roomCtx.token = tokenValue + if !roomCtx.token.isEmpty { + try await roomCtx.connect() + } + } + }) + } +} + +extension Decimal { + mutating func round(_ scale: Int, _ roundingMode: NSDecimalNumber.RoundingMode) { + var localCopy = self + NSDecimalRound(&self, &localCopy, scale, roundingMode) + } + + func rounded(_ scale: Int, _ roundingMode: NSDecimalNumber.RoundingMode) -> Decimal { + var result = Decimal() + var localCopy = self + NSDecimalRound(&result, &localCopy, scale, roundingMode) + return result + } + + func remainder(of divisor: Decimal) -> Decimal { + let s = self as NSDecimalNumber + let d = divisor as NSDecimalNumber + let b = NSDecimalNumberHandler(roundingMode: .down, + scale: 0, + raiseOnExactness: false, + raiseOnOverflow: false, + raiseOnUnderflow: false, + raiseOnDivideByZero: false) + let quotient = s.dividing(by: d, withBehavior: b) + + let subtractAmount = quotient.multiplying(by: d) + return s.subtracting(subtractAmount) as Decimal + } +} + +@main +struct OpenViduApp: App { + @StateObject var appCtx = AppContext(store: sync) + + func nearestSafeScale(for target: Int, scale: Double) -> Decimal { + let p = Decimal(sign: .plus, exponent: -3, significand: 1) + let t = Decimal(target) + var s = Decimal(scale).rounded(3, .down) + + while (t * s / 2).remainder(of: 2) != 0 { + s = s + p + } + + return s + } + + init() { + LoggingSystem.bootstrap { + var logHandler = StreamLogHandler.standardOutput(label: $0) + logHandler.logLevel = .debug + return logHandler + } + } + + var body: some Scene { + WindowGroup { + RoomContextView() + .environmentObject(appCtx) + } + .handlesExternalEvents(matching: Set(arrayLiteral: "*")) + #if os(macOS) + .windowStyle(.hiddenTitleBar) + .windowToolbarStyle(.unifiedCompact) + #endif + } +} diff --git a/application-client/openvidu-ios/Shared/Support/Binding+OptionSet.swift b/application-client/openvidu-ios/Shared/Support/Binding+OptionSet.swift new file mode 100644 index 00000000..583aa156 --- /dev/null +++ b/application-client/openvidu-ios/Shared/Support/Binding+OptionSet.swift @@ -0,0 +1,47 @@ +/* + * Copyright 2024 LiveKit + * + * 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 SwiftUI + +extension Binding where Value: OptionSet, Value == Value.Element { + func bindedValue(_ options: Value) -> Bool { + wrappedValue.contains(options) + } + + func bind( + _ options: Value, + animate: Bool = false + ) -> Binding { + .init { () -> Bool in + self.wrappedValue.contains(options) + } set: { newValue in + let body = { + if newValue { + self.wrappedValue.insert(options) + } else { + self.wrappedValue.remove(options) + } + } + guard animate else { + body() + return + } + withAnimation { + body() + } + } + } +} diff --git a/application-client/openvidu-ios/Shared/Support/Bundle.swift b/application-client/openvidu-ios/Shared/Support/Bundle.swift new file mode 100644 index 00000000..299f86c2 --- /dev/null +++ b/application-client/openvidu-ios/Shared/Support/Bundle.swift @@ -0,0 +1,30 @@ +/* + * Copyright 2024 LiveKit + * + * 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 + +public extension Bundle { + var appName: String { getInfo("CFBundleName") } + var displayName: String { getInfo("CFBundleDisplayName") } + var language: String { getInfo("CFBundleDevelopmentRegion") } + var identifier: String { getInfo("CFBundleIdentifier") } + + var appBuild: String { getInfo("CFBundleVersion") } + var appVersionLong: String { getInfo("CFBundleShortVersionString") } + var appVersionShort: String { getInfo("CFBundleShortVersion") } + + private func getInfo(_ str: String) -> String { infoDictionary?[str] as? String ?? "⚠️" } +} diff --git a/application-client/openvidu-ios/Shared/Support/Participant+Helpers.swift b/application-client/openvidu-ios/Shared/Support/Participant+Helpers.swift new file mode 100644 index 00000000..44645433 --- /dev/null +++ b/application-client/openvidu-ios/Shared/Support/Participant+Helpers.swift @@ -0,0 +1,28 @@ +/* + * Copyright 2024 LiveKit + * + * 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 LiveKit + +public extension Participant { + var mainVideoPublication: TrackPublication? { + firstCameraPublication + } + + var mainVideoTrack: VideoTrack? { + firstCameraVideoTrack + } + +} diff --git a/application-client/openvidu-ios/Shared/Support/SecureStore.swift b/application-client/openvidu-ios/Shared/Support/SecureStore.swift new file mode 100644 index 00000000..f076f1a2 --- /dev/null +++ b/application-client/openvidu-ios/Shared/Support/SecureStore.swift @@ -0,0 +1,87 @@ +/* + * Copyright 2024 LiveKit + * + * 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 Combine +import KeychainAccess +import LiveKit +import SwiftUI + +struct Preferences: Codable, Equatable { + // General + var applicationServerUrl = "" + + // Room + var livekitUrl = "" + var name = "" + var token = "" + var localParticipantName = "" + +} + +let encoder = JSONEncoder() +let decoder = JSONDecoder() + +class ValueStore: ObservableObject { + private let store: Keychain + private let key: String + private let message = "" + private weak var timer: Timer? + + public var value: T { + didSet { + guard oldValue != value else { return } + lazySync() + } + } + + private var storeWithOptions: Keychain { + store + .accessibility(.whenUnlocked) + .synchronizable(true) + } + + public init(store: Keychain, key: String, default: T) { + self.store = store + self.key = key + value = `default` + + if let data = try? storeWithOptions.getData(key), + let result = try? decoder.decode(T.self, from: data) + { + value = result + } + } + + deinit { + timer?.invalidate() + } + + public func lazySync() { + timer?.invalidate() + timer = Timer.scheduledTimer(withTimeInterval: 1, + repeats: false, + block: { _ in self.sync() }) + } + + public func sync() { + do { + let data = try encoder.encode(value) + try storeWithOptions.set(data, key: key) + } catch { + print("Failed to write in Keychain, error: \(error)") + } + } +} diff --git a/application-client/openvidu-ios/Shared/Support/TokenModel.swift b/application-client/openvidu-ios/Shared/Support/TokenModel.swift new file mode 100644 index 00000000..f21f30a6 --- /dev/null +++ b/application-client/openvidu-ios/Shared/Support/TokenModel.swift @@ -0,0 +1,27 @@ +/* + * Copyright 2024 OpenVidu + * + * 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 + +struct TokenRequest: Codable { + let roomName: String + let participantName: String +} + +struct TokenResponse: Codable { + let token: String +} diff --git a/application-client/openvidu-ios/Shared/Utils/HttpClient.swift b/application-client/openvidu-ios/Shared/Utils/HttpClient.swift new file mode 100644 index 00000000..5cf72ffa --- /dev/null +++ b/application-client/openvidu-ios/Shared/Utils/HttpClient.swift @@ -0,0 +1,55 @@ +/* + * Copyright 2024 OpenVidu + * + * 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 HTTPClient { + + func getToken(applicationServerUrl: String, roomName: String, participantName: String) async throws -> String { + guard let url = URL(string: "\(applicationServerUrl)/token") else { + throw URLError(.badURL) + } + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + + let tokenRequest = TokenRequest(roomName: roomName, participantName: participantName) + let jsonData = try JSONEncoder().encode(tokenRequest) + request.httpBody = jsonData + + do { + let (data, response) = try await URLSession.shared.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse else { + throw URLError(.badServerResponse) + } + + guard httpResponse.statusCode == 200 else { + let errorResponse = try? JSONDecoder().decode([String: String].self, from: data) + let errorMessage = errorResponse?["errorMessage"] ?? "Unknown error" + throw NSError(domain: "HTTPServiceError", code: httpResponse.statusCode, userInfo: [NSLocalizedDescriptionKey: "HTTP Error: \(errorMessage)"]) + } + + let tokenResponse = try JSONDecoder().decode(TokenResponse.self, from: data) + return tokenResponse.token + + } catch { + print("Error occurred: \(error.localizedDescription)") + throw error + } + } +} diff --git a/application-client/openvidu-ios/Shared/Views/ConfigureUrlsView.swift b/application-client/openvidu-ios/Shared/Views/ConfigureUrlsView.swift new file mode 100644 index 00000000..ad4aeead --- /dev/null +++ b/application-client/openvidu-ios/Shared/Views/ConfigureUrlsView.swift @@ -0,0 +1,95 @@ +/* + * Copyright 2024 OpenVidu + * + * 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 +import LiveKit +import SFSafeSymbols +import SwiftUI + +struct ConfigureUrlsView: View { + + @EnvironmentObject var appCtx: AppContext + @EnvironmentObject var roomCtx: RoomContext + + @State private var applicationServerUrl: String = "" + @State private var livekitUrl: String = "" + @State private var errorMessage: String = "" + + var body: some View { + GeometryReader { geometry in + Color.ovGray + .ignoresSafeArea() + ScrollView { + VStack(alignment: .center, spacing: 40.0) { + + Text("Configure the LiveKit URL and the Application Server URL before connecting to the Room") + + VStack(spacing: 15) { + LKTextField(title: "Application Server URL", text: $applicationServerUrl, type: .URL) + LKTextField(title: "LiveKit URL", text: $livekitUrl, type: .URL) + } + .frame(maxWidth: 350) + + + HStack(alignment: .center) { + Spacer() + + LKButton(title: "Save") { + Task.detached { @MainActor in + let isApplicationServerValid = isValidURL(self.applicationServerUrl) + let isLivekitUrlValid = isValidURL(self.livekitUrl) + + if !isApplicationServerValid || !isLivekitUrlValid { + print("Invalid URLs") + errorMessage = "There was an error with the url values" + return + } + appCtx.applicationServerUrl = self.applicationServerUrl + roomCtx.livekitUrl = self.livekitUrl + errorMessage = "" + } + } + + Spacer() + } + + Text(errorMessage) + .foregroundColor(.red) + + + } + .padding() + .frame(width: geometry.size.width) // Make the scroll view full-width + .frame(minHeight: geometry.size.height) // Set the content’s min height to the parent + } + } +#if os(macOS) + .frame(minWidth: 500, minHeight: 500) +#endif + .alert(isPresented: $roomCtx.shouldShowDisconnectReason) { + Alert(title: Text("Disconnected"), + message: Text("Reason: " + String(describing: roomCtx.latestError))) + } + } + + func isValidURL(_ urlString: String) -> Bool { + guard let url = URL(string: urlString), + let scheme = url.scheme else { + return false + } + return ["http", "https", "ws", "wss"].contains(scheme) + } +} diff --git a/application-client/openvidu-ios/Shared/Views/ConnectView.swift b/application-client/openvidu-ios/Shared/Views/ConnectView.swift new file mode 100644 index 00000000..a2c98877 --- /dev/null +++ b/application-client/openvidu-ios/Shared/Views/ConnectView.swift @@ -0,0 +1,125 @@ +/* + * Copyright 2024 LiveKit + * + * 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 +import LiveKit +import SFSafeSymbols +import SwiftUI + +struct ConnectView: View { + @EnvironmentObject var appCtx: AppContext + @EnvironmentObject var roomCtx: RoomContext + @EnvironmentObject var room: Room + + var httpService = HTTPClient() + + + var body: some View { + GeometryReader { geometry in + Color.ovGray + .ignoresSafeArea() + ScrollView { + VStack(alignment: .center, spacing: 40.0) { + VStack(spacing: 10) { + Image("logo") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(height: 50) + .padding(.bottom, 10) + } + + VStack(spacing: 15) { + LKTextField(title: "Participant Name", text: $roomCtx.localParticipantName, type: .ascii) + LKTextField(title: "Room Name", text: $roomCtx.name, type: .ascii) + } + .frame(maxWidth: 350) + + if case .connecting = room.connectionState { + HStack(alignment: .center) { + ProgressView() + + LKButton(title: "Cancel") { + roomCtx.cancelConnect() + } + } + } else { + HStack(alignment: .center) { + + + Spacer() + + LKButton(title: "Reset urls") { + Task.detached { @MainActor in + roomCtx.livekitUrl = "" + appCtx.applicationServerUrl = "" + } + } + + + LKButton(title: "Connect") { + Task.detached { @MainActor in + await connectToRoom() + } + } + + Spacer() + } + } + } + .padding() + .frame(width: geometry.size.width) // Make the scroll view full-width + .frame(minHeight: geometry.size.height) // Set the content’s min height to the parent + } + } + #if os(macOS) + .frame(minWidth: 500, minHeight: 500) + #endif + .alert(isPresented: $roomCtx.shouldShowDisconnectReason) { + Alert(title: Text("Disconnected"), + message: Text("Reason: " + String(describing: roomCtx.latestError))) + } + } + + func connectToRoom() async { + let livekitUrl = roomCtx.livekitUrl + let roomName = roomCtx.name + let participantName = roomCtx.localParticipantName + let applicationServerUrl = appCtx.applicationServerUrl + + guard !livekitUrl.isEmpty, !roomName.isEmpty else { + print("LiveKit URL or room name is empty") + return + } + + do { + let token = try await httpService.getToken(applicationServerUrl: applicationServerUrl, roomName: roomName, participantName: participantName) + print("Token received: \(token)") + + if token.isEmpty { + print("Received empty token") + return + } + + roomCtx.token = token + print("Connecting to room...") + try await roomCtx.connect() + print("Room connected") + } catch { + print("Failed to get token: \(error.localizedDescription)") + } + } + +} diff --git a/application-client/openvidu-ios/Shared/Views/ParticipantView.swift b/application-client/openvidu-ios/Shared/Views/ParticipantView.swift new file mode 100644 index 00000000..af048bed --- /dev/null +++ b/application-client/openvidu-ios/Shared/Views/ParticipantView.swift @@ -0,0 +1,103 @@ +/* + * Copyright 2024 LiveKit + * + * 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 LiveKit +import SFSafeSymbols +import SwiftUI + +struct ParticipantView: View { + @ObservedObject var participant: Participant + @EnvironmentObject var appCtx: AppContext + + var videoViewMode: VideoView.LayoutMode = .fill + + @State private var isRendering: Bool = false + + func bgView(systemSymbol: SFSymbol, geometry: GeometryProxy) -> some View { + Image(systemSymbol: systemSymbol) + .resizable() + .aspectRatio(contentMode: .fit) + .foregroundColor(Color.ovGray2) + .frame(width: min(geometry.size.width, geometry.size.height) * 0.3) + .frame( + maxWidth: .infinity, + maxHeight: .infinity + ) + } + + var body: some View { + GeometryReader { geometry in + + ZStack(alignment: .bottom) { + // Background color + Color.ovGray + .ignoresSafeArea() + + // VideoView for the Participant + if let publication = participant.mainVideoPublication, + !publication.isMuted, + let track = publication.track as? VideoTrack + { + ZStack(alignment: .topLeading) { + SwiftUIVideoView(track, + layoutMode: videoViewMode, + isRendering: $isRendering) + + if !isRendering { + ProgressView().progressViewStyle(CircularProgressViewStyle()) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center) + } + + // Display participant name in the top leading corner + if let participantName = participant.identity?.description { + Text(participantName) // Assuming `participant` has a `name` property + .font(.headline) + .foregroundColor(.white) + .padding(8) + .background(Color.black.opacity(0.6)) + .cornerRadius(8) + .padding([.top, .leading], 16) // Adjust padding as needed + } + + } + } else if let publication = participant.mainVideoPublication as? RemoteTrackPublication, + case .notAllowed = publication.subscriptionState + { + // Show no permission icon + bgView(systemSymbol: .exclamationmarkCircle, geometry: geometry) + } else { + // Show no camera icon + ZStack(alignment: .topLeading) { + // Display participant name in the top leading corner + bgView(systemSymbol: .videoSlashFill, geometry: geometry) + + if let participantName = participant.identity?.description { + Text(participantName) // Assuming `participant` has a `name` property + .font(.headline) + .foregroundColor(.white) + .padding(8) + .background(Color.black.opacity(0.6)) + .cornerRadius(8) + .padding([.top, .leading], 16) // Adjust padding as needed + } + } + + } + } + .cornerRadius(8) + } + } +} diff --git a/application-client/openvidu-ios/Shared/Views/RoomView.swift b/application-client/openvidu-ios/Shared/Views/RoomView.swift new file mode 100644 index 00000000..fd87aa18 --- /dev/null +++ b/application-client/openvidu-ios/Shared/Views/RoomView.swift @@ -0,0 +1,385 @@ +/* + * Copyright 2024 LiveKit + * + * 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 LiveKit +import SFSafeSymbols +import SwiftUI + +#if !os(macOS) +let adaptiveMin = 170.0 +let toolbarPlacement: ToolbarItemPlacement = .bottomBar +#else +let adaptiveMin = 300.0 +let toolbarPlacement: ToolbarItemPlacement = .primaryAction +#endif + +extension CIImage { + // helper to create a `CIImage` for both platforms + convenience init(named name: String) { +#if !os(macOS) + self.init(cgImage: UIImage(named: name)!.cgImage!) +#else + self.init(data: NSImage(named: name)!.tiffRepresentation!)! +#endif + } +} + +#if os(macOS) +// keeps weak reference to NSWindow +class WindowAccess: ObservableObject { + private weak var window: NSWindow? + + deinit { + // reset changed properties + DispatchQueue.main.async { [weak window] in + window?.level = .normal + } + } + + @Published public var pinned: Bool = false { + didSet { + guard oldValue != pinned else { return } + level = pinned ? .floating : .normal + } + } + + private var level: NSWindow.Level { + get { window?.level ?? .normal } + set { + Task { @MainActor in + window?.level = newValue + objectWillChange.send() + } + } + } + + public func set(window: NSWindow?) { + self.window = window + Task { @MainActor in + objectWillChange.send() + } + } +} +#endif + +struct RoomView: View { + @EnvironmentObject var appCtx: AppContext + @EnvironmentObject var roomCtx: RoomContext + @EnvironmentObject var room: Room + + @State var isCameraPublishingBusy = false + @State var isMicrophonePublishingBusy = false + @State var isScreenSharePublishingBusy = false + + @State private var screenPickerPresented = false + @State private var publishOptionsPickerPresented = false + + @State private var cameraPublishOptions = VideoPublishOptions() + +#if os(macOS) + @ObservedObject private var windowAccess = WindowAccess() +#endif + + func sortedParticipants() -> [Participant] { + room.allParticipants.values.sorted { p1, p2 in + if p1 is LocalParticipant { return true } + if p2 is LocalParticipant { return false } + return (p1.joinedAt ?? Date()) < (p2.joinedAt ?? Date()) + } + } + + func content(geometry: GeometryProxy) -> some View { + VStack { + + HStack { + // Title Text + Text(roomCtx.name) + .font(.title2) + .fontWeight(.bold) + .multilineTextAlignment(.center) + .foregroundColor(.white) + .padding() + + Spacer() // Pushes the button to the right + Button(action: { + Task { + await roomCtx.disconnect() + } + }, label: { + HStack { + Image(systemSymbol: .xmarkCircleFill) + .renderingMode(.original) + Text("Leave Room") + .font(.headline) + .fontWeight(.semibold) + } + .padding(8) + .background(Color.red.opacity(0.8)) // Background color for the button + .foregroundColor(.white) // Text color + .cornerRadius(8) + }) + //.padding() + } + + // Re-connecting Status + if case .connecting = room.connectionState { + Text("Re-connecting...") + .font(.subheadline) + .foregroundColor(.white) + .padding() + .background(Color.black.opacity(0.6)) + .cornerRadius(8) + .padding(.bottom) + } + // Participant layout + HorVStack(axis: geometry.isTall ? .vertical : .horizontal, spacing: 5) { + Group { + ParticipantLayout(sortedParticipants(), spacing: 5) { participant in + ParticipantView(participant: participant, videoViewMode: .fill) + } + } + .frame( + minWidth: 0, + maxWidth: .infinity, + minHeight: 0, + maxHeight: .infinity + ) + } + .padding(5) + } + } + + var body: some View { + GeometryReader { geometry in + content(geometry: geometry) + } + .toolbar { + ToolbarItemGroup(placement: toolbarPlacement) { + HStack { + Spacer() + + let isMicrophoneEnabled = room.localParticipant.isMicrophoneEnabled() + let isCameraEnabled = room.localParticipant.isCameraEnabled() + + Button(action: { + Task { + isCameraPublishingBusy = true + defer { Task { @MainActor in isCameraPublishingBusy = false } } + do { + try await room.localParticipant.setCamera(enabled: !isCameraEnabled) + } catch { + print("Failed to toggle camera: \(error)") + } + } + }, label: { + Image(systemSymbol: isCameraEnabled ? .videoFill : .videoSlashFill) + .renderingMode(isCameraEnabled ? .original : .template) + }) + .disabled(isCameraPublishingBusy) + + + Button(action: { + Task { + isMicrophonePublishingBusy = true + defer { Task { @MainActor in isMicrophonePublishingBusy = false } } + do { + try await room.localParticipant.setMicrophone(enabled: !isMicrophoneEnabled) + } catch { + print("Failed to toggle microphone: \(error)") + } + } + }, + label: { + Image(systemSymbol: isMicrophoneEnabled ? .micFill : .micSlashFill) + .renderingMode(isMicrophoneEnabled ? .original : .template) + }) + .disabled(isMicrophonePublishingBusy) + + Spacer() + } + } + } + } + +} + +struct ParticipantLayout: View { + let views: [AnyView] + let spacing: CGFloat + + init( + _ data: Data, + id: KeyPath = \.self, + spacing: CGFloat, + @ViewBuilder content: @escaping (Data.Element) -> Content + ) { + self.spacing = spacing + views = data.map { AnyView(content($0[keyPath: id])) } + } + + func computeColumn(with geometry: GeometryProxy) -> (x: Int, y: Int) { + let sqr = Double(views.count).squareRoot() + let r: [Int] = [Int(sqr.rounded()), Int(sqr.rounded(.up))] + let c = geometry.isTall ? r : r.reversed() + return (x: c[0], y: c[1]) + } + + func grid(axis: Axis, geometry: GeometryProxy) -> some View { + ScrollView([axis == .vertical ? .vertical : .horizontal]) { + HorVGrid(axis: axis, columns: [GridItem(.flexible())], spacing: spacing) { + ForEach(0 ..< views.count, id: \.self) { i in + views[i] + .aspectRatio(1, contentMode: .fill) + } + } + .padding(axis == .horizontal ? [.leading, .trailing] : [.top, .bottom], + max(0, ((axis == .horizontal ? geometry.size.width : geometry.size.height) + - ((axis == .horizontal ? geometry.size.height : geometry.size.width) * CGFloat(views.count)) - (spacing * CGFloat(views.count - 1))) / 2)) + } + } + + var body: some View { + GeometryReader { geometry in + if views.isEmpty { + EmptyView() + } else if geometry.size.width <= 300 { + grid(axis: .vertical, geometry: geometry) + } else if geometry.size.height <= 300 { + grid(axis: .horizontal, geometry: geometry) + } else { + let verticalWhenTall: Axis = geometry.isTall ? .vertical : .horizontal + let horizontalWhenTall: Axis = geometry.isTall ? .horizontal : .vertical + + switch views.count { + // simply return first view + case 1: views[0] + case 3: HorVStack(axis: verticalWhenTall, spacing: spacing) { + views[0] + HorVStack(axis: horizontalWhenTall, spacing: spacing) { + views[1] + views[2] + } + } + case 5: HorVStack(axis: verticalWhenTall, spacing: spacing) { + views[0] + if geometry.isTall { + HStack(spacing: spacing) { + views[1] + views[2] + } + HStack(spacing: spacing) { + views[3] + views[4] + } + } else { + VStack(spacing: spacing) { + views[1] + views[3] + } + VStack(spacing: spacing) { + views[2] + views[4] + } + } + } + default: + let c = computeColumn(with: geometry) + VStack(spacing: spacing) { + ForEach(0 ... (c.y - 1), id: \.self) { y in + HStack(spacing: spacing) { + ForEach(0 ... (c.x - 1), id: \.self) { x in + let index = (y * c.x) + x + if index < views.count { + views[index] + } + } + } + } + } + } + } + } + } +} + +struct HorVStack: View { + let axis: Axis + let horizontalAlignment: HorizontalAlignment + let verticalAlignment: VerticalAlignment + let spacing: CGFloat? + let content: () -> Content + + init(axis: Axis = .horizontal, + horizontalAlignment: HorizontalAlignment = .center, + verticalAlignment: VerticalAlignment = .center, + spacing: CGFloat? = nil, + @ViewBuilder content: @escaping () -> Content) + { + self.axis = axis + self.horizontalAlignment = horizontalAlignment + self.verticalAlignment = verticalAlignment + self.spacing = spacing + self.content = content + } + + var body: some View { + Group { + if axis == .vertical { + VStack(alignment: horizontalAlignment, spacing: spacing, content: content) + } else { + HStack(alignment: verticalAlignment, spacing: spacing, content: content) + } + } + } +} + +struct HorVGrid: View { + let axis: Axis + let spacing: CGFloat? + let content: () -> Content + let columns: [GridItem] + + init(axis: Axis = .horizontal, + columns: [GridItem], + spacing: CGFloat? = nil, + @ViewBuilder content: @escaping () -> Content) + { + self.axis = axis + self.spacing = spacing + self.columns = columns + self.content = content + } + + var body: some View { + Group { + if axis == .vertical { + LazyVGrid(columns: columns, spacing: spacing, content: content) + } else { + LazyHGrid(rows: columns, spacing: spacing, content: content) + } + } + } +} + +extension GeometryProxy { + public var isTall: Bool { + size.height > size.width + } + + var isWide: Bool { + size.width > size.height + } +} diff --git a/application-client/openvidu-ios/iOS/Info.plist b/application-client/openvidu-ios/iOS/Info.plist new file mode 100644 index 00000000..5f756d0e --- /dev/null +++ b/application-client/openvidu-ios/iOS/Info.plist @@ -0,0 +1,77 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + LSApplicationCategoryType + public.app-category.video + CFBundleDisplayName + $(DISPLAY_NAME) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleURLTypes + + + CFBundleURLSchemes + + livekit + + + + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + ITSAppUsesNonExemptEncryption + + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + NSCameraUsageDescription + uses your camera for video chat + NSFaceIDUsageDescription + Keychain is used to store all preferences. + NSMicrophoneUsageDescription + uses your microphone for video chat + RTCAppGroupIdentifier + group.io.lopenvidu.ios + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + + UIApplicationSupportsIndirectInputEvents + + UIBackgroundModes + + audio + voip + + UILaunchScreen + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + + + diff --git a/application-client/openvidu-ios/iOS/iOS.entitlements b/application-client/openvidu-ios/iOS/iOS.entitlements new file mode 100644 index 00000000..07d22941 --- /dev/null +++ b/application-client/openvidu-ios/iOS/iOS.entitlements @@ -0,0 +1,20 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.device.audio-input + + com.apple.security.device.camera + + com.apple.security.network.client + + com.apple.security.network.server + + keychain-access-groups + + $(AppIdentifierPrefix)keychain-group.io.lopenvidu.ios + + +