├── OnlineEventApp ├── OnlineEventApp.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── cardoso.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── cardoso.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist ├── OnlineEventApp.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── xcuserdata │ │ └── cardoso.xcuserdatad │ │ └── UserInterfaceState.xcuserstate ├── OnlineEventApp │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ ├── Join │ │ ├── JoinViewController+Constraints.swift │ │ ├── JoinViewController+Handlers.swift │ │ ├── JoinViewController+Views.swift │ │ └── JoinViewController.swift │ ├── Room │ │ ├── RoomViewController+Call.swift │ │ ├── RoomViewController+Chat.swift │ │ ├── RoomViewController+Handlers.swift │ │ ├── RoomViewController+Views.swift │ │ └── RoomViewController.swift │ ├── SceneDelegate.swift │ └── String+Random.swift ├── Podfile └── Podfile.lock ├── README.md └── meta ├── .DS_Store └── speaker.png /OnlineEventApp/OnlineEventApp.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 51; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 8026B9A724BBF1EB00A6A194 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8026B9A624BBF1EB00A6A194 /* AppDelegate.swift */; }; 11 | 8026B9A924BBF1EB00A6A194 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8026B9A824BBF1EB00A6A194 /* SceneDelegate.swift */; }; 12 | 8026B9AB24BBF1EB00A6A194 /* JoinViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8026B9AA24BBF1EB00A6A194 /* JoinViewController.swift */; }; 13 | 8026B9AE24BBF1EB00A6A194 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8026B9AC24BBF1EB00A6A194 /* Main.storyboard */; }; 14 | 8026B9B024BBF1ED00A6A194 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8026B9AF24BBF1ED00A6A194 /* Assets.xcassets */; }; 15 | 8026B9B324BBF1ED00A6A194 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8026B9B124BBF1ED00A6A194 /* LaunchScreen.storyboard */; }; 16 | 8026B9BC24BBF66200A6A194 /* JoinViewController+Views.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8026B9BB24BBF66200A6A194 /* JoinViewController+Views.swift */; }; 17 | 8026B9BE24BBF67B00A6A194 /* JoinViewController+Constraints.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8026B9BD24BBF67B00A6A194 /* JoinViewController+Constraints.swift */; }; 18 | 8026B9C024BBF6AE00A6A194 /* JoinViewController+Handlers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8026B9BF24BBF6AE00A6A194 /* JoinViewController+Handlers.swift */; }; 19 | 8026B9C324BBF73D00A6A194 /* RoomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8026B9C224BBF73D00A6A194 /* RoomViewController.swift */; }; 20 | 8026B9C524BBF79000A6A194 /* String+Random.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8026B9C424BBF79000A6A194 /* String+Random.swift */; }; 21 | 8026B9C724BBF81700A6A194 /* RoomViewController+Chat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8026B9C624BBF81700A6A194 /* RoomViewController+Chat.swift */; }; 22 | 8026B9C924BBF83900A6A194 /* RoomViewController+Views.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8026B9C824BBF83900A6A194 /* RoomViewController+Views.swift */; }; 23 | 8026B9CB24BBF85A00A6A194 /* RoomViewController+Handlers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8026B9CA24BBF85A00A6A194 /* RoomViewController+Handlers.swift */; }; 24 | 8026B9CD24BBF88600A6A194 /* RoomViewController+Call.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8026B9CC24BBF88600A6A194 /* RoomViewController+Call.swift */; }; 25 | /* End PBXBuildFile section */ 26 | 27 | /* Begin PBXFileReference section */ 28 | 8026B9A324BBF1EB00A6A194 /* OnlineEventApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OnlineEventApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; 29 | 8026B9A624BBF1EB00A6A194 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 30 | 8026B9A824BBF1EB00A6A194 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 31 | 8026B9AA24BBF1EB00A6A194 /* JoinViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinViewController.swift; sourceTree = ""; }; 32 | 8026B9AD24BBF1EB00A6A194 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 33 | 8026B9AF24BBF1ED00A6A194 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 34 | 8026B9B224BBF1ED00A6A194 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 35 | 8026B9B424BBF1ED00A6A194 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 36 | 8026B9BB24BBF66200A6A194 /* JoinViewController+Views.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "JoinViewController+Views.swift"; sourceTree = ""; }; 37 | 8026B9BD24BBF67B00A6A194 /* JoinViewController+Constraints.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "JoinViewController+Constraints.swift"; sourceTree = ""; }; 38 | 8026B9BF24BBF6AE00A6A194 /* JoinViewController+Handlers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "JoinViewController+Handlers.swift"; sourceTree = ""; }; 39 | 8026B9C224BBF73D00A6A194 /* RoomViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomViewController.swift; sourceTree = ""; }; 40 | 8026B9C424BBF79000A6A194 /* String+Random.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Random.swift"; sourceTree = ""; }; 41 | 8026B9C624BBF81700A6A194 /* RoomViewController+Chat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RoomViewController+Chat.swift"; sourceTree = ""; }; 42 | 8026B9C824BBF83900A6A194 /* RoomViewController+Views.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RoomViewController+Views.swift"; sourceTree = ""; }; 43 | 8026B9CA24BBF85A00A6A194 /* RoomViewController+Handlers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RoomViewController+Handlers.swift"; sourceTree = ""; }; 44 | 8026B9CC24BBF88600A6A194 /* RoomViewController+Call.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RoomViewController+Call.swift"; sourceTree = ""; }; 45 | /* End PBXFileReference section */ 46 | 47 | /* Begin PBXFrameworksBuildPhase section */ 48 | 8026B9A024BBF1EB00A6A194 /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | ); 53 | runOnlyForDeploymentPostprocessing = 0; 54 | }; 55 | /* End PBXFrameworksBuildPhase section */ 56 | 57 | /* Begin PBXGroup section */ 58 | 8026B99A24BBF1EB00A6A194 = { 59 | isa = PBXGroup; 60 | children = ( 61 | 8026B9A524BBF1EB00A6A194 /* OnlineEventApp */, 62 | 8026B9A424BBF1EB00A6A194 /* Products */, 63 | 93B9A50F7B761E4B8F7CAE2E /* Pods */, 64 | ); 65 | sourceTree = ""; 66 | }; 67 | 8026B9A424BBF1EB00A6A194 /* Products */ = { 68 | isa = PBXGroup; 69 | children = ( 70 | 8026B9A324BBF1EB00A6A194 /* OnlineEventApp.app */, 71 | ); 72 | name = Products; 73 | sourceTree = ""; 74 | }; 75 | 8026B9A524BBF1EB00A6A194 /* OnlineEventApp */ = { 76 | isa = PBXGroup; 77 | children = ( 78 | 8026B9A624BBF1EB00A6A194 /* AppDelegate.swift */, 79 | 8026B9A824BBF1EB00A6A194 /* SceneDelegate.swift */, 80 | 8026B9C424BBF79000A6A194 /* String+Random.swift */, 81 | 8026B9BA24BBF53E00A6A194 /* Join */, 82 | 8026B9C124BBF71400A6A194 /* Room */, 83 | 8026B9AC24BBF1EB00A6A194 /* Main.storyboard */, 84 | 8026B9AF24BBF1ED00A6A194 /* Assets.xcassets */, 85 | 8026B9B124BBF1ED00A6A194 /* LaunchScreen.storyboard */, 86 | 8026B9B424BBF1ED00A6A194 /* Info.plist */, 87 | ); 88 | path = OnlineEventApp; 89 | sourceTree = ""; 90 | }; 91 | 8026B9BA24BBF53E00A6A194 /* Join */ = { 92 | isa = PBXGroup; 93 | children = ( 94 | 8026B9AA24BBF1EB00A6A194 /* JoinViewController.swift */, 95 | 8026B9BB24BBF66200A6A194 /* JoinViewController+Views.swift */, 96 | 8026B9BD24BBF67B00A6A194 /* JoinViewController+Constraints.swift */, 97 | 8026B9BF24BBF6AE00A6A194 /* JoinViewController+Handlers.swift */, 98 | ); 99 | path = Join; 100 | sourceTree = ""; 101 | }; 102 | 8026B9C124BBF71400A6A194 /* Room */ = { 103 | isa = PBXGroup; 104 | children = ( 105 | 8026B9C224BBF73D00A6A194 /* RoomViewController.swift */, 106 | 8026B9C624BBF81700A6A194 /* RoomViewController+Chat.swift */, 107 | 8026B9C824BBF83900A6A194 /* RoomViewController+Views.swift */, 108 | 8026B9CA24BBF85A00A6A194 /* RoomViewController+Handlers.swift */, 109 | 8026B9CC24BBF88600A6A194 /* RoomViewController+Call.swift */, 110 | ); 111 | path = Room; 112 | sourceTree = ""; 113 | }; 114 | 93B9A50F7B761E4B8F7CAE2E /* Pods */ = { 115 | isa = PBXGroup; 116 | children = ( 117 | ); 118 | path = Pods; 119 | sourceTree = ""; 120 | }; 121 | /* End PBXGroup section */ 122 | 123 | /* Begin PBXNativeTarget section */ 124 | 8026B9A224BBF1EB00A6A194 /* OnlineEventApp */ = { 125 | isa = PBXNativeTarget; 126 | buildConfigurationList = 8026B9B724BBF1ED00A6A194 /* Build configuration list for PBXNativeTarget "OnlineEventApp" */; 127 | buildPhases = ( 128 | 8026B99F24BBF1EB00A6A194 /* Sources */, 129 | 8026B9A024BBF1EB00A6A194 /* Frameworks */, 130 | 8026B9A124BBF1EB00A6A194 /* Resources */, 131 | ); 132 | buildRules = ( 133 | ); 134 | dependencies = ( 135 | ); 136 | name = OnlineEventApp; 137 | productName = OnlineEventApp; 138 | productReference = 8026B9A324BBF1EB00A6A194 /* OnlineEventApp.app */; 139 | productType = "com.apple.product-type.application"; 140 | }; 141 | /* End PBXNativeTarget section */ 142 | 143 | /* Begin PBXProject section */ 144 | 8026B99B24BBF1EB00A6A194 /* Project object */ = { 145 | isa = PBXProject; 146 | attributes = { 147 | LastSwiftUpdateCheck = 1150; 148 | LastUpgradeCheck = 1150; 149 | ORGANIZATIONNAME = "Matheus Cardoso"; 150 | TargetAttributes = { 151 | 8026B9A224BBF1EB00A6A194 = { 152 | CreatedOnToolsVersion = 11.5; 153 | }; 154 | }; 155 | }; 156 | buildConfigurationList = 8026B99E24BBF1EB00A6A194 /* Build configuration list for PBXProject "OnlineEventApp" */; 157 | compatibilityVersion = "Xcode 9.3"; 158 | developmentRegion = en; 159 | hasScannedForEncodings = 0; 160 | knownRegions = ( 161 | en, 162 | Base, 163 | ); 164 | mainGroup = 8026B99A24BBF1EB00A6A194; 165 | productRefGroup = 8026B9A424BBF1EB00A6A194 /* Products */; 166 | projectDirPath = ""; 167 | projectRoot = ""; 168 | targets = ( 169 | 8026B9A224BBF1EB00A6A194 /* OnlineEventApp */, 170 | ); 171 | }; 172 | /* End PBXProject section */ 173 | 174 | /* Begin PBXResourcesBuildPhase section */ 175 | 8026B9A124BBF1EB00A6A194 /* Resources */ = { 176 | isa = PBXResourcesBuildPhase; 177 | buildActionMask = 2147483647; 178 | files = ( 179 | 8026B9B324BBF1ED00A6A194 /* LaunchScreen.storyboard in Resources */, 180 | 8026B9B024BBF1ED00A6A194 /* Assets.xcassets in Resources */, 181 | 8026B9AE24BBF1EB00A6A194 /* Main.storyboard in Resources */, 182 | ); 183 | runOnlyForDeploymentPostprocessing = 0; 184 | }; 185 | /* End PBXResourcesBuildPhase section */ 186 | 187 | /* Begin PBXSourcesBuildPhase section */ 188 | 8026B99F24BBF1EB00A6A194 /* Sources */ = { 189 | isa = PBXSourcesBuildPhase; 190 | buildActionMask = 2147483647; 191 | files = ( 192 | 8026B9C724BBF81700A6A194 /* RoomViewController+Chat.swift in Sources */, 193 | 8026B9AB24BBF1EB00A6A194 /* JoinViewController.swift in Sources */, 194 | 8026B9C524BBF79000A6A194 /* String+Random.swift in Sources */, 195 | 8026B9C024BBF6AE00A6A194 /* JoinViewController+Handlers.swift in Sources */, 196 | 8026B9CB24BBF85A00A6A194 /* RoomViewController+Handlers.swift in Sources */, 197 | 8026B9C924BBF83900A6A194 /* RoomViewController+Views.swift in Sources */, 198 | 8026B9C324BBF73D00A6A194 /* RoomViewController.swift in Sources */, 199 | 8026B9CD24BBF88600A6A194 /* RoomViewController+Call.swift in Sources */, 200 | 8026B9BC24BBF66200A6A194 /* JoinViewController+Views.swift in Sources */, 201 | 8026B9A724BBF1EB00A6A194 /* AppDelegate.swift in Sources */, 202 | 8026B9BE24BBF67B00A6A194 /* JoinViewController+Constraints.swift in Sources */, 203 | 8026B9A924BBF1EB00A6A194 /* SceneDelegate.swift in Sources */, 204 | ); 205 | runOnlyForDeploymentPostprocessing = 0; 206 | }; 207 | /* End PBXSourcesBuildPhase section */ 208 | 209 | /* Begin PBXVariantGroup section */ 210 | 8026B9AC24BBF1EB00A6A194 /* Main.storyboard */ = { 211 | isa = PBXVariantGroup; 212 | children = ( 213 | 8026B9AD24BBF1EB00A6A194 /* Base */, 214 | ); 215 | name = Main.storyboard; 216 | sourceTree = ""; 217 | }; 218 | 8026B9B124BBF1ED00A6A194 /* LaunchScreen.storyboard */ = { 219 | isa = PBXVariantGroup; 220 | children = ( 221 | 8026B9B224BBF1ED00A6A194 /* Base */, 222 | ); 223 | name = LaunchScreen.storyboard; 224 | sourceTree = ""; 225 | }; 226 | /* End PBXVariantGroup section */ 227 | 228 | /* Begin XCBuildConfiguration section */ 229 | 8026B9B524BBF1ED00A6A194 /* Debug */ = { 230 | isa = XCBuildConfiguration; 231 | buildSettings = { 232 | ALWAYS_SEARCH_USER_PATHS = NO; 233 | CLANG_ANALYZER_NONNULL = YES; 234 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 235 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 236 | CLANG_CXX_LIBRARY = "libc++"; 237 | CLANG_ENABLE_MODULES = YES; 238 | CLANG_ENABLE_OBJC_ARC = YES; 239 | CLANG_ENABLE_OBJC_WEAK = YES; 240 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 241 | CLANG_WARN_BOOL_CONVERSION = YES; 242 | CLANG_WARN_COMMA = YES; 243 | CLANG_WARN_CONSTANT_CONVERSION = YES; 244 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 245 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 246 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 247 | CLANG_WARN_EMPTY_BODY = YES; 248 | CLANG_WARN_ENUM_CONVERSION = YES; 249 | CLANG_WARN_INFINITE_RECURSION = YES; 250 | CLANG_WARN_INT_CONVERSION = YES; 251 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 252 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 253 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 254 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 255 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 256 | CLANG_WARN_STRICT_PROTOTYPES = YES; 257 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 258 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 259 | CLANG_WARN_UNREACHABLE_CODE = YES; 260 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 261 | COPY_PHASE_STRIP = NO; 262 | DEBUG_INFORMATION_FORMAT = dwarf; 263 | ENABLE_STRICT_OBJC_MSGSEND = YES; 264 | ENABLE_TESTABILITY = YES; 265 | GCC_C_LANGUAGE_STANDARD = gnu11; 266 | GCC_DYNAMIC_NO_PIC = NO; 267 | GCC_NO_COMMON_BLOCKS = YES; 268 | GCC_OPTIMIZATION_LEVEL = 0; 269 | GCC_PREPROCESSOR_DEFINITIONS = ( 270 | "DEBUG=1", 271 | "$(inherited)", 272 | ); 273 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 274 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 275 | GCC_WARN_UNDECLARED_SELECTOR = YES; 276 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 277 | GCC_WARN_UNUSED_FUNCTION = YES; 278 | GCC_WARN_UNUSED_VARIABLE = YES; 279 | IPHONEOS_DEPLOYMENT_TARGET = 13.5; 280 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 281 | MTL_FAST_MATH = YES; 282 | ONLY_ACTIVE_ARCH = YES; 283 | SDKROOT = iphoneos; 284 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 285 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 286 | }; 287 | name = Debug; 288 | }; 289 | 8026B9B624BBF1ED00A6A194 /* Release */ = { 290 | isa = XCBuildConfiguration; 291 | buildSettings = { 292 | ALWAYS_SEARCH_USER_PATHS = NO; 293 | CLANG_ANALYZER_NONNULL = YES; 294 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 295 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 296 | CLANG_CXX_LIBRARY = "libc++"; 297 | CLANG_ENABLE_MODULES = YES; 298 | CLANG_ENABLE_OBJC_ARC = YES; 299 | CLANG_ENABLE_OBJC_WEAK = YES; 300 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 301 | CLANG_WARN_BOOL_CONVERSION = YES; 302 | CLANG_WARN_COMMA = YES; 303 | CLANG_WARN_CONSTANT_CONVERSION = YES; 304 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 305 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 306 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 307 | CLANG_WARN_EMPTY_BODY = YES; 308 | CLANG_WARN_ENUM_CONVERSION = YES; 309 | CLANG_WARN_INFINITE_RECURSION = YES; 310 | CLANG_WARN_INT_CONVERSION = YES; 311 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 312 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 313 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 314 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 315 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 316 | CLANG_WARN_STRICT_PROTOTYPES = YES; 317 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 318 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 319 | CLANG_WARN_UNREACHABLE_CODE = YES; 320 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 321 | COPY_PHASE_STRIP = NO; 322 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 323 | ENABLE_NS_ASSERTIONS = NO; 324 | ENABLE_STRICT_OBJC_MSGSEND = YES; 325 | GCC_C_LANGUAGE_STANDARD = gnu11; 326 | GCC_NO_COMMON_BLOCKS = YES; 327 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 328 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 329 | GCC_WARN_UNDECLARED_SELECTOR = YES; 330 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 331 | GCC_WARN_UNUSED_FUNCTION = YES; 332 | GCC_WARN_UNUSED_VARIABLE = YES; 333 | IPHONEOS_DEPLOYMENT_TARGET = 13.5; 334 | MTL_ENABLE_DEBUG_INFO = NO; 335 | MTL_FAST_MATH = YES; 336 | SDKROOT = iphoneos; 337 | SWIFT_COMPILATION_MODE = wholemodule; 338 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 339 | VALIDATE_PRODUCT = YES; 340 | }; 341 | name = Release; 342 | }; 343 | 8026B9B824BBF1ED00A6A194 /* Debug */ = { 344 | isa = XCBuildConfiguration; 345 | buildSettings = { 346 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 347 | CODE_SIGN_STYLE = Automatic; 348 | DEVELOPMENT_TEAM = FWD9V5VYJ2; 349 | INFOPLIST_FILE = OnlineEventApp/Info.plist; 350 | LD_RUNPATH_SEARCH_PATHS = ( 351 | "$(inherited)", 352 | "@executable_path/Frameworks", 353 | ); 354 | PRODUCT_BUNDLE_IDENTIFIER = so.cardo.OnlineEventApp; 355 | PRODUCT_NAME = "$(TARGET_NAME)"; 356 | SWIFT_VERSION = 5.0; 357 | TARGETED_DEVICE_FAMILY = "1,2"; 358 | }; 359 | name = Debug; 360 | }; 361 | 8026B9B924BBF1ED00A6A194 /* Release */ = { 362 | isa = XCBuildConfiguration; 363 | buildSettings = { 364 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 365 | CODE_SIGN_STYLE = Automatic; 366 | DEVELOPMENT_TEAM = FWD9V5VYJ2; 367 | INFOPLIST_FILE = OnlineEventApp/Info.plist; 368 | LD_RUNPATH_SEARCH_PATHS = ( 369 | "$(inherited)", 370 | "@executable_path/Frameworks", 371 | ); 372 | PRODUCT_BUNDLE_IDENTIFIER = so.cardo.OnlineEventApp; 373 | PRODUCT_NAME = "$(TARGET_NAME)"; 374 | SWIFT_VERSION = 5.0; 375 | TARGETED_DEVICE_FAMILY = "1,2"; 376 | }; 377 | name = Release; 378 | }; 379 | /* End XCBuildConfiguration section */ 380 | 381 | /* Begin XCConfigurationList section */ 382 | 8026B99E24BBF1EB00A6A194 /* Build configuration list for PBXProject "OnlineEventApp" */ = { 383 | isa = XCConfigurationList; 384 | buildConfigurations = ( 385 | 8026B9B524BBF1ED00A6A194 /* Debug */, 386 | 8026B9B624BBF1ED00A6A194 /* Release */, 387 | ); 388 | defaultConfigurationIsVisible = 0; 389 | defaultConfigurationName = Release; 390 | }; 391 | 8026B9B724BBF1ED00A6A194 /* Build configuration list for PBXNativeTarget "OnlineEventApp" */ = { 392 | isa = XCConfigurationList; 393 | buildConfigurations = ( 394 | 8026B9B824BBF1ED00A6A194 /* Debug */, 395 | 8026B9B924BBF1ED00A6A194 /* Release */, 396 | ); 397 | defaultConfigurationIsVisible = 0; 398 | defaultConfigurationName = Release; 399 | }; 400 | /* End XCConfigurationList section */ 401 | }; 402 | rootObject = 8026B99B24BBF1EB00A6A194 /* Project object */; 403 | } 404 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp.xcodeproj/project.xcworkspace/xcuserdata/cardoso.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/livestream-event-app-ios/dcb445c563d1e52e701e62f03a10d69a48f96901/OnlineEventApp/OnlineEventApp.xcodeproj/project.xcworkspace/xcuserdata/cardoso.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp.xcodeproj/xcuserdata/cardoso.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | OnlineEventApp.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp.xcworkspace/xcuserdata/cardoso.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/livestream-event-app-ios/dcb445c563d1e52e701e62f03a10d69a48f96901/OnlineEventApp/OnlineEventApp.xcworkspace/xcuserdata/cardoso.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // OnlineEventApp 4 | // 5 | // Created by Matheus Cardoso on 12/07/20. 6 | // Copyright © 2020 Matheus Cardoso. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import StreamChatClient 11 | import VoxeetSDK 12 | import VoxeetUXKit 13 | 14 | @UIApplicationMain 15 | class AppDelegate: UIResponder, UIApplicationDelegate { 16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 17 | // Override point for customization after application launch. 18 | Client.configureShared(.init(apiKey: "74e5enp33qj2", logOptions: .info)) 19 | 20 | VoxeetSDK.shared.initialize(consumerKey: "ZTBib3I3NzkzMmt0aA==", consumerSecret: "NDUyM2kzMTc0ZHNvZWxjaHRucG41dmpidnE=") 21 | VoxeetUXKit.shared.initialize() 22 | 23 | return true 24 | } 25 | 26 | // MARK: UISceneSession Lifecycle 27 | 28 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { 29 | // Called when a new scene session is being created. 30 | // Use this method to select a configuration to create the new scene with. 31 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) 32 | } 33 | 34 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { 35 | // Called when the user discards a scene session. 36 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. 37 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return. 38 | } 39 | 40 | 41 | } 42 | 43 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "scale" : "1x", 46 | "size" : "20x20" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "scale" : "2x", 51 | "size" : "20x20" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "scale" : "1x", 56 | "size" : "29x29" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "29x29" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "scale" : "1x", 66 | "size" : "40x40" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "scale" : "2x", 71 | "size" : "40x40" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "scale" : "1x", 76 | "size" : "76x76" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "scale" : "2x", 81 | "size" : "76x76" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "scale" : "2x", 86 | "size" : "83.5x83.5" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "scale" : "1x", 91 | "size" : "1024x1024" 92 | } 93 | ], 94 | "info" : { 95 | "author" : "xcode", 96 | "version" : 1 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIApplicationSceneManifest 24 | 25 | UIApplicationSupportsMultipleScenes 26 | 27 | UISceneConfigurations 28 | 29 | UIWindowSceneSessionRoleApplication 30 | 31 | 32 | UISceneConfigurationName 33 | Default Configuration 34 | UISceneDelegateClassName 35 | $(PRODUCT_MODULE_NAME).SceneDelegate 36 | UISceneStoryboardFile 37 | Main 38 | 39 | 40 | 41 | 42 | UILaunchStoryboardName 43 | LaunchScreen 44 | UIMainStoryboardFile 45 | Main 46 | UIRequiredDeviceCapabilities 47 | 48 | armv7 49 | 50 | UISupportedInterfaceOrientations 51 | 52 | UIInterfaceOrientationPortrait 53 | UIInterfaceOrientationLandscapeLeft 54 | UIInterfaceOrientationLandscapeRight 55 | 56 | UISupportedInterfaceOrientations~ipad 57 | 58 | UIInterfaceOrientationPortrait 59 | UIInterfaceOrientationPortraitUpsideDown 60 | UIInterfaceOrientationLandscapeLeft 61 | UIInterfaceOrientationLandscapeRight 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/Join/JoinViewController+Constraints.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JoinViewController+Constraints.swift 3 | // OnlineEventApp 4 | // 5 | // Created by Matheus Cardoso on 12/07/20. 6 | // Copyright © 2020 Matheus Cardoso. All rights reserved. 7 | // 8 | 9 | extension JoinViewController { 10 | func setupConstraints() { 11 | view.addConstraints([ 12 | attendeeButton.centerXAnchor.constraint(equalTo: view.centerXAnchor), 13 | attendeeButton.centerYAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerYAnchor, constant: -100), 14 | speakerButton.centerXAnchor.constraint(equalTo: view.centerXAnchor), 15 | speakerButton.centerYAnchor.constraint(equalTo: attendeeButton.centerYAnchor, constant: 100) 16 | ]) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/Join/JoinViewController+Handlers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JoinViewController+Handlers.swift 3 | // OnlineEventApp 4 | // 5 | // Created by Matheus Cardoso on 12/07/20. 6 | // Copyright © 2020 Matheus Cardoso. All rights reserved. 7 | // 8 | 9 | import StreamChat 10 | 11 | extension JoinViewController { 12 | func setupHandlers() { 13 | attendeeButton.addTarget(self, action: #selector(handleAttendeeButtonPress), for: .touchUpInside) 14 | speakerButton.addTarget(self, action: #selector(handleSpeakerButtonPress), for: .touchUpInside) 15 | } 16 | 17 | @objc func handleAttendeeButtonPress() { 18 | let roomVC = RoomViewController() 19 | roomVC.setupAttendee() 20 | 21 | navigationController?.pushViewController(roomVC, animated: true) 22 | } 23 | 24 | @objc func handleSpeakerButtonPress() { 25 | let roomVC = RoomViewController() 26 | roomVC.setupSpeaker() 27 | 28 | navigationController?.pushViewController(roomVC, animated: true) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/Join/JoinViewController+Views.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JoinViewController+Views.swift 3 | // OnlineEventApp 4 | // 5 | // Created by Matheus Cardoso on 12/07/20. 6 | // Copyright © 2020 Matheus Cardoso. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension JoinViewController { 12 | func setupViews() { 13 | setupAttendeeButton() 14 | setupSpeakerButton() 15 | } 16 | 17 | func setupAttendeeButton() { 18 | attendeeButton.translatesAutoresizingMaskIntoConstraints = false 19 | attendeeButton.setTitleColor(.systemBlue, for: .normal) 20 | attendeeButton.setTitle("Attendee 🙋‍♂️", for: .normal) 21 | attendeeButton.titleLabel?.font = .systemFont(ofSize: 32) 22 | 23 | view.addSubview(attendeeButton) 24 | } 25 | 26 | func setupSpeakerButton() { 27 | speakerButton.translatesAutoresizingMaskIntoConstraints = false 28 | speakerButton.setTitleColor(.systemBlue, for: .normal) 29 | speakerButton.setTitle("Speaker 👩‍💻", for: .normal) 30 | speakerButton.titleLabel?.font = .systemFont(ofSize: 32) 31 | 32 | view.addSubview(speakerButton) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/Join/JoinViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // OnlineEventApp 4 | // 5 | // Created by Matheus Cardoso on 12/07/20. 6 | // Copyright © 2020 Matheus Cardoso. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class JoinViewController: UIViewController { 12 | let attendeeButton = UIButton() 13 | let speakerButton = UIButton() 14 | 15 | override func viewDidLoad() { 16 | super.viewDidLoad() 17 | 18 | title = "Join" 19 | 20 | setupViews() 21 | setupConstraints() 22 | setupHandlers() 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/Room/RoomViewController+Call.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RoomViewController+Call.swift 3 | // OnlineEventApp 4 | // 5 | // Created by Matheus Cardoso on 12/07/20. 6 | // Copyright © 2020 Matheus Cardoso. All rights reserved. 7 | // 8 | 9 | import VoxeetSDK 10 | import VoxeetUXKit 11 | 12 | extension RoomViewController { 13 | func startCall() { 14 | let options = VTConferenceOptions() 15 | options.alias = "conference_room_id" 16 | VoxeetSDK.shared.conference.create(options: options, success: { conf in 17 | VoxeetSDK.shared.conference.join(conference: conf) 18 | }, fail: { error in 19 | print(error) 20 | }) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/Room/RoomViewController+Chat.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RoomViewController+Chat.swift 3 | // OnlineEventApp 4 | // 5 | // Created by Matheus Cardoso on 12/07/20. 6 | // Copyright © 2020 Matheus Cardoso. All rights reserved. 7 | // 8 | 9 | import StreamChatClient 10 | 11 | extension RoomViewController { 12 | func setupAttendee() { 13 | Client.shared.set(user: attendee, token: .development) 14 | self.presenter = .init(channel: channel) 15 | } 16 | 17 | func setupSpeaker() { 18 | Client.shared.set(user: speaker, token: .development) 19 | self.presenter = .init(channel: channel) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/Room/RoomViewController+Handlers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RoomViewController+Handlers.swift 3 | // OnlineEventApp 4 | // 5 | // Created by Matheus Cardoso on 12/07/20. 6 | // Copyright © 2020 Matheus Cardoso. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension RoomViewController { 12 | func setupHandlers() { 13 | setupCallButtonHandler() 14 | } 15 | 16 | func setupCallButtonHandler() { 17 | navigationItem.rightBarButtonItem?.target = self 18 | navigationItem.rightBarButtonItem?.action = #selector(callButtonPressed) 19 | } 20 | 21 | @objc func callButtonPressed() { 22 | startCall() 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/Room/RoomViewController+Views.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RoomViewController+Views.swift 3 | // OnlineEventApp 4 | // 5 | // Created by Matheus Cardoso on 12/07/20. 6 | // Copyright © 2020 Matheus Cardoso. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension RoomViewController { 12 | func setupViews() { 13 | setupCallButton() 14 | } 15 | 16 | func setupCallButton() { 17 | let button = UIBarButtonItem() 18 | button.image = UIImage(systemName: "phone") 19 | 20 | navigationItem.rightBarButtonItem = button 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/Room/RoomViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RoomViewController.swift 3 | // OnlineEventApp 4 | // 5 | // Created by Matheus Cardoso on 12/07/20. 6 | // Copyright © 2020 Matheus Cardoso. All rights reserved. 7 | // 8 | 9 | import StreamChat 10 | import StreamChatClient 11 | 12 | class RoomViewController: ChatViewController { 13 | lazy var channel = Client.shared.channel( 14 | type: .messaging, 15 | id: "conference_room_id", 16 | extraData: ChannelExtraData(name: "Conference Room", imageURL: nil) 17 | ) 18 | 19 | let attendee = User(id: .random()) 20 | let speaker = User( 21 | id: "speaker", 22 | extraData: UserExtraData( 23 | name: "Speaker", 24 | avatarURL: URL(string: "https://raw.githubusercontent.com/GetStream/online-event-app-ios/main/meta/speaker.png") 25 | ) 26 | ) 27 | 28 | override func viewDidLoad() { 29 | super.viewDidLoad() 30 | 31 | setupViews() 32 | setupHandlers() 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/SceneDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.swift 3 | // OnlineEventApp 4 | // 5 | // Created by Matheus Cardoso on 12/07/20. 6 | // Copyright © 2020 Matheus Cardoso. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class SceneDelegate: UIResponder, UIWindowSceneDelegate { 12 | 13 | var window: UIWindow? 14 | 15 | 16 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { 17 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. 18 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. 19 | // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). 20 | guard let _ = (scene as? UIWindowScene) else { return } 21 | } 22 | 23 | func sceneDidDisconnect(_ scene: UIScene) { 24 | // Called as the scene is being released by the system. 25 | // This occurs shortly after the scene enters the background, or when its session is discarded. 26 | // Release any resources associated with this scene that can be re-created the next time the scene connects. 27 | // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead). 28 | } 29 | 30 | func sceneDidBecomeActive(_ scene: UIScene) { 31 | // Called when the scene has moved from an inactive state to an active state. 32 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. 33 | } 34 | 35 | func sceneWillResignActive(_ scene: UIScene) { 36 | // Called when the scene will move from an active state to an inactive state. 37 | // This may occur due to temporary interruptions (ex. an incoming phone call). 38 | } 39 | 40 | func sceneWillEnterForeground(_ scene: UIScene) { 41 | // Called as the scene transitions from the background to the foreground. 42 | // Use this method to undo the changes made on entering the background. 43 | } 44 | 45 | func sceneDidEnterBackground(_ scene: UIScene) { 46 | // Called as the scene transitions from the foreground to the background. 47 | // Use this method to save data, release shared resources, and store enough scene-specific state information 48 | // to restore the scene back to its current state. 49 | } 50 | 51 | 52 | } 53 | 54 | -------------------------------------------------------------------------------- /OnlineEventApp/OnlineEventApp/String+Random.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String+Random.swift 3 | // OnlineEventApp 4 | // 5 | // Created by Matheus Cardoso on 12/07/20. 6 | // Copyright © 2020 Matheus Cardoso. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension String { 12 | static func random(length: Int = 10) -> String { 13 | let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" 14 | return String((0.. 2.2' 10 | pod 'VoxeetUXKit', '~> 1.3' 11 | end 12 | -------------------------------------------------------------------------------- /OnlineEventApp/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Nuke (8.4.1) 3 | - RxCocoa (5.1.1): 4 | - RxRelay (~> 5) 5 | - RxSwift (~> 5) 6 | - RxGesture (3.0.2): 7 | - RxCocoa (~> 5.1) 8 | - RxSwift (~> 5.1) 9 | - RxRelay (5.1.1): 10 | - RxSwift (~> 5) 11 | - RxSwift (5.1.1) 12 | - SDWebImage (5.8.3): 13 | - SDWebImage/Core (= 5.8.3) 14 | - SDWebImage/Core (5.8.3) 15 | - SnapKit (5.0.1) 16 | - Starscream (3.1.1) 17 | - StreamChat (2.2.5): 18 | - Nuke (~> 8.4) 19 | - RxGesture (~> 3.0) 20 | - SnapKit (~> 5.0) 21 | - StreamChatCore (= 2.2.5) 22 | - SwiftyGif (~> 5.2.0) 23 | - StreamChatClient (2.2.5): 24 | - Starscream (~> 3.1) 25 | - StreamChatCore (2.2.5): 26 | - RxCocoa (~> 5.1) 27 | - RxSwift (~> 5.1) 28 | - StreamChatClient (= 2.2.5) 29 | - SwiftyGif (5.2.0) 30 | - VoxeetSDK (2.4.0) 31 | - VoxeetUXKit (1.3.4): 32 | - SDWebImage (~> 5.0) 33 | - VoxeetSDK (~> 2.0) 34 | 35 | DEPENDENCIES: 36 | - StreamChat (~> 2.2) 37 | - VoxeetUXKit (~> 1.3) 38 | 39 | SPEC REPOS: 40 | trunk: 41 | - Nuke 42 | - RxCocoa 43 | - RxGesture 44 | - RxRelay 45 | - RxSwift 46 | - SDWebImage 47 | - SnapKit 48 | - Starscream 49 | - StreamChat 50 | - StreamChatClient 51 | - StreamChatCore 52 | - SwiftyGif 53 | - VoxeetSDK 54 | - VoxeetUXKit 55 | 56 | SPEC CHECKSUMS: 57 | Nuke: d780e3507a86b86c589ab3cc5cd302d5456f06fb 58 | RxCocoa: 32065309a38d29b5b0db858819b5bf9ef038b601 59 | RxGesture: d6bd7447ca3a596c7a9702a6a2b6a2bb5d8bae54 60 | RxRelay: d77f7d771495f43c556cbc43eebd1bb54d01e8e9 61 | RxSwift: 81470a2074fa8780320ea5fe4102807cb7118178 62 | SDWebImage: 112503ec94a5a2a41869503844a15e8d8f1ead5c 63 | SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb 64 | Starscream: 4bb2f9942274833f7b4d296a55504dcfc7edb7b0 65 | StreamChat: 6aefba044efe17fb620564a4983e6523184f5e09 66 | StreamChatClient: 0d81226a9f3242feae3852943132aceacfd2bb56 67 | StreamChatCore: 279479f53874712c2bc18f90c9862c9ebd19321c 68 | SwiftyGif: b85c6b33a9411859d9e1db998b6a8214aea942df 69 | VoxeetSDK: 44b67623efdb5d681223482abc245c6a8ab9a9e9 70 | VoxeetUXKit: 5d09d9518604fd30fbf376916060a709d8ad2ee8 71 | 72 | PODFILE CHECKSUM: 59309aa9e3ccfefead062ecf05ebeb0e5513c59b 73 | 74 | COCOAPODS: 1.9.3 75 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 💬 Livestream Event App for iOS [![](https://img.shields.io/twitter/url?url=https%3A%2F%2Fgithub.com%2FGetStream%2Flivestream-event-app-ios)](https://twitter.com/intent/tweet?text=Want%20to%20build%20an%20online%20livestream%20event%20app%20for%20iOS%20with%20video%20and%20chat%3F%20Learn%20how%3A&url=https%3A%2F%2Fgithub.com%2FGetStream%2Fonline-event-app-ios) 2 | 3 | 4 | 5 | ## 📚 Tutorial 6 | 7 | This repository contains the completed Xcode project following the [How to Build an iOS App for Livestream Events](https://getstream.io/blog/livestream-online-event-ios/) tutorial. You should read it before trying to run this project as it contains it may contain useful information not present in this README. 8 | 9 | ## ⚙️ Setup 10 | 11 | ## Requirements 12 | - Xcode 11+ 13 | - iOS 13+ 14 | - A [Stream](https://getstream.io/accounts/signup/) account 15 | - A [Dolby.io](https://dolby.io/organizations/register) account 16 | 17 | ### Configuration 18 | 19 | You should place your [Stream Chat](https://getstream.io/chat) and [Dolby.io](https://dolby.io) credentials in [`AppDelegate.swift`](OnlineEventApp/OnlineEventApp/AppDelegate.swift#L18-L20). 20 | 21 | ### Dependencies 22 | 23 | To install the dependencies, use CocoaPods in this project's folder: 24 | 25 | ```bash 26 | $ pod install --repo-update 27 | ``` 28 | 29 | ### Running 30 | 31 | Run this sample app as any normal app, but only on real devices. If you run in a simulator, the chat will work, but you won't be able to watch or stream video due to limitations of the simulator, though voice should work. 32 | 33 | ## 🔗 Helpful Links 34 | 35 | - [Build an iMessage Clone with The Stream Chat iOS SDK](https://getstream.io/blog/build-imessage-clone/) 36 | - [Stream Chat iOS Tutorial](https://getstream.io/tutorials/ios-chat/) 37 | - [Stream Chat iOS Repo](https://github.com/GetStream/stream-chat-swift) 38 | - [Stream Chat iOS Docs](http://getstream.io/chat/docs?language=swift) 39 | -------------------------------------------------------------------------------- /meta/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/livestream-event-app-ios/dcb445c563d1e52e701e62f03a10d69a48f96901/meta/.DS_Store -------------------------------------------------------------------------------- /meta/speaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/livestream-event-app-ios/dcb445c563d1e52e701e62f03a10d69a48f96901/meta/speaker.png --------------------------------------------------------------------------------