Forráskód Böngészése

录制完成一部分

jeremy 5 éve
szülő
commit
66d83d574b

+ 2 - 2
RainbowPlanet/NotificationService/Info.plist

@@ -17,9 +17,9 @@
 	<key>CFBundlePackageType</key>
 	<string>XPC!</string>
 	<key>CFBundleShortVersionString</key>
-	<string>1.0.1</string>
+	<string>$(MARKETING_VERSION)</string>
 	<key>CFBundleVersion</key>
-	<string>7</string>
+	<string>$(CURRENT_PROJECT_VERSION)</string>
 	<key>NSAppTransportSecurity</key>
 	<dict>
 		<key>NSAllowsArbitraryLoads</key>

+ 10 - 0
RainbowPlanet/NotificationService/NotificationService.entitlements

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>com.apple.security.app-sandbox</key>
+	<true/>
+	<key>com.apple.security.network.client</key>
+	<true/>
+</dict>
+</plist>

+ 2 - 2
RainbowPlanet/Podfile.lock

@@ -246,6 +246,6 @@ SPEC CHECKSUMS:
   YYText: 5c461d709e24d55a182d1441c41dc639a18a4849
   ZipArchive: e25a4373192673e3229ac8d6e9f64a3e5713c966
 
-PODFILE CHECKSUM: ce432c6d1c1d20494422e407f89b349919afbdf4
+PODFILE CHECKSUM: 776426a27b52cade84fb4274fa44db9b949e0984
 
-COCOAPODS: 1.7.4
+COCOAPODS: 1.7.5

+ 56 - 24
RainbowPlanet/RainbowPlanet.xcodeproj/project.pbxproj

@@ -7,7 +7,6 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		0A110C4CD931995B8E8BF7C5 /* Pods_RainbowPlanet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D469F6C3768252BCB7001EDD /* Pods_RainbowPlanet.framework */; };
 		A701454322FA59AC0090E1BD /* UIViewController+Example.m in Sources */ = {isa = PBXBuildFile; fileRef = A701454122FA59AB0090E1BD /* UIViewController+Example.m */; };
 		A70B2C072284305400B2449F /* ProductModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A70B2C062284305400B2449F /* ProductModel.swift */; };
 		A70B2C102286A3BC00B2449F /* ProductDetailModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A70B2C0F2286A3BC00B2449F /* ProductDetailModel.swift */; };
@@ -116,15 +115,6 @@
 		A72A72D022321E2700B21995 /* FontMacro.swift in Sources */ = {isa = PBXBuildFile; fileRef = A72A72C822321E2500B21995 /* FontMacro.swift */; };
 		A72A72D222321E2700B21995 /* Common.swift in Sources */ = {isa = PBXBuildFile; fileRef = A72A72CA22321E2600B21995 /* Common.swift */; };
 		A72A72D522321E2700B21995 /* ColorMacro.swift in Sources */ = {isa = PBXBuildFile; fileRef = A72A72CD22321E2600B21995 /* ColorMacro.swift */; };
-		A72A72F022321E8800B21995 /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72EF22321E8800B21995 /* CoreMotion.framework */; };
-		A72A72F222321E9300B21995 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72F122321E9300B21995 /* CFNetwork.framework */; };
-		A72A72F422321E9A00B21995 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72F322321E9A00B21995 /* Foundation.framework */; };
-		A72A72F622321EA000B21995 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72F522321EA000B21995 /* UIKit.framework */; };
-		A72A72F822321EB600B21995 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72F722321EB600B21995 /* CoreGraphics.framework */; };
-		A72A72FA22321EBF00B21995 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72F922321EBF00B21995 /* CoreText.framework */; };
-		A72A72FC22321ECE00B21995 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72FB22321ECD00B21995 /* CoreTelephony.framework */; };
-		A72A72FE22321EE200B21995 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72FD22321EE200B21995 /* QuartzCore.framework */; };
-		A72A730022321EE900B21995 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72FF22321EE900B21995 /* SystemConfiguration.framework */; };
 		A72A730222321EEE00B21995 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A730122321EEE00B21995 /* libz.tbd */; };
 		A72A730422321EFA00B21995 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A730322321EFA00B21995 /* libc++.tbd */; };
 		A72A733522325A4B00B21995 /* AppDelegate+HandleOpen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A72A733422325A4B00B21995 /* AppDelegate+HandleOpen.swift */; };
@@ -148,6 +138,20 @@
 		A73A56DB22DC9AB5004920FE /* UpdateVersionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A73A56DA22DC9AB5004920FE /* UpdateVersionModel.swift */; };
 		A73A56DE22DC9CCE004920FE /* UpdateVersionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A73A56DD22DC9CCE004920FE /* UpdateVersionManager.swift */; };
 		A73D7C682268A032002A4CE3 /* SwiftyStarRatingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A73D7C672268A032002A4CE3 /* SwiftyStarRatingView.swift */; };
+		A741448C232F24E80062FB6F /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A76390EA2248E27A0067EEE0 /* UserNotifications.framework */; };
+		A741448F232F24EA0062FB6F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72F522321EA000B21995 /* UIKit.framework */; };
+		A7414491232F24EB0062FB6F /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72FF22321EE900B21995 /* SystemConfiguration.framework */; };
+		A7414493232F24ED0062FB6F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72FD22321EE200B21995 /* QuartzCore.framework */; };
+		A7414495232F24EF0062FB6F /* Pods_RainbowPlanet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D469F6C3768252BCB7001EDD /* Pods_RainbowPlanet.framework */; };
+		A7414497232F24F10062FB6F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72F322321E9A00B21995 /* Foundation.framework */; };
+		A7414499232F24F30062FB6F /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72F922321EBF00B21995 /* CoreText.framework */; };
+		A741449B232F24F40062FB6F /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72FB22321ECD00B21995 /* CoreTelephony.framework */; };
+		A741449D232F24F60062FB6F /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72EF22321E8800B21995 /* CoreMotion.framework */; };
+		A741449F232F24F70062FB6F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72F722321EB600B21995 /* CoreGraphics.framework */; };
+		A74144A1232F24F90062FB6F /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A72A72F122321E9300B21995 /* CFNetwork.framework */; };
+		A74144A3232F24FB0062FB6F /* ATAuthSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7F577C022FD894F00E2D757 /* ATAuthSDK.framework */; };
+		A74144A7232F28370062FB6F /* PublishConfirmPhotoNewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A74144A6232F28370062FB6F /* PublishConfirmPhotoNewViewController.swift */; };
+		A74144A9232F8BF40062FB6F /* PublishNewVideoPhotoSetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A74144A8232F8BF40062FB6F /* PublishNewVideoPhotoSetView.swift */; };
 		A742C08C2325E8E40043184E /* PublishNewAuthorizationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A742C08B2325E8E40043184E /* PublishNewAuthorizationView.swift */; };
 		A742C0922325F7820043184E /* PublishNewViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A742C0912325F7820043184E /* PublishNewViewModel.swift */; };
 		A743229422B88ED30017C367 /* EnumMacro.swift in Sources */ = {isa = PBXBuildFile; fileRef = A743229322B88ED30017C367 /* EnumMacro.swift */; };
