Procházet zdrojové kódy

Unsupported fetch for asset collections with type 2 and subtype 2 ->ios 18.3获图片失败 修复方案->把PHAssetCollectionSubtypeAlbumRegular换成PHAssetCollectionSubtypeAny后可以了

huangxiaodong před 1 měsícem
rodič
revize
1c1d3bcf2f
63 změnil soubory, kde provedl 3058 přidání a 3025 odebrání
  1. 1 1
      创维盒子/Podfile
  2. 7 3
      创维盒子/Podfile.lock
  3. 1 0
      创维盒子/Pods/Headers/Private/TZImagePickerController/TZAuthLimitedFooterTipView.h
  4. 1 1
      创维盒子/Pods/Headers/Private/TZImagePickerController/TZLocationManager.h
  5. 1 0
      创维盒子/Pods/Headers/Public/TZImagePickerController/TZAuthLimitedFooterTipView.h
  6. 1 1
      创维盒子/Pods/Headers/Public/TZImagePickerController/TZLocationManager.h
  7. 7 3
      创维盒子/Pods/Manifest.lock
  8. 2632 2608
      创维盒子/Pods/Pods.xcodeproj/project.pbxproj
  9. 3 3
      创维盒子/Pods/Pods.xcodeproj/xcuserdata/xdh.xcuserdatad/xcschemes/Pods-隐私保护.xcscheme
  10. 2 2
      创维盒子/Pods/Pods.xcodeproj/xcuserdata/xdh.xcuserdatad/xcschemes/xcschememanagement.plist
  11. 12 9
      创维盒子/Pods/TZImagePickerController/README.md
  12. 0 0
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/Location/TZLocationManager.h
  13. 0 1
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZLocationManager.m
  14. 5 0
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZAssetCell.h
  15. 27 0
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZAssetCell.m
  16. 16 0
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZAuthLimitedFooterTipView.h
  17. 87 0
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZAuthLimitedFooterTipView.m
  18. 1 1
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImageCropManager.m
  19. 1 0
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImageManager.h
  20. 12 2
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImageManager.m
  21. binární
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/addMore@2x.png
  22. 0 20
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/bg.lproj/Localizable.strings
  23. 0 20
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/cs-CZ.lproj/Localizable.strings
  24. 0 20
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/el.lproj/Localizable.strings
  25. binární
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/en.lproj/Localizable.strings
  26. 0 20
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/he.lproj/Localizable.strings
  27. 0 20
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/it.lproj/Localizable.strings
  28. 0 20
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/ko.lproj/Localizable.strings
  29. 0 20
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/nl.lproj/Localizable.strings
  30. 0 20
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/pl.lproj/Localizable.strings
  31. binární
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/right_arrow@2x.png
  32. 0 20
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/ro.lproj/Localizable.strings
  33. 0 20
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/sk.lproj/Localizable.strings
  34. 0 20
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/sv.lproj/Localizable.strings
  35. 0 20
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/th.lproj/Localizable.strings
  36. binární
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/tip@2x.png
  37. 0 20
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/tr.lproj/Localizable.strings
  38. 0 20
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/uk.lproj/Localizable.strings
  39. 0 1
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/vi.lproj/Localizable.strings
  40. binární
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/zh-Hans.lproj/Localizable.strings
  41. binární
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/zh-Hant.lproj/Localizable.strings
  42. 16 2
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.h
  43. 32 7
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.m
  44. 156 49
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZPhotoPickerController.m
  45. 4 4
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZPhotoPreviewCell.m
  46. 3 1
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZPhotoPreviewController.m
  47. 4 1
      创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZVideoPlayerController.m
  48. 0 0
      创维盒子/Pods/Target Support Files/Pods-GBOX/Pods-GBOX-acknowledgements.markdown
  49. 0 0
      创维盒子/Pods/Target Support Files/Pods-GBOX/Pods-GBOX-acknowledgements.plist
  50. 5 0
      创维盒子/Pods/Target Support Files/Pods-GBOX/Pods-GBOX-dummy.m
  51. 1 1
      创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护-resources-Debug-input-files.xcfilelist
  52. 0 0
      创维盒子/Pods/Target Support Files/Pods-GBOX/Pods-GBOX-resources-Debug-output-files.xcfilelist
  53. 1 1
      创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护-resources-Release-input-files.xcfilelist
  54. 0 0
      创维盒子/Pods/Target Support Files/Pods-GBOX/Pods-GBOX-resources-Release-output-files.xcfilelist
  55. 0 0
      创维盒子/Pods/Target Support Files/Pods-GBOX/Pods-GBOX-resources.sh
  56. 1 1
      创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护.debug.xcconfig
  57. 1 1
      创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护.release.xcconfig
  58. 1 1
      创维盒子/Pods/Target Support Files/Pods-计算器/Pods-计算器.debug.xcconfig
  59. 1 1
      创维盒子/Pods/Target Support Files/Pods-计算器/Pods-计算器.release.xcconfig
  60. 0 5
      创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护-dummy.m
  61. 0 16
      创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护-umbrella.h
  62. 0 6
      创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护.modulemap
  63. 15 12
      创维盒子/双子星云手机.xcodeproj/project.pbxproj

+ 1 - 1
创维盒子/Podfile

@@ -34,7 +34,7 @@ def all_Pods
 
 end
 
-target '隐私保护' do
+target 'GBOX' do
 
   all_Pods
 end

+ 7 - 3
创维盒子/Podfile.lock

@@ -48,7 +48,11 @@ PODS:
     - SDWebImage/Core (= 5.13.0)
   - SDWebImage/Core (5.13.0)
   - SVProgressHUD (2.2.5)
-  - TZImagePickerController (3.6.7)
+  - TZImagePickerController (3.8.3):
+    - TZImagePickerController/Basic (= 3.8.3)
+    - TZImagePickerController/Location (= 3.8.3)
+  - TZImagePickerController/Basic (3.8.3)
+  - TZImagePickerController/Location (3.8.3)
 
 DEPENDENCIES:
   - AFNetworking
@@ -98,8 +102,8 @@ SPEC CHECKSUMS:
   SDCycleScrollView: a0d74c3384caa72bdfc81470bdbc8c14b3e1fbcf
   SDWebImage: 0327043dbb9533e75f2eff8445b3df0f2ceca6ac
   SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6
-  TZImagePickerController: 679ae9fa11e189a9a81291ae96f0a4463be8edc1
+  TZImagePickerController: e9909edbadf7381140efc5b5c9f5bdbfd630f7d4
 
-PODFILE CHECKSUM: 41e9206c08ca8c944e4c81ae0fb37ccde77b913b
+PODFILE CHECKSUM: 27c35b5f74a4544b391bfda4eba7aeb787232704
 
 COCOAPODS: 1.11.3

+ 1 - 0
创维盒子/Pods/Headers/Private/TZImagePickerController/TZAuthLimitedFooterTipView.h

@@ -0,0 +1 @@
+../../../TZImagePickerController/TZImagePickerController/TZImagePickerController/TZAuthLimitedFooterTipView.h

+ 1 - 1
创维盒子/Pods/Headers/Private/TZImagePickerController/TZLocationManager.h

@@ -1 +1 @@
-../../../TZImagePickerController/TZImagePickerController/TZImagePickerController/TZLocationManager.h
+../../../TZImagePickerController/TZImagePickerController/Location/TZLocationManager.h

+ 1 - 0
创维盒子/Pods/Headers/Public/TZImagePickerController/TZAuthLimitedFooterTipView.h

@@ -0,0 +1 @@
+../../../TZImagePickerController/TZImagePickerController/TZImagePickerController/TZAuthLimitedFooterTipView.h

+ 1 - 1
创维盒子/Pods/Headers/Public/TZImagePickerController/TZLocationManager.h

@@ -1 +1 @@
-../../../TZImagePickerController/TZImagePickerController/TZImagePickerController/TZLocationManager.h
+../../../TZImagePickerController/TZImagePickerController/Location/TZLocationManager.h

+ 7 - 3
创维盒子/Pods/Manifest.lock

@@ -48,7 +48,11 @@ PODS:
     - SDWebImage/Core (= 5.13.0)
   - SDWebImage/Core (5.13.0)
   - SVProgressHUD (2.2.5)
-  - TZImagePickerController (3.6.7)
+  - TZImagePickerController (3.8.3):
+    - TZImagePickerController/Basic (= 3.8.3)
+    - TZImagePickerController/Location (= 3.8.3)
+  - TZImagePickerController/Basic (3.8.3)
+  - TZImagePickerController/Location (3.8.3)
 
 DEPENDENCIES:
   - AFNetworking
@@ -98,8 +102,8 @@ SPEC CHECKSUMS:
   SDCycleScrollView: a0d74c3384caa72bdfc81470bdbc8c14b3e1fbcf
   SDWebImage: 0327043dbb9533e75f2eff8445b3df0f2ceca6ac
   SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6
-  TZImagePickerController: 679ae9fa11e189a9a81291ae96f0a4463be8edc1
+  TZImagePickerController: e9909edbadf7381140efc5b5c9f5bdbfd630f7d4
 
-PODFILE CHECKSUM: 41e9206c08ca8c944e4c81ae0fb37ccde77b913b
+PODFILE CHECKSUM: 27c35b5f74a4544b391bfda4eba7aeb787232704
 
 COCOAPODS: 1.11.3

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2632 - 2608
创维盒子/Pods/Pods.xcodeproj/project.pbxproj


+ 3 - 3
创维盒子/Pods/Pods.xcodeproj/xcuserdata/xdh.xcuserdatad/xcschemes/Pods-隐私保护.xcscheme

@@ -14,9 +14,9 @@
             buildForAnalyzing = "YES">
             <BuildableReference
                BuildableIdentifier = "primary"
-               BlueprintIdentifier = "2670C72A0770D6AB43636F52B3074C7C"
-               BuildableName = "libPods-隐私保护.a"
-               BlueprintName = "Pods-隐私保护"
+               BlueprintIdentifier = "9F3E9DEE2499CEB5B577C8A7BE1BA178"
+               BuildableName = "libPods-GBOX.a"
+               BlueprintName = "Pods-GBOX"
                ReferencedContainer = "container:Pods.xcodeproj">
             </BuildableReference>
          </BuildActionEntry>

+ 2 - 2
创维盒子/Pods/Pods.xcodeproj/xcuserdata/xdh.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -54,12 +54,12 @@
 			<key>isShown</key>
 			<false/>
 		</dict>
-		<key>Pods-计算器.xcscheme</key>
+		<key>Pods-GBOX.xcscheme</key>
 		<dict>
 			<key>isShown</key>
 			<false/>
 		</dict>
-		<key>Pods-隐私保护.xcscheme</key>
+		<key>Pods-计算器.xcscheme</key>
 		<dict>
 			<key>isShown</key>
 			<false/>

+ 12 - 9
创维盒子/Pods/TZImagePickerController/README.md

@@ -8,7 +8,7 @@
  
 ## 重要提示1:提issue前,请先对照Demo、常见问题自查!Demo正常说明你可以升级下新版试试。          
  
