diff --git a/Example/LFRtcKit.xcodeproj/project.pbxproj b/Example/LFRtcKit.xcodeproj/project.pbxproj new file mode 100644 index 0000000..2dd727f --- /dev/null +++ b/Example/LFRtcKit.xcodeproj/project.pbxproj @@ -0,0 +1,630 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 59C08B7DADB11D1842ED7CE9 /* Pods_LFRtcKit_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF965EF04BCA448BB7402C09 /* Pods_LFRtcKit_Example.framework */; }; + 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; }; + 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58F195388D20070C39A /* CoreGraphics.framework */; }; + 6003F592195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; }; + 6003F598195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F596195388D20070C39A /* InfoPlist.strings */; }; + 6003F59A195388D20070C39A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F599195388D20070C39A /* main.m */; }; + 6003F59E195388D20070C39A /* LFAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F59D195388D20070C39A /* LFAppDelegate.m */; }; + 6003F5A7195388D20070C39A /* LFViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5A6195388D20070C39A /* LFViewController.m */; }; + 6003F5A9195388D20070C39A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5A8195388D20070C39A /* Images.xcassets */; }; + 6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F5AF195388D20070C39A /* XCTest.framework */; }; + 6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; }; + 6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; }; + 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5B8195388D20070C39A /* InfoPlist.strings */; }; + 6003F5BC195388D20070C39A /* Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5BB195388D20070C39A /* Tests.m */; }; + 71719F9F1E33DC2100824A3D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */; }; + 873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */; }; + 887E0F81AE223CA7C37CB4D8 /* Pods_LFRtcKit_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D347E98D9F898C070E8A942C /* Pods_LFRtcKit_Tests.framework */; }; + 9815B17A2796EA4900C432DE /* ConsultationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9815B1742796EA4700C432DE /* ConsultationViewController.m */; }; + 9815B17B2796EA4900C432DE /* LoginViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9815B1762796EA4800C432DE /* LoginViewController.xib */; }; + 9815B17C2796EA4900C432DE /* VideoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9815B1772796EA4800C432DE /* VideoViewController.m */; }; + 9815B17D2796EA4900C432DE /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9815B1782796EA4800C432DE /* LoginViewController.m */; }; + 9815B17E2796EA4900C432DE /* ConsultationViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9815B1792796EA4800C432DE /* ConsultationViewController.xib */; }; + 9815B1822796EAF000C432DE /* Toast+UIView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9815B1802796EAF000C432DE /* Toast+UIView.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 6003F5B3195388D20070C39A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6003F582195388D10070C39A /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6003F589195388D20070C39A; + remoteInfo = LFRtcKit; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 1FAEB4B6F7D8C599E2770238 /* Pods-LFRtcKit_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LFRtcKit_Example.release.xcconfig"; path = "Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example.release.xcconfig"; sourceTree = ""; }; + 3FA28DA76A076B235D7F3F28 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; + 44B613185C71D27A183AEFAF /* LFRtcKit.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LFRtcKit.podspec; path = ../LFRtcKit.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 4F491D23C3FACFD33E31DFD0 /* Pods-LFRtcKit_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LFRtcKit_Tests.debug.xcconfig"; path = "Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests.debug.xcconfig"; sourceTree = ""; }; + 6003F58A195388D20070C39A /* LFRtcKit_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LFRtcKit_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 6003F58D195388D20070C39A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 6003F58F195388D20070C39A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 6003F591195388D20070C39A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 6003F595195388D20070C39A /* LFRtcKit-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "LFRtcKit-Info.plist"; sourceTree = ""; }; + 6003F597195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 6003F599195388D20070C39A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 6003F59B195388D20070C39A /* LFRtcKit-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "LFRtcKit-Prefix.pch"; sourceTree = ""; }; + 6003F59C195388D20070C39A /* LFAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LFAppDelegate.h; sourceTree = ""; }; + 6003F59D195388D20070C39A /* LFAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LFAppDelegate.m; sourceTree = ""; }; + 6003F5A5195388D20070C39A /* LFViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LFViewController.h; sourceTree = ""; }; + 6003F5A6195388D20070C39A /* LFViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LFViewController.m; sourceTree = ""; }; + 6003F5A8195388D20070C39A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 6003F5AE195388D20070C39A /* LFRtcKit_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LFRtcKit_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 6003F5AF195388D20070C39A /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 6003F5B7195388D20070C39A /* Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Tests-Info.plist"; sourceTree = ""; }; + 6003F5B9195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 6003F5BB195388D20070C39A /* Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Tests.m; sourceTree = ""; }; + 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tests-Prefix.pch"; sourceTree = ""; }; + 71719F9E1E33DC2100824A3D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = Main.storyboard; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 9815B1722796EA4700C432DE /* VideoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoViewController.h; sourceTree = ""; }; + 9815B1732796EA4700C432DE /* LoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginViewController.h; sourceTree = ""; }; + 9815B1742796EA4700C432DE /* ConsultationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConsultationViewController.m; sourceTree = ""; }; + 9815B1752796EA4700C432DE /* ConsultationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConsultationViewController.h; sourceTree = ""; }; + 9815B1762796EA4800C432DE /* LoginViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LoginViewController.xib; sourceTree = ""; }; + 9815B1772796EA4800C432DE /* VideoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VideoViewController.m; sourceTree = ""; }; + 9815B1782796EA4800C432DE /* LoginViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginViewController.m; sourceTree = ""; }; + 9815B1792796EA4800C432DE /* ConsultationViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ConsultationViewController.xib; sourceTree = ""; }; + 9815B1802796EAF000C432DE /* Toast+UIView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Toast+UIView.m"; sourceTree = ""; }; + 9815B1812796EAF000C432DE /* Toast+UIView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Toast+UIView.h"; sourceTree = ""; }; + A84F6CC5FE7E049F5AD5C39F /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; + AE9CA547DF44C6107C39A69E /* Pods-LFRtcKit_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LFRtcKit_Example.debug.xcconfig"; path = "Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example.debug.xcconfig"; sourceTree = ""; }; + D01A65AC2BD0FBB80C33917B /* Pods-LFRtcKit_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LFRtcKit_Tests.release.xcconfig"; path = "Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests.release.xcconfig"; sourceTree = ""; }; + D347E98D9F898C070E8A942C /* Pods_LFRtcKit_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LFRtcKit_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF965EF04BCA448BB7402C09 /* Pods_LFRtcKit_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LFRtcKit_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 6003F587195388D20070C39A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */, + 6003F592195388D20070C39A /* UIKit.framework in Frameworks */, + 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */, + 59C08B7DADB11D1842ED7CE9 /* Pods_LFRtcKit_Example.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6003F5AB195388D20070C39A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */, + 6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */, + 6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */, + 887E0F81AE223CA7C37CB4D8 /* Pods_LFRtcKit_Tests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 4DE388E7A07E0C705A9377FC /* Pods */ = { + isa = PBXGroup; + children = ( + AE9CA547DF44C6107C39A69E /* Pods-LFRtcKit_Example.debug.xcconfig */, + 1FAEB4B6F7D8C599E2770238 /* Pods-LFRtcKit_Example.release.xcconfig */, + 4F491D23C3FACFD33E31DFD0 /* Pods-LFRtcKit_Tests.debug.xcconfig */, + D01A65AC2BD0FBB80C33917B /* Pods-LFRtcKit_Tests.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + 6003F581195388D10070C39A = { + isa = PBXGroup; + children = ( + 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */, + 6003F593195388D20070C39A /* Example for LFRtcKit */, + 6003F5B5195388D20070C39A /* Tests */, + 6003F58C195388D20070C39A /* Frameworks */, + 6003F58B195388D20070C39A /* Products */, + 4DE388E7A07E0C705A9377FC /* Pods */, + ); + sourceTree = ""; + }; + 6003F58B195388D20070C39A /* Products */ = { + isa = PBXGroup; + children = ( + 6003F58A195388D20070C39A /* LFRtcKit_Example.app */, + 6003F5AE195388D20070C39A /* LFRtcKit_Tests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 6003F58C195388D20070C39A /* Frameworks */ = { + isa = PBXGroup; + children = ( + 6003F58D195388D20070C39A /* Foundation.framework */, + 6003F58F195388D20070C39A /* CoreGraphics.framework */, + 6003F591195388D20070C39A /* UIKit.framework */, + 6003F5AF195388D20070C39A /* XCTest.framework */, + FF965EF04BCA448BB7402C09 /* Pods_LFRtcKit_Example.framework */, + D347E98D9F898C070E8A942C /* Pods_LFRtcKit_Tests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 6003F593195388D20070C39A /* Example for LFRtcKit */ = { + isa = PBXGroup; + children = ( + 6003F59C195388D20070C39A /* LFAppDelegate.h */, + 6003F59D195388D20070C39A /* LFAppDelegate.m */, + 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */, + 9815B1752796EA4700C432DE /* ConsultationViewController.h */, + 9815B1742796EA4700C432DE /* ConsultationViewController.m */, + 9815B1792796EA4800C432DE /* ConsultationViewController.xib */, + 9815B1732796EA4700C432DE /* LoginViewController.h */, + 9815B1782796EA4800C432DE /* LoginViewController.m */, + 9815B1762796EA4800C432DE /* LoginViewController.xib */, + 9815B1722796EA4700C432DE /* VideoViewController.h */, + 9815B1772796EA4800C432DE /* VideoViewController.m */, + 6003F5A5195388D20070C39A /* LFViewController.h */, + 6003F5A6195388D20070C39A /* LFViewController.m */, + 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */, + 6003F5A8195388D20070C39A /* Images.xcassets */, + 9815B17F2796EAF000C432DE /* Toast */, + 6003F594195388D20070C39A /* Supporting Files */, + ); + name = "Example for LFRtcKit"; + path = LFRtcKit; + sourceTree = ""; + }; + 6003F594195388D20070C39A /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 6003F595195388D20070C39A /* LFRtcKit-Info.plist */, + 6003F596195388D20070C39A /* InfoPlist.strings */, + 6003F599195388D20070C39A /* main.m */, + 6003F59B195388D20070C39A /* LFRtcKit-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 6003F5B5195388D20070C39A /* Tests */ = { + isa = PBXGroup; + children = ( + 6003F5BB195388D20070C39A /* Tests.m */, + 6003F5B6195388D20070C39A /* Supporting Files */, + ); + path = Tests; + sourceTree = ""; + }; + 6003F5B6195388D20070C39A /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 6003F5B7195388D20070C39A /* Tests-Info.plist */, + 6003F5B8195388D20070C39A /* InfoPlist.strings */, + 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */ = { + isa = PBXGroup; + children = ( + 44B613185C71D27A183AEFAF /* LFRtcKit.podspec */, + 3FA28DA76A076B235D7F3F28 /* README.md */, + A84F6CC5FE7E049F5AD5C39F /* LICENSE */, + ); + name = "Podspec Metadata"; + sourceTree = ""; + }; + 9815B17F2796EAF000C432DE /* Toast */ = { + isa = PBXGroup; + children = ( + 9815B1802796EAF000C432DE /* Toast+UIView.m */, + 9815B1812796EAF000C432DE /* Toast+UIView.h */, + ); + path = Toast; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 6003F589195388D20070C39A /* LFRtcKit_Example */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "LFRtcKit_Example" */; + buildPhases = ( + 1890EA39EBC99FCEF1C3A01B /* [CP] Check Pods Manifest.lock */, + 6003F586195388D20070C39A /* Sources */, + 6003F587195388D20070C39A /* Frameworks */, + 6003F588195388D20070C39A /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = LFRtcKit_Example; + productName = LFRtcKit; + productReference = 6003F58A195388D20070C39A /* LFRtcKit_Example.app */; + productType = "com.apple.product-type.application"; + }; + 6003F5AD195388D20070C39A /* LFRtcKit_Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget "LFRtcKit_Tests" */; + buildPhases = ( + 886EF17EC97E0BACD61AC472 /* [CP] Check Pods Manifest.lock */, + 6003F5AA195388D20070C39A /* Sources */, + 6003F5AB195388D20070C39A /* Frameworks */, + 6003F5AC195388D20070C39A /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 6003F5B4195388D20070C39A /* PBXTargetDependency */, + ); + name = LFRtcKit_Tests; + productName = LFRtcKitTests; + productReference = 6003F5AE195388D20070C39A /* LFRtcKit_Tests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 6003F582195388D10070C39A /* Project object */ = { + isa = PBXProject; + attributes = { + CLASSPREFIX = LF; + LastUpgradeCheck = 0720; + ORGANIZATIONNAME = kerwin; + TargetAttributes = { + 6003F589195388D20070C39A = { + DevelopmentTeam = 7MZ72236A3; + }; + 6003F5AD195388D20070C39A = { + TestTargetID = 6003F589195388D20070C39A; + }; + }; + }; + buildConfigurationList = 6003F585195388D10070C39A /* Build configuration list for PBXProject "LFRtcKit" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + en, + Base, + ); + mainGroup = 6003F581195388D10070C39A; + productRefGroup = 6003F58B195388D20070C39A /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 6003F589195388D20070C39A /* LFRtcKit_Example */, + 6003F5AD195388D20070C39A /* LFRtcKit_Tests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 6003F588195388D20070C39A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9815B17B2796EA4900C432DE /* LoginViewController.xib in Resources */, + 9815B17E2796EA4900C432DE /* ConsultationViewController.xib in Resources */, + 873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */, + 71719F9F1E33DC2100824A3D /* LaunchScreen.storyboard in Resources */, + 6003F5A9195388D20070C39A /* Images.xcassets in Resources */, + 6003F598195388D20070C39A /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6003F5AC195388D20070C39A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 1890EA39EBC99FCEF1C3A01B /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-LFRtcKit_Example-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 886EF17EC97E0BACD61AC472 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-LFRtcKit_Tests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 6003F586195388D20070C39A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9815B17C2796EA4900C432DE /* VideoViewController.m in Sources */, + 6003F59E195388D20070C39A /* LFAppDelegate.m in Sources */, + 9815B17D2796EA4900C432DE /* LoginViewController.m in Sources */, + 9815B17A2796EA4900C432DE /* ConsultationViewController.m in Sources */, + 6003F5A7195388D20070C39A /* LFViewController.m in Sources */, + 9815B1822796EAF000C432DE /* Toast+UIView.m in Sources */, + 6003F59A195388D20070C39A /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6003F5AA195388D20070C39A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6003F5BC195388D20070C39A /* Tests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 6003F5B4195388D20070C39A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 6003F589195388D20070C39A /* LFRtcKit_Example */; + targetProxy = 6003F5B3195388D20070C39A /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 6003F596195388D20070C39A /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 6003F597195388D20070C39A /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 6003F5B8195388D20070C39A /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 6003F5B9195388D20070C39A /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 71719F9E1E33DC2100824A3D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 6003F5BD195388D20070C39A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 6003F5BE195388D20070C39A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 6003F5C0195388D20070C39A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AE9CA547DF44C6107C39A69E /* Pods-LFRtcKit_Example.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = 7MZ72236A3; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "LFRtcKit/LFRtcKit-Prefix.pch"; + INFOPLIST_FILE = "LFRtcKit/LFRtcKit-Info.plist"; + MODULE_NAME = ExampleApp; + PRODUCT_BUNDLE_IDENTIFIER = "com.livefuller.sdk-kerwin"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 6003F5C1195388D20070C39A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1FAEB4B6F7D8C599E2770238 /* Pods-LFRtcKit_Example.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = 7MZ72236A3; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "LFRtcKit/LFRtcKit-Prefix.pch"; + INFOPLIST_FILE = "LFRtcKit/LFRtcKit-Info.plist"; + MODULE_NAME = ExampleApp; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.livefuller.sdk-kerwin"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; + 6003F5C3195388D20070C39A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4F491D23C3FACFD33E31DFD0 /* Pods-LFRtcKit_Tests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "Tests/Tests-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/LFRtcKit_Example.app/LFRtcKit_Example"; + WRAPPER_EXTENSION = xctest; + }; + name = Debug; + }; + 6003F5C4195388D20070C39A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D01A65AC2BD0FBB80C33917B /* Pods-LFRtcKit_Tests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch"; + INFOPLIST_FILE = "Tests/Tests-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/LFRtcKit_Example.app/LFRtcKit_Example"; + WRAPPER_EXTENSION = xctest; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 6003F585195388D10070C39A /* Build configuration list for PBXProject "LFRtcKit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6003F5BD195388D20070C39A /* Debug */, + 6003F5BE195388D20070C39A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "LFRtcKit_Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6003F5C0195388D20070C39A /* Debug */, + 6003F5C1195388D20070C39A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget "LFRtcKit_Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6003F5C3195388D20070C39A /* Debug */, + 6003F5C4195388D20070C39A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 6003F582195388D10070C39A /* Project object */; +} diff --git a/Example/LFRtcKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/LFRtcKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..53bd8b5 --- /dev/null +++ b/Example/LFRtcKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Example/LFRtcKit.xcodeproj/xcshareddata/xcschemes/LFRtcKit-Example.xcscheme b/Example/LFRtcKit.xcodeproj/xcshareddata/xcschemes/LFRtcKit-Example.xcscheme new file mode 100644 index 0000000..39af2db --- /dev/null +++ b/Example/LFRtcKit.xcodeproj/xcshareddata/xcschemes/LFRtcKit-Example.xcscheme @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/LFRtcKit.xcworkspace/contents.xcworkspacedata b/Example/LFRtcKit.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..537abf3 --- /dev/null +++ b/Example/LFRtcKit.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/Example/LFRtcKit.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Example/LFRtcKit.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Example/LFRtcKit.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Example/LFRtcKit.xcworkspace/xcuserdata/kerwinzhang.xcuserdatad/UserInterfaceState.xcuserstate b/Example/LFRtcKit.xcworkspace/xcuserdata/kerwinzhang.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..840c5b8 Binary files /dev/null and b/Example/LFRtcKit.xcworkspace/xcuserdata/kerwinzhang.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/Example/LFRtcKit/Base.lproj/LaunchScreen.storyboard b/Example/LFRtcKit/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..fc810a6 --- /dev/null +++ b/Example/LFRtcKit/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/LFRtcKit/Base.lproj/Main.storyboard b/Example/LFRtcKit/Base.lproj/Main.storyboard new file mode 100644 index 0000000..4682eb1 --- /dev/null +++ b/Example/LFRtcKit/Base.lproj/Main.storyboard @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/LFRtcKit/ConsultationViewController.h b/Example/LFRtcKit/ConsultationViewController.h new file mode 100644 index 0000000..310df7d --- /dev/null +++ b/Example/LFRtcKit/ConsultationViewController.h @@ -0,0 +1,17 @@ +// +// ConsultationViewController.h +// MyVideoSDK +// +// Created by kerwin Zhang on 2022/1/18. +// Copyright © 2022 kerwin. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface ConsultationViewController : UIViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/Example/LFRtcKit/ConsultationViewController.m b/Example/LFRtcKit/ConsultationViewController.m new file mode 100644 index 0000000..0ceef08 --- /dev/null +++ b/Example/LFRtcKit/ConsultationViewController.m @@ -0,0 +1,58 @@ +// +// ConsultationViewController.m +// MyVideoSDK +// +// Created by kerwin Zhang on 2022/1/18. +// Copyright © 2022 kerwin. All rights reserved. +// + +#import "ConsultationViewController.h" +#import "VideoViewController.h" +#import +@interface ConsultationViewController () +@property (weak, nonatomic) IBOutlet UITextField *textfield; +@property (strong,nonatomic)LFManager *manager; + +@end + +@implementation ConsultationViewController + +- (void)viewDidLoad { + [self.navigationController setNavigationBarHidden:YES animated:YES]; + [self.navigationController.interactivePopGestureRecognizer setEnabled:NO]; + self.navigationController.interactivePopGestureRecognizer.delegate = nil; + + [super viewDidLoad]; + self.manager = [LFManager shareManager]; +} +- (IBAction)joinIn:(id)sender { + VideoViewController *vc = [[VideoViewController alloc]init]; + vc.channelId = self.textfield.text; + vc.modalPresentationStyle = UIModalPresentationFullScreen; + [self presentViewController:vc animated:YES completion:nil]; +} +- (IBAction)logOut:(id)sender { + + [self.manager logOutWithCompletion:^(LFLogoutErrorCode errorCode) { + if (errorCode == LFLogoutErrorOk) { + NSLog(@"log out success"); + [self.navigationController popViewControllerAnimated:YES]; + }else{ + NSLog(@"log out failed : %d",(int)errorCode); + } + }]; + + +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/Example/LFRtcKit/ConsultationViewController.xib b/Example/LFRtcKit/ConsultationViewController.xib new file mode 100644 index 0000000..d37a05a --- /dev/null +++ b/Example/LFRtcKit/ConsultationViewController.xib @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/LFRtcKit/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/LFRtcKit/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..b542ec2 --- /dev/null +++ b/Example/LFRtcKit/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/Example/LFRtcKit/Images.xcassets/Contents.json b/Example/LFRtcKit/Images.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Example/LFRtcKit/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/LFRtcKit/Images.xcassets/camera.imageset/Contents.json b/Example/LFRtcKit/Images.xcassets/camera.imageset/Contents.json new file mode 100644 index 0000000..d1399c3 --- /dev/null +++ b/Example/LFRtcKit/Images.xcassets/camera.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "编组 2备份 2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "编组 2备份 2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/Example/LFRtcKit/Images.xcassets/camera.imageset/\347\274\226\347\273\204 2\345\244\207\344\273\275 2@2x.png" "b/Example/LFRtcKit/Images.xcassets/camera.imageset/\347\274\226\347\273\204 2\345\244\207\344\273\275 2@2x.png" new file mode 100644 index 0000000..7e60338 Binary files /dev/null and "b/Example/LFRtcKit/Images.xcassets/camera.imageset/\347\274\226\347\273\204 2\345\244\207\344\273\275 2@2x.png" differ diff --git "a/Example/LFRtcKit/Images.xcassets/camera.imageset/\347\274\226\347\273\204 2\345\244\207\344\273\275 2@3x.png" "b/Example/LFRtcKit/Images.xcassets/camera.imageset/\347\274\226\347\273\204 2\345\244\207\344\273\275 2@3x.png" new file mode 100644 index 0000000..71dbebe Binary files /dev/null and "b/Example/LFRtcKit/Images.xcassets/camera.imageset/\347\274\226\347\273\204 2\345\244\207\344\273\275 2@3x.png" differ diff --git a/Example/LFRtcKit/Images.xcassets/hangup.imageset/Contents.json b/Example/LFRtcKit/Images.xcassets/hangup.imageset/Contents.json new file mode 100644 index 0000000..f39902c --- /dev/null +++ b/Example/LFRtcKit/Images.xcassets/hangup.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "挂断@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "挂断@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/Example/LFRtcKit/Images.xcassets/hangup.imageset/\346\214\202\346\226\255@2x.png" "b/Example/LFRtcKit/Images.xcassets/hangup.imageset/\346\214\202\346\226\255@2x.png" new file mode 100644 index 0000000..9339283 Binary files /dev/null and "b/Example/LFRtcKit/Images.xcassets/hangup.imageset/\346\214\202\346\226\255@2x.png" differ diff --git "a/Example/LFRtcKit/Images.xcassets/hangup.imageset/\346\214\202\346\226\255@3x.png" "b/Example/LFRtcKit/Images.xcassets/hangup.imageset/\346\214\202\346\226\255@3x.png" new file mode 100644 index 0000000..3765ed0 Binary files /dev/null and "b/Example/LFRtcKit/Images.xcassets/hangup.imageset/\346\214\202\346\226\255@3x.png" differ diff --git a/Example/LFRtcKit/Images.xcassets/mute_select.imageset/Contents.json b/Example/LFRtcKit/Images.xcassets/mute_select.imageset/Contents.json new file mode 100644 index 0000000..89a5edf --- /dev/null +++ b/Example/LFRtcKit/Images.xcassets/mute_select.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "编组 2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "编组 2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/Example/LFRtcKit/Images.xcassets/mute_select.imageset/\347\274\226\347\273\204 2@2x.png" "b/Example/LFRtcKit/Images.xcassets/mute_select.imageset/\347\274\226\347\273\204 2@2x.png" new file mode 100644 index 0000000..931a22e Binary files /dev/null and "b/Example/LFRtcKit/Images.xcassets/mute_select.imageset/\347\274\226\347\273\204 2@2x.png" differ diff --git "a/Example/LFRtcKit/Images.xcassets/mute_select.imageset/\347\274\226\347\273\204 2@3x.png" "b/Example/LFRtcKit/Images.xcassets/mute_select.imageset/\347\274\226\347\273\204 2@3x.png" new file mode 100644 index 0000000..1c7118d Binary files /dev/null and "b/Example/LFRtcKit/Images.xcassets/mute_select.imageset/\347\274\226\347\273\204 2@3x.png" differ diff --git a/Example/LFRtcKit/Images.xcassets/mute_selected.imageset/Contents.json b/Example/LFRtcKit/Images.xcassets/mute_selected.imageset/Contents.json new file mode 100644 index 0000000..89a5edf --- /dev/null +++ b/Example/LFRtcKit/Images.xcassets/mute_selected.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "编组 2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "编组 2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/Example/LFRtcKit/Images.xcassets/mute_selected.imageset/\347\274\226\347\273\204 2@2x.png" "b/Example/LFRtcKit/Images.xcassets/mute_selected.imageset/\347\274\226\347\273\204 2@2x.png" new file mode 100644 index 0000000..f6b0175 Binary files /dev/null and "b/Example/LFRtcKit/Images.xcassets/mute_selected.imageset/\347\274\226\347\273\204 2@2x.png" differ diff --git "a/Example/LFRtcKit/Images.xcassets/mute_selected.imageset/\347\274\226\347\273\204 2@3x.png" "b/Example/LFRtcKit/Images.xcassets/mute_selected.imageset/\347\274\226\347\273\204 2@3x.png" new file mode 100644 index 0000000..8403232 Binary files /dev/null and "b/Example/LFRtcKit/Images.xcassets/mute_selected.imageset/\347\274\226\347\273\204 2@3x.png" differ diff --git a/Example/LFRtcKit/LFAppDelegate.h b/Example/LFRtcKit/LFAppDelegate.h new file mode 100644 index 0000000..5688301 --- /dev/null +++ b/Example/LFRtcKit/LFAppDelegate.h @@ -0,0 +1,15 @@ +// +// LFAppDelegate.h +// LFRtcKit +// +// Created by kerwin on 01/18/2022. +// Copyright (c) 2022 kerwin. All rights reserved. +// + +@import UIKit; + +@interface LFAppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + +@end diff --git a/Example/LFRtcKit/LFAppDelegate.m b/Example/LFRtcKit/LFAppDelegate.m new file mode 100644 index 0000000..7d76c70 --- /dev/null +++ b/Example/LFRtcKit/LFAppDelegate.m @@ -0,0 +1,43 @@ +// +// LFAppDelegate.m +// LFRtcKit +// +// Created by kerwin on 01/18/2022. +// Copyright (c) 2022 kerwin. All rights reserved. +// + +#import "LFAppDelegate.h" +#import "LoginViewController.h" +#import +#import +@interface LFAppDelegate () +@property (nonatomic, retain)AVAudioPlayer *player; +@property (strong,nonatomic)LFManager *manager; +@property (strong,nonatomic)LFRemoteInvitation *remoteInvitation; +@end + +@implementation LFAppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + // Override point for customization after application launch. + UIWindow *window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; + LoginViewController *login = [[LoginViewController alloc]init]; + UINavigationController *navi = [[UINavigationController alloc]initWithRootViewController:login]; + window.rootViewController = navi; + self.window = window; + [window makeKeyAndVisible]; + [LFManager initWithClientType:@"CLIENT_FHN3" authorization:@"bXGZROlpNiAzmHG92DCy/c/Y9tiUveulkI/RY7/HlnMy4SR9clUSmehgta0g4kcMK60lKXKBBEkwyQVair7hbDcifsvKNmVoURi20GJasrEIXuk+WfxSRB6nR1bWj0I1f0b5W0VofyhMPEE7hF+YVlkwUUSD3jjlPA5PSp4UyH4=" domain:@"https://apiv2-gateway-fhn3.fullertonhealthtech.com"]; + [LFManager shareManager].delegate = self; + + return YES; +} + + + + + + + + +@end diff --git a/Example/LFRtcKit/LFRtcKit-Info.plist b/Example/LFRtcKit/LFRtcKit-Info.plist new file mode 100644 index 0000000..c9983b4 --- /dev/null +++ b/Example/LFRtcKit/LFRtcKit-Info.plist @@ -0,0 +1,51 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + NSCameraUsageDescription + use your camera + NSMicrophoneUsageDescription + use your mic + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Example/LFRtcKit/LFRtcKit-Prefix.pch b/Example/LFRtcKit/LFRtcKit-Prefix.pch new file mode 100644 index 0000000..7825372 --- /dev/null +++ b/Example/LFRtcKit/LFRtcKit-Prefix.pch @@ -0,0 +1,16 @@ +// +// Prefix header +// +// The contents of this file are implicitly included at the beginning of every source file. +// + +#import + +#ifndef __IPHONE_5_0 +#warning "This project uses features only available in iOS SDK 5.0 and later." +#endif + +#ifdef __OBJC__ + @import UIKit; + @import Foundation; +#endif diff --git a/Example/LFRtcKit/LFViewController.h b/Example/LFRtcKit/LFViewController.h new file mode 100644 index 0000000..9a65345 --- /dev/null +++ b/Example/LFRtcKit/LFViewController.h @@ -0,0 +1,13 @@ +// +// LFViewController.h +// LFRtcKit +// +// Created by kerwin on 01/18/2022. +// Copyright (c) 2022 kerwin. All rights reserved. +// + +@import UIKit; + +@interface LFViewController : UIViewController + +@end diff --git a/Example/LFRtcKit/LFViewController.m b/Example/LFRtcKit/LFViewController.m new file mode 100644 index 0000000..4b4af02 --- /dev/null +++ b/Example/LFRtcKit/LFViewController.m @@ -0,0 +1,31 @@ +// +// LFViewController.m +// LFRtcKit +// +// Created by kerwin on 01/18/2022. +// Copyright (c) 2022 kerwin. All rights reserved. +// + +#import "LFViewController.h" +#import "LoginViewController.h" +@interface LFViewController () + +@end + +@implementation LFViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + // Do any additional setup after loading the view, typically from a nib. + +} + + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git a/Example/LFRtcKit/LoginViewController.h b/Example/LFRtcKit/LoginViewController.h new file mode 100644 index 0000000..31731b4 --- /dev/null +++ b/Example/LFRtcKit/LoginViewController.h @@ -0,0 +1,17 @@ +// +// LoginViewController.h +// MyVideoSDK +// +// Created by kerwin Zhang on 2022/1/18. +// Copyright © 2022 kerwin. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface LoginViewController : UIViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/Example/LFRtcKit/LoginViewController.m b/Example/LFRtcKit/LoginViewController.m new file mode 100644 index 0000000..f3a0fef --- /dev/null +++ b/Example/LFRtcKit/LoginViewController.m @@ -0,0 +1,72 @@ +// +// LoginViewController.m +// MyVideoSDK +// +// Created by kerwin on 2020/1/6. +// Copyright © 2020 kerwin. All rights reserved. +// + +#import "LoginViewController.h" +#import +#import "Toast+UIView.h" +#import "ConsultationViewController.h" +#define kWeakSelf(type) __weak typeof(type) weak##type = type; +#define kStrongSelf(type) __strong typeof(type) type = weak##type; +@interface LoginViewController () +@property (weak, nonatomic) IBOutlet UITextField *userIdField; +@property (strong,nonatomic)LFManager *manager; + + +@end + +@implementation LoginViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(acceptInvitation:) name:@"ACCEPTINVITATION" object:nil]; + self.manager = [LFManager shareManager]; +} +-(void)acceptInvitation:(NSNotification *)noti{ + + LFRemoteInvitation *ri = noti.object; + [self.manager acceptRemoteInvitation:ri completion:^(LFInvitationApiCallErrorCode errorCode) { + if (errorCode == LFInvitationApiCallErrorOk) { + + }else{ + NSLog(@"accept fail : %d",(int)errorCode); + } + }]; + +} +-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ + [self.view endEditing:YES]; +} + +- (IBAction)loginButton:(id)sender { + [self.view endEditing:YES]; + if ([self.userIdField.text isEqualToString:@""]) { + return; + } + [[UIApplication sharedApplication].keyWindow makeToastActivity]; + kWeakSelf(self) + [self.manager loginByUserId:self.userIdField.text Success:^(NSString * _Nonnull accountToken, NSString * _Nonnull userId, NSString * _Nonnull tencentAppId, NSString * _Nonnull userSig) { + + kStrongSelf(self) + NSLog(@"login success"); + [[UIApplication sharedApplication].keyWindow hideToastActivity]; + ConsultationViewController *home = [[ConsultationViewController alloc]init]; + [self.navigationController pushViewController:home animated:YES]; + } Failure:^(LFLoginErrorCode errorCode) { + NSLog(@"login failed : %d",(int)errorCode); + [[UIApplication sharedApplication].keyWindow hideToastActivity]; + [[UIApplication sharedApplication].keyWindow makeToast:[NSString stringWithFormat:@"login failed : %d",(int)errorCode]]; + }]; + +} + + + + + + +@end diff --git a/Example/LFRtcKit/LoginViewController.xib b/Example/LFRtcKit/LoginViewController.xib new file mode 100644 index 0000000..28dd795 --- /dev/null +++ b/Example/LFRtcKit/LoginViewController.xib @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/LFRtcKit/Toast/Toast+UIView.h b/Example/LFRtcKit/Toast/Toast+UIView.h new file mode 100644 index 0000000..d9ac6a0 --- /dev/null +++ b/Example/LFRtcKit/Toast/Toast+UIView.h @@ -0,0 +1,53 @@ +/*************************************************************************** + +Toast+UIView.h +Toast +Version 2.0 + +Copyright (c) 2013 Charles Scalesse. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +***************************************************************************/ + +#import +#import + +@interface UIView (Toast) + +// each makeToast method creates a view and displays it as toast + +- (void)makeToast:(NSString *)message; + +- (void)makeToast:(NSString *)message duration:(CGFloat)interval position:(id)position; +- (void)makeToast:(NSString *)message duration:(CGFloat)interval position:(id)position title:(NSString *)title; +- (void)makeToast:(NSString *)message duration:(CGFloat)interval position:(id)position title:(NSString *)title image:(UIImage *)image; +- (void)makeToast:(NSString *)message duration:(CGFloat)interval position:(id)position image:(UIImage *)image; + +// displays toast with an activity spinner +- (void)makeToastActivity; +- (void)makeToastActivity:(id)position; +- (void)hideToastActivity; + +// the showToast methods display any view as toast +- (void)showToast:(UIView *)toast; +- (void)showToast:(UIView *)toast duration:(CGFloat)interval position:(id)point; + +@end diff --git a/Example/LFRtcKit/Toast/Toast+UIView.m b/Example/LFRtcKit/Toast/Toast+UIView.m new file mode 100644 index 0000000..a7b05d8 --- /dev/null +++ b/Example/LFRtcKit/Toast/Toast+UIView.m @@ -0,0 +1,325 @@ +// +// Toast+UIView.m +// Toast +// Version 2.0 +// +// Copyright 2013 Charles Scalesse. +// + +#import "Toast+UIView.h" +#import +#import + +/* + * CONFIGURE THESE VALUES TO ADJUST LOOK & FEEL, + * DISPLAY DURATION, ETC. + */ + +// general appearance +static const CGFloat CSToastMaxWidth = 0.8; // 80% of parent view width +static const CGFloat CSToastMaxHeight = 0.8; // 80% of parent view height +static const CGFloat CSToastHorizontalPadding = 30.0; +static const CGFloat CSToastVerticalPadding = 10.0; +static const CGFloat CSToastCornerRadius = 8.0; +static const CGFloat CSToastOpacity = 1; +static const CGFloat CSToastFontSize = 16.0; +static const CGFloat CSToastMaxTitleLines = 0; +static const CGFloat CSToastMaxMessageLines = 0; +static const CGFloat CSToastFadeDuration = 0.2; + +// shadow appearance +static const CGFloat CSToastShadowOpacity = 0.5; +static const CGFloat CSToastShadowRadius = 6.0; +static const CGSize CSToastShadowOffset = { 4.0, 4.0 }; +static const BOOL CSToastDisplayShadow = NO; + +// display duration and position +static const CGFloat CSToastDefaultDuration = 1.0; +static const NSString * CSToastDefaultPosition = @"center"; + +// image view size +static const CGFloat CSToastImageViewWidth = 80.0; +static const CGFloat CSToastImageViewHeight = 80.0; + +// activity +static const CGFloat CSToastActivityWidth = 120.0; +static const CGFloat CSToastActivityHeight = 114.0; +static const NSString * CSToastActivityDefaultPosition = @"center"; +static const NSString * CSToastActivityViewKey = @"CSToastActivityViewKey"; + + +@interface UIView (ToastPrivate) + +- (CGPoint)centerPointForPosition:(id)position withToast:(UIView *)toast; +- (UIView *)viewForMessage:(NSString *)message title:(NSString *)title image:(UIImage *)image; + +@end + + +@implementation UIView (Toast) + + + + +- (void)makeToast:(NSString *)message { + [self makeToast:message duration:CSToastDefaultDuration position:CSToastDefaultPosition]; +} + +- (void)makeToast:(NSString *)message duration:(CGFloat)interval position:(id)position { + UIView *toast = [self viewForMessage:message title:nil image:nil]; + [self showToast:toast duration:interval position:position]; +} + +- (void)makeToast:(NSString *)message duration:(CGFloat)interval position:(id)position title:(NSString *)title { + UIView *toast = [self viewForMessage:message title:title image:nil]; + [self showToast:toast duration:interval position:position]; +} + +- (void)makeToast:(NSString *)message duration:(CGFloat)interval position:(id)position image:(UIImage *)image { + UIView *toast = [self viewForMessage:message title:nil image:image]; + [self showToast:toast duration:interval position:position]; +} + +- (void)makeToast:(NSString *)message duration:(CGFloat)interval position:(id)position title:(NSString *)title image:(UIImage *)image { + UIView *toast = [self viewForMessage:message title:title image:image]; + [self showToast:toast duration:interval position:position]; +} + +- (void)showToast:(UIView *)toast { + [self showToast:toast duration:CSToastDefaultDuration position:CSToastDefaultPosition]; +} + +- (void)showToast:(UIView *)toast duration:(CGFloat)interval position:(id)point { + toast.center = [self centerPointForPosition:point withToast:toast]; + toast.alpha = 0.0; + [self addSubview:toast]; + + [UIView animateWithDuration:CSToastFadeDuration + delay:0.0 + options:UIViewAnimationOptionCurveEaseOut + animations:^{ + toast.alpha = 1.0; + } completion:^(BOOL finished) { + [UIView animateWithDuration:CSToastFadeDuration + delay:interval + options:UIViewAnimationOptionCurveEaseIn + animations:^{ + toast.alpha = 0.0; + } completion:^(BOOL finished) { + [toast removeFromSuperview]; + }]; + }]; +} + +#pragma mark - Toast Activity Methods + +- (void)makeToastActivity { + [self makeToastActivity:CSToastActivityDefaultPosition]; +} + +- (void)makeToastActivity:(id)position { + // sanity + UIView *existingActivityView = (UIView *)objc_getAssociatedObject(self, &CSToastActivityViewKey); + if (existingActivityView != nil) return; + + UIView *activityView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CSToastActivityWidth, CSToastActivityHeight)]; + activityView.center = [self centerPointForPosition:position withToast:activityView]; + activityView.backgroundColor = [[UIColor colorWithRed:50/255.0 green:61/255.0 blue:81/255.0 alpha:1.0] colorWithAlphaComponent:CSToastOpacity]; + activityView.alpha = 0.0; + activityView.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin); + activityView.layer.cornerRadius = CSToastCornerRadius; + + if (CSToastDisplayShadow) { + activityView.layer.shadowColor = [UIColor blackColor].CGColor; + activityView.layer.shadowOpacity = CSToastShadowOpacity; + activityView.layer.shadowRadius = CSToastShadowRadius; + activityView.layer.shadowOffset = CSToastShadowOffset; + } + + UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; + activityIndicatorView.center = CGPointMake(activityView.bounds.size.width / 2, activityView.bounds.size.height / 2); + [activityView addSubview:activityIndicatorView]; + [activityIndicatorView startAnimating]; + + // associate ourselves with the activity view + objc_setAssociatedObject (self, &CSToastActivityViewKey, activityView, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + [self addSubview:activityView]; + + [UIView animateWithDuration:CSToastFadeDuration + delay:0.0 + options:UIViewAnimationOptionCurveEaseOut + animations:^{ + activityView.alpha = 1.0; + } completion:nil]; +} +- (void)hideToastActivity { + UIView *existingActivityView = (UIView *)objc_getAssociatedObject(self, &CSToastActivityViewKey); + if (existingActivityView != nil) { + [UIView animateWithDuration:CSToastFadeDuration + delay:0.0 + options:(UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionBeginFromCurrentState) + animations:^{ + existingActivityView.alpha = 0.0; + } completion:^(BOOL finished) { + [existingActivityView removeFromSuperview]; + objc_setAssociatedObject (self, &CSToastActivityViewKey, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + }]; + } +} + +#pragma mark - Private Methods + +- (CGPoint)centerPointForPosition:(id)point withToast:(UIView *)toast { + if([point isKindOfClass:[NSString class]]) { + // convert string literals @"top", @"bottom", @"center", or any point wrapped in an NSValue object into a CGPoint + if([point caseInsensitiveCompare:@"top"] == NSOrderedSame) { + return CGPointMake(self.bounds.size.width/2, (toast.frame.size.height / 2) + CSToastVerticalPadding); + } else if([point caseInsensitiveCompare:@"bottom"] == NSOrderedSame) { + return CGPointMake(self.bounds.size.width/2, (self.bounds.size.height - (toast.frame.size.height / 2)) - CSToastVerticalPadding); + } else if([point caseInsensitiveCompare:@"center"] == NSOrderedSame) { + return CGPointMake(self.bounds.size.width / 2, self.bounds.size.height / 2); + } + } else if ([point isKindOfClass:[NSValue class]]) { + return [point CGPointValue]; + } + + NSLog(@"Warning: Invalid position for toast."); + return [self centerPointForPosition:CSToastDefaultPosition withToast:toast]; +} + +- (UIView *)viewForMessage:(NSString *)message title:(NSString *)title image:(UIImage *)image { + // sanity + if((message == nil) && (title == nil) && (image == nil)) return nil; + + // dynamically build a toast view with any combination of message, title, & image. + UILabel *messageLabel = nil; + UILabel *titleLabel = nil; + UIImageView *imageView = nil; + + // create the parent view + UIView *wrapperView = [[UIView alloc] init]; + wrapperView.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin); + wrapperView.layer.cornerRadius = CSToastCornerRadius; + + if (CSToastDisplayShadow) { + wrapperView.layer.shadowColor = [UIColor blackColor].CGColor; + wrapperView.layer.shadowOpacity = CSToastShadowOpacity; + wrapperView.layer.shadowRadius = CSToastShadowRadius; + wrapperView.layer.shadowOffset = CSToastShadowOffset; + } + + wrapperView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:CSToastOpacity]; + + if(image != nil) { + imageView = [[UIImageView alloc] initWithImage:image]; + imageView.contentMode = UIViewContentModeScaleAspectFit; + imageView.frame = CGRectMake(CSToastHorizontalPadding, CSToastVerticalPadding, CSToastImageViewWidth, CSToastImageViewHeight); + } + + CGFloat imageWidth, imageHeight, imageLeft; + + // the imageView frame values will be used to size & position the other views + if(imageView != nil) { + imageWidth = imageView.bounds.size.width; + imageHeight = imageView.bounds.size.height; + imageLeft = CSToastHorizontalPadding; + } else { + imageWidth = imageHeight = imageLeft = 0.0; + } + + if (title != nil) { + titleLabel = [[UILabel alloc] init]; + titleLabel.numberOfLines = CSToastMaxTitleLines; + titleLabel.font = [UIFont boldSystemFontOfSize:CSToastFontSize]; + titleLabel.textAlignment = NSTextAlignmentLeft; + titleLabel.lineBreakMode = NSLineBreakByWordWrapping; + titleLabel.textColor = [UIColor whiteColor]; + titleLabel.backgroundColor = [UIColor clearColor]; + titleLabel.alpha = 1.0; + titleLabel.text = title; + + // size the title label according to the length of the text + CGSize maxSizeTitle = CGSizeMake((self.bounds.size.width * CSToastMaxWidth) - imageWidth, self.bounds.size.height * CSToastMaxHeight); + + NSDictionary * titleDic = [NSDictionary dictionaryWithObjectsAndKeys:titleLabel.font, NSFontAttributeName,nil]; + + CGSize expectedSizeTitle =[message boundingRectWithSize:maxSizeTitle options:NSStringDrawingUsesLineFragmentOrigin |NSStringDrawingUsesFontLeading attributes:titleDic context:nil].size; + // CGSize expectedSizeTitle = [title sizeWithFont:titleLabel.font constrainedToSize:maxSizeTitle lineBreakMode:titleLabel.lineBreakMode]; + titleLabel.frame = CGRectMake(0.0, 0.0, expectedSizeTitle.width, expectedSizeTitle.height); + } + + if (message != nil) { + messageLabel = [[UILabel alloc] init]; + messageLabel.numberOfLines = CSToastMaxMessageLines; + messageLabel.font = [UIFont systemFontOfSize:CSToastFontSize]; + messageLabel.lineBreakMode = NSLineBreakByWordWrapping; + messageLabel.textColor = [UIColor whiteColor]; + messageLabel.backgroundColor = [UIColor clearColor]; + messageLabel.alpha = 1.0; + messageLabel.text = message; + + // size the message label according to the length of the text + CGSize maxSizeMessage = CGSizeMake((self.bounds.size.width * CSToastMaxWidth) - imageWidth, self.bounds.size.height * CSToastMaxHeight); + + + NSDictionary * MessageDic = [NSDictionary dictionaryWithObjectsAndKeys:messageLabel.font, NSFontAttributeName,nil]; + + CGSize expectedSizeMessage =[message boundingRectWithSize:maxSizeMessage options:NSStringDrawingUsesLineFragmentOrigin |NSStringDrawingUsesFontLeading attributes:MessageDic context:nil].size; + + // CGSize expectedSizeMessage = [message sizeWithFont:messageLabel.font constrainedToSize:maxSizeMessage lineBreakMode:messageLabel.lineBreakMode]; + messageLabel.frame = CGRectMake(0.0, 0.0, expectedSizeMessage.width, expectedSizeMessage.height); + } + + // titleLabel frame values + CGFloat titleWidth, titleHeight, titleTop, titleLeft; + + if(titleLabel != nil) { + titleWidth = titleLabel.bounds.size.width; + titleHeight = titleLabel.bounds.size.height; + titleTop = CSToastVerticalPadding; + titleLeft = imageLeft + imageWidth + CSToastHorizontalPadding; + } else { + titleWidth = titleHeight = titleTop = titleLeft = 0.0; + } + + // messageLabel frame values + CGFloat messageWidth, messageHeight, messageLeft, messageTop; + + if(messageLabel != nil) { + messageWidth = messageLabel.bounds.size.width; + messageHeight = messageLabel.bounds.size.height; + messageLeft = imageLeft + imageWidth + CSToastHorizontalPadding; + messageTop = titleTop + titleHeight + CSToastVerticalPadding; + } else { + messageWidth = messageHeight = messageLeft = messageTop = 0.0; + } + + + CGFloat longerWidth = MAX(titleWidth, messageWidth); + CGFloat longerLeft = MAX(titleLeft, messageLeft); + + // wrapper width uses the longerWidth or the image width, whatever is larger. same logic applies to the wrapper height + CGFloat wrapperWidth = MAX((imageWidth + (CSToastHorizontalPadding * 2)), (longerLeft + longerWidth + CSToastHorizontalPadding)); + CGFloat wrapperHeight = MAX((messageTop + messageHeight + CSToastVerticalPadding), (imageHeight + (CSToastVerticalPadding * 2))); + + wrapperView.frame = CGRectMake(0.0, 0.0, wrapperWidth, wrapperHeight); + + if(titleLabel != nil) { + titleLabel.frame = CGRectMake(titleLeft, titleTop, titleWidth, titleHeight); + [wrapperView addSubview:titleLabel]; + } + + if(messageLabel != nil) { + messageLabel.frame = CGRectMake(messageLeft, messageTop, messageWidth, messageHeight); + [wrapperView addSubview:messageLabel]; + } + + if(imageView != nil) { + [wrapperView addSubview:imageView]; + } + + return wrapperView; +} + +@end diff --git a/Example/LFRtcKit/VideoViewController.h b/Example/LFRtcKit/VideoViewController.h new file mode 100644 index 0000000..24ef959 --- /dev/null +++ b/Example/LFRtcKit/VideoViewController.h @@ -0,0 +1,16 @@ +// +// VideoViewController.h +// MyVideoSDK +// +// Created by kerwin Zhang on 2022/1/18. +// Copyright © 2022 kerwin. All rights reserved. +// + +#import +NS_ASSUME_NONNULL_BEGIN + +@interface VideoViewController : UIViewController +@property(nonatomic,copy)NSString *channelId; +@end + +NS_ASSUME_NONNULL_END diff --git a/Example/LFRtcKit/VideoViewController.m b/Example/LFRtcKit/VideoViewController.m new file mode 100644 index 0000000..f054041 --- /dev/null +++ b/Example/LFRtcKit/VideoViewController.m @@ -0,0 +1,155 @@ +// +// VideoViewController.m +// MyVideoSDK +// +// Created by kerwin on 2020/1/6. +// Copyright © 2020 kerwin. All rights reserved. +// + +#import "VideoViewController.h" +#import +#import "Toast+UIView.h" +@interface VideoViewController () +@property(nonatomic,strong)LFVideoEngine *engine; + +@property(nonatomic,strong)UIView *remoteVideo; +@property(nonatomic,strong)UIView *localVideo; +@property(nonatomic,strong)UIButton *muteAudioBtn; +@property(nonatomic,strong)UIButton *hangUpBtn; +@property(nonatomic,strong)UIButton *cameraBtn; + +@end + +@implementation VideoViewController +-(void)dealloc{ + NSLog(@"dealloc videoviewcontroller"); +} +- (void)viewDidLoad { + [super viewDidLoad]; + [self.view addSubview:self.remoteVideo]; + [self.view addSubview:self.localVideo]; + [self.view addSubview:self.muteAudioBtn]; + [self.view addSubview:self.hangUpBtn]; + [self.view addSubview: self.cameraBtn]; + + self.engine = [LFVideoEngine shareEngine]; + self.engine.delegate = self; + + [self.engine setupLocalVideo:self.localVideo]; + [self.engine enableVideo]; + [self.engine startPreview]; + [self.engine joinChannelByChannelId:self.channelId completion:^(LFJoinChannelErrorCode errorCode) { + if (errorCode == LFJoinChannelErrorCodeOk) { + NSLog(@"join channel success"); + }else{ + NSLog(@"join channel fail %d",(int)errorCode); + } + }]; +} + +-(void)onSetRemoteVideoFrameWithUid:(NSUInteger)uid size:(CGSize)size{ + [self.engine setupRemoteVideo:self.remoteVideo uid:uid]; +} +-(void)didOfflineOfUid:(NSUInteger)uid reason:(LFUserOfflineReason)reason{ + [self.engine leaveChannel]; + [self dismissViewControllerAnimated:YES completion:^{ + [self.engine destoryEngine]; + }]; +} +-(void)onNetworkQuality:(NSUInteger)uid txQuality:(LFNetworkQuality)txQuality rxQuality:(LFNetworkQuality)rxQuality{ + + switch (rxQuality) { + case LFNetworkQualityUnknown: + [self.view makeToast:@"Unknown"]; + break; + case LFNetworkQualityExcellent: + [self.view makeToast:@"Excellent"]; + break; + case LFNetworkQualityGood: + [self.view makeToast:@"Good"]; + break; + case LFNetworkQualityPoor: + [self.view makeToast:@"Poor"]; + break; + case LFNetworkQualityBad: + [self.view makeToast:@"Bad"]; + break; + case LFNetworkQualityVBad: + [self.view makeToast:@"VBad"]; + break; + case LFNetworkQualityDown: + [self.view makeToast:@"Down"]; + break; + case LFNetworkQualityUnsupported: + [self.view makeToast:@"Unsupported"]; + break; + case LFNetworkQualityDetecting: + [self.view makeToast:@"Detecting"]; + break; + default: + break; + } + +} +- (void)hangup:(id)sender { + + [self.engine leaveChannel]; + + [self dismissViewControllerAnimated:YES completion:nil]; +} +- (void)muteButtonClick:(UIButton *)sender { + sender.selected = !sender.selected; + [self.engine muteLocalAudio:sender.selected]; +} +- (void)switchCameraButtonClick:(id)sender { + [self.engine switchCamera]; +} + +-(UIView *)remoteVideo{ + if (!_remoteVideo) { + _remoteVideo = [[UIView alloc]initWithFrame:self.view.bounds]; + _remoteVideo.backgroundColor = [UIColor grayColor]; + } + return _remoteVideo; +} +-(UIView *)localVideo{ + if (!_localVideo) { + _localVideo = [[UIView alloc]initWithFrame:CGRectMake(self.view.frame.size.width - 125, 100, 85, 140)]; + } + return _localVideo; +} + + +-(UIButton *)muteAudioBtn{ + if (!_muteAudioBtn) { + _muteAudioBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _muteAudioBtn.frame = CGRectMake(60, self.view.frame.size.height-70-94, 60, 60); + [_muteAudioBtn setImage:[UIImage imageNamed:@"mute_select"] forState:(UIControlStateNormal)]; + [_muteAudioBtn setImage:[UIImage imageNamed:@"mute_selected"] forState:(UIControlStateSelected)]; + [_muteAudioBtn addTarget:self action:@selector(muteButtonClick:) forControlEvents:(UIControlEventTouchUpInside)]; + } + return _muteAudioBtn; +} + +-(UIButton *)hangUpBtn{ + if (!_hangUpBtn) { + _hangUpBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _hangUpBtn.frame = CGRectMake((self.view.frame.size.width)/2-30, self.view.frame.size.height-70-94, 60, 60); + [_hangUpBtn setImage: [UIImage imageNamed:@"hangup"] forState:(UIControlStateNormal)]; + [_hangUpBtn addTarget:self action:@selector(hangup:) forControlEvents:(UIControlEventTouchUpInside)]; + } + return _hangUpBtn; +} +-(UIButton *)cameraBtn{ + + if (!_cameraBtn) { + _cameraBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + [_cameraBtn setImage:[UIImage imageNamed:@"camera"] forState:(UIControlStateNormal)]; + _cameraBtn.frame = CGRectMake(self.view.frame.size.width- 120 , self.view.frame.size.height-70-94, 60, 60); + [_cameraBtn addTarget:self action:@selector(switchCameraButtonClick:) forControlEvents:(UIControlEventTouchUpInside)]; + + } + return _cameraBtn; +} + +@end diff --git a/Example/LFRtcKit/en.lproj/InfoPlist.strings b/Example/LFRtcKit/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/Example/LFRtcKit/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Example/LFRtcKit/main.m b/Example/LFRtcKit/main.m new file mode 100644 index 0000000..e929a4c --- /dev/null +++ b/Example/LFRtcKit/main.m @@ -0,0 +1,17 @@ +// +// main.m +// LFRtcKit +// +// Created by kerwin on 01/18/2022. +// Copyright (c) 2022 kerwin. All rights reserved. +// + +@import UIKit; +#import "LFAppDelegate.h" + +int main(int argc, char * argv[]) +{ + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([LFAppDelegate class])); + } +} diff --git a/Example/Podfile b/Example/Podfile new file mode 100644 index 0000000..24daece --- /dev/null +++ b/Example/Podfile @@ -0,0 +1,13 @@ +use_frameworks! + +platform :ios, '9.0' + +target 'LFRtcKit_Example' do +# pod 'LFRtcKit', :path => '../' + + target 'LFRtcKit_Tests' do + inherit! :search_paths + + + end +end diff --git a/Example/Podfile.lock b/Example/Podfile.lock new file mode 100644 index 0000000..9f46aa2 --- /dev/null +++ b/Example/Podfile.lock @@ -0,0 +1,3 @@ +PODFILE CHECKSUM: 7b1b15dbe9f7567707f6d03fe75175a46d1b8989 + +COCOAPODS: 1.11.2 diff --git a/Example/Pods/Local Podspecs/LFRtcKit.podspec.json b/Example/Pods/Local Podspecs/LFRtcKit.podspec.json new file mode 100644 index 0000000..d481b3a --- /dev/null +++ b/Example/Pods/Local Podspecs/LFRtcKit.podspec.json @@ -0,0 +1,36 @@ +{ + "name": "LFRtcKit", + "version": "0.1.0", + "summary": "RtcKit of LiveFuller", + "description": "TODO: Add long description of the pod here.", + "homepage": "https://codeup.teambition.com/5d009edc70f86b0001109ad2/common/ios/LivefullerDC", + "license": { + "type": "MIT", + "file": "LICENSE" + }, + "authors": { + "kerwin": "kerwin1232@163.com" + }, + "source": { + "git": "https://codeup.teambition.com/5d009edc70f86b0001109ad2/common/ios/LivefullerDC.git", + "tag": "0.1.0" + }, + "platforms": { + "ios": "9.0" + }, + "vendored_frameworks": [ + "LFRtcKit/Classes/LiveFullerDC.framework" + ], + "public_header_files": "LFRtcKit/Classes/Header/*.h", + "pod_target_xcconfig": { + "VALID_ARCHS": "x86_64 arm64 armv7 armv7s" + }, + "dependencies": { + "AgoraRtcEngine_iOS": [ + "~> 3.6.1" + ], + "AgoraRtm_iOS": [ + "~> 1.4.8" + ] + } +} diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock new file mode 100644 index 0000000..9f46aa2 --- /dev/null +++ b/Example/Pods/Manifest.lock @@ -0,0 +1,3 @@ +PODFILE CHECKSUM: 7b1b15dbe9f7567707f6d03fe75175a46d1b8989 + +COCOAPODS: 1.11.2 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..51ae4d1 --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,571 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0177A5B31E8B42AE02EB638AA1945D07 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; + 7B67B1E9EADB8899EC665D19465197F7 /* Pods-LFRtcKit_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F1786E3486684BBBF6DBAF832575FE77 /* Pods-LFRtcKit_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AD2C8BCB881FC6E53B5B5F627E72D294 /* Pods-LFRtcKit_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3A6503517EFFAA8094733C78EFFA0E /* Pods-LFRtcKit_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CC000FF9604D7FF2A06C9935A049E374 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; + CF839B6370CDC08CDE488C9EAFDB96B5 /* Pods-LFRtcKit_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ADB9EC845CA1C3475934644D3E285E4 /* Pods-LFRtcKit_Example-dummy.m */; }; + F922706A9BCB306301533BF0428E0891 /* Pods-LFRtcKit_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 08F949B4FCFBD3005B42C9B0026F8E0E /* Pods-LFRtcKit_Tests-dummy.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + EE601198AFA809AE86425C348DF04C8D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3EBB75E87A090338D685C7DF1A708E6B; + remoteInfo = "Pods-LFRtcKit_Example"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 057FAFB8F80335D2A1605789A32FCA44 /* Pods-LFRtcKit_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-LFRtcKit_Tests-acknowledgements.markdown"; sourceTree = ""; }; + 08F949B4FCFBD3005B42C9B0026F8E0E /* Pods-LFRtcKit_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-LFRtcKit_Tests-dummy.m"; sourceTree = ""; }; + 0ADB9EC845CA1C3475934644D3E285E4 /* Pods-LFRtcKit_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-LFRtcKit_Example-dummy.m"; sourceTree = ""; }; + 10E79E738D66C1635945C5C45902CEEF /* Pods-LFRtcKit_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-LFRtcKit_Example.release.xcconfig"; sourceTree = ""; }; + 19A88D8A535B1BDC9A2DC68FB2744EBD /* Pods-LFRtcKit_Example */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-LFRtcKit_Example"; path = Pods_LFRtcKit_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 365F8358B2993C423D438B17205192C8 /* Pods-LFRtcKit_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-LFRtcKit_Tests-acknowledgements.plist"; sourceTree = ""; }; + 4F3AEF11A56FF2035EA2754674E129ED /* Pods-LFRtcKit_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-LFRtcKit_Tests.release.xcconfig"; sourceTree = ""; }; + 5278BFA68791E7810CCC4025B38ED7A9 /* Pods-LFRtcKit_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-LFRtcKit_Example.modulemap"; sourceTree = ""; }; + 544B08C55BC9A6A573415E36E172079B /* Pods-LFRtcKit_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-LFRtcKit_Tests.debug.xcconfig"; sourceTree = ""; }; + 5A6E140D2C6B786537EB79D1198E6E41 /* Pods-LFRtcKit_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-LFRtcKit_Example.debug.xcconfig"; sourceTree = ""; }; + 5D9A031DBF50CC283E638E4E77886A7C /* Pods-LFRtcKit_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-LFRtcKit_Example-acknowledgements.markdown"; sourceTree = ""; }; + 6A56D108CB775876596DA9DCC9B7AA2D /* Pods-LFRtcKit_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-LFRtcKit_Example-Info.plist"; sourceTree = ""; }; + 6C3A6503517EFFAA8094733C78EFFA0E /* Pods-LFRtcKit_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-LFRtcKit_Tests-umbrella.h"; sourceTree = ""; }; + 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 7A0A830CFAE1F1FCD55A3DF4871272AC /* Pods-LFRtcKit_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-LFRtcKit_Tests.modulemap"; sourceTree = ""; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + AA413D6B44ABD79D71E4455C14D1BD26 /* Pods-LFRtcKit_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-LFRtcKit_Example-acknowledgements.plist"; sourceTree = ""; }; + BDEDF6FD4ABC46D594A2F89CD9F8B874 /* Pods-LFRtcKit_Tests */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-LFRtcKit_Tests"; path = Pods_LFRtcKit_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CA6F49A23BBD199B991B7CA78444D3DA /* Pods-LFRtcKit_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-LFRtcKit_Tests-Info.plist"; sourceTree = ""; }; + F1786E3486684BBBF6DBAF832575FE77 /* Pods-LFRtcKit_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-LFRtcKit_Example-umbrella.h"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 2A5BC4FF4B70C9A35FE2FF40782518AA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0177A5B31E8B42AE02EB638AA1945D07 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7FC122462086BF4F3948056B0D70EACF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CC000FF9604D7FF2A06C9935A049E374 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 578452D2E740E91742655AC8F1636D1F /* iOS */ = { + isa = PBXGroup; + children = ( + 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 85ECFB61BA32466B1562A3A119DB4141 /* Pods-LFRtcKit_Tests */ = { + isa = PBXGroup; + children = ( + 7A0A830CFAE1F1FCD55A3DF4871272AC /* Pods-LFRtcKit_Tests.modulemap */, + 057FAFB8F80335D2A1605789A32FCA44 /* Pods-LFRtcKit_Tests-acknowledgements.markdown */, + 365F8358B2993C423D438B17205192C8 /* Pods-LFRtcKit_Tests-acknowledgements.plist */, + 08F949B4FCFBD3005B42C9B0026F8E0E /* Pods-LFRtcKit_Tests-dummy.m */, + CA6F49A23BBD199B991B7CA78444D3DA /* Pods-LFRtcKit_Tests-Info.plist */, + 6C3A6503517EFFAA8094733C78EFFA0E /* Pods-LFRtcKit_Tests-umbrella.h */, + 544B08C55BC9A6A573415E36E172079B /* Pods-LFRtcKit_Tests.debug.xcconfig */, + 4F3AEF11A56FF2035EA2754674E129ED /* Pods-LFRtcKit_Tests.release.xcconfig */, + ); + name = "Pods-LFRtcKit_Tests"; + path = "Target Support Files/Pods-LFRtcKit_Tests"; + sourceTree = ""; + }; + AE7DB2E85A344D7D65D81A60CE634815 /* Pods-LFRtcKit_Example */ = { + isa = PBXGroup; + children = ( + 5278BFA68791E7810CCC4025B38ED7A9 /* Pods-LFRtcKit_Example.modulemap */, + 5D9A031DBF50CC283E638E4E77886A7C /* Pods-LFRtcKit_Example-acknowledgements.markdown */, + AA413D6B44ABD79D71E4455C14D1BD26 /* Pods-LFRtcKit_Example-acknowledgements.plist */, + 0ADB9EC845CA1C3475934644D3E285E4 /* Pods-LFRtcKit_Example-dummy.m */, + 6A56D108CB775876596DA9DCC9B7AA2D /* Pods-LFRtcKit_Example-Info.plist */, + F1786E3486684BBBF6DBAF832575FE77 /* Pods-LFRtcKit_Example-umbrella.h */, + 5A6E140D2C6B786537EB79D1198E6E41 /* Pods-LFRtcKit_Example.debug.xcconfig */, + 10E79E738D66C1635945C5C45902CEEF /* Pods-LFRtcKit_Example.release.xcconfig */, + ); + name = "Pods-LFRtcKit_Example"; + path = "Target Support Files/Pods-LFRtcKit_Example"; + sourceTree = ""; + }; + B0E14594305A0240174FBD637DA154FD /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + AE7DB2E85A344D7D65D81A60CE634815 /* Pods-LFRtcKit_Example */, + 85ECFB61BA32466B1562A3A119DB4141 /* Pods-LFRtcKit_Tests */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + C26082959CF1C7AE8B1AF689B8B816E5 /* Products */ = { + isa = PBXGroup; + children = ( + 19A88D8A535B1BDC9A2DC68FB2744EBD /* Pods-LFRtcKit_Example */, + BDEDF6FD4ABC46D594A2F89CD9F8B874 /* Pods-LFRtcKit_Tests */, + ); + name = Products; + sourceTree = ""; + }; + CF1408CF629C7361332E53B88F7BD30C = { + isa = PBXGroup; + children = ( + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, + C26082959CF1C7AE8B1AF689B8B816E5 /* Products */, + B0E14594305A0240174FBD637DA154FD /* Targets Support Files */, + ); + sourceTree = ""; + }; + D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 578452D2E740E91742655AC8F1636D1F /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 710605FA30D985FBD0FF3B4DF70473FE /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 7B67B1E9EADB8899EC665D19465197F7 /* Pods-LFRtcKit_Example-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F284C58C58D4D83FA8B545F0062D6D5A /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AD2C8BCB881FC6E53B5B5F627E72D294 /* Pods-LFRtcKit_Tests-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 3EBB75E87A090338D685C7DF1A708E6B /* Pods-LFRtcKit_Example */ = { + isa = PBXNativeTarget; + buildConfigurationList = F84C3D13D356F4F6852BC362674203E6 /* Build configuration list for PBXNativeTarget "Pods-LFRtcKit_Example" */; + buildPhases = ( + 710605FA30D985FBD0FF3B4DF70473FE /* Headers */, + FF6B7DDEC763736860CEB197E0D95628 /* Sources */, + 7FC122462086BF4F3948056B0D70EACF /* Frameworks */, + 2D0A94EC1167DAE52D153DD9E0AF4197 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-LFRtcKit_Example"; + productName = Pods_LFRtcKit_Example; + productReference = 19A88D8A535B1BDC9A2DC68FB2744EBD /* Pods-LFRtcKit_Example */; + productType = "com.apple.product-type.framework"; + }; + A80A163D07AF7FEC3E77B94FF40F71FF /* Pods-LFRtcKit_Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 92031BA48A3EBDB33C276D47B80CFCE4 /* Build configuration list for PBXNativeTarget "Pods-LFRtcKit_Tests" */; + buildPhases = ( + F284C58C58D4D83FA8B545F0062D6D5A /* Headers */, + 53EAD8DAE3F2C86118FA14CB00C3B316 /* Sources */, + 2A5BC4FF4B70C9A35FE2FF40782518AA /* Frameworks */, + E8F579B6D644A44C1ABCB6078EA8A954 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 9A218B9C58043EA710EB0629F24A69DE /* PBXTargetDependency */, + ); + name = "Pods-LFRtcKit_Tests"; + productName = Pods_LFRtcKit_Tests; + productReference = BDEDF6FD4ABC46D594A2F89CD9F8B874 /* Pods-LFRtcKit_Tests */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1240; + LastUpgradeCheck = 1240; + }; + buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + en, + ); + mainGroup = CF1408CF629C7361332E53B88F7BD30C; + productRefGroup = C26082959CF1C7AE8B1AF689B8B816E5 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 3EBB75E87A090338D685C7DF1A708E6B /* Pods-LFRtcKit_Example */, + A80A163D07AF7FEC3E77B94FF40F71FF /* Pods-LFRtcKit_Tests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 2D0A94EC1167DAE52D153DD9E0AF4197 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E8F579B6D644A44C1ABCB6078EA8A954 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 53EAD8DAE3F2C86118FA14CB00C3B316 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F922706A9BCB306301533BF0428E0891 /* Pods-LFRtcKit_Tests-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FF6B7DDEC763736860CEB197E0D95628 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CF839B6370CDC08CDE488C9EAFDB96B5 /* Pods-LFRtcKit_Example-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 9A218B9C58043EA710EB0629F24A69DE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Pods-LFRtcKit_Example"; + target = 3EBB75E87A090338D685C7DF1A708E6B /* Pods-LFRtcKit_Example */; + targetProxy = EE601198AFA809AE86425C348DF04C8D /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 25AD9454612BF454A1E3DC4CD4FA8C6D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + 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; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 449B3DC1A1FE420F9AAB127913315DB2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4F3AEF11A56FF2035EA2754674E129ED /* Pods-LFRtcKit_Tests.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 5B6F33F2C5F3D4245D19EB1281CD697E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 10E79E738D66C1635945C5C45902CEEF /* Pods-LFRtcKit_Example.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 91EE5479B5B2B8389A307A8BC12BF23F /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5A6E140D2C6B786537EB79D1198E6E41 /* Pods-LFRtcKit_Example.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + A33FE8126531C85847386956348DE541 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 544B08C55BC9A6A573415E36E172079B /* Pods-LFRtcKit_Tests.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + CA547D2C7E9A8A153DC2B27FBE00B112 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + 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; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 25AD9454612BF454A1E3DC4CD4FA8C6D /* Debug */, + CA547D2C7E9A8A153DC2B27FBE00B112 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 92031BA48A3EBDB33C276D47B80CFCE4 /* Build configuration list for PBXNativeTarget "Pods-LFRtcKit_Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A33FE8126531C85847386956348DE541 /* Debug */, + 449B3DC1A1FE420F9AAB127913315DB2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F84C3D13D356F4F6852BC362674203E6 /* Build configuration list for PBXNativeTarget "Pods-LFRtcKit_Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 91EE5479B5B2B8389A307A8BC12BF23F /* Debug */, + 5B6F33F2C5F3D4245D19EB1281CD697E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; +} diff --git a/Example/Pods/Pods.xcodeproj/xcuserdata/kerwinzhang.xcuserdatad/xcschemes/Pods-LFRtcKit_Example.xcscheme b/Example/Pods/Pods.xcodeproj/xcuserdata/kerwinzhang.xcuserdatad/xcschemes/Pods-LFRtcKit_Example.xcscheme new file mode 100644 index 0000000..52f81ac --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/xcuserdata/kerwinzhang.xcuserdatad/xcschemes/Pods-LFRtcKit_Example.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Pods/Pods.xcodeproj/xcuserdata/kerwinzhang.xcuserdatad/xcschemes/Pods-LFRtcKit_Tests.xcscheme b/Example/Pods/Pods.xcodeproj/xcuserdata/kerwinzhang.xcuserdatad/xcschemes/Pods-LFRtcKit_Tests.xcscheme new file mode 100644 index 0000000..8cdcb4d --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/xcuserdata/kerwinzhang.xcuserdatad/xcschemes/Pods-LFRtcKit_Tests.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Pods/Pods.xcodeproj/xcuserdata/kerwinzhang.xcuserdatad/xcschemes/xcschememanagement.plist b/Example/Pods/Pods.xcodeproj/xcuserdata/kerwinzhang.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..7ba4819 --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/xcuserdata/kerwinzhang.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,21 @@ + + + + + SchemeUserState + + Pods-LFRtcKit_Example.xcscheme + + isShown + + + Pods-LFRtcKit_Tests.xcscheme + + isShown + + + + SuppressBuildableAutocreation + + + diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-Info.plist b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-acknowledgements.markdown new file mode 100644 index 0000000..102af75 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-acknowledgements.markdown @@ -0,0 +1,3 @@ +# Acknowledgements +This application makes use of the following third party libraries: +Generated by CocoaPods - https://cocoapods.org diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-acknowledgements.plist new file mode 100644 index 0000000..7acbad1 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-acknowledgements.plist @@ -0,0 +1,29 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-dummy.m b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-dummy.m new file mode 100644 index 0000000..29a2600 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_LFRtcKit_Example : NSObject +@end +@implementation PodsDummy_Pods_LFRtcKit_Example +@end diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-frameworks.sh b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-frameworks.sh new file mode 100755 index 0000000..f1b6309 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-frameworks.sh @@ -0,0 +1,210 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +BCSYMBOLMAP_DIR="BCSymbolMaps" + + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then + # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied + find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do + echo "Installing $f" + install_bcsymbolmap "$f" "$destination" + rm "$f" + done + rmdir "${source}/${BCSYMBOLMAP_DIR}" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + warn_missing_arch=${2:-true} + if [ -r "$source" ]; then + # Copy the dSYM into the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .dSYM "$source")" + binary_name="$(ls "$source/Contents/Resources/DWARF")" + binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" + + # Strip invalid architectures from the dSYM. + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" "$warn_missing_arch" + fi + if [[ $STRIP_BINARY_RETVAL == 0 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + mkdir -p "${DWARF_DSYM_FOLDER_PATH}" + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" + fi + fi +} + +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + warn_missing_arch=${2:-true} + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + if [[ "$warn_missing_arch" == "true" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + fi + STRIP_BINARY_RETVAL=1 + return + fi + stripped="" + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=0 +} + +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraAIDenoiseExtension.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraCIExtension.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraCore.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraDav1dExtension.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraFDExtension.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraJNDExtension.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraRtcKit.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraSoundTouch.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraVideoProcessExtension.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraVideoSegmentationExtension.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/Agorafdkaac.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/Agoraffmpeg.framework" + install_framework "${PODS_ROOT}/AgoraRtm_iOS/AgoraRtmKit.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraAIDenoiseExtension.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraCIExtension.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraCore.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraDav1dExtension.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraFDExtension.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraJNDExtension.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraRtcKit.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraSoundTouch.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraVideoProcessExtension.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/AgoraVideoSegmentationExtension.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/Agorafdkaac.framework" + install_framework "${PODS_ROOT}/AgoraRtcEngine_iOS/Agoraffmpeg.framework" + install_framework "${PODS_ROOT}/AgoraRtm_iOS/AgoraRtmKit.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-umbrella.h b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-umbrella.h new file mode 100644 index 0000000..b8f13b4 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_LFRtcKit_ExampleVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_LFRtcKit_ExampleVersionString[]; + diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example.debug.xcconfig b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example.debug.xcconfig new file mode 100644 index 0000000..26f2c77 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example.debug.xcconfig @@ -0,0 +1,8 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example.modulemap b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example.modulemap new file mode 100644 index 0000000..2f3bae7 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example.modulemap @@ -0,0 +1,6 @@ +framework module Pods_LFRtcKit_Example { + umbrella header "Pods-LFRtcKit_Example-umbrella.h" + + export * + module * { export * } +} diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example.release.xcconfig b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example.release.xcconfig new file mode 100644 index 0000000..26f2c77 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Example/Pods-LFRtcKit_Example.release.xcconfig @@ -0,0 +1,8 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-Info.plist b/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-acknowledgements.markdown new file mode 100644 index 0000000..102af75 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-acknowledgements.markdown @@ -0,0 +1,3 @@ +# Acknowledgements +This application makes use of the following third party libraries: +Generated by CocoaPods - https://cocoapods.org diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-acknowledgements.plist new file mode 100644 index 0000000..7acbad1 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-acknowledgements.plist @@ -0,0 +1,29 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-dummy.m b/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-dummy.m new file mode 100644 index 0000000..4466778 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_LFRtcKit_Tests : NSObject +@end +@implementation PodsDummy_Pods_LFRtcKit_Tests +@end diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-umbrella.h b/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-umbrella.h new file mode 100644 index 0000000..e4921e6 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_LFRtcKit_TestsVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_LFRtcKit_TestsVersionString[]; + diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests.debug.xcconfig b/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests.debug.xcconfig new file mode 100644 index 0000000..26f2c77 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests.debug.xcconfig @@ -0,0 +1,8 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests.modulemap b/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests.modulemap new file mode 100644 index 0000000..3fed9ee --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests.modulemap @@ -0,0 +1,6 @@ +framework module Pods_LFRtcKit_Tests { + umbrella header "Pods-LFRtcKit_Tests-umbrella.h" + + export * + module * { export * } +} diff --git a/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests.release.xcconfig b/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests.release.xcconfig new file mode 100644 index 0000000..26f2c77 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-LFRtcKit_Tests/Pods-LFRtcKit_Tests.release.xcconfig @@ -0,0 +1,8 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Tests/Tests-Info.plist b/Example/Tests/Tests-Info.plist new file mode 100644 index 0000000..169b6f7 --- /dev/null +++ b/Example/Tests/Tests-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Example/Tests/Tests-Prefix.pch b/Example/Tests/Tests-Prefix.pch new file mode 100644 index 0000000..0bfb741 --- /dev/null +++ b/Example/Tests/Tests-Prefix.pch @@ -0,0 +1,7 @@ +// The contents of this file are implicitly included at the beginning of every test case source file. + +#ifdef __OBJC__ + + + +#endif diff --git a/Example/Tests/Tests.m b/Example/Tests/Tests.m new file mode 100644 index 0000000..d22e571 --- /dev/null +++ b/Example/Tests/Tests.m @@ -0,0 +1,35 @@ +// +// LFRtcKitTests.m +// LFRtcKitTests +// +// Created by kerwin on 01/18/2022. +// Copyright (c) 2022 kerwin. All rights reserved. +// + +@import XCTest; + +@interface Tests : XCTestCase + +@end + +@implementation Tests + +- (void)setUp +{ + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown +{ + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample +{ + XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); +} + +@end + diff --git a/Example/Tests/en.lproj/InfoPlist.strings b/Example/Tests/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/Example/Tests/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/LFRtcKit.podspec b/LFRtcKit.podspec new file mode 100644 index 0000000..172e782 --- /dev/null +++ b/LFRtcKit.podspec @@ -0,0 +1,43 @@ +# +# Be sure to run `pod lib lint LFRtcKit.podspec' to ensure this is a +# valid spec before submitting. +# +# Any lines starting with a # are optional, but their use is encouraged +# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html +# + +Pod::Spec.new do |s| + s.name = 'LFRtcKit' + s.version = '0.1.0' + s.summary = 'RtcKit of LiveFuller' + +# This description is used to generate tags and improve search results. +# * Think: What does it do? Why did you write it? What is the focus? +# * Try to keep it short, snappy and to the point. +# * Write the description between the DESC delimiters below. +# * Finally, don't worry about the indent, CocoaPods strips it! + + s.description = <<-DESC +TODO: Add long description of the pod here. + DESC + + s.homepage = 'https://github.com/kerwin1232/LFRtckit' + # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' + s.license = { :type => 'MIT', :file => 'LICENSE' } + s.author = { 'kerwin' => 'kerwin1232@163.com' } + s.source = { :git => 'https://github.com/kerwin1232/LFRtckit.git', :tag => s.version.to_s } + # s.social_media_url = 'https://twitter.com/' + + s.ios.deployment_target = '9.0' + s.vendored_frameworks = 'LFRtcKit/Classes/LiveFullerDC.framework' + +# s.source_files = 'LFRtcKit/Classes/**/*' + # s.resource_bundles = { + # 'LFRtcKit' => ['LFRtcKit/Assets/*.png'] + # } + s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 arm64 armv7 armv7s' } + # s.public_header_files = 'Pod/Classes/Header/*.h' + # s.frameworks = 'UIKit', 'MapKit' + s.dependency 'AgoraRtcEngine_iOS', '~> 3.6.1' + s.dependency 'AgoraRtm_iOS','~> 1.4.8' +end diff --git a/LFRtcKit/0.1.0/LFRtcKit.podspec b/LFRtcKit/0.1.0/LFRtcKit.podspec new file mode 100644 index 0000000..08d75b8 --- /dev/null +++ b/LFRtcKit/0.1.0/LFRtcKit.podspec @@ -0,0 +1,43 @@ +# +# Be sure to run `pod lib lint LFRtcKit.podspec' to ensure this is a +# valid spec before submitting. +# +# Any lines starting with a # are optional, but their use is encouraged +# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html +# + +Pod::Spec.new do |s| + s.name = 'LFRtcKit' + s.version = '0.1.0' + s.summary = 'RtcKit of LiveFuller' + +# This description is used to generate tags and improve search results. +# * Think: What does it do? Why did you write it? What is the focus? +# * Try to keep it short, snappy and to the point. +# * Write the description between the DESC delimiters below. +# * Finally, don't worry about the indent, CocoaPods strips it! + + s.description = <<-DESC +TODO: Add long description of the pod here. + DESC + + s.homepage = 'https://codeup.teambition.com/5d009edc70f86b0001109ad2/common/ios/LivefullerDC' + # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' + s.license = { :type => 'MIT', :file => 'LICENSE' } + s.author = { 'kerwin' => 'kerwin1232@163.com' } + s.source = { :git => 'https://codeup.teambition.com/5d009edc70f86b0001109ad2/common/ios/LivefullerDC.git', :tag => s.version.to_s } + # s.social_media_url = 'https://twitter.com/' + + s.ios.deployment_target = '9.0' + + s.source_files = 'LFRtcKit/Classes/**/*' + s.public_header_files = 'LFRtcKit/Classes/Header/*.h' + # s.resource_bundles = { + # 'LFRtcKit' => ['LFRtcKit/Assets/*.png'] + # } + s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 arm64 armv7 armv7s' } + # s.public_header_files = 'Pod/Classes/**/*.h' + # s.frameworks = 'UIKit', 'MapKit' + s.dependency 'AgoraRtcEngine_iOS', '~> 3.6.1' + s.dependency 'AgoraRtm_iOS','~> 1.4.8' +end diff --git a/LFRtcKit/Assets/.gitkeep b/LFRtcKit/Assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/LFRtcKit/Classes/.gitkeep b/LFRtcKit/Classes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/LFRtcKit/Classes/LiveFullerDC.framework/Headers/LFHeader.h b/LFRtcKit/Classes/LiveFullerDC.framework/Headers/LFHeader.h new file mode 100644 index 0000000..82f1278 --- /dev/null +++ b/LFRtcKit/Classes/LiveFullerDC.framework/Headers/LFHeader.h @@ -0,0 +1,27 @@ +// +// LFHeader.h +// LiveFullerDC +// +// Created by kerwin on 2020/1/31. +// Copyright © 2020 kerwin. All rights reserved. +// + + +// Include any system framework and library headers here that should be included in all compilation units. +// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file. + +#define API_GATEWAY_fhn3 @"fhn3" //fhn3测试 +#define API_GATEWAY_testenv @"testenv" //plato测试 +#define API_GATEWAY_uat @"uat" //uat测试 +#define API_GATEWAY_pro @"ssl" //生产 +#define API_GATEWAY_pre @"pre" //预发 +#define API_GATEWAY_dev @"dev" //开发 + + +#define API_Host [NSString stringWithFormat:@"https://apiv2-gateway-%@.fullertonhealthtech.com",API_GATEWAY_fhn3] + + + +#define API_Login(domain) [NSString stringWithFormat:@"%@/client-open-web/open/v1/api/login",domain] +#define API_JoinChannel(domain) [NSString stringWithFormat:@"%@/client-open-web/open/v1/api/join/video",domain] + diff --git a/LFRtcKit/Classes/LiveFullerDC.framework/Headers/LFManager.h b/LFRtcKit/Classes/LiveFullerDC.framework/Headers/LFManager.h new file mode 100644 index 0000000..11ae7ab --- /dev/null +++ b/LFRtcKit/Classes/LiveFullerDC.framework/Headers/LFManager.h @@ -0,0 +1,275 @@ +// +// LFManager.h +// MyVideoSDK +// +// Created by kerwin on 2020/1/8. +// Copyright © 2020 kerwin. All rights reserved. +// + + + +//Accelerate.framework +//AudioToolbox.framework +//AVFoundation.framework +//CoreMedia.framework +//CoreML.framework +//CoreTelephony.framework +//libc++.tbd +//libresolv.tbd +//SystemConfiguration.framework +//VideoToolbox.framework + +//info.plist +//Privacy - Microphone Usage Description 使用麦克风的目的,例如:for a video call. +//Privacy - Camera Usage Description 使用摄像头的目的,例如:for a video call。 + +#import +#import "LFRemoteInvitation.h" + +NS_ASSUME_NONNULL_BEGIN +/** +RETURNED TO THE CALLEE. States of an incoming call invitation. + */ +/** +Error codes of the call invitation methods. + */ +typedef NS_ENUM(NSInteger, LFInvitationApiCallErrorCode) { + + /** +0: The method call succeeds. + */ + LFInvitationApiCallErrorOk = 0, + + /** +1: The method call fails. Invalid argument. + */ + LFInvitationApiCallErrorInvalidAugment = 1, + + /** +2: The method call fails. The call invitation has not started. + */ + LFInvitationApiCallErrorNotStarted = 2, + + /** +3: The method call fails. The call invitation has ended. + */ + LFInvitationApiCallErrorAlreadyEnd = 3, + + /** +4: The method call fails. The call invitation is already accepted. + */ + LFInvitationApiCallErrorAlreadyAccept = 4, + + /** +5: The method call fails. The call invitation is already sent. + */ + LFInvitationApiCallErrorAlreadySent = 5, +}; + +typedef NS_ENUM(NSInteger, LFRemoteInvitationErrorCode) { + + /** +0: RETURNED TO THE CALLEE. The incoming call invitation succeeds. + */ + LFRemoteInvitationErrorOk = 0, + + /** +1: RETURNED TO THE CALLEE. The call invitation received by the callee fails: the callee is not online. + */ + LFRemoteInvitationErrorLocalOffline = 1, + + /** +2: RETURNED TO THE CALLEE. The call invitation received by callee fails: the acceptance of the call invitation fails. + */ + LFRemoteInvitationErrorAcceptFailure = 2, + + /** +3: RETURNED TO THE CALLEE. The call invitation received by the callee fails: the call invitation expires 60 seconds since it is sent, if the callee ACKs to the call invitation but neither the caller or callee takes any further action (cancel, accpet, or decline it). + */ + LFRemoteInvitationErrorExpire = 3, +}; + +typedef NS_ENUM(NSInteger, LFLoginErrorCode) { + + /** +0: Login succeeds. No error occurs. + */ + LFLoginErrorOk = 0, + + /** +1: Login fails for reasons unknown. + */ + LFLoginErrorUnknown = 1, + + /** +2: Login is rejected, possibly because the SDK is not initialized or is rejected by the server. + */ + LFLoginErrorRejected = 2, + + /** +3: Invalid login arguments. + */ + LFLoginErrorInvalidArgument = 3, + + /** +7: Unauthorized login. + */ + LFLoginErrorNotAuthorized = 7, + + /** +8: The user has already logged in or is logging in the LiveFullerDC system, or the user has not called the [logoutWithCompletion]([LFKit logoutWithCompletion:]) method to leave the `LFConnectionStateAborted` state. + */ + LFLoginErrorAlreadyLogin = 8, + + /** +9: The login times out. The current timeout is set as six seconds. + */ + LFLoginErrorTimeout = 9, + + /** +10: The call frequency of the [loginByToken]([LFKit loginByToken:user:completion:]) method exceeds the limit of two queries per second. + */ + LFLoginErrorLoginTooOften = 10, + + /** +101: The SDK is not initialized. + */ + LFLoginErrorLoginNotInitialized = 101, + + /** + 1001: The SDK is not initialized. + */ + LFLoginAPIError = 1001, + + +}; + +/** +Error codes related to logout. + */ +typedef NS_ENUM(NSInteger, LFLogoutErrorCode) { + + /** +0: Logout succeeds. No error occurs. + */ + LFLogoutErrorOk = 0, + + /** +1: Logout fails. + */ + LFLogoutErrorRejected = 1, + + /** +101: The SDK is not initialized. + */ + LFLogoutErrorNotInitialized = 101, + + /** +102: The user does not call the [loginByToken]([LFKit loginByToken:user:completion:]) method, or the method call of [loginByToken]([LFKit loginByToken:user:completion:]) does not succeed before the user logs out of the LiveFullerDC system. + */ + LFLogoutErrorNotLoggedIn = 102, +}; + +typedef NS_ENUM(NSInteger, LFConnectionState) { + + LFConnectionStateDisconnected = 1, + + LFConnectionStateConnecting = 2, + + LFConnectionStateConnected = 3, + + LFConnectionStateReconnecting = 4, + + LFConnectionStateAborted = 5, +}; +/** +Reasons for a connection state change. + */ +typedef NS_ENUM(NSInteger, LFConnectionChangeReason) { + + /** +1: The SDK is logging in the Agora RTM system. + */ + LFConnectionChangeReasonLogin = 1, + + /** +2: The SDK has logged in the Agora RTM system. + */ + LFConnectionChangeReasonLoginSuccess = 2, + + /** +3: The SDK fails to log in the Agora RTM system. + */ + LFConnectionChangeReasonLoginFailure = 3, + + /** +4: The login has timed out for 10 seconds, and the SDK stops logging in. + */ + LFConnectionChangeReasonLoginTimeout = 4, + + /** +5: The connection between the SDK and the Agora RTM system is interrupted for more than four seconds. + */ + LFConnectionChangeReasonInterrupted = 5, + + /** +6: The user has called the [logoutWithCompletion]([LFKit logoutWithCompletion:]) method to log out of the Agora RTM system. + */ + LFConnectionChangeReasonLogout = 6, + + /** +7: Login is banned by the Agora RTM server. + */ + LFConnectionChangeReasonBannedByServer = 7, + + /** +8: Another instance has logged in the Agora RTM system with the same user ID. + */ + LFConnectionChangeReasonRemoteLogin = 8, +}; + + +typedef void (^LFRemoteInvitationAcceptBlock)(LFInvitationApiCallErrorCode errorCode); + + +@protocol LFManagerDelegate +@optional +/// 主叫成功,建立链接 +-(void)localInvitationAccepted:(NSString *)channelId withResponse:(NSString * )response; +/// 被叫收到呼叫邀请 +-(void)onRemoteInvitationReceived:(LFRemoteInvitation *)remoteInvitation; +/// 主叫已取消邀请 +-(void)onRemoteInvitationCanceled:(LFRemoteInvitation *)remoteInvitation; +/// 被叫接受邀请成功 +-(void)onRemoteInvitationAccepted:(LFRemoteInvitation *)remoteInvitation; +/// 被叫邀请失败 +-(void)onRemoteInvitationFailure:(LFRemoteInvitation *)remoteInvitation errorCode:(LFRemoteInvitationErrorCode)errorCode; + +@end +@protocol LFUserStateDelegate +@optional +/// 连接状态回调 +-(void)connectionStateChanged:(LFConnectionState)state reason:(LFConnectionChangeReason)reason; +/// token过期 +-(void)onTokenDidExpire; +@end +@interface LFManager : NSObject + +@property(nonatomic,weak,nullable)id delegate; + +@property(nonatomic,weak,nullable)id userStatedelegate; +/// 初始化 ++(LFManager *)initWithClientType:(NSString *)clientType authorization:(NSString *)authorization domain:(NSString *)domain; + +/// 获取单例对象; ++(LFManager *)shareManager; +/// LiveFullerDC登录 +/// @param userId userID +-(void)loginByUserId:(NSString *)userId Success:(void(^)(NSString *accountToken, NSString *userId, NSString *tencentAppId, NSString *userSig))success Failure:(void(^)(LFLoginErrorCode errorCode))fail; +/// 接收邀请 +-(void)acceptRemoteInvitation:(LFRemoteInvitation *)remoteInvitation completion:(LFRemoteInvitationAcceptBlock)completion; +/// 登出 +-(void)logOutWithCompletion:(void(^)(LFLogoutErrorCode errorCode))completion; +@end + +NS_ASSUME_NONNULL_END diff --git a/LFRtcKit/Classes/LiveFullerDC.framework/Headers/LFRemoteInvitation.h b/LFRtcKit/Classes/LiveFullerDC.framework/Headers/LFRemoteInvitation.h new file mode 100644 index 0000000..6def6c5 --- /dev/null +++ b/LFRtcKit/Classes/LiveFullerDC.framework/Headers/LFRemoteInvitation.h @@ -0,0 +1,77 @@ +// +// LFRemoteInvitation.h +// MyVideoSDK +// +// Created by kerwin on 2020/1/13. +// Copyright © 2020 kerwin. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN +typedef NS_ENUM(NSInteger, LFRemoteInvitationState) { + + /** +0: RETURNED TO THE CALLEE. The initial state of a call invitation (idle). + */ + LFRemoteInvitationStateIdle = 0, + + /** +1: RETURNED TO THE CALLEE. A call invitation from a remote caller is received. + */ + LFRemoteInvitationStateInvitationReceived = 1, + + /** +2: FOR INTERNAL USE ONLY. + */ + LFRemoteInvitationStateAcceptSentToLocal = 2, + + /** +3: RETURNED TO THE CALLEE. You have declined the call invitation. + */ + LFRemoteInvitationStateRefused = 3, + + /** +4: RETURNED TO THE CALLEE. You have accepted the call invitation. + */ + LFRemoteInvitationStateAccepted = 4, + + /** +5: RETURNED TO THE CALLEE. The call invitation is canceled by the remote caller. + */ + LFRemoteInvitationStateCanceled = 5, + + /** +6: RETURNED TO THE CALLEE. The life cycle of the incoming call invitation ends in failure. + */ + LFRemoteInvitationStateFailure = 6, +}; + +/** +RETURNED TO THE CALLER. Error codes of an outgoing call invitation. + */ + +/** +RETURNED TO THE CALLEE. Error codes of an incoming call invitation. + */ + +/** The callee's call invitation object. */ +@interface LFRemoteInvitation: NSObject +/** User ID of the caller. */ +@property (nonatomic, copy, nonnull) NSString *callerId; + +/** The call invitation content set by the caller. */ +@property (nonatomic, copy, nullable) NSString *content; + +/** The callee's reponse to the call invitation. */ +@property (nonatomic, copy, nullable) NSString *response; + +/**The channel ID. */ +@property (nonatomic, copy, nullable) NSString *channelId; + +/** The state of the incoming call invitation. See LFRemoteInvitationState. */ +@property (nonatomic, assign) LFRemoteInvitationState state; +@end + + +NS_ASSUME_NONNULL_END diff --git a/LFRtcKit/Classes/LiveFullerDC.framework/Headers/LFRtcKit.h b/LFRtcKit/Classes/LiveFullerDC.framework/Headers/LFRtcKit.h new file mode 100644 index 0000000..f5211ff --- /dev/null +++ b/LFRtcKit/Classes/LiveFullerDC.framework/Headers/LFRtcKit.h @@ -0,0 +1,14 @@ +// +// LFRTCKit.h +// LFRTCKit +// +// Created by kerwin Zhang on 2022/1/18. +// + +#import + +#import "LFManager.h" +#import "LFRemoteInvitation.h" +#import "LFVideoEngine.h" + + diff --git a/LFRtcKit/Classes/LiveFullerDC.framework/Headers/LFVideoEngine.h b/LFRtcKit/Classes/LiveFullerDC.framework/Headers/LFVideoEngine.h new file mode 100644 index 0000000..fe6b245 --- /dev/null +++ b/LFRtcKit/Classes/LiveFullerDC.framework/Headers/LFVideoEngine.h @@ -0,0 +1,111 @@ +// +// LFVideoEngine.h +// MyVideoSDK +// +// Created by kerwin on 2020/1/10. +// Copyright © 2020 kerwin. All rights reserved. +// + +#import +#import +NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(NSInteger, LFJoinChannelErrorCode) { + /** +0: Login succeeds. No error occurs. + */ + LFJoinChannelErrorCodeOk = 0, + /** +1: Login fails for reasons unknown. + */ + LFJoinChannelErrorCodeUnknown = 1, + /** +3: Invalid login arguments. + */ + LFJoinChannelErrorCodeInvalidArgument = 2, +}; + + +/** Reason for the user being offline. */ +typedef NS_ENUM(NSUInteger, LFUserOfflineReason) { + /** The user left the current channel. */ + LFUserOfflineReasonQuit = 0, + /** The SDK timed out and the user dropped offline because no data packet is received within a certain period of time. If a user quits the call and the message is not passed to the SDK (due to an unreliable channel), the SDK assumes the user dropped offline. */ + LFUserOfflineReasonDropped = 1, + + LFUserOfflineReasonAbnormal = 2, +}; +/** Network quality. */ +typedef NS_ENUM(NSUInteger, LFNetworkQuality) { + /** The network quality is unknown. */ + LFNetworkQualityUnknown = 0, + /** The network quality is excellent. */ + LFNetworkQualityExcellent = 1, + /** The network quality is quite good, but the bitrate may be slightly lower than excellent. */ + LFNetworkQualityGood = 2, + /** Users can feel the communication slightly impaired. */ + LFNetworkQualityPoor = 3, + /** Users can communicate only not very smoothly. */ + LFNetworkQualityBad = 4, + /** The network quality is so bad that users can hardly communicate. */ + LFNetworkQualityVBad = 5, + /** The network is disconnected and users cannot communicate at all. */ + LFNetworkQualityDown = 6, + /** Users cannot detect the network quality. (Not in use.) */ + LFNetworkQualityUnsupported = 7, + /** Detecting the network quality. */ + LFNetworkQualityDetecting = 8, +}; + +@protocol LFVideoEngineDelegate +@optional + +/// 已解码远端视频首帧 +- (void)onSetRemoteVideoFrameWithUid:(NSUInteger)uid size:(CGSize)size; +///加入频道 +- (void)didJoinChannel:(NSString *)channel withUid:(NSUInteger)uid; +///远端离开频道 +- (void)didOfflineOfUid:(NSUInteger)uid reason:(LFUserOfflineReason)reason; +///网络质量 +- (void)onNetworkQuality:(NSUInteger)uid txQuality:(LFNetworkQuality)txQuality rxQuality:(LFNetworkQuality)rxQuality; + +@end +@interface LFVideoEngine : NSObject + +@property(nonatomic,weak)iddelegate; + ++(LFVideoEngine *)shareEngine; + + +- (void)enableVideo; +/// 加入频道 +- (void)joinChannelByChannelId:(NSString *)channelId completion:(void(^)(LFJoinChannelErrorCode errorCode))completion; +/// 设置本地视频 +/// @param localVideoView 本地视频view +- (void)setupLocalVideo:(UIView *)localVideoView; +/// 设置远端视频 +/// @param remoteVideoView 远端视频view +- (void)setupRemoteVideo:(UIView *)remoteVideoView uid:(NSUInteger)uid; + + +/// 预览 +-(void)startPreview; + +/// 静音 +/// @param mute 静音 YES : 静音 NO: 不静音 +-(void)muteLocalAudio:(BOOL)mute; +/// 转换摄像头 +-(void)switchCamera; + +/// 设置是否启动扬声器 +/// @param enable <#enable description#> +-(void)setEnableSpeakerphone:(BOOL)enable; + +/// 离开频道 +- (void)leaveChannel; + +/// 销毁 +-(void)destoryEngine; +@end + +NS_ASSUME_NONNULL_END diff --git a/LFRtcKit/Classes/LiveFullerDC.framework/Info.plist b/LFRtcKit/Classes/LiveFullerDC.framework/Info.plist new file mode 100644 index 0000000..1a2f4f1 Binary files /dev/null and b/LFRtcKit/Classes/LiveFullerDC.framework/Info.plist differ diff --git a/LFRtcKit/Classes/LiveFullerDC.framework/LiveFullerDC b/LFRtcKit/Classes/LiveFullerDC.framework/LiveFullerDC new file mode 100644 index 0000000..c2b0371 Binary files /dev/null and b/LFRtcKit/Classes/LiveFullerDC.framework/LiveFullerDC differ diff --git a/LFRtcKit/Classes/LiveFullerDC.framework/_CodeSignature/CodeDirectory b/LFRtcKit/Classes/LiveFullerDC.framework/_CodeSignature/CodeDirectory new file mode 100644 index 0000000..9bc2f71 Binary files /dev/null and b/LFRtcKit/Classes/LiveFullerDC.framework/_CodeSignature/CodeDirectory differ diff --git a/LFRtcKit/Classes/LiveFullerDC.framework/_CodeSignature/CodeRequirements b/LFRtcKit/Classes/LiveFullerDC.framework/_CodeSignature/CodeRequirements new file mode 100644 index 0000000..bbd37c1 Binary files /dev/null and b/LFRtcKit/Classes/LiveFullerDC.framework/_CodeSignature/CodeRequirements differ diff --git a/LFRtcKit/Classes/LiveFullerDC.framework/_CodeSignature/CodeRequirements-1 b/LFRtcKit/Classes/LiveFullerDC.framework/_CodeSignature/CodeRequirements-1 new file mode 100644 index 0000000..d2e4caf Binary files /dev/null and b/LFRtcKit/Classes/LiveFullerDC.framework/_CodeSignature/CodeRequirements-1 differ diff --git a/LFRtcKit/Classes/LiveFullerDC.framework/_CodeSignature/CodeResources b/LFRtcKit/Classes/LiveFullerDC.framework/_CodeSignature/CodeResources new file mode 100644 index 0000000..8be1cb4 --- /dev/null +++ b/LFRtcKit/Classes/LiveFullerDC.framework/_CodeSignature/CodeResources @@ -0,0 +1,181 @@ + + + + + files + + .DS_Store + + Q4ILPertRloWktHa/13x9PoIqeQ= + + Headers/LFHeader.h + + fHv1tGQVSflUn/l0leSod4lSkFA= + + Headers/LFManager.h + + 0/qU+3sKdY0x6bjsk/j6GLe6Eco= + + Headers/LFRemoteInvitation.h + + uwkQqn5mahsokA89SlG/HH48ahg= + + Headers/LFRtcKit.h + + stXoBvI7TtAfCeS8HKDCoHuJQr4= + + Headers/LFVideoEngine.h + + 0C0rYHKBmeA7MNo10jVTJgcNUZU= + + Info.plist + + fm1OiKu3rUgIaDugAQgR6jdUJ8g= + + + files2 + + Headers/LFHeader.h + + hash + + fHv1tGQVSflUn/l0leSod4lSkFA= + + hash2 + + HW3PFGwpzncEE6M1Cn80DsFB8QW8BRDYgb2MpGQdVkw= + + + Headers/LFManager.h + + hash + + 0/qU+3sKdY0x6bjsk/j6GLe6Eco= + + hash2 + + erS9mjfeJOO13qdwOWbdUa0iGX7HEwdosxBOHIzUX58= + + + Headers/LFRemoteInvitation.h + + hash + + uwkQqn5mahsokA89SlG/HH48ahg= + + hash2 + + 3fp7EzZPk/eGqwy+MLvGwPfa/W9skyj8QhPKkXbk1mw= + + + Headers/LFRtcKit.h + + hash + + stXoBvI7TtAfCeS8HKDCoHuJQr4= + + hash2 + + jNQcky7KEabny5M0HBPrzFK2XJutxtSwMCOU/iOBlsg= + + + Headers/LFVideoEngine.h + + hash + + 0C0rYHKBmeA7MNo10jVTJgcNUZU= + + hash2 + + i6Daw8UUWG7ZemEDqhp6KchfaqvzBoGdqu6t4cU5TaA= + + + + rules + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Base\.lproj/ + + weight + 1010 + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/LFRtcKit/Classes/LiveFullerDC.framework/_CodeSignature/CodeSignature b/LFRtcKit/Classes/LiveFullerDC.framework/_CodeSignature/CodeSignature new file mode 100644 index 0000000..6ebbd50 Binary files /dev/null and b/LFRtcKit/Classes/LiveFullerDC.framework/_CodeSignature/CodeSignature differ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..cd2d3dd --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2022 kerwin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..e3e56e9 --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +# LFRtcKit + +[![CI Status](https://img.shields.io/travis/kerwin/LFRtcKit.svg?style=flat)](https://travis-ci.org/kerwin/LFRtcKit) +[![Version](https://img.shields.io/cocoapods/v/LFRtcKit.svg?style=flat)](https://cocoapods.org/pods/LFRtcKit) +[![License](https://img.shields.io/cocoapods/l/LFRtcKit.svg?style=flat)](https://cocoapods.org/pods/LFRtcKit) +[![Platform](https://img.shields.io/cocoapods/p/LFRtcKit.svg?style=flat)](https://cocoapods.org/pods/LFRtcKit) + +## Example + +To run the example project, clone the repo, and run `pod install` from the Example directory first. + +## Requirements + +## Installation + +LFRtcKit is available through [CocoaPods](https://cocoapods.org). To install +it, simply add the following line to your Podfile: + +```ruby +pod 'LFRtcKit' +``` + +## Author + +kerwin, kerwin1232@163.com + +## License + +LFRtcKit is available under the MIT license. See the LICENSE file for more info. diff --git a/_Pods.xcodeproj b/_Pods.xcodeproj new file mode 120000 index 0000000..3c5a8e7 --- /dev/null +++ b/_Pods.xcodeproj @@ -0,0 +1 @@ +Example/Pods/Pods.xcodeproj \ No newline at end of file