@@ -191,7 +195,6 @@
 		A76068F522E4BCF4008DF18F /* MJDIYHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = A76068F422E4BCF4008DF18F /* MJDIYHeader.swift */; };
 		A7636AC52268139C00374F9E /* LocationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7636AC42268139C00374F9E /* LocationViewController.swift */; };
 		A7636AC822682BAF00374F9E /* LocationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7636AC722682BAF00374F9E /* LocationView.swift */; };
-		A76390EB2248E27A0067EEE0 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A76390EA2248E27A0067EEE0 /* UserNotifications.framework */; };
 		A763BE6C22F173A0000CE594 /* LoginNowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A763BE6B22F173A0000CE594 /* LoginNowView.swift */; };
 		A763BE6E22F1953D000CE594 /* CommunityFollowLoginTableHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A763BE6D22F1953D000CE594 /* CommunityFollowLoginTableHeaderView.swift */; };
 		A76B786922CE04940047EC1B /* CommunityRecommendDetailHTMLTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A76B786822CE04940047EC1B /* CommunityRecommendDetailHTMLTableViewCell.swift */; };
@@ -427,7 +430,6 @@
 		A7F3069422E16A5B00DC7917 /* MineRouterModuleType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F3069322E16A5B00DC7917 /* MineRouterModuleType.swift */; };
 		A7F3069722E1AE9600DC7917 /* MessageModuleManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F3069622E1AE9600DC7917 /* MessageModuleManager.swift */; };
 		A7F3069922E1C72D00DC7917 /* json_Image_1.png in Resources */ = {isa = PBXBuildFile; fileRef = A7F3069822E1C72D00DC7917 /* json_Image_1.png */; };
-		A7F577C322FD894F00E2D757 /* ATAuthSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7F577C022FD894F00E2D757 /* ATAuthSDK.framework */; };
 		A7F577C422FD894F00E2D757 /* ATAuthSDK.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A7F577C122FD894F00E2D757 /* ATAuthSDK.bundle */; };
 		A7F577CD22FECD7C00E2D757 /* AliyunVodupToyoPublishManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F577CC22FECD7C00E2D757 /* AliyunVodupToyoPublishManager.swift */; };
 		A7F577D122FECE8700E2D757 /* AliyunVodUpToYoPublishModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F577D022FECE8700E2D757 /* AliyunVodUpToYoPublishModel.swift */; };
@@ -793,6 +795,9 @@
 		A73A56DA22DC9AB5004920FE /* UpdateVersionModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateVersionModel.swift; sourceTree = "<group>"; };
 		A73A56DD22DC9CCE004920FE /* UpdateVersionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateVersionManager.swift; sourceTree = "<group>"; };
 		A73D7C672268A032002A4CE3 /* SwiftyStarRatingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftyStarRatingView.swift; sourceTree = "<group>"; };
+		A7414488232F22C00062FB6F /* NotificationService.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NotificationService.entitlements; sourceTree = "<group>"; };
+		A74144A6232F28370062FB6F /* PublishConfirmPhotoNewViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublishConfirmPhotoNewViewController.swift; sourceTree = "<group>"; };
+		A74144A8232F8BF40062FB6F /* PublishNewVideoPhotoSetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublishNewVideoPhotoSetView.swift; sourceTree = "<group>"; };
 		A742C08B2325E8E40043184E /* PublishNewAuthorizationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublishNewAuthorizationView.swift; sourceTree = "<group>"; };
 		A742C0912325F7820043184E /* PublishNewViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublishNewViewModel.swift; sourceTree = "<group>"; };
 		A743229322B88ED30017C367 /* EnumMacro.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnumMacro.swift; sourceTree = "<group>"; };
@@ -1337,20 +1342,20 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A76390EB2248E27A0067EEE0 /* UserNotifications.framework in Frameworks */,
 				A72A730422321EFA00B21995 /* libc++.tbd in Frameworks */,
 				A72A730222321EEE00B21995 /* libz.tbd in Frameworks */,