-## 重要提示2:3.5.2版本适配了iOS14、iPhone12,修复2个严重问题,强烈建议尽快更新  
+## 重要提示2:3.7.5版本修复了iOS15.2下初次授权相册权限时的长时间卡顿&白屏问题,强烈建议尽快更新   
      关于iOS14模拟器的问题
  PHAuthorizationStatusLimited授权模式下,iOS14模拟器有bug,未授权照片无法显示,真机正常,暂可忽略:https://github.com/banchichen/TZImagePickerController/issues/1347 
  
@@ -22,8 +22,8 @@
 ## 一. Installation 安装
 
 #### CocoaPods
-> pod 'TZImagePickerController'   #iOS8 and later        
-> pod 'TZImagePickerController', '2.2.6'   #iOS6、iOS7        
+> pod 'TZImagePickerController'        # Full version with all features      
+> pod 'TZImagePickerController/Basic'  # No location code        
 
 #### Carthage
 > github "banchichen/TZImagePickerController"
@@ -54,10 +54,11 @@
    TZImagePickerController uses Camera、Location、Microphone、Photo Library,you need add these properties to info.plist like Demo:       
    TZImagePickerController使用了相机、定位、麦克风、相册,请参考Demo添加下列属性到info.plist文件:        
    	`Privacy - Camera Usage Description`     
-        `Privacy - Location Usage Description`
+    `Privacy - Location Usage Description`    
 	`Privacy - Location When In Use Usage Description`    
  	`Privacy - Microphone Usage Description`   
  	`Privacy - Photo Library Usage Description`   
+    `Prevent limited photos access alert`    
    
 ## 四. More 更多 
 
@@ -96,12 +97,11 @@ A:https://github.com/banchichen/TZImagePickerController/issues/652
 **Q:可否增加微信编辑图片的功能?**           
 A:考虑下,优先级低  
 
-**Q:是否有QQ/微信群?**            
-A:有QQ群:778723997        
+**Q:是否有QQ/微信群/钉钉群?**            
+A:有「钉钉群:33192786」和「QQ群:859033147」,推荐加钉钉群,答疑响应更快         
 
 **Q:想提交一个Pull Request?**           
-A:请先加下面钉钉群说下方案,和我确认下,避免同时改动同一处内容。**一个PR请只修复1个问题,变动内容越少越好**。     
-<img src="https://gw.alicdn.com/tfs/TB1xvz7jIVl614jSZKPXXaGjpXa-970-1280.jpg" width="30%" height="30%">
+A:请先加钉钉群(33192786)说下方案,和我确认下,避免同时改动同一处内容。**一个PR请只修复1个问题,变动内容越少越好**。     
 
 **Q:demo在真机上跑不起来?**             
 A:1、team选你自己的;2、bundleId也改成你自己的或改成一个不会和别人重复的。可参考[简书的这篇博客](https://www.jianshu.com/p/cbe59138fca6)             
@@ -128,12 +128,15 @@ A:不要去拿PHImageFileURLKey,没用的,只有通过Photos框架才能
 
 ## 六. Release Notes 最近更新     
 
+**3.8.3 支持使用不带定位代码的版本** [#1606](https://github.com/banchichen/TZImagePickerController/pull/1606)               
+**3.8.1 iOS14下可添加访问更多照片,详见PR内的评论** [#1526](https://github.com/banchichen/TZImagePickerController/pull/1526)               
+**3.7.6 修复iOS15.2下初次授权相册权限时的长时间卡顿&白屏问题** [#1547](https://github.com/banchichen/TZImagePickerController/issues/1547)               
 **3.6.7 修复Xcode13&iOS15下导航栏颜色异常问题**        
 3.6.2 新增allowEditVideo,单选视频时支持裁剪        
 3.6.0 修复iOS14下iCloud视频导出失败问题        
 **3.5.2 适配iPhone12系列设备**        
 3.4.4 支持Dark Mode      
-**3.4.2 适配iOS14,若干问题修复**                  
+3.4.2 适配iOS14,若干问题修复                  
 3.3.2 适配iOS13,若干问题修复                 
 3.2.1 新增裁剪用scaleAspectFillCrop属性,设置为YES后,照片尺寸小于裁剪框时会自动放大撑满                
 3.2.0 加入用NSOperationQueue控制获取原图并发数降低内存的示例          

创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZLocationManager.h → 创维盒子/Pods/TZImagePickerController/TZImagePickerController/Location/TZLocationManager.h


+ 0 - 1
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZLocationManager.m

@@ -7,7 +7,6 @@
 //  定位管理类
 
 #import "TZLocationManager.h"
-#import "TZImagePickerController.h"
 
 @interface TZLocationManager ()<CLLocationManagerDelegate>
 @property (nonatomic, strong) CLLocationManager *locationManager;

+ 5 - 0
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZAssetCell.h

@@ -54,3 +54,8 @@ typedef enum : NSUInteger {
 @interface TZAssetCameraCell : UICollectionViewCell
 @property (nonatomic, strong) UIImageView *imageView;
 @end
+
+
+@interface TZAssetAddMoreCell : TZAssetCameraCell
+@property (nonatomic, strong) UILabel *tipLabel;
+@end

+ 27 - 0
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZAssetCell.m

@@ -519,3 +519,30 @@
 }
 
 @end
+
+
+@implementation TZAssetAddMoreCell
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        _tipLabel = [[UILabel alloc] init];
+        _tipLabel.numberOfLines = 2;
+        _tipLabel.textAlignment = NSTextAlignmentCenter;
+        _tipLabel.font = [UIFont systemFontOfSize:12];
+        _tipLabel.lineBreakMode = NSLineBreakByTruncatingMiddle;
+        CGFloat rgb = 156 / 255.0;
+        _tipLabel.textColor = [UIColor colorWithRed:rgb green:rgb blue:rgb alpha:1.0];
+        [self.contentView addSubview:_tipLabel];
+
+        self.clipsToBounds = YES;
+    }
+    return self;
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    _tipLabel.frame = CGRectMake(5, self.tz_height / 2, self.tz_width - 10, self.tz_height / 2 - 5);
+}
+
+@end

+ 16 - 0
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZAuthLimitedFooterTipView.h

@@ -0,0 +1,16 @@
+//
+//  TZAuthLimitedFooterTipView.h
+//  TZImagePickerController
+//
+//  Created by qiaoxy on 2021/8/24.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TZAuthLimitedFooterTipView : UIView
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 87 - 0
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZAuthLimitedFooterTipView.m

@@ -0,0 +1,87 @@
+//
+//  TZAuthLimitedFooterTipView.m
+//  TZImagePickerController
+//
+//  Created by qiaoxy on 2021/8/24.
+//
+
+#import "TZAuthLimitedFooterTipView.h"
+#import "TZImagePickerController.h"
+
+@interface TZAuthLimitedFooterTipView()
+@property (nonatomic,strong) UIImageView *tipImgView;
+@property (nonatomic,strong) UILabel *tipLable;
+@property (nonatomic,strong) UIImageView *detailImgView;
+@end
+
+@implementation TZAuthLimitedFooterTipView
+
+- (instancetype)init {
+    self = [super init];
+    if (self) {
+        [self initSubViews];
+    }
+    return self;
+}
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self initSubViews];
+    }
+    return self;
+}
+
+- (void)initSubViews {
+    [self addSubview:self.tipImgView];
+    [self addSubview:self.tipLable];
+    [self addSubview:self.detailImgView];
+    CGFloat margin = 15;
+    CGFloat tipImgViewWH = 20;
+    CGFloat detailImgViewWH = 12;
+    CGFloat screenW = [UIScreen mainScreen].bounds.size.width;
+
+    self.tipImgView.frame = CGRectMake(margin, 0, tipImgViewWH, tipImgViewWH);
+    self.detailImgView.frame = CGRectMake(screenW - margin - detailImgViewWH, 0, detailImgViewWH, detailImgViewWH);
+    
+    CGFloat tipLabelX = CGRectGetMaxX(self.tipImgView.frame) + 10;
+    CGFloat tipLabelW = screenW - tipLabelX - detailImgViewWH - margin - 4;
+    self.tipLable.frame = CGRectMake(tipLabelX, 0, tipLabelW, self.bounds.size.height);
+    
+    self.tipImgView.center = CGPointMake(self.tipImgView.center.x, self.tipLable.center.y);
+    self.detailImgView.center = CGPointMake(self.detailImgView.center.x, self.tipLable.center.y);
+}
+
+#pragma mark - Getter
+
+- (UIImageView *)tipImgView {
+    if (!_tipImgView) {
+        _tipImgView = [[UIImageView alloc] init];
+        _tipImgView.contentMode = UIViewContentModeScaleAspectFit;
+        _tipImgView.image = [UIImage tz_imageNamedFromMyBundle:@"tip"];
+    }
+    return _tipImgView;
+}
+
+- (UILabel *)tipLable {
+    if (!_tipLable) {
+        _tipLable = [[UILabel alloc] init];
+        NSString *appName = [TZCommonTools tz_getAppName];
+        _tipLable.text = [NSString stringWithFormat:[NSBundle tz_localizedStringForKey:@"Allow %@ to access your all photos"], appName];
+        _tipLable.numberOfLines = 0;
+        _tipLable.font = [UIFont systemFontOfSize:14];
+        _tipLable.textColor = [UIColor colorWithRed:0.40 green:0.40 blue:0.40 alpha:1.0];
+    }
+    return _tipLable;
+}
+
+- (UIImageView *)detailImgView {
+    if (!_detailImgView) {
+        _detailImgView = [[UIImageView alloc] init];
+        _detailImgView.contentMode = UIViewContentModeScaleAspectFit;
+        _detailImgView.image = [UIImage tz_imageNamedFromMyBundle:@"right_arrow"];
+    }
+    return _detailImgView;
+}
+
+@end

+ 1 - 1
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImageCropManager.m

@@ -19,7 +19,7 @@
     UIBezierPath *path= [UIBezierPath bezierPathWithRect:[UIScreen mainScreen].bounds];
     CAShapeLayer *layer = [CAShapeLayer layer];
     if (needCircleCrop) { // 圆形裁剪框
-        [path appendPath:[UIBezierPath bezierPathWithArcCenter:containerView.center radius:cropRect.size.width / 2 startAngle:0 endAngle: 2 * M_PI clockwise:NO]];
+        [path appendPath:[UIBezierPath bezierPathWithRoundedRect:cropRect cornerRadius:cropRect.size.width / 2]];
     } else { // 矩形裁剪框
         [path appendPath:[UIBezierPath bezierPathWithRect:cropRect]];
     }

+ 1 - 0
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImageManager.h

@@ -49,6 +49,7 @@
 /// Return YES if Authorized 返回YES如果得到了授权
 - (BOOL)authorizationStatusAuthorized;
 - (void)requestAuthorizationWithCompletion:(void (^)(void))completion;
