diff --git a/SwiftProject/Pods/Pods.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist b/SwiftProject/Pods/Pods.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist index e7d5a05..23c150d 100644 --- a/SwiftProject/Pods/Pods.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/SwiftProject/Pods/Pods.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ Alamofire.xcscheme_^#shared#^_ orderHint - 13 + 6 CocoaAsyncSocket.xcscheme_^#shared#^_ @@ -17,52 +17,52 @@ DeviceKit.xcscheme_^#shared#^_ orderHint - 4 + 17 FirebaseCore.xcscheme_^#shared#^_ orderHint - 9 + 16 FirebaseCoreExtension.xcscheme_^#shared#^_ orderHint - 15 + 10 FirebaseCoreInternal.xcscheme_^#shared#^_ orderHint - 12 + 14 FirebaseCrashlytics.xcscheme_^#shared#^_ orderHint - 20 + 18 FirebaseInstallations.xcscheme_^#shared#^_ orderHint - 0 + 3 FirebaseMessaging.xcscheme_^#shared#^_ orderHint - 11 + 5 FirebaseSessions.xcscheme_^#shared#^_ orderHint - 7 + 21 GoogleDataTransport.xcscheme_^#shared#^_ orderHint - 18 + 19 GoogleUtilities.xcscheme_^#shared#^_ orderHint - 10 + 8 KTVHTTPCache.xcscheme_^#shared#^_ @@ -72,52 +72,52 @@ Kingfisher-Kingfisher.xcscheme_^#shared#^_ orderHint - 5 + 9 Kingfisher.xcscheme_^#shared#^_ orderHint - 2 + 4 LLCycleScrollView.xcscheme_^#shared#^_ orderHint - 16 + 20 Pods-SwiftProject.xcscheme_^#shared#^_ orderHint - 8 + 7 PromisesObjC.xcscheme_^#shared#^_ orderHint - 19 + 15 PromisesSwift.xcscheme_^#shared#^_ orderHint - 14 + 12 SVProgressHUD.xcscheme_^#shared#^_ orderHint - 17 + 1 SnapKit.xcscheme_^#shared#^_ orderHint - 21 + 11 TZImagePickerController.xcscheme_^#shared#^_ orderHint - 3 + 0 nanopb.xcscheme_^#shared#^_ orderHint - 1 + 2 diff --git a/SwiftProject/SwiftProject.xcodeproj/project.pbxproj b/SwiftProject/SwiftProject.xcodeproj/project.pbxproj index cd8bf24..b3bf936 100644 --- a/SwiftProject/SwiftProject.xcodeproj/project.pbxproj +++ b/SwiftProject/SwiftProject.xcodeproj/project.pbxproj @@ -11,6 +11,9 @@ 005580782B9F1525004B9567 /* ZZHHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 005580772B9F1525004B9567 /* ZZHHelper.swift */; }; 00B946232B67B26D00DA668F /* ddd_video.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 00B946222B67B26D00DA668F /* ddd_video.mp4 */; }; 00B946252B67B7DE00DA668F /* CCSpatialPlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B946242B67B7DE00DA668F /* CCSpatialPlayView.swift */; }; + 00C665732BAA81F900C309C3 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 00C665722BAA81F900C309C3 /* GoogleService-Info.plist */; }; + 00C665762BAA84C500C309C3 /* FirebaseAnalyticsWithoutAdIdSupport in Frameworks */ = {isa = PBXBuildFile; productRef = 00C665752BAA84C500C309C3 /* FirebaseAnalyticsWithoutAdIdSupport */; }; + 00C665792BAA94EA00C309C3 /* CopyCrashHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00C665772BAA941E00C309C3 /* CopyCrashHandler.swift */; }; 00D33BF42B998BF700604A44 /* SpatialImageConvertor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00D33BF32B998BF700604A44 /* SpatialImageConvertor.swift */; }; 00D33BF62B99A19900604A44 /* SpatialVideoConvertor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00D33BF52B99A19900604A44 /* SpatialVideoConvertor.swift */; }; 00D33BFA2B9AB21A00604A44 /* ZZHAVExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00D33BF92B9AB21A00604A44 /* ZZHAVExtension.swift */; }; @@ -97,6 +100,8 @@ 005580772B9F1525004B9567 /* ZZHHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZZHHelper.swift; sourceTree = ""; }; 00B946222B67B26D00DA668F /* ddd_video.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = ddd_video.mp4; sourceTree = ""; }; 00B946242B67B7DE00DA668F /* CCSpatialPlayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CCSpatialPlayView.swift; sourceTree = ""; }; + 00C665722BAA81F900C309C3 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + 00C665772BAA941E00C309C3 /* CopyCrashHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyCrashHandler.swift; sourceTree = ""; }; 00D33BF32B998BF700604A44 /* SpatialImageConvertor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpatialImageConvertor.swift; sourceTree = ""; }; 00D33BF52B99A19900604A44 /* SpatialVideoConvertor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpatialVideoConvertor.swift; sourceTree = ""; }; 00D33BF92B9AB21A00604A44 /* ZZHAVExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZZHAVExtension.swift; sourceTree = ""; }; @@ -189,6 +194,7 @@ buildActionMask = 2147483647; files = ( AF478B032B577D51005C35A5 /* AVFoundation.framework in Frameworks */, + 00C665762BAA84C500C309C3 /* FirebaseAnalyticsWithoutAdIdSupport in Frameworks */, 00EB2D052BA2D59000924D84 /* MessageUI.framework in Frameworks */, 1E277B76988DF1691E8E5A49 /* Pods_SwiftProject.framework in Frameworks */, AF2120D42B4E99FA00400B7F /* MobileCoreServices.framework in Frameworks */, @@ -348,8 +354,10 @@ AF2120A12B4E83AF00400B7F /* CCKit */, AF2120A62B4E83B000400B7F /* Project */, AF21208D2B4E7F1A00400B7F /* AppDelegate.swift */, + 00C665772BAA941E00C309C3 /* CopyCrashHandler.swift */, AF2120932B4E7F1A00400B7F /* Main.storyboard */, AF2120962B4E7F1C00400B7F /* Assets.xcassets */, + 00C665722BAA81F900C309C3 /* GoogleService-Info.plist */, AF2120982B4E7F1C00400B7F /* LaunchScreen.storyboard */, AF21209B2B4E7F1C00400B7F /* Info.plist */, 00EB2D012BA2D14700924D84 /* Localizable.strings */, @@ -510,6 +518,9 @@ dependencies = ( ); name = SwiftProject; + packageProductDependencies = ( + 00C665752BAA84C500C309C3 /* FirebaseAnalyticsWithoutAdIdSupport */, + ); productName = SwiftProject; productReference = AF21208A2B4E7F1A00400B7F /* SwiftProject.app */; productType = "com.apple.product-type.application"; @@ -539,6 +550,9 @@ "zh-Hans", ); mainGroup = AF2120812B4E7F1A00400B7F; + packageReferences = ( + 00C665742BAA84C500C309C3 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, + ); productRefGroup = AF21208B2B4E7F1A00400B7F /* Products */; projectDirPath = ""; projectRoot = ""; @@ -558,6 +572,7 @@ AF2120972B4E7F1C00400B7F /* Assets.xcassets in Resources */, 00B946232B67B26D00DA668F /* ddd_video.mp4 in Resources */, AF2120952B4E7F1A00400B7F /* Main.storyboard in Resources */, + 00C665732BAA81F900C309C3 /* GoogleService-Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -617,6 +632,7 @@ AF21208E2B4E7F1A00400B7F /* AppDelegate.swift in Sources */, AF2120FC2B4EA5C800400B7F /* CCMineController.swift in Sources */, 1E3945A02B8398B000D0F5CA /* VRVideoTransformController.swift in Sources */, + 00C665792BAA94EA00C309C3 /* CopyCrashHandler.swift in Sources */, AF2120AD2B4E92B000400B7F /* RootTabBarController.swift in Sources */, 00B946252B67B7DE00DA668F /* CCSpatialPlayView.swift in Sources */, AFD9F5932B58C34A008716DE /* ImageProcessingShaders.metal in Sources */, @@ -841,15 +857,15 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1.4; + CURRENT_PROJECT_VERSION = 1.5; DEVELOPMENT_TEAM = 8DQD6BV6H9; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = SwiftProject/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = VPCamera; - INFOPLIST_KEY_NSCameraUsageDescription = "Please allow the app to access your camera to capture the pictures, videos, or avatars you want to upload"; - INFOPLIST_KEY_NSMicrophoneUsageDescription = "The app requires your consent to access the microphone"; - INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "Please allow the app to access your photos for selecting photos, setting up avatars, uploading and publishing photos, and more."; - INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "Please allow the app to access your photos for selecting photos, setting up avatars, uploading and publishing photos, and more."; + INFOPLIST_KEY_NSCameraUsageDescription = "我们需要访问您的相机,以便能够正常拍摄录制空间视频及空间图片"; + INFOPLIST_KEY_NSMicrophoneUsageDescription = "我们需要访问您的麦克风,以便能够正常的拍摄录制空间视频"; + INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "我们需要访问您的相册,以便您能够从相册中选择照片、视频进行媒体空间转码"; + INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "我们需要访问您的相册,以便您能够从相册中选择照片、视频进行媒体空间转码"; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen.storyboard; INFOPLIST_KEY_UIMainStoryboardFile = Main; @@ -882,15 +898,15 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1.4; + CURRENT_PROJECT_VERSION = 1.5; DEVELOPMENT_TEAM = 8DQD6BV6H9; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = SwiftProject/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = VPCamera; - INFOPLIST_KEY_NSCameraUsageDescription = "Please allow the app to access your camera to capture the pictures, videos, or avatars you want to upload"; - INFOPLIST_KEY_NSMicrophoneUsageDescription = "The app requires your consent to access the microphone"; - INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "Please allow the app to access your photos for selecting photos, setting up avatars, uploading and publishing photos, and more."; - INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "Please allow the app to access your photos for selecting photos, setting up avatars, uploading and publishing photos, and more."; + INFOPLIST_KEY_NSCameraUsageDescription = "我们需要访问您的相机,以便能够正常拍摄录制空间视频及空间图片"; + INFOPLIST_KEY_NSMicrophoneUsageDescription = "我们需要访问您的麦克风,以便能够正常的拍摄录制空间视频"; + INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "我们需要访问您的相册,以便您能够从相册中选择照片、视频进行媒体空间转码"; + INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "我们需要访问您的相册,以便您能够从相册中选择照片、视频进行媒体空间转码"; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen.storyboard; INFOPLIST_KEY_UIMainStoryboardFile = Main; @@ -937,6 +953,25 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 00C665742BAA84C500C309C3 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/firebase/firebase-ios-sdk"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 10.23.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 00C665752BAA84C500C309C3 /* FirebaseAnalyticsWithoutAdIdSupport */ = { + isa = XCSwiftPackageProductDependency; + package = 00C665742BAA84C500C309C3 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseAnalyticsWithoutAdIdSupport; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = AF2120822B4E7F1A00400B7F /* Project object */; } diff --git a/SwiftProject/SwiftProject.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist b/SwiftProject/SwiftProject.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist index 7a1c6b9..99a1663 100644 --- a/SwiftProject/SwiftProject.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/SwiftProject/SwiftProject.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ SwiftProject.xcscheme_^#shared#^_ orderHint - 6 + 13 diff --git a/SwiftProject/SwiftProject.xcworkspace/xcshareddata/swiftpm/Package.resolved b/SwiftProject/SwiftProject.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..67a1fd4 --- /dev/null +++ b/SwiftProject/SwiftProject.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,122 @@ +{ + "pins" : [ + { + "identity" : "abseil-cpp-binary", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/abseil-cpp-binary.git", + "state" : { + "revision" : "7ce7be095bc3ed3c98b009532fe2d7698c132614", + "version" : "1.2024011601.0" + } + }, + { + "identity" : "app-check", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/app-check.git", + "state" : { + "revision" : "3e464dad87dad2d29bb29a97836789bf0f8f67d2", + "version" : "10.18.1" + } + }, + { + "identity" : "firebase-ios-sdk", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/firebase-ios-sdk", + "state" : { + "revision" : "fcf5ced6dae2d43fced2581e673cc3b59bdb8ffa", + "version" : "10.23.0" + } + }, + { + "identity" : "googleappmeasurement", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleAppMeasurement.git", + "state" : { + "revision" : "6ec4ca62b00a665fa09b594fab897753a8c635fa", + "version" : "10.23.0" + } + }, + { + "identity" : "googledatatransport", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleDataTransport.git", + "state" : { + "revision" : "a637d318ae7ae246b02d7305121275bc75ed5565", + "version" : "9.4.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleUtilities.git", + "state" : { + "revision" : "26c898aed8bed13b8a63057ee26500abbbcb8d55", + "version" : "7.13.1" + } + }, + { + "identity" : "grpc-binary", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/grpc-binary.git", + "state" : { + "revision" : "67043f6389d0e28b38fa02d1c6952afeb04d807f", + "version" : "1.62.1" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "76135c9f4e1ac85459d5fec61b6f76ac47ab3a4c", + "version" : "3.3.1" + } + }, + { + "identity" : "interop-ios-for-google-sdks", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/interop-ios-for-google-sdks.git", + "state" : { + "revision" : "2d12673670417654f08f5f90fdd62926dc3a2648", + "version" : "100.0.0" + } + }, + { + "identity" : "leveldb", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/leveldb.git", + "state" : { + "revision" : "43aaef65e0c665daadf848761d560e446d350d3d", + "version" : "1.22.4" + } + }, + { + "identity" : "nanopb", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/nanopb.git", + "state" : { + "revision" : "b7e1104502eca3a213b46303391ca4d3bc8ddec1", + "version" : "2.30910.0" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", + "version" : "2.4.0" + } + }, + { + "identity" : "swift-protobuf", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-protobuf.git", + "state" : { + "revision" : "65e8f29b2d63c4e38e736b25c27b83e012159be8", + "version" : "1.25.2" + } + } + ], + "version" : 2 +} diff --git a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate index 0452b03..60a246a 100644 Binary files a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate and b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index a5a2219..9bd0aca 100644 --- a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -14,10 +14,10 @@ filePath = "SwiftProject/Project/Controller/CCHomeController.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "451" - endingLineNumber = "451" - landmarkName = "photoLibrary()" - landmarkType = "7"> + startingLineNumber = "515" + endingLineNumber = "515" + landmarkName = "CCHomeController" + landmarkType = "21"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..4dac829 --- /dev/null +++ b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,30 @@ + + + + + SchemeUserState + + Promises (Playground) 1.xcscheme + + isShown + + orderHint + 23 + + Promises (Playground) 2.xcscheme + + isShown + + orderHint + 24 + + Promises (Playground).xcscheme + + isShown + + orderHint + 22 + + + + diff --git a/SwiftProject/SwiftProject/AppDelegate.swift b/SwiftProject/SwiftProject/AppDelegate.swift index 75bfcbf..83863f3 100644 --- a/SwiftProject/SwiftProject/AppDelegate.swift +++ b/SwiftProject/SwiftProject/AppDelegate.swift @@ -16,6 +16,7 @@ import UIKit import SVProgressHUD +import Firebase @main class AppDelegate: UIResponder, UIApplicationDelegate { @@ -24,18 +25,41 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + FirebaseApp.configure() SVProgressHUD.setDefaultStyle(.dark) self.window = UIWindow(frame: UIScreen.main.bounds) self.window?.backgroundColor = UIColor.white self.window?.makeKeyAndVisible() self.window?.rootViewController = RootTabBarController() + Analytics.logEvent("user_launch", parameters: ["type":"new"]) + exceptionLogWithData() return true } + + + func exceptionLogWithData() { + CopyCrashHandler.setDefaultHandler() + let str = CopyCrashHandler.getdataPath() + let data = NSData.init(contentsOfFile: str) + if data != nil { + let crushStr:String? = String.init(data: data! as Data, encoding: String.Encoding.utf8) + Analytics.logEvent("app_crash", parameters: ["crashInfo":crushStr ?? ""]) + } + } + //前后台切换--进入前台 + func applicationWillEnterForeground(_ application: UIApplication) { + print("applicationWillEnterForeground...") + Analytics.logEvent("user_launch", parameters: ["type":"restart"]) + } + + func applicationWillTerminate(_ application: UIApplication) { + + } } diff --git a/SwiftProject/SwiftProject/CopyCrashHandler.swift b/SwiftProject/SwiftProject/CopyCrashHandler.swift new file mode 100644 index 0000000..22cf07a --- /dev/null +++ b/SwiftProject/SwiftProject/CopyCrashHandler.swift @@ -0,0 +1,104 @@ +// +// CopyCrashHandler.swift +// SwiftProject +// +// Created by aaa on 2024/3/20. +// + +import Foundation +//public class CopyCrashHandler +//{ +// public static func setup(callBack:@escaping CrashCallback){ +// crashCallBack = callBack; +// registerSignalHanlder(); +// } +//} +// +//public typealias Completion = ()->Void; +//public typealias CrashCallback = (String,Completion)->Void; +// +//public var crashCallBack: CrashCallback? +// +// +// +// +//func signalHandler(signal:Int32) -> Void { +// let stackTrace = Thread.callStackSymbols.joined(separator: "\r\n") +// crashCallBack?(stackTrace,{ +// unregisterSignalHandler(); +// exit(signal); +// }); +//} +// +//func registerSignalHanlder() +//{ +// objc_setUncaughtExceptionHandler { (_response:Any?) in +// if let signal = _response as? Int32 { +// signalHandler(signal: signal) +// } +// else if let exception = _response as? NSException { +// crashCallBack?(exception.reason ?? exception.callStackSymbols.joined(separator: "\r\n"),{ +// unregisterSignalHandler(); +// exception.raise() +// }); +// } +// } +// +// signal(SIGINT, signalHandler); +// signal(SIGSEGV, signalHandler);//野指针,僵尸对象 +// signal(SIGTRAP, signalHandler); +// signal(SIGABRT, signalHandler); +// signal(SIGILL, signalHandler); +// signal(SIGBUS, signalHandler); +// signal(SIGFPE, signalHandler); +// signal(SIGTERM, signalHandler); +// signal(SIGKILL, signalHandler);//CPU无法执行的代码(比如无效指令、除以0等) +// signal(SIGPIPE, signalHandler); +//} +// +//func unregisterSignalHandler() +//{ +// signal(SIGINT, SIG_DFL); +// signal(SIGSEGV, SIG_DFL); +// signal(SIGTRAP, SIG_DFL); +// signal(SIGABRT, SIG_DFL); +// signal(SIGILL, SIG_DFL); +// signal(SIGBUS, SIG_DFL); +// signal(SIGFPE, SIG_DFL); +// signal(SIGTERM, SIG_DFL); +// signal(SIGKILL, SIG_DFL); +// signal(SIGPIPE, SIG_DFL); +//} +// +// + +public class CopyCrashHandler { + public class func getdataPath() -> String{ + let str = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.cachesDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last! + let urlPath = str.appending("Exception.txt") + return urlPath + } + public class func setDefaultHandler() { + NSSetUncaughtExceptionHandler { (exception) in + let arr:NSArray = exception.callStackSymbols as NSArray + let reason:String = exception.reason! + let name:String = exception.name.rawValue + let date:NSDate = NSDate() + let timeFormatter = DateFormatter() + timeFormatter.dateFormat = "YYYY/MM/dd hh:mm:ss SS" + let strNowTime = timeFormatter.string(from: date as Date) as String + let url:String = String.init(format: "time:%@\nname:%@\nreason:\n%@\ncallStackSymbols:\n%@",strNowTime,name,reason,arr.componentsJoined(by: "\n")) + let path = CopyCrashHandler.getdataPath() + do{ + if FileManager.default.fileExists(atPath: path) { + try FileManager.default.removeItem(atPath: path) + } + + try url.write(toFile: path, atomically: true, encoding: String.Encoding.utf8) + }catch{ error + print("\(error)") + } + } + } + +} diff --git a/SwiftProject/SwiftProject/GoogleService-Info.plist b/SwiftProject/SwiftProject/GoogleService-Info.plist new file mode 100644 index 0000000..abbe890 --- /dev/null +++ b/SwiftProject/SwiftProject/GoogleService-Info.plist @@ -0,0 +1,30 @@ + + + + + API_KEY + AIzaSyAPrLVnb7JkiyhiNIK89qgczqSag-QAi24 + GCM_SENDER_ID + 931841718963 + PLIST_VERSION + 1 + BUNDLE_ID + com.nsk.tdvideo + PROJECT_ID + vpro-76262 + STORAGE_BUCKET + vpro-76262.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:931841718963:ios:164e5422a1c3f669d04ec6 + + \ No newline at end of file diff --git a/SwiftProject/SwiftProject/Project/Controller/CCHomeController.swift b/SwiftProject/SwiftProject/Project/Controller/CCHomeController.swift index 9798db9..72eef28 100644 --- a/SwiftProject/SwiftProject/Project/Controller/CCHomeController.swift +++ b/SwiftProject/SwiftProject/Project/Controller/CCHomeController.swift @@ -24,7 +24,7 @@ import LLCycleScrollView import TZImagePickerController import MessageUI import SVProgressHUD - +import Firebase class CCHomeController: BaseController, LLCycleScrollViewDelegate,MFMailComposeViewControllerDelegate { @@ -50,6 +50,7 @@ class CCHomeController: BaseController, LLCycleScrollViewDelegate,MFMailComposeV var selectedAssets:[Any] = [] var maxImages:NSInteger = 10 + let kNowTimeToUserDefaultKey_Home:String = "kNowTimeToUserDefaultKey_Home" lazy var spaceAlbumPopView: CCSpaceAlbumFliterPopView = { let view = CCSpaceAlbumFliterPopView.init(frame: CGRectMake(0, 0, KScreenWidth, KScreenHeight)) @@ -84,21 +85,13 @@ class CCHomeController: BaseController, LLCycleScrollViewDelegate,MFMailComposeV // return false // } + override func viewDidLoad() { super.viewDidLoad() - + ZZHHelper.setNowTimeToUserDefaultWithKey(kNowTimeToUserDefaultKey_Home) self.view.backgroundColor = UIColor.black self.navLine?.isHidden = true -// let isExternalDeviceConnected = isExternalDeviceConnected() - -// if isExternalDeviceConnected { -// let deviceName = UIDevice.current.name -// print("已连接外部设备,设备名称:\(deviceName)") -// } else { -// print("未连接外部设备") -// } - // 监听 AirPlay 设备的连接状态 NotificationCenter.default.addObserver(self, selector: #selector(airPlayStatusDidChange(_:)), name: AVAudioSession.routeChangeNotification, object: nil) @@ -160,6 +153,12 @@ class CCHomeController: BaseController, LLCycleScrollViewDelegate,MFMailComposeV bottomButton() } + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + let sec:TimeInterval = ZZHHelper.getSecFromUserDefaultByKey(kNowTimeToUserDefaultKey_Home) + Analytics.logEvent("home_pv", parameters: ["refer_page":"首页","duration":sec]) + } + //MARK: - 监听设备投流 @objc private func airPlayStatusDidChange(_ notification: Notification) { checkAirPlayStatus() diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController.swift index e8f46f4..330d2f2 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController.swift @@ -14,14 +14,14 @@ import ImageIO import CoreImage import Photos import SVProgressHUD - +import Firebase enum VideoReaderError : Error { case invalidVideo case notSpacialVideo } class CCSpatialPhotoDisplayController: BaseController { - + let kNowTimeToUserDefaultKey_PhotoDisplayController:String = "kNowTimeToUserDefaultKey_PhotoDisplayController" //保留外联屏幕 lazy var externalWindow:UIWindow = { return UIWindow(frame: self.view.bounds) @@ -156,6 +156,7 @@ class CCSpatialPhotoDisplayController: BaseController { override func viewDidLoad() { super.viewDidLoad() + ZZHHelper.setNowTimeToUserDefaultWithKey(kNowTimeToUserDefaultKey_PhotoDisplayController) print("spatioal photo viewdidload...\(self)") // return //添加外接屏幕链接通知 @@ -212,9 +213,26 @@ class CCSpatialPhotoDisplayController: BaseController { } + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + let sec:TimeInterval = ZZHHelper.getSecFromUserDefaultByKey(kNowTimeToUserDefaultKey_PhotoDisplayController) + Analytics.logEvent("preview_pv", parameters: ["refer_page":"图片预览页面","duration":sec]) + } + //MARK: - 外接屏幕 链接 与 断开 @objc func airPlayStatusDidChange(notification:Notification) { checkAirPlayStatus() + + if(isAirPlayActive) { + Analytics.logEvent("streaming_live", parameters: ["refer_page":"图片预览页面"]) + ZZHHelper.setNowTimeToUserDefaultWithKey("kNowTimeToUserDefaultKey_PhotoDisplayController_airplay") + } + else { + let sec:TimeInterval = ZZHHelper.getSecFromUserDefaultByKey("kNowTimeToUserDefaultKey_PhotoDisplayController_airplay") + Analytics.logEvent("streaming_live", parameters: ["refer_page":"图片预览页面","duration":sec]) + } + + } // @objc func exScreenDisConnectNotification(notification:Notification) { @@ -293,6 +311,7 @@ class CCSpatialPhotoDisplayController: BaseController { transVC.sourceImageData = photoOriginalData transVC.imageAsset = imageAsset self.navigationController?.pushViewController(transVC, animated: true) + Analytics.logEvent("preview_trans_click", parameters: nil) }else if sender.tag == 202 { //中间按钮 mTopCenterTypeButton.setImage(UIImage.init(named: "type_button_arrow_up"), for: .normal) diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialShootController.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialShootController.swift index cbec652..25471f0 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialShootController.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialShootController.swift @@ -11,8 +11,9 @@ import Photos import AVKit import VideoToolbox import SVProgressHUD - +import Firebase class CCSpatialShootController: BaseController { + let kNowTimeToUserDefaultKey_SpatialShootController:String = "kNowTimeToUserDefaultKey_SpatialShootController" var wideAngleCameraDevice:AVCaptureDevice?//测试使用 //AVCaptureSession --- 单摄像头 @@ -253,9 +254,15 @@ class CCSpatialShootController: BaseController { } + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + let sec:TimeInterval = ZZHHelper.getSecFromUserDefaultByKey(kNowTimeToUserDefaultKey_SpatialShootController) + Analytics.logEvent("capture_pv", parameters: ["refer_page":"相机拍摄页面","duration":sec]) + } override func viewDidLoad() { super.viewDidLoad() + ZZHHelper.setNowTimeToUserDefaultWithKey(kNowTimeToUserDefaultKey_SpatialShootController) // view.backgroundColor = .white outputVideoURL = URL.documentsDirectory.appendingPathComponent("output.MOV") diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController.swift index e46785f..eaada6d 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController.swift @@ -10,6 +10,7 @@ import AVFoundation import Photos import AVKit import VideoToolbox +import Firebase enum SpatialType : Int { /* @@ -60,7 +61,7 @@ class CCSpatialVideoDisplayController: BaseController, AVPlayerViewControllerDel var assetTrack:AVAssetTrack? - + let kNowTimeToUserDefaultKey_VideoDisplayController:String = "kNowTimeToUserDefaultKey_VideoDisplayController" var link = false//是否已连接设备 var isPlaying = false//是否正在播放 @@ -229,6 +230,7 @@ class CCSpatialVideoDisplayController: BaseController, AVPlayerViewControllerDel override func viewDidLoad() { super.viewDidLoad() + ZZHHelper.setNowTimeToUserDefaultWithKey(kNowTimeToUserDefaultKey_VideoDisplayController) Task { print("ccs viewdid load ---------") await self.loadVideoAssetReader() @@ -393,6 +395,12 @@ class CCSpatialVideoDisplayController: BaseController, AVPlayerViewControllerDel } + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + let sec:TimeInterval = ZZHHelper.getSecFromUserDefaultByKey(kNowTimeToUserDefaultKey_VideoDisplayController) + Analytics.logEvent("preview_pv", parameters: ["refer_page":"视频预览页面","duration":sec]) + } + override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // 检查当前是否已连接到 AirPlay 设备 @@ -402,6 +410,14 @@ class CCSpatialVideoDisplayController: BaseController, AVPlayerViewControllerDel //MARK: - 监听设备投流 @objc private func airPlayStatusDidChange(_ notification: Notification) { checkAirPlayStatus() + if(isAirPlayActive) { + Analytics.logEvent("streaming_live", parameters: ["refer_page":"视频预览页面"]) + ZZHHelper.setNowTimeToUserDefaultWithKey("kNowTimeToUserDefaultKey_VideoDisplayController_airplay") + } + else { + let sec:TimeInterval = ZZHHelper.getSecFromUserDefaultByKey("kNowTimeToUserDefaultKey_VideoDisplayController_airplay") + Analytics.logEvent("streaming_live", parameters: ["refer_page":"视频预览页面","duration":sec]) + } } private func checkAirPlayStatus() { @@ -505,6 +521,7 @@ class CCSpatialVideoDisplayController: BaseController, AVPlayerViewControllerDel transVC.videoOriginalPHAsset = self.videoOriginalPHAsset transVC.sourceVideoURL = sourceVideoURL self.navigationController?.pushViewController(transVC, animated: true) + Analytics.logEvent("preview_trans_click", parameters: nil) }else if sender.tag == 202 { //中间按钮 diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/VRPhotoTransformController.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/VRPhotoTransformController.swift index 89a8bfd..6a492b3 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/VRPhotoTransformController.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/VRPhotoTransformController.swift @@ -10,10 +10,11 @@ import DeviceKit import SVProgressHUD import Photos import CoreImage +import Firebase class VRPhotoTransformController: BaseController { // var heroAsset1:AVAsset? - + let kNowTimeToUserDefaultKey_PhotoTransformController:String = "kNowTimeToUserDefaultKey_PhotoTransformController" var sourceImageData:Data? var imageAsset:PHAsset? @@ -38,8 +39,15 @@ class VRPhotoTransformController: BaseController { self.setNavgationBarColor(color: UIColor.clear) } + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + let sec:TimeInterval = ZZHHelper.getSecFromUserDefaultByKey(kNowTimeToUserDefaultKey_PhotoTransformController) + Analytics.logEvent("transcode_pic_pv", parameters: ["refer_page":"图片转码页面","duration":sec]) + } + override func viewDidLoad() { super.viewDidLoad() + ZZHHelper.setNowTimeToUserDefaultWithKey(kNowTimeToUserDefaultKey_PhotoTransformController) self.view.backgroundColor = UIColor.black self.navLine?.isHidden = true self.setNavgaionTitle(string: "图片转码") diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/VRVideoTransformController.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/VRVideoTransformController.swift index a25f0da..5578cfc 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/VRVideoTransformController.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/VRVideoTransformController.swift @@ -16,7 +16,7 @@ import Observation import VideoToolbox import Photos import SVProgressHUD - +import Firebase //比例 enum VideoBitsPerPixel : CGFloat { case best = 1.0 @@ -41,6 +41,7 @@ enum Video3DFormat : Int { } class VRVideoTransformController: BaseController { + let kNowTimeToUserDefaultKey_VideoTransformController:String = "kNowTimeToUserDefaultKey_VideoTransformController" var heroAsset1:AVAsset? var videoOriginalPHAsset:PHAsset? @@ -103,8 +104,15 @@ class VRVideoTransformController: BaseController { self.setNavgationBarColor(color: UIColor.clear) } + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + let sec:TimeInterval = ZZHHelper.getSecFromUserDefaultByKey(kNowTimeToUserDefaultKey_VideoTransformController) + Analytics.logEvent("transcode_video_pv", parameters: ["refer_page":"视频转码页面","duration":sec]) + } + override func viewDidLoad() { super.viewDidLoad() + ZZHHelper.setNowTimeToUserDefaultWithKey(kNowTimeToUserDefaultKey_VideoTransformController) self.view.backgroundColor = UIColor.black self.navLine?.isHidden = true self.setNavgaionTitle(string: "视频转码") diff --git a/SwiftProject/SwiftProject/Project/Util/ZZHHelper.swift b/SwiftProject/SwiftProject/Project/Util/ZZHHelper.swift index defa1a4..ea1e16b 100644 --- a/SwiftProject/SwiftProject/Project/Util/ZZHHelper.swift +++ b/SwiftProject/SwiftProject/Project/Util/ZZHHelper.swift @@ -50,4 +50,20 @@ class ZZHHelper { } return false } + + //设置曝光时间 + class func setNowTimeToUserDefaultWithKey(_ key:String) { + UserDefaults.standard.setValue(Date.now, forKey: key) + UserDefaults.standard.synchronize() + } + + //主要用于统计曝光时间 + class func getSecFromUserDefaultByKey(_ key:String)->TimeInterval { + var sec:TimeInterval = 0 + let date = UserDefaults.standard.value(forKey: key) + if let d = date as? Date{ + sec = DateInterval.init(start: d, end: Date.now).duration + } + return sec + } } diff --git a/tdvideo/tdvideo.xcodeproj/project.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate b/tdvideo/tdvideo.xcodeproj/project.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate index 004109f..f30ad5c 100644 Binary files a/tdvideo/tdvideo.xcodeproj/project.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate and b/tdvideo/tdvideo.xcodeproj/project.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate differ