-				A72A730022321EE900B21995 /* SystemConfiguration.framework in Frameworks */,
-				A72A72FE22321EE200B21995 /* QuartzCore.framework in Frameworks */,
-				A72A72FC22321ECE00B21995 /* CoreTelephony.framework in Frameworks */,
-				A72A72FA22321EBF00B21995 /* CoreText.framework in Frameworks */,
-				A7F577C322FD894F00E2D757 /* ATAuthSDK.framework in Frameworks */,
-				A72A72F822321EB600B21995 /* CoreGraphics.framework in Frameworks */,
-				A72A72F622321EA000B21995 /* UIKit.framework in Frameworks */,
-				A72A72F422321E9A00B21995 /* Foundation.framework in Frameworks */,
-				A72A72F222321E9300B21995 /* CFNetwork.framework in Frameworks */,
-				A72A72F022321E8800B21995 /* CoreMotion.framework in Frameworks */,
-				0A110C4CD931995B8E8BF7C5 /* Pods_RainbowPlanet.framework in Frameworks */,
+				A74144A1232F24F90062FB6F /* CFNetwork.framework in Frameworks */,
+				A741449B232F24F40062FB6F /* CoreTelephony.framework in Frameworks */,
+				A7414493232F24ED0062FB6F /* QuartzCore.framework in Frameworks */,
+				A7414499232F24F30062FB6F /* CoreText.framework in Frameworks */,
+				A74144A3232F24FB0062FB6F /* ATAuthSDK.framework in Frameworks */,
+				A741448F232F24EA0062FB6F /* UIKit.framework in Frameworks */,
+				A7414497232F24F10062FB6F /* Foundation.framework in Frameworks */,
+				A741448C232F24E80062FB6F /* UserNotifications.framework in Frameworks */,
+				A7414491232F24EB0062FB6F /* SystemConfiguration.framework in Frameworks */,
+				A741449F232F24F70062FB6F /* CoreGraphics.framework in Frameworks */,
+				A7414495232F24EF0062FB6F /* Pods_RainbowPlanet.framework in Frameworks */,
+				A741449D232F24F60062FB6F /* CoreMotion.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2218,6 +2223,14 @@
 			path = SwiftyStarRatingView;
 			sourceTree = "<group>";
 		};
+		A74144A5232F27DE0062FB6F /* PublishConfirmPhotoNew */ = {
+			isa = PBXGroup;
+			children = (
+				A74144A6232F28370062FB6F /* PublishConfirmPhotoNewViewController.swift */,
+			);
+			path = PublishConfirmPhotoNew;
+			sourceTree = "<group>";
+		};
 		A742C0902325F76A0043184E /* ViewModel */ = {
 			isa = PBXGroup;
 			children = (
@@ -2287,6 +2300,7 @@
 		A74D9D552327B54100F05C14 /* NotificationService */ = {
 			isa = PBXGroup;
 			children = (
+				A7414488232F22C00062FB6F /* NotificationService.entitlements */,
 				A74D9D562327B54100F05C14 /* NotificationService.swift */,
 				A74D9D582327B54100F05C14 /* Info.plist */,
 			);
@@ -3012,6 +3026,7 @@
 		A7811CCC2323D25A00C2D8DE /* PublishNewModule */ = {
 			isa = PBXGroup;
 			children = (
+				A74144A5232F27DE0062FB6F /* PublishConfirmPhotoNew */,
 				A7811CCD2323D25A00C2D8DE /* PublishNew */,
 			);
 			path = PublishNewModule;
@@ -3031,6 +3046,7 @@
 			isa = PBXGroup;
 			children = (
 				A7811CCF2323D25A00C2D8DE /* PublishNewVideoPhotoView.swift */,
+				A74144A8232F8BF40062FB6F /* PublishNewVideoPhotoSetView.swift */,
 				A742C08B2325E8E40043184E /* PublishNewAuthorizationView.swift */,
 			);
 			path = View;
@@ -5404,6 +5420,7 @@
 				BD13B6B922BA0327008BB323 /* PublishEditController.swift in Sources */,
 				A71AA5102272156A008FF1A5 /* ExpressAddressListViewController.swift in Sources */,
 				A7D07CC922B7769600186014 /* RainbowBeanPhysicalCollectionViewCell.swift in Sources */,
+				A74144A7232F28370062FB6F /* PublishConfirmPhotoNewViewController.swift in Sources */,
 				BD61229922C3605C00D3F513 /* AliyunDBHelper.m in Sources */,
 				A7A98E14227ED0E2005306E9 /* CategoryListModel.swift in Sources */,
 				A770E5E722D3422800CBD0A4 /* CommentInputView.swift in Sources */,
@@ -5522,6 +5539,7 @@
 				A7824B042271F10300ABA381 /* EditSelfMentionContactsView.swift in Sources */,
 				A7811CCB2323A6D400C2D8DE /* YPDouYinLikeAnimation.m in Sources */,
 				A7274C5B228EE636000E3A07 /* LBXScanViewController.swift in Sources */,
+				A74144A9232F8BF40062FB6F /* PublishNewVideoPhotoSetView.swift in Sources */,
 				BD0FAA5322C4750A00DDFB37 /* AliyunCoverPickView.m in Sources */,
 				A790706122B9C294008CE279 /* ModifyDataNickNameSignView.swift in Sources */,
 				BD12204622AF997E0051C7C2 /* MessageListTableCell.swift in Sources */,
@@ -5897,8 +5915,10 @@
 		A74D9D5C2327B54100F05C14 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 8;
 				DEVELOPMENT_TEAM = C6GA87VLB8;
 				INFOPLIST_FILE = NotificationService/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
@@ -5907,9 +5927,11 @@
 					"@executable_path/Frameworks",
 					"@executable_path/../../Frameworks",
 				);
+				MARKETING_VERSION = 1.0.2;
 				PRODUCT_BUNDLE_IDENTIFIER = com.uptoyo.uptoyo.NotificationService;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SKIP_INSTALL = YES;
+				SUPPORTS_MACCATALYST = NO;
 				SWIFT_VERSION = 5.0;
 				TARGETED_DEVICE_FAMILY = 1;
 			};
@@ -5918,8 +5940,10 @@
 		A74D9D5D2327B54100F05C14 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 8;
 				DEVELOPMENT_TEAM = C6GA87VLB8;
 				INFOPLIST_FILE = NotificationService/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
@@ -5928,9 +5952,11 @@
 					"@executable_path/Frameworks",
 					"@executable_path/../../Frameworks",
 				);
+				MARKETING_VERSION = 1.0.2;
 				PRODUCT_BUNDLE_IDENTIFIER = com.uptoyo.uptoyo.NotificationService;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SKIP_INSTALL = YES;
+				SUPPORTS_MACCATALYST = NO;
 				SWIFT_VERSION = 5.0;
 				TARGETED_DEVICE_FAMILY = 1;
 			};
@@ -6064,6 +6090,7 @@
 				CODE_SIGN_ENTITLEMENTS = "RainbowPlanet/Supporting Files/RainbowPlanet.entitlements";
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 8;
 				DEFINES_MODULE = YES;
 				DEVELOPMENT_TEAM = C6GA87VLB8;
 				ENABLE_BITCODE = NO;
@@ -6091,6 +6118,7 @@
 					"$(inherited)",
 					"$(PROJECT_DIR)/RainbowPlanet/Lib/WeChatSDK",
 				);
+				MARKETING_VERSION = 1.0.2;
 				OTHER_CFLAGS = (
 					"$(inherited)",
 					"-isystem",
@@ -6297,6 +6325,7 @@
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";
 				STRIP_INSTALLED_PRODUCT = NO;
+				SUPPORTS_MACCATALYST = NO;
 				SWIFT_OBJC_BRIDGING_HEADER = "RainbowPlanet/Macro/RainbowPlanet-Bridging-Header.h";
 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 				SWIFT_VERSION = 5.0;
@@ -6316,6 +6345,7 @@
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				CODE_SIGN_STYLE = Automatic;
 				COPY_PHASE_STRIP = YES;
+				CURRENT_PROJECT_VERSION = 8;
 				DEFINES_MODULE = YES;
 				DEVELOPMENT_TEAM = C6GA87VLB8;
 				ENABLE_BITCODE = NO;
@@ -6344,6 +6374,7 @@
 					"$(inherited)",
 					"$(PROJECT_DIR)/RainbowPlanet/Lib/WeChatSDK",
 				);