+- (BOOL)isPHAuthorizationStatusLimited;
 
 /// Get Album 获得相册/相册数组
 - (void)getCameraRollAlbumWithFetchAssets:(BOOL)needFetchAssets completion:(void (^)(TZAlbumModel *model))completion;

+ 12 - 2
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImageManager.m

@@ -64,6 +64,16 @@ static dispatch_once_t onceToken;
     }
 }
 
+- (BOOL)isPHAuthorizationStatusLimited {
+    if (@available(iOS 14,*)) {
+        NSInteger status = [PHPhotoLibrary authorizationStatusForAccessLevel:PHAccessLevelReadWrite];
+        if (status == PHAuthorizationStatusLimited) {
+            return YES;
+        }
+    }
+    return NO;
+}
+
 /// Return YES if Authorized 返回YES如果得到了授权
 - (BOOL)authorizationStatusAuthorized {
     if (self.isPreviewNetworkImage) {
@@ -117,7 +127,7 @@ static dispatch_once_t onceToken;
     if (!self.sortAscendingByModificationDate) {
         option.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:self.sortAscendingByModificationDate]];
     }
-    PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
+    PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:nil];
     for (PHAssetCollection *collection in smartAlbums) {
         // 有可能是PHCollectionList类的的对象,过滤掉
         if (![collection isKindOfClass:[PHAssetCollection class]]) continue;
@@ -152,7 +162,7 @@ static dispatch_once_t onceToken;
     }
     // 我的照片流 1.6.10重新加入..
     PHFetchResult *myPhotoStreamAlbum = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumMyPhotoStream options:nil];
-    PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
+    PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:nil];
     PHFetchResult *topLevelUserCollections = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];
     PHFetchResult *syncedAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumSyncedAlbum options:nil];
     PHFetchResult *sharedAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumCloudShared options:nil];

binární
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/addMore@2x.png


+ 0 - 20
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/bg.lproj/Localizable.strings

@@ -1,20 +0,0 @@
-"KEY"                     = "保加利亚语";
-"OK"                      = "Добре";
-"Back"                    = "обратно";
-"Done"                    = "Свършен";
-"Edit"                    = "редактиране";
-"Sorry"                   = "съжалявам";
-"Cancel"                  = "Отказ";
-"Setting"                 = "обстановка";
-"Photos"                  = "Снимки";
-"Videos"                  = "Видео";
-"Preview"                 = "предварителен преглед";
-"Full image"              = "Пълно изображение";
-"Processing..."           = "Обработка ...";
-"No Photos or Videos"     = "Няма снимки или видеоклипове";
-"Synchronizing photos from iCloud" = "Синхронизиране на снимки от iCloud";
-"iCloud sync failed"    = "iCloud синхронизирането не бе успешно";
-"Can not use camera"      = "Не може да се използва камера";
-"Can not choose both video and photo" = "Не можете да изберете видео и снимка";
-"Can not choose both photo and GIF" = "Не може да се избере снимка и GIF";
-"Selected for %ld seconds" = "Избрано за %ld секунди";

+ 0 - 20
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/cs-CZ.lproj/Localizable.strings

@@ -1,20 +0,0 @@
-"KEY"                     = "捷克语";
-"OK"                      = "OK";
-"Back"                    = "Zadní";
-"Done"                    = "Hotovo";
-"Edit"                    = "Upravit";
-"Sorry"                   = "Promiňte";
-"Cancel"                  = "zrušení";
-"Setting"                 = "Nastavení";
-"Photos"                  = "Fotky";
-"Videos"                  = "Videa";
-"Preview"                 = "Náhled";
-"Full image"              = "Celý obrázek";
-"Processing..."           = "Zpracovává se...";
-"No Photos or Videos"     = "Žádné fotky nebo videa";
-"Synchronizing photos from iCloud" = "Synchronizace fotografií z iCloud";
-"iCloud sync failed"    = "iCloud synchronizace selhala";
-"Can not use camera"      = "Nelze použít fotoaparát";
-"Can not choose both video and photo" = "Nelze vybrat video ani fotografii";
-"Can not choose both photo and GIF" = "Nelze vybrat fotografie a GIF";
-"Selected for %ld seconds" = "Vybráno na %ld sekund";

+ 0 - 20
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/el.lproj/Localizable.strings

@@ -1,20 +0,0 @@
-"KEY"                     = "希腊语";
-"OK"                      = "Εντάξει";
-"Back"                    = "Πίσω";
-"Done"                    = "Εγινε";
-"Edit"                    = "επεξεργασία";
-"Sorry"                   = "Συγνώμη";
-"Cancel"                  = "Ματαίωση";
-"Setting"                 = "Σύνθεση";
-"Photos"                  = "Φωτογραφίες";
-"Videos"                  = "Βίντεο";
-"Preview"                 = "Προεπισκόπηση";
-"Full image"              = "Πλήρης εικόνα";
-"Processing..."           = "Επεξεργασία...";
-"No Photos or Videos"     = "Δεν υπάρχουν φωτογραφίες ή βίντεο";
-"Synchronizing photos from iCloud" = "Συγχρονισμός φωτογραφιών από το iCloud";
-"iCloud sync failed"    = "iCloud Ο συγχρονισμός απέτυχε";
-"Can not use camera"      = "Δεν είναι δυνατή η χρήση της κάμερας";
-"Can not choose both video and photo" = "Δεν είναι δυνατή η επιλογή του βίντεο και της φωτογραφίας";
-"Can not choose both photo and GIF" = "Δεν είναι δυνατή η επιλογή φωτογραφίας και GIF";
-"Selected for %ld seconds" = "Selected for %ld seconds";

binární
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/en.lproj/Localizable.strings


+ 0 - 20
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/he.lproj/Localizable.strings

@@ -1,20 +0,0 @@
-"KEY"                     = "希伯来语";
-"OK"                      = "בסדר";
-"Back"                    = "חזור";
-"Done"                    = "בוצע";
-"Edit"                    = "לַעֲרוֹך"
-"Sorry"                   = "מצטער";
-"Cancel"                  = "בטל";
-"Setting"                 = "הגדרה";
-"Photos"                  = "תמונות";
-"Videos"                  = "סרטונים";
-"Preview"                 = "תצוגה מקדימה";
-"Full image"              = "תמונה מלאה";
-"Processing..."           = "מעבד...";
-"No Photos or Videos"     = "אין תמונות או סרטונים";
-"Synchronizing photos from iCloud" = "סנכרון תמונות מ - iCloud";
-"iCloud sync failed"    = "iCloud הסנכרון נכשל";
-"Can not use camera"      = "לא ניתן להשתמש במצלמה";
-"Can not choose both video and photo" = "לא ניתן לבחור הן בסרטון והן בתמונה";
-"Can not choose both photo and GIF" = "לא ניתן לבחור גם תמונה וגם קובץ GIF";
-"Selected for %ld seconds" = "נבחר למשך %ld שניות";

+ 0 - 20
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/it.lproj/Localizable.strings

@@ -1,20 +0,0 @@
-"KEY"                     = "意大利语";
-"OK"                      = "ok";
-"Back"                    = "Indietro";
-"Done"                    = "Fatto";
-"Edit"                    = "modificare";
-"Sorry"                   = "scusate";
-"Cancel"                  = "Annulla";
-"Setting"                 = "Ambientazione";
-"Photos"                  = "Fotografie";
-"Videos"                  = "video";
-"Preview"                 = "Anteprima";
-"Full image"              = "Immagine completa";
-"Processing..."           = "In lavorazione...";
-"No Photos or Videos"     = "Nessuna foto o video";
-"Synchronizing photos from iCloud" = "Sincronizzazione delle foto da iCloud";
-"iCloud sync failed"    = "iCloud sincronizzazione non riuscita";
-"Can not use camera"      = "Non è possibile utilizzare la fotocamera";
-"Can not choose both video and photo" = "Non è possibile scegliere sia video che foto";
-"Can not choose both photo and GIF" = "Non è possibile scegliere sia foto che GIF";
-"Selected for %ld seconds" = "Selezionato per %ld secondi";

+ 0 - 20
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/ko.lproj/Localizable.strings

@@ -1,20 +0,0 @@
-"KEY"                     = "韩语";
-"OK"                      = "승인";
-"Back"                    = "뒤로";
-"Done"                    = "끝난";
-"Edit"                    = "편집하다";
-"Sorry"                   = "죄송합니다";
-"Cancel"                  = "취소";
-"Setting"                 = "환경";
-"Photos"                  = "사진들";
-"Videos"                  = "비디오";
-"Preview"                 = "시사";
-"Full image"              = "전체 이미지";
-"Processing..."           = "처리 중 ...";
-"No Photos or Videos"     = "사진이나 동영상 없음";
-"Synchronizing photos from iCloud" = "iCloud에서 사진 동기화";
-"iCloud sync failed"    = "iCloud동기화 실패";
-"Can not use camera"      = "카메라를 사용할 수 없습니다.";
-"Can not choose both video and photo" = "동영상과 사진을 모두 선택할 수 없습니다.";
-"Can not choose both photo and GIF" = "사진과 GIF를 모두 선택할 수 없습니다.";
-"Selected for %ld seconds" = "%ld 초 동안 선택됨";

+ 0 - 20
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/nl.lproj/Localizable.strings

@@ -1,20 +0,0 @@
-"KEY"                     = "荷兰语";
-"OK"                      = "OK";
-"Back"                    = "Terug";
-"Done"                    = "Gedaan";
-"Edit"                    = "Bewerk";
-"Sorry"                   = "Sorry";
-"Cancel"                  = "annuleren";
-"Setting"                 = "omgeving";
-"Photos"                  = "foto's";
-"Videos"                  = "Videos";
-"Preview"                 = "Voorbeeld";
-"Full image"              = "Volledig beeld";
-"Processing..."           = "Verwerken...";
-"No Photos or Videos"     = "Geen foto's of video's";
-"Synchronizing photos from iCloud" = "Foto's synchroniseren vanuit iCloud";
-"iCloud sync failed"    = "iCloud synchronisatie is mislukt";
-"Can not use camera"      = "Kan de camera niet gebruiken";
-"Can not choose both video and photo" = "Kan niet zowel video als foto kiezen";
-"Can not choose both photo and GIF" = "Kan niet zowel foto als GIF kiezen";
-"Selected for %ld seconds" = "Geselecteerd voor %ld seconden";

+ 0 - 20
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/pl.lproj/Localizable.strings

@@ -1,20 +0,0 @@
-"KEY"                     = "波兰语";
-"OK"                      = "dobrze";
-"Back"                    = "Z powrotem";
-"Done"                    = "Gotowe";
-"Edit"                    = "edytować";
-"Sorry"                   = "Przepraszam";
-"Cancel"                  = "Anuluj";
-"Setting"                 = "Oprawa";
-"Photos"                  = "Zdjęcia";
-"Videos"                  = "Filmy";
-"Preview"                 = "Zapowiedź";
-"Full image"              = "Pełny obraz";
-"Processing..."           = "Przetwarzanie...";
-"No Photos or Videos"     = "Brak zdjęć lub filmów";
-"Synchronizing photos from iCloud" = "Synchronizowanie zdjęć z iCloud";
-"iCloud sync failed"    = "iCloud synchronizacja nie powiodła się";
-"Can not use camera"      = "Nie można używać aparatu";
-"Can not choose both video and photo" = "Nie można wybrać zarówno wideo,jak i zdjęcia";
-"Can not choose both photo and GIF" = "Nie można wybrać zarówno zdjęcia,jak i GIF";
-"Selected for %ld seconds" = "Wybrany przez %ld sekund";

