Explorar el Código

1.merge master

wenweiwei hace 3 años
padre
commit
b744d43f46

+ 1 - 1
BFFramework/Classes/BFModules/BFUtility/PQSingletoRealmUtil.swift

@@ -12,7 +12,7 @@ import BFCommonKit
 import BFUIKit
 
 public class PQSingletoRealmUtil: NSObject {
-    public  var schemaVersion : UInt64 = 32
+    public  var schemaVersion : UInt64 = 33
     public var realmEntry: Realm? {
         let config = Realm.Configuration(
             schemaVersion: schemaVersion,

+ 1 - 1
BFFramework/Classes/PModels/PQReCreateModel.swift

@@ -32,7 +32,7 @@ public class PQReCreateModel: Object {
         super.init()
     }
 
-    init(jsonDict: [String: Any]) {
+   public init(jsonDict: [String: Any]) {
         super.init()
         if jsonDict.keys.contains("canReproduce") {
             canReproduce = Int("\(jsonDict["canReproduce"] ?? "0")") ?? 0

+ 65 - 11
BFFramework/Classes/PQGPUImage/akfilters/PQImageFilter.swift

@@ -17,6 +17,8 @@ open class PQImageFilter: PQBaseFilter {
     var imageVertexBuffer: GLuint = 0
     var mSticker: PQEditVisionTrackMaterialsModel?
     var newImage: UIImage?
+    //临时方案,是否是卡点模式
+    public var isPointModel:Bool = false
     deinit {
         FilterLog(1, message: "image filter deinit 析构掉~")
         newImage = nil
@@ -52,15 +54,12 @@ open class PQImageFilter: PQBaseFilter {
         }
         // 保证是正方向
         if(newImage != nil){
-            UIImage.nx_fixOrientation(newImage, isFront: false).nx_scaleWithMaxLength(maxLength: 1920) { [weak self] outputImage in
-                DispatchQueue.main.async { [weak self] in
-                    self?.newImage = outputImage
-                    self?.preImagefilter(isExport: isExport, showUISize: showUISize)
-                }
-            }
-        }else{
-            preImagefilter(isExport: isExport, showUISize: showUISize)
+
+            newImage =  UIImage.nx_fixOrientation(newImage, isFront: false)
+
         }
+        
+        preImagefilter(isExport: isExport, showUISize: showUISize)
       
     }
 
@@ -70,14 +69,16 @@ open class PQImageFilter: PQBaseFilter {
             newImage = UIImage.moduleImage(named: stickerInfo?.locationPath ?? "", moduleName: "BFFramework", isAssets: false)
         }
         // 如果是预览时 对原图进行缩放处理
+        autoreleasepool {
         if !isExport {
+            
             let maxLength = max(showUISize.width, showUISize.height)
             newImage = newImage?.nx_scaleWithMaxLength(maxLength: CGFloat(maxLength * UIScreen.main.scale))
 
             FilterLog(message: "newImage is \(newImage?.size.width ?? 0) \(newImage?.size.height ?? 0)")
         }
 
-        autoreleasepool {
+    
             if newImage == nil {
                 // 有可能是webp数据 ,使用 webp 加载
                 var imageFilePath = mSticker?.locationPath ?? ""
@@ -136,8 +137,9 @@ open class PQImageFilter: PQBaseFilter {
         }
 
         FilterLog(2, message: " image filter 当前时间: \(currTime) \(newImage!.size)")
-
-        if currTime >= mSticker!.timelineIn && currTime <= mSticker!.timelineOut {
+        
+        if(isPointModel){
+            
             FilterLog(2, message: " 显示图片当前时间: \(currTime) 开始时间:\(mSticker!.timelineIn) 结束时间:\(mSticker!.timelineOut)  \(String(describing: newImage?.size))")
             // 取纹理坐标
             var textureCoordinates = PQGPUImageTools.getTextureCoordinates(sticker: mSticker!, textureSize: newImage!.size, cannvasSize: inputSize)
@@ -185,6 +187,58 @@ open class PQImageFilter: PQBaseFilter {
                 PQGPUImageTools.deleteVBO(imageVertexBuffer)
                 imageVertexBuffer = 0
             }
+        }else{
+            if currTime >= mSticker!.timelineIn && currTime <= mSticker!.timelineOut {
+                FilterLog(2, message: " 显示图片当前时间: \(currTime) 开始时间:\(mSticker!.timelineIn) 结束时间:\(mSticker!.timelineOut)  \(String(describing: newImage?.size))")
+                // 取纹理坐标
+                var textureCoordinates = PQGPUImageTools.getTextureCoordinates(sticker: mSticker!, textureSize: newImage!.size, cannvasSize: inputSize)
+
+                FilterLog(2, message: "textureCoordinates is \(textureCoordinates) image size :\(newImage!.size) cannvasSize:\(inputSize)  files path is \(mSticker?.locationPath)")
+
+                // imageTexture 有可能被析构导致黑屏
+                if imageTexture == 0 && newImage?.cgImage != nil {
+                    FilterLog(2, message: "imageTexture is error !!!!!重新创建")
+                    imageTexture = PQGPUImageTools.setupTexture(image: newImage!.cgImage!)
+                }
+
+                // 如果设置过大小位置,使用设置值,比如水印
+                if stickerInfo?.materialPosition?.width != 0 {
+                    textureCoordinates = [
+                        0.0, 0.0, // 1 bottom left
+                        1.0, 0.0, // 2 bottom right
+                        0.0, 1.0, // 3 top left
+                        1.0, 1.0, // 4 top right
+                    ]
+                }
+
+                let texturePropertiesimagetwo = InputTextureProperties(textureCoordinates: textureCoordinates, texture: imageTexture)
+
+                var verticesPoint: [GLfloat] = PQGPUImageTools.getVerticesPoint(sticker: mSticker!, textureSize: newImage!.size, cannvasSize: inputSize)
+
+                // 如果设置过大小位置,使用设置值,比如水印
+                if stickerInfo?.materialPosition?.width != 0 {
+                    verticesPoint = PQGPUImageTools.computeVertices(viewSize: CGSize(width: CGFloat(inputSize.width), height: CGFloat(inputSize.height)), _bounds: CGRect(x: stickerInfo?.materialPosition?.x ?? 0, y: stickerInfo?.materialPosition?.y ?? 0, width: stickerInfo?.materialPosition?.width ?? 0, height: stickerInfo?.materialPosition?.height ?? 0))
+                }
+
+                // 设置融合模式支持 alpha
+                glEnable(GLenum(GL_DEPTH_TEST))
+                glEnable(GLenum(GL_BLEND))
+                glBlendFunc(GLenum(GL_SRC_ALPHA), GLenum(GL_ONE_MINUS_SRC_ALPHA))
+
+                imageVertexBuffer = PQGPUImageTools.NXGenerateVBO(for: verticesPoint)
+
+                renderQuadWithShader(shader,
+                                     uniformSettings: uniformSettings,
+                                     vertexBufferObject: imageVertexBuffer, inputTextures: [texturePropertiesimagetwo])
+                releaseIncomingFramebuffers()
+
+                if imageVertexBuffer != 0 {
+                    PQGPUImageTools.deleteVBO(imageVertexBuffer)
+                    imageVertexBuffer = 0
+                }
+            }
         }
+
+       
     }
 }

+ 19 - 17
BFFramework/Classes/PQGPUImage/akfilters/Tools/PQCompositionExporter.swift

@@ -175,26 +175,27 @@ public class PQCompositionExporter {
         }
         var currentSticker:PQEditVisionTrackMaterialsModel?
        
-//        for sticker in mStickers! {
-//            BFLog(message: "sticker in \(sticker.timelineIn) out \(sticker.timelineOut)  currTime is \(currTime)")
-//            if(sticker.timelineIn <= currTime && sticker.timelineOut >= currTime){
-//                currentSticker = sticker
-//                break
-//            }
-//        }
-        while true {
-            if let sticker = mStickers!.first {
-                if sticker.timelineIn <= currTime && sticker.timelineOut >= currTime {
-                    BFLog(message: " 导出时换了的时间:\(currTime)")
-                    currentSticker = sticker
-                    break
-                }else{
-                    mStickers!.removeFirst()
-                }
-            }else{
+        for sticker in mStickers! {
+            BFLog(message: "sticker in \(sticker.timelineIn) out \(sticker.timelineOut)  currTime is \(currTime)")
+            if(sticker.timelineIn <= currTime && sticker.timelineOut >= currTime){
+                currentSticker = sticker
                 break
             }
         }
+//        while true {
+//
+//            if let sticker = mStickers!.first {
+//                if Float(sticker.timelineIn).decimalNumber(5) <= Float(currTime).decimalNumber(5) && Float(sticker.timelineOut).decimalNumber(5) >= Float(currTime).decimalNumber(5) {
+//                    BFLog(message: " 导出时换了的时间:\(currTime)")
+//                    currentSticker = sticker
+//                    break
+//                }else{
+//                    mStickers!.removeFirst()
+//                }
+//            }else{
+//                break
+//            }
+//        }
         
         //创建不同的filter
         if(currentSticker == nil){
@@ -209,6 +210,7 @@ public class PQCompositionExporter {
               
             } else if currentSticker!.type == StickerType.IMAGE.rawValue {
                 showFitler = PQImageFilter(sticker: currentSticker!)
+                (showFitler as? PQImageFilter)?.isPointModel = ((mStickers?.count ?? 0) > 0)
                 
             }
             input!.removeAllTargets()

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 197 - 219
BFFramework/Classes/Stuckpoint/Controller/PQStuckPointEditerController.swift


+ 11 - 4
BFFramework/Classes/Stuckpoint/Controller/PQStuckPointPublicController.swift

@@ -50,7 +50,7 @@ class PQStuckPointPublicController: BFBaseViewController {
     // 导出结束的时间
     private var exportEndDate: Float64 = Date().timeIntervalSince1970
     // 取到的封面 给发布界面使用
-    private var coverImage: UIImage?
+    public var coverImage: UIImage?
     // 导出视频工具类
     private var exporter: PQCompositionExporter!
     // 导出进度
@@ -161,7 +161,6 @@ class PQStuckPointPublicController: BFBaseViewController {
                     coverImageMaterialsModel = section.sectionTimeline?.visionTrack?.getEnableVisionTrackMaterials().first
                 }
                 if coverImageMaterialsModel != nil {
-                    coverImage = coverImageMaterialsModel?.getCoverImage()
                     playerHeaderView.image = coverImage
                     playerHeaderView.contentMode = coverImageMaterialsModel!.canvasFillType == stickerContentMode.aspectFitStr.rawValue ? .scaleAspectFill : .scaleAspectFit
                 }
@@ -921,7 +920,15 @@ extension PQStuckPointPublicController {
             }
         }
         exporter.completion = { [weak self] url in
-            BFLog(message: "无水印的视频导出完成: \(String(describing: url)) 生成视频时长为:\(CMTimeGetSeconds(AVAsset(url: (url ?? URL(string: "https://media.w3.org/2010/05/sintel/trailer.mp4")!)).duration))")
+           
+            //输出视频时长
+           let  outSeconds = CMTimeGetSeconds(AVAsset(url: (url ?? URL(string: "https://media.w3.org/2010/05/sintel/trailer.mp4")!)).duration)
+            
+            BFLog(message: "无水印的视频导出完成: \(String(describing: url)) 生成视频时长为:\(outSeconds)")
+            if(outSeconds == 0){
+                cShowHUB(superView: self?.view, msg: "合成失败请重试。")
+                return
+            }
 
             // 导出完成后取消导出
             if self?.exporter != nil {
@@ -1123,7 +1130,7 @@ extension PQStuckPointPublicController {
             if isExportSuccess, exportLocalURL != nil {
                 let size = try! exportLocalURL?.resourceValues(forKeys: [.fileSizeKey])
                 BFLog(message: "size = \(String(describing: size))")
-                if Float64(size?.fileSize ?? 0) <= maxUploadSize {
+                if (size?.fileSize ?? 0) > 0 && Float64(size?.fileSize ?? 0) <= maxUploadSize {
                     /// fp5 - 上传视频
                     reUploadVideo()
                 }

+ 3 - 1
BFFramework/Classes/Stuckpoint/ViewModel/PQGPUImagePlayerView.swift

@@ -508,7 +508,7 @@ public class PQGPUImagePlayerView: UIView {
 
                 } else if currentSticker.type == StickerType.IMAGE.rawValue {
                     showFitler = PQImageFilter(sticker: currentSticker, isExport: (movie?.mIsExport) ?? false, showUISize: mCanverSize)
-                  
+                    (showFitler as? PQImageFilter)?.isPointModel = ((mStickers?.count ?? 0) > 0)
                 }
                 if showFitler != nil {
                     FilterLog(message: " 加入到缓存 的 filter timelinein:\(currentSticker.timelineIn) timelineout: \(currentSticker.timelineOut) in :\(currentSticker.model_in) out: \(currentSticker.out) index : \(index)")
@@ -553,6 +553,7 @@ public class PQGPUImagePlayerView: UIView {
 
                       } else if currentSticker!.type == StickerType.IMAGE.rawValue {
                         showFitler = PQImageFilter(sticker: currentSticker!, isExport: (movie?.mIsExport) ?? false, showUISize: mCanverSize)
+                        (showFitler as? PQImageFilter)?.isPointModel = ((mStickers?.count ?? 0) > 0)
                       }
                       if showFitler != nil {
 
@@ -620,6 +621,7 @@ public class PQGPUImagePlayerView: UIView {
                             return
                         }
                         let showGaussianFitler:PQBaseFilter = PQImageFilter(sticker: blurStickerModel!, isExport: (movie?.mIsExport) ?? false, showUISize: mCanverSize)
+                        (showGaussianFitler as? PQImageFilter)?.isPointModel = ((mStickers?.count ?? 0) > 0)
                         
                         let iosb:GaussianBlur = GaussianBlur.init()
                         iosb.blurRadiusInPixels = 20

+ 11 - 2
BFFramework/Classes/Utils/PQRequestURLUtil.swift

@@ -187,9 +187,9 @@ public let systemAppConfigUrl = "sys/app/config"
 public let getBaseConfigURL = "frontConfig/getBaseConfig"
 
 /** 用户协议 */
-public let cUserProtocol = "https://weapppiccdn.yishihui.com/resources/agreements/videoservice.html?type=15"
+public let cUserProtocol = "https://weapppiccdn.yishihui.com/resources/agreements/videoservice.html?type=\(BFConfig.shared.appType)"
 /** 隐私政策 */
-public let cPrivacy = "https://weapppiccdn.yishihui.com/resources/agreements/videoagreement.html?type=15"
+public let cPrivacy = "https://weapppiccdn.yishihui.com/resources/agreements/videoagreement.html?type=\(BFConfig.shared.appType)"
 /** 互联网管理规定 */
 public let cNetManagePrivacy = "http://www.cac.gov.cn/2017-08/25/c_1121541842.htm"
 // ***************** 埋点上报地址 **********************//
@@ -414,6 +414,15 @@ public let feedbackPageUrl = "https://support.qq.com/embed/phone/\(feedbackAppId
 
 public let applyCheckUrl = "incentive/creator/applyCheck"
 public let applyStatusUrl = "incentive/creator/applyStatus"
+// 分享者用户权益中心
+public let incentiveUserRCenterUrl = "incentive/userRightCenter"
+// 加入分享者激励计划
+public let incentiveJoinUrl = "incentive/sharer/join"
+// 分享者激励计划邀请检查
+public let invitedCheckUrl = "incentive/sharer/invitedCheck"
+// 是否已无有效分享
+public let invitedShareStatusUrl = "incentive/sharer/shareCheck"
+
 
 // ***************** 评论相关地址 **********************//
 

+ 6 - 0
Example/BFFramework.xcodeproj/project.pbxproj

@@ -257,15 +257,18 @@
 				"${BUILT_PRODUCTS_DIR}/AliyunOSSiOS/AliyunOSSiOS.framework",
 				"${BUILT_PRODUCTS_DIR}/BFCommonKit/BFCommonKit.framework",
 				"${BUILT_PRODUCTS_DIR}/BFNetRequestKit/BFNetRequestKit.framework",
+				"${BUILT_PRODUCTS_DIR}/BFUIKit/BFUIKit.framework",
 				"${BUILT_PRODUCTS_DIR}/FDFullscreenPopGesture/FDFullscreenPopGesture.framework",
 				"${BUILT_PRODUCTS_DIR}/KeychainAccess/KeychainAccess.framework",
 				"${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework",
 				"${BUILT_PRODUCTS_DIR}/KingfisherWebP/KingfisherWebP.framework",
 				"${BUILT_PRODUCTS_DIR}/LMJHorizontalScrollText/LMJHorizontalScrollText.framework",
+				"${BUILT_PRODUCTS_DIR}/MGSwipeTableCell/MGSwipeTableCell.framework",
 				"${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework",
 				"${BUILT_PRODUCTS_DIR}/ObjectMapper/ObjectMapper.framework",
 				"${BUILT_PRODUCTS_DIR}/Realm/Realm.framework",
 				"${BUILT_PRODUCTS_DIR}/RealmSwift/RealmSwift.framework",
+				"${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework",
 				"${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework",
 				"${BUILT_PRODUCTS_DIR}/Toast-Swift/Toast_Swift.framework",
 				"${BUILT_PRODUCTS_DIR}/libwebp/libwebp.framework",
@@ -276,15 +279,18 @@
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AliyunOSSiOS.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BFCommonKit.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BFNetRequestKit.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BFUIKit.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FDFullscreenPopGesture.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KeychainAccess.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Kingfisher.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KingfisherWebP.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/LMJHorizontalScrollText.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MGSwipeTableCell.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjectMapper.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RealmSwift.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Toast_Swift.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libwebp.framework",

+ 4 - 3
Example/Podfile

@@ -5,8 +5,9 @@ platform :ios, '10.0'
 target 'BFFramework_Example' do
   source 'https://git.yishihui.com/iOS/BFSpecs.git'
   source 'https://github.com/CocoaPods/Specs.git'
-#  pod 'BFCommonKit', :path => '/Users/sanw/Desktop/BytesFlow/Person/Projects/BFCommonKit/'
-#  pod 'BFNetRequestKit', :path => '/Users/sanw/Desktop/BytesFlow/Person/Projects/BFNetRequestKit/'
-#  pod 'BFMaterialKit', :path => '/Users/sanw/Desktop/BytesFlow/Person/Projects/BFMaterialKit/'
+  pod 'BFCommonKit', :path => '/Users/sanw/Desktop/BytesFlow/Person/Projects/BFCommonKit/'
+  pod 'BFNetRequestKit', :path => '/Users/sanw/Desktop/BytesFlow/Person/Projects/BFNetRequestKit/'
+  pod 'BFMaterialKit', :path => '/Users/sanw/Desktop/BytesFlow/Person/Projects/BFMaterialKit/'
+  pod 'BFUIKit', :path => '/Users/sanw/Desktop/BytesFlow/Person/Projects/BFUIKit/'
   pod 'BFFramework', :path => '../'
 end

+ 93 - 41
Example/Podfile.lock

@@ -1,54 +1,91 @@
 PODS:
-  - Alamofire (5.4.3)
+  - Alamofire (5.4.4)
   - AliyunOSSiOS (2.10.10)
-  - BFCommonKit (1.4.9):
-    - BFCommonKit/BFBase (= 1.4.9)
-    - BFCommonKit/BFCategorys (= 1.4.9)
-    - BFCommonKit/BFConfig (= 1.4.9)
-    - BFCommonKit/BFDebug (= 1.4.9)
-    - BFCommonKit/BFEnums (= 1.4.9)
-    - BFCommonKit/BFUtility (= 1.4.9)
-  - BFCommonKit/BFBase (1.4.9):
-    - Alamofire (= 5.4.3)
+  - BFCommonKit (1.5.0):
+    - BFCommonKit/BFBase (= 1.5.0)
+    - BFCommonKit/BFCategorys (= 1.5.0)
+    - BFCommonKit/BFConfig (= 1.5.0)
+    - BFCommonKit/BFDebug (= 1.5.0)
+    - BFCommonKit/BFEnums (= 1.5.0)
+    - BFCommonKit/BFUtility (= 1.5.0)
+  - BFCommonKit/BFBase (1.5.0):
+    - Alamofire (= 5.4.4)
     - BFCommonKit/BFCategorys
     - BFCommonKit/BFConfig
     - BFCommonKit/BFUtility
-    - FDFullscreenPopGesture (= 1.1)
-    - RealmSwift (= 10.7.6)
     - SnapKit (= 5.0.1)
-  - BFCommonKit/BFCategorys (1.4.9):
+  - BFCommonKit/BFCategorys (1.5.0):
     - KingfisherWebP (= 1.3.0)
-  - BFCommonKit/BFConfig (1.4.9)
-  - BFCommonKit/BFDebug (1.4.9):
+  - BFCommonKit/BFConfig (1.5.0)
+  - BFCommonKit/BFDebug (1.5.0):
     - BFCommonKit/BFCategorys
-  - BFCommonKit/BFEnums (1.4.9)
-  - BFCommonKit/BFUtility (1.4.9):
-    - Alamofire (= 5.4.3)
+  - BFCommonKit/BFEnums (1.5.0)
+  - BFCommonKit/BFUtility (1.5.0):
+    - Alamofire (= 5.4.4)
     - BFCommonKit/BFCategorys
     - BFCommonKit/BFConfig
     - KeychainAccess (= 4.2.2)
-    - Kingfisher (= 6.3.0)
+    - Kingfisher (= 6.3.1)
     - KingfisherWebP (= 1.3.0)
     - Toast-Swift (= 5.0.1)
   - BFFramework (1.0.7):
-    - AliyunOSSiOS
+    - AliyunOSSiOS (= 2.10.10)
     - BFCommonKit
     - BFMaterialKit
     - BFNetRequestKit
-    - Bugly
-    - LMJHorizontalScrollText
-    - MJRefresh
-    - ObjectMapper
-    - TXLiteAVSDK_Player
-    - WechatOpenSDK-Swift
-  - BFMaterialKit (0.1.6):
+    - Bugly (= 2.5.90)
+    - LMJHorizontalScrollText (= 2.0.2)
+    - MJRefresh (= 3.7.2)
+    - ObjectMapper (= 4.2.0)
+    - TXLiteAVSDK_Player (= 9.2.10637)
+    - WechatOpenSDK-Swift (= 1.8.7.1)
+  - BFMaterialKit (0.1.7):
+    - BFUIKit
+  - BFNetRequestKit (1.0.0):
+    - Alamofire (= 5.4.4)
+  - BFUIKit (0.1.0):
+    - BFCommonKit
+    - BFUIKit/Comm (= 0.1.0)
+    - BFUIKit/Controller (= 0.1.0)
+    - BFUIKit/View (= 0.1.0)
+    - FDFullscreenPopGesture (= 1.1)
+    - Kingfisher (~> 6.0)
+    - MGSwipeTableCell (~> 1.0)
+    - MJRefresh (~> 3.0)
+    - RealmSwift (= 10.7.6)
+    - SnapKit (~> 5.0)
+    - SVProgressHUD (~> 2.0)
+  - BFUIKit/Comm (0.1.0):
     - BFCommonKit
-  - BFNetRequestKit (0.2.3):
-    - Alamofire (= 5.4.3)
+    - FDFullscreenPopGesture (= 1.1)
+    - Kingfisher (~> 6.0)
+    - MGSwipeTableCell (~> 1.0)
+    - MJRefresh (~> 3.0)
+    - RealmSwift (= 10.7.6)
+    - SnapKit (~> 5.0)
+    - SVProgressHUD (~> 2.0)
+  - BFUIKit/Controller (0.1.0):
+    - BFCommonKit
+    - FDFullscreenPopGesture (= 1.1)
+    - Kingfisher (~> 6.0)
+    - MGSwipeTableCell (~> 1.0)
+    - MJRefresh (~> 3.0)
+    - RealmSwift (= 10.7.6)
+    - SnapKit (~> 5.0)
+    - SVProgressHUD (~> 2.0)
+  - BFUIKit/View (0.1.0):
+    - BFCommonKit
+    - FDFullscreenPopGesture (= 1.1)
+    - Kingfisher (~> 6.0)
+    - MGSwipeTableCell (~> 1.0)
+    - MJRefresh (~> 3.0)
+    - RealmSwift (= 10.7.6)
+    - SnapKit (~> 5.0)
+    - SVProgressHUD (~> 2.0)
   - Bugly (2.5.90)
   - FDFullscreenPopGesture (1.1)
   - KeychainAccess (4.2.2)
-  - Kingfisher (6.3.0)
+  - Kingfisher (6.3.1)
   - KingfisherWebP (1.3.0):
     - Kingfisher (~> 6.2)
     - libwebp (>= 1.1.0)
@@ -62,6 +99,7 @@ PODS:
     - libwebp/demux
   - libwebp/webp (1.2.1)
   - LMJHorizontalScrollText (2.0.2)
+  - MGSwipeTableCell (1.6.11)
   - MJRefresh (3.7.2)
   - ObjectMapper (4.2.0)
   - Realm (10.7.6):
@@ -70,18 +108,19 @@ PODS:
   - RealmSwift (10.7.6):
     - Realm (= 10.7.6)
   - SnapKit (5.0.1)
+  - SVProgressHUD (2.2.5)
   - Toast-Swift (5.0.1)
   - TXLiteAVSDK_Player (9.2.10637)
   - WechatOpenSDK-Swift (1.8.7.1)
 
 DEPENDENCIES:
+  - BFCommonKit (from `/Users/sanw/Desktop/BytesFlow/Person/Projects/BFCommonKit/`)
   - BFFramework (from `../`)
+  - BFMaterialKit (from `/Users/sanw/Desktop/BytesFlow/Person/Projects/BFMaterialKit/`)
+  - BFNetRequestKit (from `/Users/sanw/Desktop/BytesFlow/Person/Projects/BFNetRequestKit/`)
+  - BFUIKit (from `/Users/sanw/Desktop/BytesFlow/Person/Projects/BFUIKit/`)
 
 SPEC REPOS:
-  https://git.yishihui.com/iOS/BFSpecs.git:
-    - BFCommonKit
-    - BFMaterialKit
-    - BFNetRequestKit
   https://github.com/CocoaPods/Specs.git:
     - Alamofire
     - AliyunOSSiOS
@@ -92,42 +131,55 @@ SPEC REPOS:
     - KingfisherWebP
     - libwebp
     - LMJHorizontalScrollText
+    - MGSwipeTableCell
     - MJRefresh
     - ObjectMapper
     - Realm
     - RealmSwift
     - SnapKit
+    - SVProgressHUD
     - Toast-Swift
     - TXLiteAVSDK_Player
     - WechatOpenSDK-Swift
 
 EXTERNAL SOURCES:
+  BFCommonKit:
+    :path: "/Users/sanw/Desktop/BytesFlow/Person/Projects/BFCommonKit/"
   BFFramework:
     :path: "../"
+  BFMaterialKit:
+    :path: "/Users/sanw/Desktop/BytesFlow/Person/Projects/BFMaterialKit/"
+  BFNetRequestKit:
+    :path: "/Users/sanw/Desktop/BytesFlow/Person/Projects/BFNetRequestKit/"
+  BFUIKit:
+    :path: "/Users/sanw/Desktop/BytesFlow/Person/Projects/BFUIKit/"
 
 SPEC CHECKSUMS:
-  Alamofire: e447a2774a40c996748296fa2c55112fdbbc42f9
+  Alamofire: f3b09a368f1582ab751b3fff5460276e0d2cf5c9
   AliyunOSSiOS: b8f1dfc229cd9abf68c8ee0cb245c2d66e00dd96
-  BFCommonKit: ae9792ba766f4fad177cd826554a4f6feab5f9cd
-  BFFramework: c821f4a61057287a3c60ea3ce7498ccf57542de1
-  BFMaterialKit: ee4db6e76fdb94af810bc2d098a58ec15e18b2bf
-  BFNetRequestKit: 2af2279251e5304f34ca02771f74328f62fa7b6f
+  BFCommonKit: 8afeb14571a71f9ba92d82507976ca2bce899dc1
+  BFFramework: f45f79f0d4d31fcb7fb50bc593caab6dab67b7b9
+  BFMaterialKit: 13b1a2672b6e3b3887eeb5d4c87289a55dd8ac80
+  BFNetRequestKit: 6b200205bd1a9491c04f5a3e95301d37a547f96b
+  BFUIKit: 3809412b31b9227411a4214e5ec9679f85800886
   Bugly: 88bc32c0acc6fef7b74d610f0319ee7560d6b9fe
   FDFullscreenPopGesture: a8a620179e3d9c40e8e00256dcee1c1a27c6d0f0
   KeychainAccess: c0c4f7f38f6fc7bbe58f5702e25f7bd2f65abf51
-  Kingfisher: 6c3df386db71d82c0817a429d2c9421a77396529
+  Kingfisher: 016c8b653a35add51dd34a3aba36b580041acc74
   KingfisherWebP: dec17a5eb1af2658791bde1f93ae9a853678f826
   libwebp: 98a37e597e40bfdb4c911fc98f2c53d0b12d05fc
   LMJHorizontalScrollText: ebc9b908db297f603c5b98c9b4e5f4582f5a14b8
+  MGSwipeTableCell: b804e4e450dee439c42250be90bd50458bf67fce
   MJRefresh: 30997d30b347c8e9508a4db11e3a690da0c9b85a
   ObjectMapper: 1eb41f610210777375fa806bf161dc39fb832b81
   Realm: ed860452717c8db8f4bf832b6807f7f2ce708839
   RealmSwift: e31c4ddbcc42ac879313d656b86f9ca539f6f4f4
   SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb
+  SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6
   Toast-Swift: 9b6a70f28b3bf0b96c40d46c0c4b9d6639846711
   TXLiteAVSDK_Player: 300e6fc7262ae095ee13b18d7d821c5fae0996f9
   WechatOpenSDK-Swift: 18a8f7b12e745c30acc013f72a9f8a25aad6e216
 
-PODFILE CHECKSUM: a70d2c425de0713c3557fd13b3dec4e634e32f2a
+PODFILE CHECKSUM: 1403c763c495ed0f57036fab0e3eaa61d808f680
 
 COCOAPODS: 1.11.2

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio