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