binární
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/right_arrow@2x.png


+ 0 - 20
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/ro.lproj/Localizable.strings

@@ -1,20 +0,0 @@
-"KEY"                     = "罗马尼亚语";
-"OK"                      = "O.K";
-"Back"                    = "Înapoi";
-"Done"                    = "Terminat";
-"Edit"                    = "Editați | ×";
-"Sorry"                   = "scuze";
-"Cancel"                  = "Anulare";
-"Setting"                 = "reglaj";
-"Photos"                  = "Fotografii";
-"Videos"                  = "Videoclipuri";
-"Preview"                 = "previzualizare";
-"Full image"              = "Imagine completă";
-"Processing..."           = "Prelucrare...";
-"No Photos or Videos"     = "Nu există fotografii sau videoclipuri";
-"Synchronizing photos from iCloud" = "Sincronizarea fotografiilor cu iCloud";
-"iCloud sync failed"    = "iCloud sincronizarea a eșuat";
-"Can not use camera"      = "Nu pot folosi camera";
-"Can not choose both video and photo" = "Nu puteți alege atât videoclipul,cât și fotografia";
-"Can not choose both photo and GIF" = "Nu puteți alege atât fotografia,cât și GIF";
-"Selected for %ld seconds" = "Selectat pentru %ld secunde";

+ 0 - 20
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/sk.lproj/Localizable.strings

@@ -1,20 +0,0 @@
-"KEY"                     = "斯洛伐克语";
-"OK"                      = "OK";
-"Back"                    = "späť";
-"Done"                    = "hotový";
-"Edit"                    = "upraviť";
-"Sorry"                   = "Prepáč";
-"Cancel"                  = "Zrušiť";
-"Setting"                 = "nastavenie";
-"Photos"                  = "fotografie";
-"Videos"                  = "videá";
-"Preview"                 = "Náhľad";
-"Full image"              = "Celý obrázok";
-"Processing..."           = "Spracovanie ...";
-"No Photos or Videos"     = "Žiadne fotografie alebo videá";
-"Synchronizing photos from iCloud" = "Synchronizácia fotografií z iCloud";
-"iCloud sync failed"    = "iCloud synchronizácia zlyhala";
-"Can not use camera"      = "Fotoaparát nie je možné používať";
-"Can not choose both video and photo" = "Nie je možné vybrať video aj fotografiu";
-"Can not choose both photo and GIF" = "Nie je možné vybrať fotografie a obrázky GIF";
-"Selected for %ld seconds" = "Vybraté na %ld sekundy";

+ 0 - 20
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/sv.lproj/Localizable.strings

@@ -1,20 +0,0 @@
-"KEY"                     = "瑞典语";
-"OK"                      = "ok";
-"Back"                    = "Tillbaka";
-"Done"                    = "Gjort";
-"Edit"                    = "redigera";
-"Sorry"                   = "Förlåt";
-"Cancel"                  = "Annullera";
-"Setting"                 = "Miljö";
-"Photos"                  = "foton";
-"Videos"                  = "videoklipp";
-"Preview"                 = "Förhandsvisning";
-"Full image"              = "Fullbild";
-"Processing..."           = "Bearbetning ...";
-"No Photos or Videos"     = "Inga foton eller videor";
-"Synchronizing photos from iCloud" = "Synkronisera foton från iCloud";
-"iCloud sync failed"    = "iCloud synkroniseringen misslyckades";
-"Can not use camera"      = "Kan inte använda kamera";
-"Can not choose both video and photo" = "Kan inte välja både video och foto";
-"Can not choose both photo and GIF" = "Kan inte välja både foto och GIF";
-"Selected for %ld seconds" = "Vald för %ld sekunder";

+ 0 - 20
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/th.lproj/Localizable.strings

@@ -1,20 +0,0 @@
-"KEY"                     = "泰语";
-"OK"                      = "ตกลง";
-"Back"                    = "กลับ";
-"Done"                    = "เสร็จสิ้น";
-"Edit"                    = "แก้ไข";
-"Sorry"                   = "ขอโทษ";
-"Cancel"                  = "ยกเลิก";
-"Setting"                 = "การตั้งค่า";
-"Photos"                  = "ภาพถ่าย";
-"Videos"                  = "วิดีโอ";
-"Preview"                 = "ดูตัวอย่าง";
-"Full image"              = "ภาพเต็ม";
-"Processing..."           = "กำลังประมวลผล ...";
-"No Photos or Videos"     = "ไม่มีรูปภาพหรือวิดีโอ";
-"Synchronizing photos from iCloud" = "การซิงโครไนซ์ภาพถ่ายจาก iCloud";
-"iCloud sync failed"    = "iCloud การซิงค์ล้มเหลว";
-"Can not use camera"      = "ไม่สามารถใช้กล้องถ่ายรูป";
-"Can not choose both video and photo" = "ไม่สามารถเลือกได้ทั้งวิดีโอและภาพถ่าย";
-"Can not choose both photo and GIF" = "ไม่สามารถเลือกได้ทั้งภาพถ่ายและ GIF";
-"Selected for %ld seconds" = "เลือกไว้เป็นเวลา %ld วินาที";

binární
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/tip@2x.png


+ 0 - 20
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/tr.lproj/Localizable.strings

@@ -1,20 +0,0 @@
-"KEY"                     = "土耳其语";
-"OK"                      = "tamam";
-"Back"                    = "Geri";
-"Done"                    = "tamam";
-"Edit"                    = "Düzenle";
-"Sorry"                   = "Afedersiniz";
-"Cancel"                  = "İptal etmek";
-"Setting"                 = "Ayar";
-"Photos"                  = "Fotoğraflar";
-"Videos"                  = "Videolar";
-"Preview"                 = "Ön izleme";
-"Full image"              = "Tam görüntü";
-"Processing..."           = "İşleme...";
-"No Photos or Videos"     = "Fotoğraf veya Video Yok";
-"Synchronizing photos from iCloud" = "Fotoğrafları iCloud'dan senkronize etme";
-"iCloud sync failed"    = "iCloud senkronizasyon başarısız oldu";
-"Can not use camera"      = "Kamera kullanılamaz";
-"Can not choose both video and photo" = "Hem video hem de fotoğraf seçilemiyor";
-"Can not choose both photo and GIF" = "Hem fotoğraf hem de GIF seçilemiyor";
-"Selected for %ld seconds" = "%ld saniye için seçildi";

+ 0 - 20
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/uk.lproj/Localizable.strings

@@ -1,20 +0,0 @@
-"KEY"                     = "乌克兰语";
-"OK"                      = "в порядку";
-"Back"                    = "Назад";
-"Done"                    = "Виконано";
-"Edit"                    = "редагувати";
-"Sorry"                   = "Вибачте";
-"Cancel"                  = "Скасувати";
-"Setting"                 = "Налаштування";
-"Photos"                  = "Фотографії";
-"Videos"                  = "Відео";
-"Preview"                 = "Попередній перегляд";
-"Full image"              = "Повне зображення";
-"Processing..."           = "Обробка ...";
-"No Photos or Videos"     = "Немає фотографій або відео";
-"Synchronizing photos from iCloud" = "Синхронізація фотографій з iCloud";
-"iCloud sync failed"    = "iCloud помилка синхронізації";
-"Can not use camera"      = "Не можна використовувати камеру";
-"Can not choose both video and photo" = "Неможливо вибрати як відео,так і фото";
-"Can not choose both photo and GIF" = "Неможливо вибрати як фото,так і GIF";
-"Selected for %ld seconds" = "Đã chọn cho %ld giây";

+ 0 - 1
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/vi.lproj/Localizable.strings

@@ -19,7 +19,6 @@
 "Can not choose both photo and GIF" = "Trong lúc chọn hình ảnh không cùng lúc chọn hình GIF";
 "Select the video when in multi state, we will handle the video as a photo" = "Chọn hình ảnh cùng video, video sẽ bị mặc nhận thành hình ảnh và gửi đi.";
 "Can not jump to the privacy settings page, please go to the settings page by self, thank you" = "Không thể chuyển tự động qua trang cài đặt riêng tư, bạn hãy thoát ra cà điều chỉnh lại, cám ơn bạn.";
-
 "Select a maximum of %zd photos" = "Bạn chỉ được chọn nhiều nhất %zd tấm hình";
 "Select a minimum of %zd photos" = "Chọn ít nhất %zd tấm hình";
 "Allow %@ to access your album in \"Settings -> Privacy -> Photos\"" = "Vui lòng tại mục iPhone \" Cài đặt – quyền riêng tư - Ảnh\" mở quyền cho phép %@ truy cập ảnh.";

binární
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/zh-Hans.lproj/Localizable.strings


binární
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle/zh-Hant.lproj/Localizable.strings


+ 16 - 2
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.h

@@ -4,7 +4,7 @@
 //
 //  Created by 谭真 on 15/12/24.
 //  Copyright © 2015年 谭真. All rights reserved.
-//  version 3.6.7 - 2021.11.06
+//  version 3.8.2 - 2022.07.20
 //  更多信息,请前往项目的github地址:https://github.com/banchichen/TZImagePickerController
 
 /*
@@ -22,10 +22,19 @@
 #import "TZImageManager.h"
 #import "TZVideoPlayerController.h"
 #import "TZGifPhotoPreviewController.h"
-#import "TZLocationManager.h"
 #import "TZPhotoPreviewController.h"
 #import "TZPhotoPreviewCell.h"
 
+#if __has_include("TZLocationManager.h")
+#define TZ_HAVE_LOCATION_CODE   1
+#import "TZLocationManager.h"
+#else
+#undef TZ_HAVE_LOCATION_CODE
+#endif
+
+#define CURRENT_SYSTEM_VERSION         [[UIDevice currentDevice] systemVersion]
+#define SYSTEM_VERSION_GREATER_THAN_15 ([CURRENT_SYSTEM_VERSION floatValue] >= 15.0)
+
 @class TZAlbumCell, TZAssetCell;
 @protocol TZImagePickerControllerDelegate;
 @interface TZImagePickerController : UINavigationController
@@ -109,7 +118,10 @@
 /// Default is YES, if set NO, user can't take picture.
 /// 默认为YES,如果设置为NO, 用户将不能拍摄照片
 @property (nonatomic, assign) BOOL allowTakePicture;
+
+#ifdef TZ_HAVE_LOCATION_CODE
 @property (nonatomic, assign) BOOL allowCameraLocation;
+#endif
 
 /// Default is YES, if set NO, user can't take video.
 /// 默认为YES,如果设置为NO, 用户将不能拍摄视频
@@ -229,6 +241,7 @@
 @property (nonatomic, copy) NSString *photoPreviewOriginDefImageName __attribute__((deprecated("Use -photoPreviewOriginDefImage.")));
 @property (nonatomic, copy) NSString *photoNumberIconImageName __attribute__((deprecated("Use -photoNumberIconImage.")));
 @property (nonatomic, strong) UIImage *takePictureImage;
+@property (nonatomic, strong) UIImage *addMorePhotoImage;
 @property (nonatomic, strong) UIImage *photoSelImage;
 @property (nonatomic, strong) UIImage *photoDefImage;
 @property (nonatomic, strong) UIImage *photoOriginSelImage;
@@ -353,6 +366,7 @@
 @interface TZCommonTools : NSObject
 + (UIEdgeInsets)tz_safeAreaInsets;
 + (BOOL)tz_isIPhoneX;
++ (BOOL)tz_isLandscape;
 + (CGFloat)tz_statusBarHeight;
 // 获得Info.plist数据字典
 + (NSDictionary *)tz_getInfoDictionary;

+ 32 - 7
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.m

@@ -4,7 +4,7 @@
 //
 //  Created by 谭真 on 15/12/24.
 //  Copyright © 2015年 谭真. All rights reserved.
-//  version 3.6.7 - 2021.11.06
+//  version 3.8.2 - 2022.07.20
 //  更多信息,请前往项目的github地址:https://github.com/banchichen/TZImagePickerController
 
 #import "TZImagePickerController.h"
@@ -152,6 +152,7 @@
     [super viewWillAppear:animated];
     _originStatusBarStyle = [UIApplication sharedApplication].statusBarStyle;
     [UIApplication sharedApplication].statusBarStyle = self.statusBarStyle;
+    [self configNavigationBarAppearance];
 }
 
 - (void)viewWillDisappear:(BOOL)animated {
@@ -243,6 +244,12 @@
         __weak typeof(self) weakSelf = self;
         [previewVc setDoneButtonClickBlockWithPreviewType:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
             __strong typeof(weakSelf) strongSelf = weakSelf;
+            if (!strongSelf.autoDismiss) {
+                if (strongSelf.didFinishPickingPhotosHandle) {
+                    strongSelf.didFinishPickingPhotosHandle(photos,assets,isSelectOriginalPhoto);
+                }
+                return;
+            }
             [strongSelf dismissViewControllerAnimated:YES completion:^{
                 if (!strongSelf) return;
                 if (strongSelf.didFinishPickingPhotosHandle) {
@@ -296,7 +303,9 @@
     self.needFixComposition = NO;
     self.statusBarStyle = UIStatusBarStyleLightContent;
     self.cannotSelectLayerColor = [[UIColor whiteColor] colorWithAlphaComponent:0.8];
+#ifdef TZ_HAVE_LOCATION_CODE
     self.allowCameraLocation = YES;
+#endif
     self.presetName = AVAssetExportPresetMediumQuality;
     self.maxCropVideoDuration = 30;
     
@@ -315,6 +324,7 @@
     self.photoPreviewOriginDefImageName = @"preview_original_def";
     self.photoOriginDefImageName = @"photo_original_def";
     self.photoOriginSelImageName = @"photo_original_sel";
+    self.addMorePhotoImage = [UIImage tz_imageNamedFromMyBundle:@"addMore"];
 }
 
 - (void)setTakePictureImageName:(NSString *)takePictureImageName {
@@ -521,9 +531,15 @@
 
 - (void)setCropRect:(CGRect)cropRect {
     _cropRect = cropRect;
-    _cropRectPortrait = cropRect;
-    CGFloat widthHeight = cropRect.size.width;
-    _cropRectLandscape = CGRectMake((self.view.tz_height - widthHeight) / 2, cropRect.origin.x, widthHeight, widthHeight);
+    if ([TZCommonTools tz_isLandscape]) {
+        _cropRectLandscape = cropRect;
+        CGFloat widthHeight = cropRect.size.height;
+        _cropRectPortrait = CGRectMake(cropRect.origin.y, (self.view.tz_width - widthHeight) / 2, widthHeight, widthHeight);
+    } else {
+        _cropRectPortrait = cropRect;
+        CGFloat widthHeight = cropRect.size.width;
+        _cropRectLandscape = CGRectMake((self.view.tz_height - widthHeight) / 2, cropRect.origin.x, widthHeight, widthHeight);
+    }
 }
 
 - (CGRect)cropRect {
@@ -746,7 +762,9 @@
 
 - (void)viewDidLoad {
     [super viewDidLoad];
-    [[PHPhotoLibrary sharedPhotoLibrary] registerChangeObserver:self];
+    if ([[TZImageManager manager] authorizationStatusAuthorized] || !SYSTEM_VERSION_GREATER_THAN_15) {
+        [[PHPhotoLibrary sharedPhotoLibrary] registerChangeObserver:self];
+    }
     self.isFirstAppear = YES;
     if (@available(iOS 13.0, *)) {
         self.view.backgroundColor = UIColor.tertiarySystemBackgroundColor;
@@ -953,6 +971,14 @@
             CGSizeEqualToSize([UIScreen mainScreen].bounds.size, CGSizeMake(926, 428)));
 }
 
++ (BOOL)tz_isLandscape {
+    if ([UIApplication sharedApplication].statusBarOrientation == UIDeviceOrientationLandscapeRight ||
+        [UIApplication sharedApplication].statusBarOrientation == UIDeviceOrientationLandscapeLeft) {
+        return true;
+    }
+    return false;
+}
+
 + (CGFloat)tz_statusBarHeight {
     if ([UIWindow instancesRespondToSelector:@selector(safeAreaInsets)]) {
         return [self tz_safeAreaInsets].top ?: 20;
@@ -1046,7 +1072,7 @@
     dispatch_once(&onceToken, ^{
         if (config == nil) {
             config = [[TZImagePickerConfig alloc] init];
-            config.supportedLanguages = [NSSet setWithObjects:@"zh-Hans", @"zh-Hant", @"en", @"ar", @"bg", @"cs-CZ", @"de", @"el", @"es", @"fr", @"he", @"it", @"ja", @"ko-KP", @"ko", @"nl", @"pl", @"pt", @"ro", @"ru", @"sk", @"sv", @"th", @"tr", @"uk", @"vi", nil];
+            config.supportedLanguages = [NSSet setWithObjects:@"zh-Hans", @"zh-Hant", @"en", @"ar", @"de", @"es", @"fr", @"ja", @"ko-KP", @"pt", @"ru", @"vi", nil];
             config.preferredLanguage = nil;
             config.gifPreviewMaxImagesCount = 50;
         }
@@ -1069,7 +1095,6 @@
         }
     }
     _languageBundle = [NSBundle bundleWithPath:[[NSBundle tz_imagePickerBundle] pathForResource:usedLanguage ofType:@"lproj"]];
-
 }
 
 @end

+ 156 - 49
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZPhotoPickerController.m

@@ -15,10 +15,10 @@
 #import "TZImageManager.h"
 #import "TZVideoPlayerController.h"
 #import "TZGifPhotoPreviewController.h"
-#import "TZLocationManager.h"
 #import <MobileCoreServices/MobileCoreServices.h>
 #import "TZImageRequestOperation.h"
-
+#import "TZAuthLimitedFooterTipView.h"
+#import <PhotosUI/PhotosUI.h>
 @interface TZPhotoPickerController ()<UICollectionViewDataSource,UICollectionViewDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate, PHPhotoLibraryChangeObserver> {
     NSMutableArray *_models;
     
@@ -33,12 +33,14 @@
     
     BOOL _shouldScrollToBottom;
     BOOL _showTakePhotoBtn;
+    BOOL _authorizationLimited;
     
     CGFloat _offsetItemCount;
 }
 @property CGRect previousPreheatRect;
 @property (nonatomic, assign) BOOL isSelectOriginalPhoto;
 @property (nonatomic, strong) TZCollectionView *collectionView;
+@property (nonatomic, strong) TZAuthLimitedFooterTipView *authFooterTipView;
 @property (nonatomic, strong) UILabel *noDataLabel;
 @property (strong, nonatomic) UICollectionViewFlowLayout *layout;
 @property (nonatomic, strong) UIImagePickerController *imagePickerVc;
@@ -46,6 +48,7 @@
 @property (nonatomic, strong) NSOperationQueue *operationQueue;
 @property (nonatomic, assign) BOOL isSavingMedia;
 @property (nonatomic, assign) BOOL isFetchingMedia;
+
 @end
 
 static CGSize AssetGridThumbnailSize;
@@ -78,7 +81,9 @@ static CGFloat itemMargin = 5;
 
 - (void)viewDidLoad {
     [super viewDidLoad];
-    [[PHPhotoLibrary sharedPhotoLibrary] registerChangeObserver:self];
+    if ([[TZImageManager manager] authorizationStatusAuthorized] || !SYSTEM_VERSION_GREATER_THAN_15) {
+        [[PHPhotoLibrary sharedPhotoLibrary] registerChangeObserver:self];
+    }
     self.isFirstAppear = YES;
     TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
     _isSelectOriginalPhoto = tzImagePickerVc.isSelectOriginalPhoto;
@@ -104,6 +109,7 @@ static CGFloat itemMargin = 5;
         [tzImagePickerVc.childViewControllers firstObject].navigationItem.backBarButtonItem = backItem;
     }
     _showTakePhotoBtn = _model.isCameraRoll && ((tzImagePickerVc.allowTakePicture && tzImagePickerVc.allowPickingImage) || (tzImagePickerVc.allowTakeVideo && tzImagePickerVc.allowPickingVideo));
+    _authorizationLimited = _model.isCameraRoll && [[TZImageManager manager] isPHAuthorizationStatusLimited];
     // [self resetCachedAssets];
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didChangeStatusBarOrientationNotification:) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];
     
@@ -146,7 +152,7 @@ static CGFloat itemMargin = 5;
         self->_collectionView.hidden = YES;
         [self configBottomToolBar];
         
-        [self scrollCollectionViewToBottom];
+        [self prepareScrollCollectionViewToBottom];
     });
 }
 
@@ -184,27 +190,31 @@ static CGFloat itemMargin = 5;
         [self.view addSubview:_collectionView];
         [_collectionView registerClass:[TZAssetCell class] forCellWithReuseIdentifier:@"TZAssetCell"];
         [_collectionView registerClass:[TZAssetCameraCell class] forCellWithReuseIdentifier:@"TZAssetCameraCell"];
+        [_collectionView registerClass:[TZAssetAddMoreCell class] forCellWithReuseIdentifier:@"TZAssetAddMoreCell"];
     } else {
         [_collectionView reloadData];
     }
 
+    if (!_authFooterTipView && _authorizationLimited) {
+        _authFooterTipView = [[TZAuthLimitedFooterTipView alloc] initWithFrame:CGRectMake(0, 0, self.view.tz_width, 80)];
+        UITapGestureRecognizer *footTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openSettingsApplication)];
+        [_authFooterTipView addGestureRecognizer:footTap];
+        [self.view addSubview:_authFooterTipView];
+    }
     
-    if (_showTakePhotoBtn) {
-        _collectionView.contentSize = CGSizeMake(self.view.tz_width, ((_model.count + self.columnNumber) / self.columnNumber) * self.view.tz_width);
-    } else {
-        _collectionView.contentSize = CGSizeMake(self.view.tz_width, ((_model.count + self.columnNumber - 1) / self.columnNumber) * self.view.tz_width);
-        if (_models.count == 0) {
-            _noDataLabel = [UILabel new];
-            _noDataLabel.textAlignment = NSTextAlignmentCenter;
-            _noDataLabel.text = [NSBundle tz_localizedStringForKey:@"No Photos or Videos"];
-            CGFloat rgb = 153 / 256.0;
-            _noDataLabel.textColor = [UIColor colorWithRed:rgb green:rgb blue:rgb alpha:1.0];
-            _noDataLabel.font = [UIFont boldSystemFontOfSize:20];
-            [_collectionView addSubview:_noDataLabel];
-        } else if (_noDataLabel) {
-            [_noDataLabel removeFromSuperview];
-            _noDataLabel = nil;
-        }
+    _collectionView.contentSize = CGSizeMake(self.view.tz_width, (([self getAllCellCount] + self.columnNumber - 1) / self.columnNumber) * self.view.tz_width);
+    if (_models.count == 0) {
+        _noDataLabel = [UILabel new];
+        _noDataLabel.textAlignment = NSTextAlignmentCenter;
+        _noDataLabel.text = [NSBundle tz_localizedStringForKey:@"No Photos or Videos"];
+        CGFloat rgb = 153 / 256.0;
+        _noDataLabel.textColor = [UIColor colorWithRed:rgb green:rgb blue:rgb alpha:1.0];
+        _noDataLabel.font = [UIFont boldSystemFontOfSize:20];
+        _noDataLabel.frame = _collectionView.bounds;
+        [_collectionView addSubview:_noDataLabel];
+    } else if (_noDataLabel) {
+        [_noDataLabel removeFromSuperview];
+        _noDataLabel = nil;
     }
 }
 
@@ -354,6 +364,7 @@ static CGFloat itemMargin = 5;
     CGFloat top = 0;
     CGFloat collectionViewHeight = 0;
     CGFloat naviBarHeight = self.navigationController.navigationBar.tz_height;
+    CGFloat footerTipViewH = _authorizationLimited ? 80 : 0;
     BOOL isStatusBarHidden = [UIApplication sharedApplication].isStatusBarHidden;
     BOOL isFullScreen = self.view.tz_height == [UIScreen mainScreen].bounds.size.height;
     CGFloat toolBarHeight = 50 + [TZCommonTools tz_safeAreaInsets].bottom;
@@ -364,6 +375,8 @@ static CGFloat itemMargin = 5;
     } else {
         collectionViewHeight = tzImagePickerVc.showSelectBtn ? self.view.tz_height - toolBarHeight : self.view.tz_height;
     }
+    collectionViewHeight -= footerTipViewH;
+
     _collectionView.frame = CGRectMake(0, top, self.view.tz_width, collectionViewHeight);
     _noDataLabel.frame = _collectionView.bounds;
     CGFloat itemWH = (self.view.tz_width - (self.columnNumber + 1) * itemMargin) / self.columnNumber;
@@ -384,7 +397,10 @@ static CGFloat itemMargin = 5;
         toolBarTop = self.view.tz_height - toolBarHeight - navigationHeight;
     }
     _bottomToolBar.frame = CGRectMake(0, toolBarTop, self.view.tz_width, toolBarHeight);
-    
+    if (_authFooterTipView) {
+        CGFloat footerTipViewY = _bottomToolBar ? toolBarTop - footerTipViewH : self.view.tz_height - footerTipViewH;
+        _authFooterTipView.frame = CGRectMake(0, footerTipViewY, self.view.tz_width, footerTipViewH);;
+    }
     CGFloat previewWidth = [tzImagePickerVc.previewBtnTitleStr boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX) options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16]} context:nil].size.width + 2;
     if (!tzImagePickerVc.allowPreview) {
         previewWidth = 0.0;
@@ -524,13 +540,16 @@ static CGFloat itemMargin = 5;
     TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
     if (tzImagePickerVc.allowPickingVideo && tzImagePickerVc.maxImagesCount == 1) {
         if ([[TZImageManager manager] isVideo:[assets firstObject]]) {
+            BOOL triggered = NO;
             if ([tzImagePickerVc.pickerDelegate respondsToSelector:@selector(imagePickerController:didFinishPickingVideo:sourceAssets:)]) {
                 [tzImagePickerVc.pickerDelegate imagePickerController:tzImagePickerVc didFinishPickingVideo:[photos firstObject] sourceAssets:[assets firstObject]];
+                triggered = YES;
             }
             if (tzImagePickerVc.didFinishPickingVideoHandle) {
                 tzImagePickerVc.didFinishPickingVideoHandle([photos firstObject], [assets firstObject]);
+                triggered = YES;
             }
-            return;
+            if (triggered) return;
         }
     }
     
@@ -551,16 +570,22 @@ static CGFloat itemMargin = 5;
 #pragma mark - UICollectionViewDataSource && Delegate
 
 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
-    if (_showTakePhotoBtn) {
-        return _models.count + 1;
-    }
-    return _models.count;
+    return [self getAllCellCount];
 }
 
 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
-    // the cell lead to take a picture / 去拍照的cell
     TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
-    if (((tzImagePickerVc.sortAscendingByModificationDate && indexPath.item >= _models.count) || (!tzImagePickerVc.sortAscendingByModificationDate && indexPath.item == 0)) && _showTakePhotoBtn) {
+    // the cell lead to add more photo / 去添加更多照片的cell
+    if (indexPath.item == [self getAddMorePhotoCellIndex]) {
+        TZAssetAddMoreCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"TZAssetAddMoreCell" forIndexPath:indexPath];
+        cell.imageView.image = tzImagePickerVc.addMorePhotoImage;
+        cell.tipLabel.text = [NSBundle tz_localizedStringForKey:@"Add more accessible photos"];
+        cell.imageView.contentMode = UIViewContentModeScaleAspectFit;
+        cell.imageView.backgroundColor = [UIColor colorWithWhite:1.000 alpha:0.500];
+        return cell;
+    }
+    // the cell lead to take a picture / 去拍照的cell
+    if (indexPath.item == [self getTakePhotoCellIndex]) {
         TZAssetCameraCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"TZAssetCameraCell" forIndexPath:indexPath];
         cell.imageView.image = tzImagePickerVc.takePictureImage;
         if ([tzImagePickerVc.takePictureImageName isEqualToString:@"takePicture80"]) {
@@ -580,10 +605,11 @@ static CGFloat itemMargin = 5;
     cell.assetCellDidSetModelBlock = tzImagePickerVc.assetCellDidSetModelBlock;
     cell.assetCellDidLayoutSubviewsBlock = tzImagePickerVc.assetCellDidLayoutSubviewsBlock;
     TZAssetModel *model;
-    if (tzImagePickerVc.sortAscendingByModificationDate || !_showTakePhotoBtn) {
+    if (tzImagePickerVc.sortAscendingByModificationDate) {
         model = _models[indexPath.item];
     } else {
-        model = _models[indexPath.item - 1];
+        NSInteger diff = [self getAllCellCount] - _models.count;
+        model = _models[indexPath.item - diff];;
     }
     cell.allowPickingGif = tzImagePickerVc.allowPickingGif;
     cell.model = model;
@@ -669,13 +695,16 @@ static CGFloat itemMargin = 5;
 - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
     // take a photo / 去拍照
     TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
-    if (((tzImagePickerVc.sortAscendingByModificationDate && indexPath.item >= _models.count) || (!tzImagePickerVc.sortAscendingByModificationDate && indexPath.item == 0)) && _showTakePhotoBtn)  {
+    if (indexPath.item == [self getAddMorePhotoCellIndex]) {
+        [self addMorePhoto]; return;
+    }
+    if (indexPath.item == [self getTakePhotoCellIndex]) {
         [self takePhoto]; return;
     }
     // preview phote or video / 预览照片或视频
     NSInteger index = indexPath.item;
-    if (!tzImagePickerVc.sortAscendingByModificationDate && _showTakePhotoBtn) {
-        index = indexPath.item - 1;
+    if (!tzImagePickerVc.sortAscendingByModificationDate) {
+        index -= [self getAllCellCount] - _models.count;
     }
     TZAssetModel *model = _models[index];
     if (model.type == TZAssetModelMediaTypeVideo && !tzImagePickerVc.allowPickingMultipleVideo) {
@@ -712,6 +741,44 @@ static CGFloat itemMargin = 5;
 
 #pragma mark - Private Method
 
+- (NSInteger)getAllCellCount {
+    NSInteger count = _models.count;
+    if (_showTakePhotoBtn) {
+        count += 1;
+    }
+    if (_authorizationLimited) {
+        count += 1;
+    }
+    return count;
+}
+
+- (NSInteger)getTakePhotoCellIndex {
+    TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+    if (!_showTakePhotoBtn) {
+        return -1;
+    }
+    if (tzImagePickerVc.sortAscendingByModificationDate) {
+        return [self getAllCellCount] - 1;
+    } else {
+        return 0;
+    }
+}
+
+- (NSInteger)getAddMorePhotoCellIndex {
+    TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+    if (!_authorizationLimited) {
+        return -1;
+    }
+    if (tzImagePickerVc.sortAscendingByModificationDate) {
+        if (_showTakePhotoBtn) {
+            return [self getAllCellCount] - 2;
+        }
+        return [self getAllCellCount] - 1;
+    } else {
+        return _showTakePhotoBtn ? 1 : 0;
+    }
+}
+
 /// 拍照按钮点击事件
 - (void)takePhoto {
     AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
@@ -744,10 +811,21 @@ static CGFloat itemMargin = 5;
     }
 }
 
+- (void)openSettingsApplication {
+    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
+}
+
+- (void)addMorePhoto {
+    if (@available(iOS 14, *)) {
+        [[PHPhotoLibrary sharedPhotoLibrary] presentLimitedLibraryPickerFromViewController:self];
+    }
+}
+
 // 调用相机
 - (void)pushImagePickerController {
     // 提前定位
     TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+#ifdef TZ_HAVE_LOCATION_CODE
     if (tzImagePickerVc.allowCameraLocation) {
         __weak typeof(self) weakSelf = self;
         [[TZLocationManager manager] startLocationWithSuccessBlock:^(NSArray<CLLocation *> *locations) {
@@ -758,6 +836,7 @@ static CGFloat itemMargin = 5;
             strongSelf.location = nil;
         }];
     }
+#endif
     
     UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera;
     if ([UIImagePickerController isSourceTypeAvailable: sourceType]) {
@@ -823,7 +902,15 @@ static CGFloat itemMargin = 5;
     }];
     [photoPreviewVc setDoneButtonClickBlockCropMode:^(UIImage *cropedImage, id asset) {
         __strong typeof(weakSelf) strongSelf = weakSelf;
-        [strongSelf didGetAllPhotos:@[cropedImage] assets:@[asset] infoArr:nil];
+        NSArray *assets = @[];
+        if (asset) {
+            assets = @[asset];
+        }
+        NSArray *photos = @[];
+        if (cropedImage) {
+            photos = @[cropedImage];
+        }
+        [strongSelf didGetAllPhotos:photos assets:assets infoArr:nil];
     }];
     [self.navigationController pushViewController:photoPreviewVc animated:YES];
 }
@@ -839,26 +926,33 @@ static CGFloat itemMargin = 5;
     }];
 }
 
-- (void)scrollCollectionViewToBottom {
-    TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+- (void)prepareScrollCollectionViewToBottom {
     if (_shouldScrollToBottom && _models.count > 0) {
-        NSInteger item = 0;
-        if (tzImagePickerVc.sortAscendingByModificationDate) {
-            item = _models.count - 1;
-            if (_showTakePhotoBtn) {
-                item += 1;
-            }
-        }
         dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            [self->_collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:item inSection:0] atScrollPosition:UICollectionViewScrollPositionBottom animated:NO];
-            self->_shouldScrollToBottom = NO;
-            self->_collectionView.hidden = NO;
+            [self scrollCollectionViewToBottom];
+            // try fix #1562:https://github.com/banchichen/TZImagePickerController/issues/1562
+            if (@available(iOS 15.0, *)) {
+                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+                    [self scrollCollectionViewToBottom];
+                });
+            }
         });
     } else {
         _collectionView.hidden = NO;
     }
 }
 
+- (void)scrollCollectionViewToBottom {
+    TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+    NSInteger item = 0;
+    if (tzImagePickerVc.sortAscendingByModificationDate) {
+        item = [self getAllCellCount] - 1;
+    }
+    [self->_collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:item inSection:0] atScrollPosition:UICollectionViewScrollPositionBottom animated:NO];
+    self->_shouldScrollToBottom = NO;
+    self->_collectionView.hidden = NO;
+}
+
 - (void)checkSelectedModels {
     TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
     NSArray *selectedModels = tzImagePickerVc.selectedModels;
@@ -988,7 +1082,7 @@ static CGFloat itemMargin = 5;
     [_collectionView reloadData];
     
     _shouldScrollToBottom = YES;
-    [self scrollCollectionViewToBottom];
+    [self prepareScrollCollectionViewToBottom];
 }
 
 - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
@@ -1008,8 +1102,21 @@ static CGFloat itemMargin = 5;
         return;
     }
     dispatch_async(dispatch_get_main_queue(), ^{
-        [self.model refreshFetchResult];
-        [self fetchAssetModels];
+        PHFetchResultChangeDetails *changeDetail = [changeInstance changeDetailsForFetchResult:self.model.result];
+        if (changeDetail == nil) return;
+        if (changeDetail.hasIncrementalChanges == NO) {
+            [self.model refreshFetchResult];
+            [self fetchAssetModels];
+        } else {
+            NSInteger insertedCount = changeDetail.insertedObjects.count;
+            NSInteger removedCount = changeDetail.removedObjects.count;
+            NSInteger changedCount = changeDetail.changedObjects.count;
+            if (insertedCount > 0 || removedCount > 0 || changedCount > 0) {
+                self.model.result = changeDetail.fetchResultAfterChanges;
+                self.model.count = changeDetail.fetchResultAfterChanges.count;
+                [self fetchAssetModels];
+            }
+        }
     });
 }
 

+ 4 - 4
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZPhotoPreviewCell.m

@@ -107,7 +107,7 @@
     if (self) {
         _scrollView = [[UIScrollView alloc] init];
         _scrollView.bouncesZoom = YES;
-        _scrollView.maximumZoomScale = 2.5;
+        _scrollView.maximumZoomScale = 4;
         _scrollView.minimumZoomScale = 1.0;
         _scrollView.multipleTouchEnabled = YES;
         _scrollView.delegate = self;
@@ -309,7 +309,7 @@
 }
 
 - (void)configMaximumZoomScale {
-    _scrollView.maximumZoomScale = _allowCrop ? 4.0 : 2.5;
+    _scrollView.maximumZoomScale = _allowCrop ? 6.0 : 4.0;
     
     if ([self.asset isKindOfClass:[PHAsset class]]) {
         PHAsset *phAsset = (PHAsset *)self.asset;
@@ -333,7 +333,7 @@
         _scrollView.alwaysBounceVertical = YES;
         // 2.让scrollView新增滑动区域(裁剪框左上角的图片部分)
         if (contentHeightAdd > 0 || contentWidthAdd > 0) {
-            _scrollView.contentInset = UIEdgeInsetsMake(contentHeightAdd, contentWidthAdd, 0, 0);
+            _scrollView.contentInset = UIEdgeInsetsMake(MAX(contentHeightAdd, 0), MAX(contentWidthAdd, 0), 0, 0);
         } else {
             _scrollView.contentInset = UIEdgeInsetsZero;
         }
@@ -360,7 +360,7 @@
         [_scrollView setZoomScale:_scrollView.minimumZoomScale animated:YES];
     } else {
         CGPoint touchPoint = [tap locationInView:self.imageView];
-        CGFloat newZoomScale = _scrollView.maximumZoomScale;
+        CGFloat newZoomScale = MIN(_scrollView.maximumZoomScale, 2.5);
         CGFloat xsize = self.frame.size.width / newZoomScale;
         CGFloat ysize = self.frame.size.height / newZoomScale;
         [_scrollView zoomToRect:CGRectMake(touchPoint.x - xsize/2, touchPoint.y - ysize/2, xsize, ysize) animated:YES];

+ 3 - 1
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZPhotoPreviewController.m

@@ -212,6 +212,7 @@
     }
     [self.view addSubview:_collectionView];
     [_collectionView registerClass:[TZPhotoPreviewCell class] forCellWithReuseIdentifier:@"TZPhotoPreviewCell"];
+    [_collectionView registerClass:[TZPhotoPreviewCell class] forCellWithReuseIdentifier:@"TZPhotoPreviewCellGIF"];
     [_collectionView registerClass:[TZVideoPreviewCell class] forCellWithReuseIdentifier:@"TZVideoPreviewCell"];
     [_collectionView registerClass:[TZGifPreviewCell class] forCellWithReuseIdentifier:@"TZGifPreviewCell"];
     
@@ -503,7 +504,8 @@
             [weakSelf didICloudSyncStatusChanged:model];
         };
     } else {
-        cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"TZPhotoPreviewCell" forIndexPath:indexPath];
+        NSString *reuseId = model.type == TZAssetModelMediaTypePhotoGif ? @"TZPhotoPreviewCellGIF" : @"TZPhotoPreviewCell";
+        cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseId forIndexPath:indexPath];
         TZPhotoPreviewCell *photoPreviewCell = (TZPhotoPreviewCell *)cell;
         photoPreviewCell.cropRect = _tzImagePickerVc.cropRect;
         photoPreviewCell.allowCrop = _tzImagePickerVc.allowCrop;

+ 4 - 1
创维盒子/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZVideoPlayerController.m

@@ -19,6 +19,7 @@
     AVPlayer *_player;
     AVPlayerLayer *_playerLayer;
     UIButton *_playButton;
+    UIImage *_playButtonNormalImage;
     UIImage *_cover;
     NSString *_outputPath;
     NSString *_errorMsg;
@@ -198,6 +199,7 @@
         [_player play];
         [self.navigationController setNavigationBarHidden:YES];
         _toolBar.hidden = YES;
+        _playButtonNormalImage = [_playButton imageForState:UIControlStateNormal];
         [_playButton setImage:nil forState:UIControlStateNormal];
         [UIApplication sharedApplication].statusBarHidden = YES;
     } else {
@@ -286,7 +288,8 @@
     [_player pause];
     _toolBar.hidden = NO;
     [self.navigationController setNavigationBarHidden:NO];
-    [_playButton setImage:[UIImage tz_imageNamedFromMyBundle:@"MMVideoPreviewPlay"] forState:UIControlStateNormal];
+    UIImage *normalImage = _playButtonNormalImage ?: [UIImage tz_imageNamedFromMyBundle:@"MMVideoPreviewPlay"];
+    [_playButton setImage:normalImage forState:UIControlStateNormal];
     
     if (self.needShowStatusBar) {
         [UIApplication sharedApplication].statusBarHidden = NO;

创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护-acknowledgements.markdown → 创维盒子/Pods/Target Support Files/Pods-GBOX/Pods-GBOX-acknowledgements.markdown


创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护-acknowledgements.plist → 创维盒子/Pods/Target Support Files/Pods-GBOX/Pods-GBOX-acknowledgements.plist


+ 5 - 0
创维盒子/Pods/Target Support Files/Pods-GBOX/Pods-GBOX-dummy.m

@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+@interface PodsDummy_Pods_GBOX : NSObject
+@end
+@implementation PodsDummy_Pods_GBOX
+@end

+ 1 - 1
创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护-resources-Debug-input-files.xcfilelist

@@ -1,4 +1,4 @@
-${PODS_ROOT}/Target Support Files/Pods-隐私保护/Pods-隐私保护-resources.sh
+${PODS_ROOT}/Target Support Files/Pods-GBOX/Pods-GBOX-resources.sh
 ${PODS_ROOT}/MJRefresh/MJRefresh/MJRefresh.bundle
 ${PODS_ROOT}/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle
 ${PODS_ROOT}/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle

创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护-resources-Debug-output-files.xcfilelist → 创维盒子/Pods/Target Support Files/Pods-GBOX/Pods-GBOX-resources-Debug-output-files.xcfilelist


+ 1 - 1
创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护-resources-Release-input-files.xcfilelist

@@ -1,4 +1,4 @@
-${PODS_ROOT}/Target Support Files/Pods-隐私保护/Pods-隐私保护-resources.sh
+${PODS_ROOT}/Target Support Files/Pods-GBOX/Pods-GBOX-resources.sh
 ${PODS_ROOT}/MJRefresh/MJRefresh/MJRefresh.bundle
 ${PODS_ROOT}/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle
 ${PODS_ROOT}/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle

创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护-resources-Release-output-files.xcfilelist → 创维盒子/Pods/Target Support Files/Pods-GBOX/Pods-GBOX-resources-Release-output-files.xcfilelist


创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护-resources.sh → 创维盒子/Pods/Target Support Files/Pods-GBOX/Pods-GBOX-resources.sh


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 1
创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护.debug.xcconfig


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 1
创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护.release.xcconfig


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 1
创维盒子/Pods/Target Support Files/Pods-计算器/Pods-计算器.debug.xcconfig


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 1
创维盒子/Pods/Target Support Files/Pods-计算器/Pods-计算器.release.xcconfig


+ 0 - 5
创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护-dummy.m

@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_Pods_____ : NSObject
-@end
-@implementation PodsDummy_Pods_____
-@end

+ 0 - 16
创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护-umbrella.h

@@ -1,16 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
-
-FOUNDATION_EXPORT double Pods_____VersionNumber;
-FOUNDATION_EXPORT const unsigned char Pods_____VersionString[];
-

+ 0 - 6
创维盒子/Pods/Target Support Files/Pods-隐私保护/Pods-隐私保护.modulemap

@@ -1,6 +0,0 @@
-module Pods_____ {
-  umbrella header "Pods-隐私保护-umbrella.h"
-
-  export *
-  module * { export * }
-}

+ 15 - 12
创维盒子/双子星云手机.xcodeproj/project.pbxproj

@@ -7,7 +7,6 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		0E69932CA3C4B3A33E0C587C /* libPods-隐私保护.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 41C5601DC8FC86BACEE00639 /* libPods-隐私保护.a */; };
 		1810F9002AA1839C00322116 /* PhoneTimeInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 1810F8FE2AA1839C00322116 /* PhoneTimeInfoModel.m */; };
 		1810F9012AA1839C00322116 /* PhoneTimeInfoModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 1810F8FF2AA1839C00322116 /* PhoneTimeInfoModel.h */; };
 		181E84F22A8F0A9B00292B96 /* HelpDownScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 181E84F02A8F0A9A00292B96 /* HelpDownScrollView.h */; };