+				MARKETING_VERSION = 1.0.2;
 				OTHER_CFLAGS = (
 					"$(inherited)",
 					"-isystem",
@@ -6549,6 +6580,7 @@
 				PRODUCT_MODULE_NAME = RainbowPlanet;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";
+				SUPPORTS_MACCATALYST = NO;
 				SWIFT_OBJC_BRIDGING_HEADER = "RainbowPlanet/Macro/RainbowPlanet-Bridging-Header.h";
 				SWIFT_VERSION = 5.0;
 				TARGETED_DEVICE_FAMILY = 1;

+ 15 - 19
RainbowPlanet/RainbowPlanet/Manager/PathManager/PathManager.swift

@@ -129,22 +129,16 @@ extension PathManager {
     ///
     /// - Returns: 获取Documnets目录
     class func projectDocumentPath() -> String? {
-        return "/" + (documentPath() ?? "") + Bundle.main.bundleIdentifier! + ".project"
+        return URL(fileURLWithPath: documentPath() ?? "").appendingPathComponent("uptoyo").absoluteString
     }
     
     /// 获取Caches目录
     ///
     /// - Returns: 获取Caches目录
     class func projectCachesPath() -> String? {
-        return "/" + (cachesPath() ?? "") + Bundle.main.bundleIdentifier! + ".project"
+        return URL(fileURLWithPath: cachesPath() ?? "").appendingPathComponent("uptoyo").absoluteString
     }
     
-    /// 获取相对Documnets目录
-    ///
-    /// - Returns: 获取相对Documnets目录
-    class func projectRelativeDocumentPath() -> String? {
-        return "Documents/" + Bundle.main.bundleIdentifier! + "/.project"
-    }
 }
 
 extension PathManager {
@@ -152,29 +146,31 @@ extension PathManager {
     ///
     /// - Returns: 阿里云短视频合成文件目录
     class func aliyunVodCompositionPath() -> String? {
-        return (projectDocumentPath() ?? "") + "/composition/"
+        
+        return URL(fileURLWithPath: projectDocumentPath() ?? "").appendingPathComponent("composition",isDirectory:false).absoluteString.substring(fromIndex: 5)
     }
     
-    /// 阿里云短视频录目录
+    /// 阿里云短视频录目录
     ///
     /// - Returns: 阿里云短视频记录目录
     class func aliyunVodCreateRecrodPath() -> String? {
-        return (projectDocumentPath() ?? "") + "/record/"
+        return URL(fileURLWithPath: projectDocumentPath() ?? "").appendingPathComponent("record").absoluteString.substring(fromIndex: 5)
     }
     
-    /// 阿里云短视频资源目录
+    /// 阿里云短视频录制目录输出路径
     ///
-    /// - Returns: 阿里云短视频资源目录
-    class func aliyunVodCreateResourcePath() -> String? {
-        return (projectDocumentPath() ?? "") + "/resource/"
+    /// - Returns:阿里云短视频录制目录输出路径
+    class func aliyunVodCreateRecrodOutputPath() -> String? {
+        return URL(fileURLWithPath: aliyunVodCreateRecrodPath() ?? "").appendingPathComponent("\(randomString() ?? "")").appendingPathExtension("mp4").absoluteString.substring(fromIndex: 5)
     }
     
-    /// 阿里云短视频资源目录
+    /// 清空阿里云短视频录制目录
     ///
-    /// - Returns: 阿里云短视频资源目录
-    class func aliyunVodRelativeResourcePath() -> String? {
-        return (projectRelativeDocumentPath() ?? "") + "/resource/"
+    /// - Returns: 阿里云短视频记录目录
+    class func clearRecrodPath() {
+        clearPath(pathString: aliyunVodCreateRecrodPath() ?? "")
     }
+    
 }
 
 extension PathManager {

+ 120 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishConfirmPhotoNew/PublishConfirmPhotoNewViewController.swift

@@ -0,0 +1,120 @@
+//
+//  PublishConfirmPhotoNewViewController.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/9/16.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+
+class PublishConfirmPhotoNewViewController: BaseViewController {
+
+   override func didReceiveMemoryWarning() {
+        super.didReceiveMemoryWarning()
+    }
+    
+    var photoImg: UIImage? {
+        didSet {
+            photoImageView.image = self.photoImg
+        }
+    }
+    
+    typealias PubImgClosure = (_ selectedAssetArray: Array<UIImage>) -> Void
+    var pubImgClosure: PubImgClosure?
+    
+    typealias BackClosure = () -> Void
+    var backClosure: BackClosure?
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        setupViews()
+        setupLayouts()
+        setupData()
+    }
+    
+    override var shouldAutorotate: Bool {
+        return false
+    }
+    
+    override func setupViews() {
+        navigationBar.isHidden = true
+        statusBarStyle = .lightContent
+        self.view.backgroundColor = UIColor.black
+        
+        view.addSubview(photoImageView)
+        view.addSubview(retakeBtn)
+        view.addSubview(usePhotoBtn)
+    }
+    
+    override func setupLayouts() {
+        photoImageView.snp.makeConstraints { (make) in
+            make.center.equalToSuperview()
+            make.width.equalTo(kScreenWidth)
+            make.height.equalTo(kScreenWidth * 16 / 9)
+        }
+        retakeBtn.snp.makeConstraints { (make) in
+            make.left.equalTo(photoImageView.snp_left)
+            make.bottom.equalTo(-kSafeTabBarHeight)
+            make.width.equalTo(125)
+            make.height.equalTo(48)
+        }
+        usePhotoBtn.snp.makeConstraints { (make) in
+            make.right.equalTo(photoImageView.snp_right)
+            make.bottom.equalTo(-kSafeTabBarHeight)
+            make.width.equalTo(125)
+            make.height.equalTo(48)
+        }
+    }
+    
+    override func setupData() {
+        retakeBtn.rx.tap.subscribe(onNext: { [weak self] (data) in
+            self?.navigationController?.popViewController(animated: true)
+        }).disposed(by: disposeBag)
+        
+        usePhotoBtn.rx.tap.subscribe(onNext: { [weak self] (data) in
+            PHPhotoLibrary.shared().performChanges({
+                
+            }, completionHandler: { [weak self] (success, error) in
+                    // 写入相册成功后,回到主线程进行流程
+                    DispatchQueue.main.async {
+                         [weak self] in
+                        if success != true{
+                            SwiftProgressHUD.shared().showText("保存失败")
+                            return
+                        }
+                        let imageArr: Array<UIImage> = [(self?.photoImg)!]
+                        if let pubImgClosure = self?.pubImgClosure {
+                            pubImgClosure(imageArr)
+                        }
+                    }
+            })
+            
+        }).disposed(by: disposeBag)
+    }
+    
+    private lazy var photoImageView: UIImageView = {
+        let photoImageView = UIImageView()
+        photoImageView.contentMode = .scaleAspectFit
+        return photoImageView
+    }()
+    
+    private lazy var retakeBtn: UIButton = {
+        let retakeBtn = UIButton(type: UIButton.ButtonType.custom)
+        retakeBtn.setTitle("重拍", for: .normal)
+        retakeBtn.setTitleColor(kffffffColor, for: .normal)
+        retakeBtn.titleLabel?.font = kMediumFont15
+       
+        return retakeBtn
+    }()
+    
+    private lazy var usePhotoBtn: UIButton = {
+        let usePhotoBtn = UIButton(type: UIButton.ButtonType.custom)
+        usePhotoBtn.setTitle("使用照片", for: .normal)
+        usePhotoBtn.setTitleColor(kffffffColor, for: .normal)
+        usePhotoBtn.titleLabel?.font = kMediumFont15
+        
+        return usePhotoBtn
+    }()
+
+}

+ 126 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewVideoPhotoSetView.swift

@@ -0,0 +1,126 @@
+//
+//  PublishNewVideoPhotoSetView.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/9/16.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+
+class PublishNewVideoPhotoSetView: BaseView {
+
+    override func setupViews() {
+        
+        // 返回按钮
+        addSubview(closeButton)
+        // 录制按钮
+        addSubview(recordButton)
+        // 回删按钮
+        addSubview(deleteButton)
+        // 完成录制按钮
+        addSubview(finishButton)
+        // 录制时间
+        addSubview(durationTimeLabel)
+        // 录制时间小红点
+        addSubview(durationTimeDotLabel)
+    }
+    
+    override func setupLayouts() {
+        
+        // 返回按钮
+        closeButton.snp.makeConstraints { (make) in
+            make.top.equalTo(kNavBarTotalHeight)
+            make.left.equalTo(18.5)
+        }
+        
+        // 录制按钮
+        recordButton.snp.makeConstraints { (make) in
+            make.bottom.equalTo(-(kSafeTabBarHeight+48+20))
+            make.centerX.equalToSuperview()
+            make.size.equalTo(80)
+        }
+        // 回删按钮
+        deleteButton.snp.makeConstraints { (make) in
+            make.centerY.equalTo(recordButton)
+            make.left.equalTo(recordButton.snp.right).offset(30)
+            make.width.equalTo(30)
+        }
+        deleteButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.top, imageTitleSpace: 3)
+        
+        // 完成按钮
+        finishButton.snp.makeConstraints { (make) in
+            make.centerY.equalTo(recordButton)
+            make.left.equalTo(recordButton.snp.right).offset(90)
+            make.width.equalTo(30)
+        }
+        finishButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.top, imageTitleSpace: 3)
+        
+        // 录制时间label
+        durationTimeLabel.snp.makeConstraints { (make) in
+            make.bottom.equalTo(recordButton.snp.top).offset(-20)
+            make.centerX.equalTo(recordButton).offset(7)
+        }
+        // 录制时间小红点label
+        durationTimeDotLabel.snp.makeConstraints { (make) in
+            make.centerY.equalTo(durationTimeLabel)
+            make.right.equalTo(durationTimeLabel.snp.left).offset(-4)
+            make.size.equalTo(8)
+        }
+    }
+    
+    lazy var closeButton: UIButton = {
+        let closeButton = UIButton(type: UIButton.ButtonType.custom)
+        closeButton.setImage(kImage(name: "video_btn_close_white"), for: UIControl.State.normal)
+        return closeButton
+    }()
+    
+    /// 拍摄录制按钮
+    lazy var recordButton: UIButton = {
+        let recordButton = UIButton(type: UIButton.ButtonType.custom)
+        recordButton.setImage(kImage(name: "video_btn_shoot"), for: UIControl.State.normal)
+        recordButton.setImage(kImage(name: "video_btn_pause"), for: UIControl.State.selected)
+        return recordButton
+    }()
+    
+    /// 回删按钮
+    lazy var deleteButton: UIButton = {
+        let deleteButton = UIButton(type: UIButton.ButtonType.custom)
+        deleteButton.setImage(kImage(name: "video_btn_delete"), for: UIControl.State.normal)
+        deleteButton.setTitle("回删", for: UIControl.State.normal)
+        deleteButton.titleLabel?.font = kRegularFont12
+        deleteButton.alpha = 0
+        return deleteButton
+    }()
+    
+    /// 完成/确定按钮
+    lazy var finishButton: UIButton = {
+        let finishButton = UIButton(type: UIButton.ButtonType.custom)
+        finishButton.setImage(kImage(name: "video_btn_submit"), for: UIControl.State.normal)
+        finishButton.setTitle("确定", for: UIControl.State.normal)
+        finishButton.titleLabel?.font = kRegularFont12
+        finishButton.isHidden = true
+        return finishButton
+    }()
+    
+    /// 录制时间Label
+    lazy var durationTimeLabel: UILabel = {
+        let durationTimeLabel = UILabel()
+        durationTimeLabel.textColor = .white
+        durationTimeLabel.font = kRegularFont14
+        durationTimeLabel.text = "00:00"
+        durationTimeLabel.isHidden = true
+        return durationTimeLabel
+    }()
+    
+    /// 录制时间小红点Label
+    lazy var durationTimeDotLabel: UILabel = {
+        let durationTimeDotLabel = UILabel()
+        durationTimeDotLabel.backgroundColor = kFF5E5EColor
+        durationTimeDotLabel.cornerRadius = 4
+        durationTimeDotLabel.masksToBounds = true
+        durationTimeDotLabel.isHidden = true
+        return durationTimeDotLabel
+    }()
+
+}

+ 312 - 49
RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewVideoPhotoView.swift

@@ -8,77 +8,92 @@
 
 import UIKit
 
+// MARK: - 初始化/action
 class PublishNewVideoPhotoView: BaseView {
     
+    /// 销毁View
     deinit {
         NXLLog("deinit")
     }
     
+    /// 录制的时长
+    var recorderDuration: CGFloat = 0.0
+    
+    /// 录制最大时长
+    let maxDuration : CGFloat = 60.0
+    
+    /// 录制最小时长
+    let minDuration : CGFloat = 3.0
+    
+    /// 添加View
     override func setupViews() {
-        addSubview(recordButton)
+        addSubview(publishNewVideoPhotoSetView)
         
     }
     
+    /// 布局
     override func setupLayouts() {
-        recordButton.snp.makeConstraints { (make) in
-            make.bottom.equalTo(-(kSafeTabBarHeight+48+20))
-            make.centerX.equalToSuperview()
-            make.size.equalTo(80)
+        publishNewVideoPhotoSetView.snp.makeConstraints { (make) in
+            make.edges.equalToSuperview()
         }
     }
     
+    /// 设置数据
     override func setupData() {
+        
+        // 返回
+        publishNewVideoPhotoSetView.closeButton.rx.tap.subscribe(onNext: { [weak self] (data) in
+            self?.recorder?.stopPreview()
+            let vc = UIViewController.topMost
+            vc?.navigationController?.dismiss(animated: true, completion: nil)
+        }).disposed(by: disposeBag)
+        
         //录制/拍摄
-        recordButton.rx.tap.subscribe(onNext: { [weak self] (data) in
+        publishNewVideoPhotoSetView.recordButton.rx.tap.subscribe(onNext: { [weak self] (data) in
             // 开始录制/暂停录制
             if PublishNewViewModel.shared.publishNewRecorderType == .video {
-                if (self?.recordButton.isSelected)!  { //暂停拍摄
+                if (self?.publishNewVideoPhotoSetView.recordButton.isSelected)!  { //暂停拍摄
                     self?.stopTakeVideo()
                 }else { //开始拍摄
                     self?.startTakeVideo()
                 }
                 //切换按钮状态
-                self?.recordButton.isSelected = !(self?.recordButton.isSelected)!
+                self?.publishNewVideoPhotoSetView.recordButton.isSelected = !(self?.publishNewVideoPhotoSetView.recordButton.isSelected)!
             }
             // 拍照
             if PublishNewViewModel.shared.publishNewRecorderType == .photo {
                 // 拍照
                 self?.takePhoto()
                 //切换按钮状态
-                self?.recordButton.isSelected = false
+                self?.publishNewVideoPhotoSetView.recordButton.isSelected = false
             }
         }).disposed(by: disposeBag)
+        
+        // 回删视频
+        publishNewVideoPhotoSetView.deleteButton.rx.tap.subscribe(onNext: { [weak self] (data) in
+            /// 回删视频
+            self?.deleteVideo()
+        }).disposed(by: disposeBag)
+        
+        // 完成录制
+        publishNewVideoPhotoSetView.finishButton.rx.tap.subscribe(onNext: { [weak self] (data) in
+            /// 回删视频
+            self?.finishTakeVideo()
+        }).disposed(by: disposeBag)
     }
     
-    
-    /// 开始拍视频
-    func startTakeVideo() {
-        recorder?.startRecording()
-    }
-    
-    /// 暂停拍视频
-    func stopTakeVideo() {
-        recorder?.stopRecording()
-    }
-    
-    /// 完成拍视频
-    func finishTakeVideo() {
-        recorder?.finishRecording()
-    }
-    
-    /// 拍照
-    func takePhoto() {
-        recorder?.takePhoto({ (image, rawImage) in
-            
-        })
-    }
-    
-    // SDK录制类
+    /// SDK录制类
     lazy var recorder: AliyunIRecorder? = {
         
         let recorder = AliyunIRecorder.init(delegate: self, videoSize: CGSize(width: 720, height: 1280))
         // 预览View
         recorder?.preview = self
+        //清除录制路径
+        PathManager.clearRecrodPath()
+        // 设置文件夹路径
+        recorder?.taskPath = PathManager.aliyunVodCreateRecrodPath() ?? ""
+        // 设置录制视频输出路径
+        recorder?.outputPath = PathManager.aliyunVodCreateRecrodOutputPath() ?? ""
         // 美颜状态
         recorder?.beautifyStatus = true;
         // 设置美颜度 [0,100]
@@ -88,9 +103,9 @@ class PublishNewVideoPhotoView: BaseView {
         // 后置摄像头采集分辨率 默认:AVCaptureSessionPreset1280x720
         recorder?.backCaptureSessionPreset = AVCaptureSession.Preset.hd1280x720.rawValue
         // 设置视频最大时长 默认8
-        recorder?.clipManager.maxDuration = 60
+        recorder?.clipManager.maxDuration = maxDuration
         // 设置视频最小时长 默认8
-        recorder?.clipManager.minDuration = 3
+        recorder?.clipManager.minDuration = minDuration
         // 设置摄像头角度
         recorder?.cameraRotate = 0
         // 设置编码方式 0软编 1硬编
@@ -111,24 +126,147 @@ class PublishNewVideoPhotoView: BaseView {
         return recorder!
     }()
     
-    /// 拍摄录制按钮
-    lazy var recordButton: UIButton = {
-        let recordButton = UIButton(type: UIButton.ButtonType.custom)
-        recordButton.setImage(kImage(name: "video_btn_shoot"), for: UIControl.State.normal)
-        recordButton.setImage(kImage(name: "video_btn_pause"), for: UIControl.State.selected)
-        return recordButton
+    lazy var publishNewVideoPhotoSetView: PublishNewVideoPhotoSetView = {
+        let publishNewVideoPhotoSetView = PublishNewVideoPhotoSetView()
+        return publishNewVideoPhotoSetView
     }()
     
-//    /// 显示授权View
-//    func showAuthorizationView() {
-//        PublishNewViewModel.shared.scrollView?.isHidden = true
-//        PublishNewViewModel.shared.publishNewAuthorizationView?.isHidden = false
-//    }
-    
+}
+
 
+// MARK: - 方法
+extension PublishNewVideoPhotoView {
+    
+    /// 开始拍视频
+    func startTakeVideo() {
+        recorder?.startRecording()
+        // 回删按钮隐藏
+        deleteAlpha(alpha: 0)
+        // 分段view隐藏
+        segmentedViewAlpha(alpha: 0)
+        // 开始录制隐藏View
+        startTakeVideoHiddenView()
+        
+    }
+    
+    /// 暂停拍视频
+    func stopTakeVideo() {
+        recorder?.stopRecording()
+    }
+    
+    /// 开始录制隐藏View
+    func startTakeVideoHiddenView() {
+        publishNewVideoPhotoSetView.closeButton.isHidden = true
+    }
+    
+    /// 停止录制显示View
+    func stopTakeVideoVideoHiddenView() {
+        publishNewVideoPhotoSetView.closeButton.isHidden = false
+    }
+    
+    /// 完成拍视频
+    func finishTakeVideo() {
+        recorder?.finishRecording()
+    }
+    
+    /// 拍照
+    func takePhoto() {
+        recorder?.takePhoto({ (image, rawImage) in
+            // 跳转到使用照片页面
+            let vc = UIViewController.topMost
+            let publishConfirmPhotoNewVC  = PublishConfirmPhotoNewViewController()
+            publishConfirmPhotoNewVC.photoImg = image
+            vc?.navigationController?.pushViewController(publishConfirmPhotoNewVC, animated: true)
+        })
+    }
+    /// 回删视频
+    func deleteVideo() {
+        if recorder?.clipManager?.partCount ?? 0 > 0 {
+            AlertSheetView.alert(title: "是否删除上一片段?") { [weak self] (popupView, index, title) in
+                let partCount = self?.recorder?.clipManager?.partCount
+                // 删除最后一个视频片段
+                self?.recorder?.clipManager.deletePart()
+                // 视频时长
+                self?.recorderDuration = (self?.recorder?.clipManager.duration)!
+                // 完成按钮是否显示
+                self?.finishAlpha()
+                // 时间按钮是否显示
+                self?.durationTimeAlpha()
+                // 剩下最后一个片段视频
+                if partCount == 1 {
+                    // 回删按钮是否隐藏
+                    self?.deleteAlpha(alpha: 0)
+                    // 分段view隐藏
+                    self?.segmentedViewAlpha(alpha: 1)
+                }
+            }
+        }
+    }
+    
+    
+    /// 回删按钮显示跟隐藏
+    /// - Parameter alpha: 回删按钮显示跟隐藏
+    func deleteAlpha(alpha:CGFloat) {
+        DispatchQueue.main.async {
+            [weak self] in
+            self?.publishNewVideoPhotoSetView.deleteButton.alpha = alpha
+        }
+    }
+    
+    /// 完成按钮显示跟隐藏
+    /// - Parameter alpha: 完成按钮显示跟隐藏
+    func finishAlpha() {
+         DispatchQueue.main.async {
+            [weak self] in
+            if (self?.recorderDuration)! >= 3.0 {
+                if (self?.publishNewVideoPhotoSetView.finishButton.isHidden)! {
+                    self?.publishNewVideoPhotoSetView.finishButton.isHidden = false
+                }
+            }else {
+                if !(self?.publishNewVideoPhotoSetView.finishButton.isHidden)! {
+                    self?.publishNewVideoPhotoSetView.finishButton.isHidden = true
+                }
+            }
+        }
+    }
+    
+    /// 时间label显示跟隐藏
+    /// - Parameter alpha: 时间label显示跟隐藏
+    func durationTimeAlpha() {
+         DispatchQueue.main.async {
+            [weak self] in
+            if (self?.recorderDuration)! > 0.0 {
+                if (self?.publishNewVideoPhotoSetView.durationTimeLabel.isHidden)! {
+                    self?.publishNewVideoPhotoSetView.durationTimeLabel.isHidden = false
+                    self?.publishNewVideoPhotoSetView.durationTimeDotLabel.isHidden = false
+                }
+                let d : Int = Int(self?.recorderDuration ?? 0)
+                let m : Int = Int(d / 60)
+                let s : Int = Int(d % 60)
+                self?.publishNewVideoPhotoSetView.durationTimeLabel.text = String(format: "%02d:%02d", m,s)
+            }else {
+                if !(self?.publishNewVideoPhotoSetView.durationTimeLabel.isHidden)! {
+                    self?.publishNewVideoPhotoSetView.durationTimeLabel.isHidden = true
+                    self?.publishNewVideoPhotoSetView.durationTimeDotLabel.isHidden = true
+                }
+            }
+        }
+    }
+    
+    /// 分段view显示
+    /// - Parameter alpha: 透明度
+    func segmentedViewAlpha(alpha:CGFloat) {
+        UIView.animate(withDuration: 0.5) {
+            PublishNewViewModel.shared.segmentedView?.alpha = alpha
+        }
+    }
 }
 
+// MARK: - 代理
 extension PublishNewVideoPhotoView : AliyunIRecorderDelegate {
+    
+    /// 授权代理
+    /// - Parameter status: 收取状态
     func recorderDeviceAuthorization(_ status: AliyunIRecorderDeviceAuthor) {
         switch status {
         // 授权同意
@@ -136,14 +274,139 @@ extension PublishNewVideoPhotoView : AliyunIRecorderDelegate {
             break
         // 音频授权被拒绝
         case .audioDenied:
-//            showAuthorizationView()
             break
         // 视频授权被拒绝
         case .videoDenied:
-//            showAuthorizationView()
             break
         default:
             break
         }
     }
+    
+    /**
+     摄像头返回的原始视频数据
+    
+     开放出来的目的是用于做人脸识别
+     @param sampleBuffer 视频数据
+     */
+//    func recorderOutputVideoRawSampleBuffer(_ sampleBuffer: CMSampleBuffer!)
+
+    
+    /**
+     返回原始的音频数据
+    
+     用来做语音识别一类的业务
+     @param sampleBuffer 音频数据
+     */
+//    func recorderOutputAudioRawSampleBuffer(_ sampleBuffer: CMSampleBuffer!)
+
+    
+    /**
+     用户自定义渲染
+    
+     @param sampleBuffer 原始视频数据
+     @return 用户自渲染后的PixelBuffer
+     */
+//    optional func customRenderedPixelBuffer(withRawSampleBuffer sampleBuffer: CMSampleBuffer!) -> Unmanaged<CVPixelBuffer>!
+
+    
+    /**
+     用户自定义渲染
+    
+     开放pixelBuffer和纹理id给用户自渲染 (仅支持BGRA格式)
+     @param pixelBuffer 摄像头数据
+     @param textureName 摄像头数据纹理
+     @return 自定义渲染后的纹理id
+     */
+//    optional func recorderOutputVideoPixelBuffer(_ pixelBuffer: CVPixelBuffer!, textureName: Int) -> Int
+
+    
+    /**
+     用户自定义渲染接口
+    
+     @param srcTexture 原始视频帧纹理id
+     @param size 原始视频帧纹理size
+     @return 返回纹理id
+     */
+//    optional func customRender(_ srcTexture: Int32, size: CGSize) -> Int32
+
+    
+    /**
+     录制实时时长
+    
+     @param duration 录制时长
+     */
+    func recorderVideoDuration(_ duration: CGFloat) {
+        // 录制时长
+        recorderDuration = duration
+        // 完成按钮是否显示
+        finishAlpha()
+        // 时间按钮是否显示
+        durationTimeAlpha()
+    }
+
+    
+    /**
+     摄像头返回的原始视频纹理
+    
+     摄像头数据格式为BGRA、YUV时都需实现
+     @param textureName 原始纹理ID
+     @return 处理后的纹理ID
+     */
+//    optional func recorderOutputVideoTextureName(_ textureName: Int, textureSize textureSie: CGSize) -> Int
+
+    
+    /**
+     摄像头返回的原始视频纹理
+    
+     摄像头数据格式仅为YUV时须实现,反之不实现
+     @param textureName  原始UV分量的纹理ID
+     @return 处理后的纹理ID
+     */
+//    optional func recorderOutputVideoUVTextureName(_ textureName: Int) -> Int
+
+    
+    /**
+     开始预览回调
+     */
+    func recorderDidStartPreview() {
+        
+    }
+
+    
+    /**
+     停止录制回调
+     */
+    func recorderDidStopRecording() {
+        // 回删按钮透明度
+        deleteAlpha(alpha:1)
+        // 停止录制显示View
+        stopTakeVideoVideoHiddenView()
+    }
+
+    
+    /**
+     当录至最大时长时回调
+     */
+    func recorderDidStopWithMaxDuration() {
+        
+    }
+
+    
+    /**
+     结束录制回调
+     */
+    func recorderDidFinishRecording() {
+        
+    }
+
+    
+    /**
+     录制异常
+    
+     @param error 异常
+     */
+    func recoderError(_ error: Error!) {
+        
+    }
 }

+ 1 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/ViewController/PublishNewViewController.swift

@@ -66,6 +66,7 @@ class PublishNewViewController: BaseViewController {
         publishNewViewModel = PublishNewViewModel.shared
         publishNewViewModel?.scrollView = scrollView
         publishNewViewModel?.publishNewAuthorizationView = publishNewAuthorizationView
+        publishNewViewModel?.segmentedView = segmentedView
         
         /// 授权
         if NXLPermission.isDenied(.photoLibrary) ||

+ 4 - 1
RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/ViewModel/PublishNewViewModel.swift

@@ -7,6 +7,7 @@
 //
 
 import UIKit
+import JXSegmentedView
 
 class PublishNewViewModel: NSObject {
     
@@ -14,7 +15,6 @@ class PublishNewViewModel: NSObject {
         NXLLog("deinit")
     }
     
-    
     /// 单利类
     static let shared : PublishNewViewModel = PublishNewViewModel()
     
@@ -35,6 +35,9 @@ class PublishNewViewModel: NSObject {
     /// 授权View
     weak var publishNewAuthorizationView : PublishNewAuthorizationView?
     
+    /// 分段View
+    weak var segmentedView : JXSegmentedView?
+    
     /// 录制类型
     var publishNewRecorderType : PublishNewRecorderType =  .none
     

+ 2 - 2
RainbowPlanet/RainbowPlanet/Supporting Files/Info.plist

@@ -22,7 +22,7 @@
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>1.0.1</string>
+	<string>$(MARKETING_VERSION)</string>
 	<key>CFBundleURLTypes</key>
 	<array>
 		<dict>
@@ -87,7 +87,7 @@
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>7</string>
+	<string>$(CURRENT_PROJECT_VERSION)</string>
 	<key>LSApplicationQueriesSchemes</key>
 	<array>
 		<string>wechat</string>

+ 16 - 0
RainbowPlanet/RainbowPlanet/Supporting Files/RainbowPlanet.entitlements

@@ -4,5 +4,21 @@
 <dict>
 	<key>aps-environment</key>
 	<string>development</string>
+	<key>com.apple.security.app-sandbox</key>
+	<true/>
+	<key>com.apple.security.device.audio-input</key>
+	<true/>
+	<key>com.apple.security.device.camera</key>
+	<true/>
+	<key>com.apple.security.network.client</key>
+	<true/>
+	<key>com.apple.security.personal-information.addressbook</key>
+	<true/>
+	<key>com.apple.security.personal-information.calendars</key>
+	<true/>
+	<key>com.apple.security.personal-information.location</key>
+	<true/>
+	<key>com.apple.security.personal-information.photos-library</key>
+	<true/>
 </dict>
 </plist>

+ 23 - 0
RainbowPlanet/RainbowPlanet/Tools/Extension/Extension+String.swift

@@ -277,3 +277,26 @@ extension String {
         return ceil(rect.height)>maxHeight ? maxHeight : ceil(rect.height)
     }
 }
+
+extension String {
+        var length: Int {
+            return self.count
+        }
+
+        func substring(fromIndex: Int) -> String {
+            return self[min(fromIndex, length) ..< length]
+        }
+
+        func substring(toIndex: Int) -> String {
+            return self[0 ..< max(0, toIndex)]
+        }
+
+        subscript (r: Range<Int>) -> String {
+            let range = Range(uncheckedBounds: (lower: max(0, min(length, r.lowerBound)), upper: min(length, max(0, r.upperBound))))
+            let start = index(startIndex, offsetBy: range.lowerBound)
+            let end = index(start, offsetBy: range.upperBound - range.lowerBound)
+            return String(self[start ..< end])
+    }
+
+}
+