@@ -124,6 +123,7 @@
 		18F9CB092ABD7835003FF71A /* TipsQRCodeForChangeDeviceViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F9CB052ABD7835003FF71A /* TipsQRCodeForChangeDeviceViewController.h */; };
 		18FCE5442AD136FF0020F623 /* ShortcutManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 18FCE5422AD136FE0020F623 /* ShortcutManager.h */; };
 		18FCE5452AD136FF0020F623 /* ShortcutManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18FCE5432AD136FF0020F623 /* ShortcutManager.m */; };
+		54683CA0DCAB122A72CCFD63 /* libPods-GBOX.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAF9D84F9A64AFD0F679DBFA /* libPods-GBOX.a */; };
 		5D9E1B185552EF17AE8B5F24 /* libPods-计算器.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CAE4E9905D1AB335F8657436 /* libPods-计算器.a */; };
 		6B05815B2AFC851E00D37290 /* mySetHeadView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B0581592AFC851E00D37290 /* mySetHeadView.h */; };
 		6B05815C2AFC851E00D37290 /* mySetHeadView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B05815A2AFC851E00D37290 /* mySetHeadView.m */; };
@@ -1339,7 +1339,7 @@
 		A08A950327E9A4E400C544BB /* FMDatabasePool.m in Sources */ = {isa = PBXBuildFile; fileRef = A08A94F927E9A4E400C544BB /* FMDatabasePool.m */; };
 		A08A950427E9A4E400C544BB /* FMResultSet.m in Sources */ = {isa = PBXBuildFile; fileRef = A08A94FA27E9A4E400C544BB /* FMResultSet.m */; };
 		A0951D9427ED61F5000E6AC4 /* HWAboutViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A0951D9227ED61F5000E6AC4 /* HWAboutViewController.m */; };
-		FF9E820CFBE22690EBBB63B3 /* (null) in Frameworks */ = {isa = PBXBuildFile; };
+		FF9E820CFBE22690EBBB63B3 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; };
 /* End PBXBuildFile section */
 
 /* Begin PBXCopyFilesBuildPhase section */
@@ -1542,7 +1542,6 @@
 		18FCE5432AD136FF0020F623 /* ShortcutManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShortcutManager.m; sourceTree = "<group>"; };
 		1C8858F235EF73D282B6C2F7 /* Pods-计算器.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-计算器.debug.xcconfig"; path = "Target Support Files/Pods-计算器/Pods-计算器.debug.xcconfig"; sourceTree = "<group>"; };
 		34FDFD4EDCAAF106290BB4FC /* Pods-隐私保护.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-隐私保护.debug.xcconfig"; path = "Target Support Files/Pods-隐私保护/Pods-隐私保护.debug.xcconfig"; sourceTree = "<group>"; };
-		41C5601DC8FC86BACEE00639 /* libPods-隐私保护.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-隐私保护.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		6B0581592AFC851E00D37290 /* mySetHeadView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mySetHeadView.h; sourceTree = "<group>"; };
 		6B05815A2AFC851E00D37290 /* mySetHeadView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = mySetHeadView.m; sourceTree = "<group>"; };
 		6B05815E2AFCD0DF00D37290 /* uploadImageOrVideoViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = uploadImageOrVideoViewController.h; sourceTree = "<group>"; };
@@ -2049,6 +2048,7 @@
 		71D630B0FBD97501D316E4AB /* Pods-隐私保护.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-隐私保护.release.xcconfig"; path = "Target Support Files/Pods-隐私保护/Pods-隐私保护.release.xcconfig"; sourceTree = "<group>"; };
 		76CE03B9AFFD06BB0A10175A /* Pods-计算器.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-计算器.release.xcconfig"; path = "Target Support Files/Pods-计算器/Pods-计算器.release.xcconfig"; sourceTree = "<group>"; };
 		86FBD9FD629A5194B7C58D9F /* Pods-双子星云手机-双子星云手机UITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-双子星云手机-双子星云手机UITests.debug.xcconfig"; path = "Target Support Files/Pods-双子星云手机-双子星云手机UITests/Pods-双子星云手机-双子星云手机UITests.debug.xcconfig"; sourceTree = "<group>"; };
+		98F65281BB804F95BF668041 /* Pods-GBOX.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GBOX.debug.xcconfig"; path = "Target Support Files/Pods-GBOX/Pods-GBOX.debug.xcconfig"; sourceTree = "<group>"; };
 		A00221D827EAFF4A00E45F78 /* HWAddBookmarkViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HWAddBookmarkViewController.h; sourceTree = "<group>"; };
 		A00221D927EAFF4A00E45F78 /* HWAddBookmarkViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HWAddBookmarkViewController.m; sourceTree = "<group>"; };
 		A00221DD27EB0EBF00E45F78 /* HWFolderListCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HWFolderListCell.h; sourceTree = "<group>"; };
@@ -2173,6 +2173,8 @@
 		B86309A2862A9A940DB07BE1 /* Pods-双子星云手机-双子星云手机UITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-双子星云手机-双子星云手机UITests.release.xcconfig"; path = "Target Support Files/Pods-双子星云手机-双子星云手机UITests/Pods-双子星云手机-双子星云手机UITests.release.xcconfig"; sourceTree = "<group>"; };
 		BA5C9DA7E6987512BBFDE348 /* Pods-双子星云手机.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-双子星云手机.debug.xcconfig"; path = "Target Support Files/Pods-双子星云手机/Pods-双子星云手机.debug.xcconfig"; sourceTree = "<group>"; };
 		CAE4E9905D1AB335F8657436 /* libPods-计算器.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-计算器.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		E48AF235D2EB7A3DD9255712 /* Pods-GBOX.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GBOX.release.xcconfig"; path = "Target Support Files/Pods-GBOX/Pods-GBOX.release.xcconfig"; sourceTree = "<group>"; };
+		FAF9D84F9A64AFD0F679DBFA /* libPods-GBOX.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-GBOX.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -2220,8 +2222,7 @@
 				183AE6892A8C9BE800B11CB0 /* OpenGLES.framework in Frameworks */,
 				183AE6872A8C9BA700B11CB0 /* AudioToolbox.framework in Frameworks */,
 				183AE6852A8C9B8900B11CB0 /* AVFoundation.framework in Frameworks */,
-				FF9E820CFBE22690EBBB63B3 /* (null) in Frameworks */,
-				0E69932CA3C4B3A33E0C587C /* libPods-隐私保护.a in Frameworks */,
+				54683CA0DCAB122A72CCFD63 /* libPods-GBOX.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2239,6 +2240,8 @@
 				71D630B0FBD97501D316E4AB /* Pods-隐私保护.release.xcconfig */,
 				1C8858F235EF73D282B6C2F7 /* Pods-计算器.debug.xcconfig */,
 				76CE03B9AFFD06BB0A10175A /* Pods-计算器.release.xcconfig */,
+				98F65281BB804F95BF668041 /* Pods-GBOX.debug.xcconfig */,
+				E48AF235D2EB7A3DD9255712 /* Pods-GBOX.release.xcconfig */,
 			);
 			path = Pods;
 			sourceTree = "<group>";
@@ -2604,7 +2607,7 @@
 				183AE6862A8C9BA700B11CB0 /* AudioToolbox.framework */,
 				183AE6842A8C9B8900B11CB0 /* AVFoundation.framework */,
 				CAE4E9905D1AB335F8657436 /* libPods-计算器.a */,
-				41C5601DC8FC86BACEE00639 /* libPods-隐私保护.a */,
+				FAF9D84F9A64AFD0F679DBFA /* libPods-GBOX.a */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
@@ -4551,7 +4554,7 @@
 			outputFileListPaths = (
 			);
 			outputPaths = (
-				"$(DERIVED_FILE_DIR)/Pods-隐私保护-checkManifestLockResult.txt",
+				"$(DERIVED_FILE_DIR)/Pods-GBOX-checkManifestLockResult.txt",
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
@@ -4603,15 +4606,15 @@
 			files = (
 			);
 			inputFileListPaths = (
-				"${PODS_ROOT}/Target Support Files/Pods-隐私保护/Pods-隐私保护-resources-${CONFIGURATION}-input-files.xcfilelist",
+				"${PODS_ROOT}/Target Support Files/Pods-GBOX/Pods-GBOX-resources-${CONFIGURATION}-input-files.xcfilelist",
 			);
 			name = "[CP] Copy Pods Resources";
 			outputFileListPaths = (
-				"${PODS_ROOT}/Target Support Files/Pods-隐私保护/Pods-隐私保护-resources-${CONFIGURATION}-output-files.xcfilelist",
+				"${PODS_ROOT}/Target Support Files/Pods-GBOX/Pods-GBOX-resources-${CONFIGURATION}-output-files.xcfilelist",
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-隐私保护/Pods-隐私保护-resources.sh\"\n";
+			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-GBOX/Pods-GBOX-resources.sh\"\n";
 			showEnvVarsInLog = 0;
 		};
 /* End PBXShellScriptBuildPhase section */
@@ -5716,7 +5719,7 @@
 		};
 		A02FF6C627D7054700D59D3F /* Debug */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = 34FDFD4EDCAAF106290BB4FC /* Pods-隐私保护.debug.xcconfig */;
+			baseConfigurationReference = 98F65281BB804F95BF668041 /* Pods-GBOX.debug.xcconfig */;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
@@ -5795,7 +5798,7 @@
 		};
 		A02FF6C727D7054700D59D3F /* Release */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = 71D630B0FBD97501D316E4AB /* Pods-隐私保护.release.xcconfig */;
+			baseConfigurationReference = E48AF235D2EB7A3DD9255712 /* Pods-GBOX.release.xcconfig */;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;