فهرست منبع

Merge pull request #1211 from deltachat/updates

Updates
cyBerta 4 سال پیش
والد
کامیت
d1416a52ae
97فایلهای تغییر یافته به همراه2486 افزوده شده و 5039 حذف شده
  1. 1 3
      Podfile
  2. 12 16
      Podfile.lock
  3. 1 1
      Pods/DBDebugToolkit/DBDebugToolkit/Classes/Categories/UIView+Snapshot.h
  4. 1 1
      Pods/DBDebugToolkit/DBDebugToolkit/Classes/Categories/UIView+Snapshot.m
  5. 1 1
      Pods/DBDebugToolkit/DBDebugToolkit/Classes/CrashReports/DBCrashReportsToolkit.m
  6. 10 0
      Pods/DBDebugToolkit/DBDebugToolkit/Classes/DBDebugToolkit.h
  7. 19 4
      Pods/DBDebugToolkit/DBDebugToolkit/Classes/DBDebugToolkit.m
  8. 14 4
      Pods/DBDebugToolkit/DBDebugToolkit/Classes/Device/DBDeviceInfoProvider.m
  9. 21 5
      Pods/DBDebugToolkit/DBDebugToolkit/Classes/Network/DBBodyPreviewViewController.m
  10. 2 2
      Pods/DBDebugToolkit/DBDebugToolkit/Classes/Network/DBNetworkToolkit.m
  11. 1 0
      Pods/DBDebugToolkit/DBDebugToolkit/Classes/Network/URLProtocol/DBURLProtocol.m
  12. 12 0
      Pods/DBDebugToolkit/DBDebugToolkit/Classes/Resources/Files/DBFilesTableViewController.m
  13. 1 1
      Pods/DBDebugToolkit/DBDebugToolkit/Classes/UserInterface/Categories/UIView+DBUserInterfaceToolkit.m
  14. 61 28
      Pods/DBDebugToolkit/DBDebugToolkit/Resources/DBMenuTableViewController.storyboard
  15. 5 2
      Pods/DBDebugToolkit/DBDebugToolkit/Resources/DBNetworkViewController.storyboard
  16. 4 3
      Pods/DBDebugToolkit/README.md
  17. 12 16
      Pods/Manifest.lock
  18. 1588 1706
      Pods/Pods.xcodeproj/project.pbxproj
  19. 2 2
      Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m
  20. 10 9
      Pods/SDWebImage/SDWebImage/Core/SDAnimatedImagePlayer.m
  21. 2 2
      Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.h
  22. 2 1
      Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.m
  23. 6 1
      Pods/SDWebImage/SDWebImage/Core/SDImageCache.m
  24. 7 0
      Pods/SDWebImage/SDWebImage/Core/SDWebImageTransition.m
  25. 8 6
      Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.m
  26. 1 1
      Pods/SwiftLint/LICENSE
  27. BIN
      Pods/SwiftLint/swiftlint
  28. 56 17
      Pods/SwiftyBeaver/README.md
  29. 42 118
      Pods/SwiftyBeaver/Sources/AES256CBC.swift
  30. 42 112
      Pods/SwiftyBeaver/Sources/BaseDestination.swift
  31. 4 5
      Pods/SwiftyBeaver/Sources/Extensions.swift
  32. 142 53
      Pods/SwiftyBeaver/Sources/FileDestination.swift
  33. 10 11
      Pods/SwiftyBeaver/Sources/Filter.swift
  34. 129 0
      Pods/SwiftyBeaver/Sources/FilterValidator.swift
  35. 18 11
      Pods/SwiftyBeaver/Sources/SBPlatformDestination.swift
  36. 5 9
      Pods/SwiftyBeaver/Sources/SwiftyBeaver.swift
  37. 1 1
      Pods/Target Support Files/DBDebugToolkit/DBDebugToolkit-Info.plist
  38. 2 1
      Pods/Target Support Files/DBDebugToolkit/DBDebugToolkit.debug.xcconfig
  39. 2 1
      Pods/Target Support Files/DBDebugToolkit/DBDebugToolkit.release.xcconfig
  40. 1 1
      Pods/Target Support Files/DBDebugToolkit/ResourceBundle-DBDebugToolkit-DBDebugToolkit-Info.plist
  41. 2 1
      Pods/Target Support Files/InputBarAccessoryView/InputBarAccessoryView.debug.xcconfig
  42. 2 1
      Pods/Target Support Files/InputBarAccessoryView/InputBarAccessoryView.release.xcconfig
  43. 0 0
      Pods/Target Support Files/Pods-DcShare/Pods-DcShare-Info.plist
  44. 27 0
      Pods/Target Support Files/Pods-DcShare/Pods-DcShare-acknowledgements.markdown
  45. 59 0
      Pods/Target Support Files/Pods-DcShare/Pods-DcShare-acknowledgements.plist
  46. 5 0
      Pods/Target Support Files/Pods-DcShare/Pods-DcShare-dummy.m
  47. 4 0
      Pods/Target Support Files/Pods-DcShare/Pods-DcShare-umbrella.h
  48. 13 0
      Pods/Target Support Files/Pods-DcShare/Pods-DcShare.debug.xcconfig
  49. 6 0
      Pods/Target Support Files/Pods-DcShare/Pods-DcShare.modulemap
  50. 13 0
      Pods/Target Support Files/Pods-DcShare/Pods-DcShare.release.xcconfig
  51. 0 212
      Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare-acknowledgements.markdown
  52. 0 292
      Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare-acknowledgements.plist
  53. 0 5
      Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare-dummy.m
  54. 0 16
      Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare-umbrella.h
  55. 0 12
      Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare.debug.xcconfig
  56. 0 6
      Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare.modulemap
  57. 0 12
      Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare.release.xcconfig
  58. 1 12
      Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios-acknowledgements.markdown
  59. 1 18
      Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios-acknowledgements.plist
  60. 36 60
      Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios-frameworks.sh
  61. 6 4
      Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios.debug.xcconfig
  62. 6 4
      Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios.release.xcconfig
  63. 5 3
      Pods/Target Support Files/Pods-deltachat-iosTests/Pods-deltachat-iosTests.debug.xcconfig
  64. 5 3
      Pods/Target Support Files/Pods-deltachat-iosTests/Pods-deltachat-iosTests.release.xcconfig
  65. 2 1
      Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.debug.xcconfig
  66. 2 1
      Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.release.xcconfig
  67. 2 1
      Pods/Target Support Files/SCSiriWaveformView/SCSiriWaveformView.debug.xcconfig
  68. 2 1
      Pods/Target Support Files/SCSiriWaveformView/SCSiriWaveformView.release.xcconfig
  69. 1 1
      Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist
  70. 2 0
      Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig
  71. 2 0
      Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig
  72. 2 1
      Pods/Target Support Files/SwiftFormat/SwiftFormat.debug.xcconfig
  73. 2 1
      Pods/Target Support Files/SwiftFormat/SwiftFormat.release.xcconfig
  74. 2 1
      Pods/Target Support Files/SwiftLint/SwiftLint.debug.xcconfig
  75. 2 1
      Pods/Target Support Files/SwiftLint/SwiftLint.release.xcconfig
  76. 1 1
      Pods/Target Support Files/SwiftyBeaver/SwiftyBeaver-Info.plist
  77. 2 1
      Pods/Target Support Files/SwiftyBeaver/SwiftyBeaver.debug.xcconfig
  78. 2 1
      Pods/Target Support Files/SwiftyBeaver/SwiftyBeaver.release.xcconfig
  79. 0 26
      Pods/Target Support Files/UICircularProgressRing/UICircularProgressRing-Info.plist
  80. 0 5
      Pods/Target Support Files/UICircularProgressRing/UICircularProgressRing-dummy.m
  81. 0 17
      Pods/Target Support Files/UICircularProgressRing/UICircularProgressRing-umbrella.h
  82. 0 11
      Pods/Target Support Files/UICircularProgressRing/UICircularProgressRing.debug.xcconfig
  83. 0 6
      Pods/Target Support Files/UICircularProgressRing/UICircularProgressRing.modulemap
  84. 0 11
      Pods/Target Support Files/UICircularProgressRing/UICircularProgressRing.release.xcconfig
  85. 0 10
      Pods/Target Support Files/UICircularProgressRing/UICircularProgressRing.xcconfig
  86. 0 7
      Pods/UICircularProgressRing/LICENSE
  87. 0 152
      Pods/UICircularProgressRing/README.md
  88. 0 44
      Pods/UICircularProgressRing/src/UICircularProgressRing/Extensions.swift
  89. 0 18
      Pods/UICircularProgressRing/src/UICircularProgressRing/UICircularProgressRing.h
  90. 0 274
      Pods/UICircularProgressRing/src/UICircularProgressRing/UICircularProgressRing.swift
  91. 0 92
      Pods/UICircularProgressRing/src/UICircularProgressRing/UICircularProgressRingDelegate.swift
  92. 0 608
      Pods/UICircularProgressRing/src/UICircularProgressRing/UICircularRing.swift
  93. 0 400
      Pods/UICircularProgressRing/src/UICircularProgressRing/UICircularRingLayer.swift
  94. 0 197
      Pods/UICircularProgressRing/src/UICircularProgressRing/UICircularRingStyle.swift
  95. 0 167
      Pods/UICircularProgressRing/src/UICircularProgressRing/UICircularRingValueFormatter.swift
  96. 0 153
      Pods/UICircularProgressRing/src/UICircularProgressRing/UICircularTimerRing.swift
  97. 11 13
      deltachat-ios.xcodeproj/project.pbxproj

+ 1 - 3
Podfile

@@ -10,7 +10,6 @@ target 'deltachat-ios' do
   pod 'SwiftFormat/CLI'
   # pod 'openssl-ios-bitcode'
   pod 'ReachabilitySwift'
-  pod 'UICircularProgressRing'
   pod 'SwiftyBeaver'
   pod 'DBDebugToolkit'
   pod 'InputBarAccessoryView'
@@ -19,6 +18,7 @@ target 'deltachat-ios' do
   target 'deltachat-iosTests' do
     inherit! :search_paths
     # Pods for testing
+  end
 end
 
 target 'DcShare' do
@@ -31,5 +31,3 @@ target 'DcShare' do
 
   pod 'SDWebImage', '~> 5.9.1'
 end
-
-end

+ 12 - 16
Podfile.lock

@@ -1,17 +1,16 @@
 PODS:
-  - DBDebugToolkit (0.5.0)
+  - DBDebugToolkit (0.6.0)
   - InputBarAccessoryView (4.3.1):
     - InputBarAccessoryView/Core (= 4.3.1)
   - InputBarAccessoryView/Core (4.3.1)
   - ReachabilitySwift (4.3.1)
   - SCSiriWaveformView (1.1.1)
-  - SDWebImage (5.9.1):
-    - SDWebImage/Core (= 5.9.1)
-  - SDWebImage/Core (5.9.1)
+  - SDWebImage (5.9.5):
+    - SDWebImage/Core (= 5.9.5)
+  - SDWebImage/Core (5.9.5)
   - SwiftFormat/CLI (0.40.9)
-  - SwiftLint (0.32.0)
-  - SwiftyBeaver (1.7.0)
-  - UICircularProgressRing (6.2.0)
+  - SwiftLint (0.43.1)
+  - SwiftyBeaver (1.9.4)
 
 DEPENDENCIES:
   - DBDebugToolkit
@@ -22,7 +21,6 @@ DEPENDENCIES:
   - SwiftFormat/CLI
   - SwiftLint
   - SwiftyBeaver
-  - UICircularProgressRing
 
 SPEC REPOS:
   trunk:
@@ -34,19 +32,17 @@ SPEC REPOS:
     - SwiftFormat
     - SwiftLint
     - SwiftyBeaver
-    - UICircularProgressRing
 
 SPEC CHECKSUMS:
-  DBDebugToolkit: c04bb6f618051d3de447a4b4323f37826116cfed
+  DBDebugToolkit: 03eb3483da4daf03b853b83ade5a8da9c8b7aff4
   InputBarAccessoryView: 58a348be7ea2736c7eec60e5c315511c2dbb39fd
   ReachabilitySwift: 4032e2f59586e11e3b0ebe15b167abdd587a388b
   SCSiriWaveformView: 15b9dd6f94c7536e2032b34a35c6ff74d38c7411
-  SDWebImage: a990c053fff71e388a10f3357edb0be17929c9c5
+  SDWebImage: 0b2ba0d56479bf6a45ecddbfd5558bea93150d25
   SwiftFormat: 6b67b6e7fe73d664f0cbb4f13721f130462c86a5
-  SwiftLint: 009a898ef2a1c851f45e1b59349bf6ff2ddc990d
-  SwiftyBeaver: 4cc0080d2e23f980652e28978db11a5c9da39165
-  UICircularProgressRing: 0ff679b05a17f15ad6301a7886686837b8c301a9
+  SwiftLint: 99f82d07b837b942dd563c668de129a03fc3fb52
+  SwiftyBeaver: 576177b2c5c94b3aedd5993914e91271a0524e88
 
-PODFILE CHECKSUM: 2588d4e56923eb871c0395db08c2ee0058acfefa
+PODFILE CHECKSUM: aaa44e7abceaef2d4ae15d9cb45fc87e03f85e0f
 
-COCOAPODS: 1.9.3
+COCOAPODS: 1.10.1

+ 1 - 1
Pods/DBDebugToolkit/DBDebugToolkit/Classes/Categories/UIView+Snapshot.h

@@ -28,6 +28,6 @@
 /**
  Creates and returns an image containing 
  */
-- (UIImage *)snapshot;
+- (UIImage *)db_snapshot;
 
 @end

+ 1 - 1
Pods/DBDebugToolkit/DBDebugToolkit/Classes/Categories/UIView+Snapshot.m

@@ -24,7 +24,7 @@
 
 @implementation UIView (Snapshot)
 
-- (UIImage *)snapshot {
+- (UIImage *)db_snapshot {
     UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, [UIScreen mainScreen].scale);
     [self drawViewHierarchyInRect:self.bounds afterScreenUpdates:NO];
     UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

+ 1 - 1
Pods/DBDebugToolkit/DBDebugToolkit/Classes/CrashReports/DBCrashReportsToolkit.m

@@ -229,7 +229,7 @@ static void handleSIGPIPESignal(int sig) {
                callStackSymbols:(NSArray<NSString *> *)callStackSymbols
                            date:(NSDate *)date {
     BOOL isMainThread = [NSThread isMainThread];
-    UIImage *screenshot = isMainThread ? [[UIApplication sharedApplication].keyWindow snapshot] : nil;
+    UIImage *screenshot = isMainThread ? [[UIApplication sharedApplication].keyWindow db_snapshot] : nil;
     [self saveCrashReportWithName:name
                            reason:reason
                          userInfo:userInfo

+ 10 - 0
Pods/DBDebugToolkit/DBDebugToolkit/Classes/DBDebugToolkit.h

@@ -85,11 +85,21 @@
  */
 + (void)clearCookies;
 
+/**
+ Returns the menu view controller.
+ */
++ (UIViewController*)menuViewController;
+
 /**
  Shows the menu.
  */
 + (void)showMenu;
 
+/**
+ Closes the menu.
+ */
++ (void)closeMenu;
+
 /**
  Shows the performance widget.
  */

+ 19 - 4
Pods/DBDebugToolkit/DBDebugToolkit/Classes/DBDebugToolkit.m

@@ -369,6 +369,13 @@ static NSString *const DBDebugToolkitObserverPresentationControllerPropertyKeyPa
     }
 }
 
++ (void)closeMenu {
+    DBDebugToolkit *toolkit = [DBDebugToolkit sharedInstance];
+    if (toolkit.showsMenu) {
+        [toolkit closeMenu];
+    }
+}
+
 + (void)showPerformanceWidget {
     DBDebugToolkit *toolkit = [DBDebugToolkit sharedInstance];
     DBPerformanceToolkit *performanceToolkit = toolkit.performanceToolkit;
@@ -383,6 +390,10 @@ static NSString *const DBDebugToolkitObserverPresentationControllerPropertyKeyPa
     }
 }
 
++ (UIViewController *)menuViewController {
+    return [DBDebugToolkit sharedInstance].menuViewController;
+}
+
 #pragma mark - Showing menu
 
 - (void)showMenu {
@@ -401,6 +412,13 @@ static NSString *const DBDebugToolkitObserverPresentationControllerPropertyKeyPa
     }];
 }
 
+- (void)closeMenu {
+    UIViewController *presentingViewController = self.menuViewController.navigationController.presentingViewController;
+    [presentingViewController dismissViewControllerAnimated:YES completion:^{
+        self.showsMenu = NO;
+    }];
+}
+
 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
     if ([object isKindOfClass:[UIPresentationController class]]) {
         UIPresentationController *presentationController = (UIPresentationController *)object;
@@ -468,10 +486,7 @@ static NSString *const DBDebugToolkitObserverPresentationControllerPropertyKeyPa
 #pragma mark - DBMenuTableViewControllerDelegate
 
 - (void)menuTableViewControllerDidTapClose:(DBMenuTableViewController *)menuTableViewController {
-    UIViewController *presentingViewController = self.menuViewController.navigationController.presentingViewController;
-    [presentingViewController dismissViewControllerAnimated:YES completion:^{
-        self.showsMenu = NO;
-    }];
+    [self closeMenu];
 }
 
 #pragma mark - DBPerformanceWidgetViewDelegate 

+ 14 - 4
Pods/DBDebugToolkit/DBDebugToolkit/Classes/Device/DBDeviceInfoProvider.m

@@ -65,6 +65,12 @@
         return @"iPhone 8 Plus";
     } else if ([deviceModelCode isEqualToString:@"iPhone10,3"] || [deviceModelCode isEqualToString:@"iPhone10,6"]) {
         return @"iPhone X";
+    } else if ([deviceModelCode isEqualToString:@"iPhone11,2"]) {
+        return @"iPhone XS";
+    } else if ([deviceModelCode isEqualToString:@"iPhone11,4"] || [deviceModelCode isEqualToString:@"iPhone11,6"]) {
+        return @"iPhone XS Max";
+    } else if ([deviceModelCode isEqualToString:@"iPhone11,8"]) {
+        return @"iPhone XR";
     } else if ([deviceModelCode isEqualToString:@"iPad2,1"] || [deviceModelCode isEqualToString:@"iPad2,2"] || [deviceModelCode isEqualToString:@"iPad2,3"] || [deviceModelCode isEqualToString:@"iPad2,4"]) {
         return @"iPad 2";
     } else if ([deviceModelCode isEqualToString:@"iPad3,1"] || [deviceModelCode isEqualToString:@"iPad3,2"] || [deviceModelCode isEqualToString:@"iPad3,3"]) {
@@ -75,6 +81,10 @@
         return @"iPad Air";
     } else if ([deviceModelCode isEqualToString:@"iPad5,3"] || [deviceModelCode isEqualToString:@"iPad5,4"]) {
         return @"iPad Air 2";
+    } else if ([deviceModelCode isEqualToString:@"iPad6,11"] || [deviceModelCode isEqualToString:@"iPad6,12"] || [deviceModelCode isEqualToString:@"iPad3,3"]) {
+        return @"iPad 5";
+    } else if ([deviceModelCode isEqualToString:@"iPad7,5"] || [deviceModelCode isEqualToString:@"iPad7,6"] || [deviceModelCode isEqualToString:@"iPad3,6"]) {
+        return @"iPad 6";
     } else if ([deviceModelCode isEqualToString:@"iPad2,5"] || [deviceModelCode isEqualToString:@"iPad2,6"] || [deviceModelCode isEqualToString:@"iPad2,7"]) {
         return @"iPad Mini";
     } else if ([deviceModelCode isEqualToString:@"iPad4,4"] || [deviceModelCode isEqualToString:@"iPad4,5"] || [deviceModelCode isEqualToString:@"iPad4,6"]) {
@@ -91,6 +101,10 @@
         return @"iPad Pro (12.9-inch) 2";
     } else if ([deviceModelCode isEqualToString:@"iPad7,3"] || [deviceModelCode isEqualToString:@"iPad7,4"]) {
         return @"iPad Pro (10.5-inch)";
+    } else if ([deviceModelCode isEqualToString:@"iPad8,1"] || [deviceModelCode isEqualToString:@"iPad8,2"] || [deviceModelCode isEqualToString:@"iPad8,3"] || [deviceModelCode isEqualToString:@"iPad8,4"]) {
+        return @"iPad Pro (11-inch)";
+    } else if ([deviceModelCode isEqualToString:@"iPad8,5"] || [deviceModelCode isEqualToString:@"iPad8,6"] || [deviceModelCode isEqualToString:@"iPad8,7"] || [deviceModelCode isEqualToString:@"iPad8,8"]) {
+        return @"iPad Pro (12.9-inch) 3";
     } else if ([deviceModelCode isEqualToString:@"i386"] || [deviceModelCode isEqualToString:@"x86_64"]) {
         return @"Simulator";
     } else {
@@ -98,10 +112,6 @@
     }
 }
 
-//iPhone10,1", "iPhone10,4"],                  4.7,  (9, 16),  "iPhone 8", 326, False, False),
-//Device("iPhone8Plus",     "Device is an [iPhone 8 Plus](https://support.apple.com/kb/SP768)",               "https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP768/iphone8plus.png",                          ["iPhone10,2", "iPhone10,5"],                  5.5,  (9, 16),  "iPhone 8 Plus", 401, True, False),
-//Device("iPhoneX",         "Device is an [iPhone X](https://support.apple.com/kb/SP770)",                    "https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP770/iphonex.png",                              ["iPhone10,3", "iPhone10,6"],                  5.8,  (9, 19.5),  "iPhone X", 458, False, False)
-
 - (NSString *)systemVersion {
     UIDevice *device = [UIDevice currentDevice];
     return [NSString stringWithFormat:@"%@ %@", [device systemName], [device systemVersion]];

+ 21 - 5
Pods/DBDebugToolkit/DBDebugToolkit/Classes/Network/DBBodyPreviewViewController.m

@@ -53,13 +53,29 @@ typedef NS_ENUM(NSUInteger, DBBodyPreviewViewControllerViewState) {
         } else {
             NSString *dataString;
             if (bodyType == DBRequestModelBodyTypeJSON) {
-                NSJSONSerialization *jsonSerialization = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
-                data = [NSJSONSerialization dataWithJSONObject:jsonSerialization options:NSJSONWritingPrettyPrinted error:nil];
-                dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
-                dataString = [dataString stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"];
+                NSError *error;
+                NSJSONSerialization *jsonSerialization = [NSJSONSerialization JSONObjectWithData:data ?: [NSData data]
+                                                                                         options:NSJSONReadingAllowFragments
+                                                                                           error:&error];
+                if (error) {
+                    dataString = @"Unable to read the data.";
+                } else {
+                    data = [NSJSONSerialization dataWithJSONObject:jsonSerialization options:NSJSONWritingPrettyPrinted error:nil];
+                    dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
+                    dataString = [dataString stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"];
+                }
             } else {
                 NSString *UTF8DecodedString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
-                dataString = UTF8DecodedString ?: [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
+                if (UTF8DecodedString == nil) {
+                    NSMutableString *mutableDataString = [NSMutableString stringWithCapacity:data.length * 2];
+                    const unsigned char *dataBytes = [data bytes];
+                    for (NSInteger index = 0; index < data.length; index++) {
+                        [mutableDataString appendFormat:@"%02x", dataBytes[index]];
+                    }
+                    dataString = [mutableDataString copy];
+                } else {
+                    dataString = UTF8DecodedString;
+                }
             }
             self.textView.text = dataString;
             [self setViewState:DBBodyPreviewViewControllerViewStateShowingText animated:YES];

+ 2 - 2
Pods/DBDebugToolkit/DBDebugToolkit/Classes/Network/DBNetworkToolkit.m

@@ -78,8 +78,8 @@
 
 - (void)resetLoggedData {
     [self.operationQueue addOperationWithBlock:^{
-        _requests = [NSMutableArray array];
-        _runningRequestsModels = [NSMapTable strongToWeakObjectsMapTable];
+        self->_requests = [NSMutableArray array];
+        self->_runningRequestsModels = [NSMapTable strongToWeakObjectsMapTable];
         [self removeOldSavedRequests];
     }];
 }

+ 1 - 0
Pods/DBDebugToolkit/DBDebugToolkit/Classes/Network/URLProtocol/DBURLProtocol.m

@@ -90,6 +90,7 @@ static NSString *const DBURLProtocolHandledKey = @"DBURLProtocolHandled";
         }
         
         [self.client URLProtocolDidFinishLoading:self];
+        [self.urlSession finishTasksAndInvalidate];
     }] resume];
 }
 

+ 12 - 0
Pods/DBDebugToolkit/DBDebugToolkit/Classes/Resources/Files/DBFilesTableViewController.m

@@ -144,6 +144,18 @@ static const NSInteger DBFilesTableViewControllerNextSizeAbbreviationThreshold =
         filesTableViewController.path = [self.path stringByAppendingPathComponent:subdirectoryName];
         filesTableViewController.title = subdirectoryName;
         [self.navigationController pushViewController:filesTableViewController animated:YES];
+    } else {
+        NSString *filePath = [self.path stringByAppendingPathComponent:self.files[indexPath.row]];
+        NSURL *fileURL = [NSURL fileURLWithPath:filePath];
+        UIActivityViewController *activity = [[UIActivityViewController alloc]
+                                              initWithActivityItems:@[fileURL]
+                                              applicationActivities:nil];
+        UIPopoverPresentationController *popover = activity.popoverPresentationController;
+        if (popover) {
+            popover.sourceView = tableView;
+            popover.permittedArrowDirections = UIPopoverArrowDirectionUp;
+        }
+        [self presentViewController:activity animated:YES completion:nil];
     }
 }
 

+ 1 - 1
Pods/DBDebugToolkit/DBDebugToolkit/Classes/UserInterface/Categories/UIView+DBUserInterfaceToolkit.m

@@ -112,7 +112,7 @@ static NSString *const UIViewDebugBorderColorKey = @"DBDebugToolkit_debugBorderC
                                                                          }];
         __block IMP originalInitWithFrameIMP = [self replaceMethodWithSelector:@selector(initWithFrame:)
                                                                          block:^UIView * (UIView *blockSelf, CGRect frame) {
-                                                                             UIView *res = ((UIView * (*)(id, SEL, CGRect))originalInitWithFrameIMP)(blockSelf, @selector(initWithCoder:), frame);
+                                                                             UIView *res = ((UIView * (*)(id, SEL, CGRect))originalInitWithFrameIMP)(blockSelf, @selector(initWithFrame:), frame);
                                                                              [res db_refreshDebugBorders];
                                                                              [res db_registerForNotifications];
                                                                              return res;

+ 61 - 28
Pods/DBDebugToolkit/DBDebugToolkit/Resources/DBMenuTableViewController.storyboard

@@ -1,9 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15702" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="YH8-ay-XNT">
-    <device id="retina4_7" orientation="portrait" appearance="light"/>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12118" systemVersion="16E195" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="YH8-ay-XNT">
+    <device id="retina4_7" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15704"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12086"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <scenes>
@@ -22,11 +24,11 @@
                                         <rect key="frame" x="0.0" y="55.5" width="375" height="44"/>
                                         <autoresizingMask key="autoresizingMask"/>
                                         <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="LVj-2U-zJY" id="2Qh-Yc-Wqe">
-                                            <rect key="frame" x="0.0" y="0.0" width="348" height="44"/>
+                                            <rect key="frame" x="0.0" y="0.0" width="342" height="43.5"/>
                                             <autoresizingMask key="autoresizingMask"/>
                                             <subviews>
                                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Performance" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="az9-7O-9y6">
-                                                    <rect key="frame" x="16" y="12" width="99" height="20.5"/>
+                                                    <rect key="frame" x="16" y="11.5" width="99" height="20.5"/>
                                                     <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                     <nil key="textColor"/>
                                                     <nil key="highlightedColor"/>
@@ -45,11 +47,11 @@
                                         <rect key="frame" x="0.0" y="99.5" width="375" height="44"/>
                                         <autoresizingMask key="autoresizingMask"/>
                                         <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="CeB-Sm-S8m" id="rbl-F8-l3r">
-                                            <rect key="frame" x="0.0" y="0.0" width="348" height="44"/>
+                                            <rect key="frame" x="0.0" y="0.0" width="342" height="43.5"/>
                                             <autoresizingMask key="autoresizingMask"/>
                                             <subviews>
                                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="User interface" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gsn-dd-NDH">
-                                                    <rect key="frame" x="16" y="12" width="108.5" height="20.5"/>
+                                                    <rect key="frame" x="16" y="11.5" width="108.5" height="20.5"/>
                                                     <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                     <nil key="textColor"/>
                                                     <nil key="highlightedColor"/>
@@ -64,15 +66,38 @@
                                             <segue destination="Ff5-h1-bTB" kind="show" id="GIa-89-VuV"/>
                                         </connections>
                                     </tableViewCell>
-                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" id="JCd-6h-D0G">
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" id="efO-M4-a4J">
                                         <rect key="frame" x="0.0" y="143.5" width="375" height="44"/>
                                         <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="efO-M4-a4J" id="DSj-d4-ri9">
+                                            <rect key="frame" x="0.0" y="0.0" width="342" height="43.5"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Network" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3Ve-Nt-Prd">
+                                                    <rect key="frame" x="16" y="11.5" width="64.5" height="20.5"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="3Ve-Nt-Prd" firstAttribute="leading" secondItem="DSj-d4-ri9" secondAttribute="leading" constant="16" id="g8i-8Q-mDV"/>
+                                                <constraint firstItem="3Ve-Nt-Prd" firstAttribute="centerY" secondItem="DSj-d4-ri9" secondAttribute="centerY" id="hoc-ea-yDN"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                        <connections>
+                                            <segue destination="Oe2-8I-MkJ" kind="show" id="B2n-uu-ahF"/>
+                                        </connections>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" id="JCd-6h-D0G">
+                                        <rect key="frame" x="0.0" y="187.5" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
                                         <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="JCd-6h-D0G" id="esV-Ml-JmM">
-                                            <rect key="frame" x="0.0" y="0.0" width="348" height="44"/>
+                                            <rect key="frame" x="0.0" y="0.0" width="342" height="43.5"/>
                                             <autoresizingMask key="autoresizingMask"/>
                                             <subviews>
                                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Resources" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Bia-Hv-0xy">
-                                                    <rect key="frame" x="16" y="12" width="80.5" height="20.5"/>
+                                                    <rect key="frame" x="16" y="11.5" width="80.5" height="20.5"/>
                                                     <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                     <nil key="textColor"/>
                                                     <nil key="highlightedColor"/>
@@ -88,14 +113,14 @@
                                         </connections>
                                     </tableViewCell>
                                     <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" id="W7D-hp-1bf">
-                                        <rect key="frame" x="0.0" y="187.5" width="375" height="44"/>
+                                        <rect key="frame" x="0.0" y="231.5" width="375" height="44"/>
                                         <autoresizingMask key="autoresizingMask"/>
                                         <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="W7D-hp-1bf" id="9lB-9s-sCz">
-                                            <rect key="frame" x="0.0" y="0.0" width="348" height="44"/>
+                                            <rect key="frame" x="0.0" y="0.0" width="342" height="43.5"/>
                                             <autoresizingMask key="autoresizingMask"/>
                                             <subviews>
                                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Console" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eLi-gK-CBQ">
-                                                    <rect key="frame" x="16" y="12" width="62.5" height="20.5"/>
+                                                    <rect key="frame" x="16" y="11.5" width="62.5" height="20.5"/>
                                                     <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                     <nil key="textColor"/>
                                                     <nil key="highlightedColor"/>
@@ -111,14 +136,14 @@
                                         </connections>
                                     </tableViewCell>
                                     <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" id="sch-dv-xwT">
-                                        <rect key="frame" x="0.0" y="231.5" width="375" height="44"/>
+                                        <rect key="frame" x="0.0" y="275.5" width="375" height="44"/>
                                         <autoresizingMask key="autoresizingMask"/>
                                         <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="sch-dv-xwT" id="edz-Pe-aGN">
-                                            <rect key="frame" x="0.0" y="0.0" width="348" height="44"/>
+                                            <rect key="frame" x="0.0" y="0.0" width="342" height="43.5"/>
                                             <autoresizingMask key="autoresizingMask"/>
                                             <subviews>
                                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Location" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EvS-5r-rYi">
-                                                    <rect key="frame" x="16" y="12" width="65.5" height="20.5"/>
+                                                    <rect key="frame" x="16" y="11.5" width="65.5" height="20.5"/>
                                                     <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                     <nil key="textColor"/>
                                                     <nil key="highlightedColor"/>
@@ -134,14 +159,14 @@
                                         </connections>
                                     </tableViewCell>
                                     <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" id="xbm-mo-ZSW">
-                                        <rect key="frame" x="0.0" y="275.5" width="375" height="44"/>
+                                        <rect key="frame" x="0.0" y="319.5" width="375" height="44"/>
                                         <autoresizingMask key="autoresizingMask"/>
                                         <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="xbm-mo-ZSW" id="eM0-xh-pf6">
-                                            <rect key="frame" x="0.0" y="0.0" width="348" height="44"/>
+                                            <rect key="frame" x="0.0" y="0.0" width="342" height="43.5"/>
                                             <autoresizingMask key="autoresizingMask"/>
                                             <subviews>
                                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Crash reports" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vaw-mf-aZR">
-                                                    <rect key="frame" x="16" y="12" width="105" height="20.5"/>
+                                                    <rect key="frame" x="16" y="11.5" width="105" height="20.5"/>
                                                     <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                     <nil key="textColor"/>
                                                     <nil key="highlightedColor"/>
@@ -157,14 +182,14 @@
                                         </connections>
                                     </tableViewCell>
                                     <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" id="mVB-EQ-po0">
-                                        <rect key="frame" x="0.0" y="319.5" width="375" height="44"/>
+                                        <rect key="frame" x="0.0" y="363.5" width="375" height="44"/>
                                         <autoresizingMask key="autoresizingMask"/>
                                         <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="mVB-EQ-po0" id="T0i-FB-ch2">
-                                            <rect key="frame" x="0.0" y="0.0" width="348" height="44"/>
+                                            <rect key="frame" x="0.0" y="0.0" width="342" height="43.5"/>
                                             <autoresizingMask key="autoresizingMask"/>
                                             <subviews>
                                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Custom variables" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qad-2H-GTH">
-                                                    <rect key="frame" x="16" y="12" width="132" height="20.5"/>
+                                                    <rect key="frame" x="16" y="11.5" width="132.5" height="20.5"/>
                                                     <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                     <nil key="textColor"/>
                                                     <nil key="highlightedColor"/>
@@ -180,14 +205,14 @@
                                         </connections>
                                     </tableViewCell>
                                     <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" id="0Cf-k3-PSB">
-                                        <rect key="frame" x="0.0" y="363.5" width="375" height="44"/>
+                                        <rect key="frame" x="0.0" y="407.5" width="375" height="44"/>
                                         <autoresizingMask key="autoresizingMask"/>
                                         <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="0Cf-k3-PSB" id="ho0-1C-i0m">
-                                            <rect key="frame" x="0.0" y="0.0" width="348" height="44"/>
+                                            <rect key="frame" x="0.0" y="0.0" width="342" height="43.5"/>
                                             <autoresizingMask key="autoresizingMask"/>
                                             <subviews>
                                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Custom actions" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Pvt-bQ-WpB">
-                                                    <rect key="frame" x="16" y="12" width="119.5" height="20.5"/>
+                                                    <rect key="frame" x="16" y="11.5" width="119.5" height="20.5"/>
                                                     <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                     <nil key="textColor"/>
                                                     <nil key="highlightedColor"/>
@@ -203,14 +228,14 @@
                                         </connections>
                                     </tableViewCell>
                                     <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="mm4-o7-8tn">
-                                        <rect key="frame" x="0.0" y="407.5" width="375" height="44"/>
+                                        <rect key="frame" x="0.0" y="451.5" width="375" height="44"/>
                                         <autoresizingMask key="autoresizingMask"/>
                                         <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="mm4-o7-8tn" id="SaJ-UP-1oU">
-                                            <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                             <autoresizingMask key="autoresizingMask"/>
                                             <subviews>
                                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Application settings" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZtY-hU-Q6a">
-                                                    <rect key="frame" x="16" y="12" width="151.5" height="20.5"/>
+                                                    <rect key="frame" x="16" y="11.5" width="151.5" height="20.5"/>
                                                     <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                     <nil key="textColor"/>
                                                     <nil key="highlightedColor"/>
@@ -243,6 +268,14 @@
             </objects>
             <point key="canvasLocation" x="57" y="-68"/>
         </scene>
+        <!--DBNetworkViewController-->
+        <scene sceneID="6Ce-No-Vq8">
+            <objects>
+                <viewControllerPlaceholder storyboardName="DBNetworkViewController" id="Oe2-8I-MkJ" sceneMemberID="viewController"/>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="3jV-E3-QRl" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="655" y="-163"/>
+        </scene>
         <!--DBPerformanceTableViewController-->
         <scene sceneID="0nB-bx-c9m">
             <objects>

+ 5 - 2
Pods/DBDebugToolkit/DBDebugToolkit/Resources/DBNetworkViewController.storyboard

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15702" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="cJS-nu-gIj">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="cJS-nu-gIj">
     <device id="retina4_7" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15704"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15510"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <scenes>
@@ -31,6 +31,9 @@
                                     <constraint firstAttribute="height" constant="44" id="V8R-cW-2sz"/>
                                 </constraints>
                                 <textInputTraits key="textInputTraits"/>
+                                <connections>
+                                    <outlet property="delegate" destination="cJS-nu-gIj" id="21L-hP-sXl"/>
+                                </connections>
                             </searchBar>
                             <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="f48-Qm-HRd">
                                 <rect key="frame" x="0.0" y="44" width="375" height="579"/>

+ 4 - 3
Pods/DBDebugToolkit/README.md

@@ -5,7 +5,6 @@
 [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
 [![License](https://img.shields.io/cocoapods/l/DBDebugToolkit.svg?style=flat)](http://cocoapods.org/pods/DBDebugToolkit)
 [![Platform](https://img.shields.io/cocoapods/p/DBDebugToolkit.svg?style=flat)](http://cocoapods.org/pods/DBDebugToolkit)
-[![Twitter: @darekbukowski](https://img.shields.io/badge/contact-@darekbukowski-blue.svg?style=flat)](https://twitter.com/darekbukowski)
 
 DBDebugToolkit is a debugging library written in Objective-C. It is meant to provide as many easily accessible tools as possible while keeping the integration process seamless.
 
@@ -191,13 +190,15 @@ The setup with a separate target for App Store releases will help you prevent se
 
 To integrate DBDebugToolkit into your Xcode project using Carthage, specify it in your Cartfile:
 ```ruby
-github "dbukowski/DBDebugToolkit" ~> 0.5.0
+github "dbukowski/DBDebugToolkit" ~> 0.6.0
 ```
 Run carthage update to build the framework and drag the built DBDebugToolkit.framework into your Xcode project.
 
 ## Author
 
-Dariusz Bukowski, dariusz.m.bukowski@gmail.com
+Maintained by Marian Sobczyk, marian.sobczyk@gmail.com
+
+Created by Dariusz Bukowski, dariusz.m.bukowski@gmail.com
 
 ## License
 

+ 12 - 16
Pods/Manifest.lock

@@ -1,17 +1,16 @@
 PODS:
-  - DBDebugToolkit (0.5.0)
+  - DBDebugToolkit (0.6.0)
   - InputBarAccessoryView (4.3.1):
     - InputBarAccessoryView/Core (= 4.3.1)
   - InputBarAccessoryView/Core (4.3.1)
   - ReachabilitySwift (4.3.1)
   - SCSiriWaveformView (1.1.1)
-  - SDWebImage (5.9.1):
-    - SDWebImage/Core (= 5.9.1)
-  - SDWebImage/Core (5.9.1)
+  - SDWebImage (5.9.5):
+    - SDWebImage/Core (= 5.9.5)
+  - SDWebImage/Core (5.9.5)
   - SwiftFormat/CLI (0.40.9)
-  - SwiftLint (0.32.0)
-  - SwiftyBeaver (1.7.0)
-  - UICircularProgressRing (6.2.0)
+  - SwiftLint (0.43.1)
+  - SwiftyBeaver (1.9.4)
 
 DEPENDENCIES:
   - DBDebugToolkit
@@ -22,7 +21,6 @@ DEPENDENCIES:
   - SwiftFormat/CLI
   - SwiftLint
   - SwiftyBeaver
-  - UICircularProgressRing
 
 SPEC REPOS:
   trunk:
@@ -34,19 +32,17 @@ SPEC REPOS:
     - SwiftFormat
     - SwiftLint
     - SwiftyBeaver
-    - UICircularProgressRing
 
 SPEC CHECKSUMS:
-  DBDebugToolkit: c04bb6f618051d3de447a4b4323f37826116cfed
+  DBDebugToolkit: 03eb3483da4daf03b853b83ade5a8da9c8b7aff4
   InputBarAccessoryView: 58a348be7ea2736c7eec60e5c315511c2dbb39fd
   ReachabilitySwift: 4032e2f59586e11e3b0ebe15b167abdd587a388b
   SCSiriWaveformView: 15b9dd6f94c7536e2032b34a35c6ff74d38c7411
-  SDWebImage: a990c053fff71e388a10f3357edb0be17929c9c5
+  SDWebImage: 0b2ba0d56479bf6a45ecddbfd5558bea93150d25
   SwiftFormat: 6b67b6e7fe73d664f0cbb4f13721f130462c86a5
-  SwiftLint: 009a898ef2a1c851f45e1b59349bf6ff2ddc990d
-  SwiftyBeaver: 4cc0080d2e23f980652e28978db11a5c9da39165
-  UICircularProgressRing: 0ff679b05a17f15ad6301a7886686837b8c301a9
+  SwiftLint: 99f82d07b837b942dd563c668de129a03fc3fb52
+  SwiftyBeaver: 576177b2c5c94b3aedd5993914e91271a0524e88
 
-PODFILE CHECKSUM: 2588d4e56923eb871c0395db08c2ee0058acfefa
+PODFILE CHECKSUM: aaa44e7abceaef2d4ae15d9cb45fc87e03f85e0f
 
-COCOAPODS: 1.9.3
+COCOAPODS: 1.10.1

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1588 - 1706
Pods/Pods.xcodeproj/project.pbxproj


+ 2 - 2
Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m

@@ -126,7 +126,7 @@ static CGFloat SDImageScaleFromPath(NSString *string) {
     }
     data = [data copy]; // avoid mutable data
     id<SDAnimatedImageCoder> animatedCoder = nil;
-    for (id<SDImageCoder>coder in [SDImageCodersManager sharedManager].coders) {
+    for (id<SDImageCoder>coder in [SDImageCodersManager sharedManager].coders.reverseObjectEnumerator) {
         if ([coder conformsToProtocol:@protocol(SDAnimatedImageCoder)]) {
             if ([coder canDecodeFromData:data]) {
                 if (!options) {
@@ -207,7 +207,7 @@ static CGFloat SDImageScaleFromPath(NSString *string) {
         }
         CGFloat scale = self.scale;
         id<SDAnimatedImageCoder> animatedCoder = nil;
-        for (id<SDImageCoder>coder in [SDImageCodersManager sharedManager].coders) {
+        for (id<SDImageCoder>coder in [SDImageCodersManager sharedManager].coders.reverseObjectEnumerator) {
             if ([coder conformsToProtocol:@protocol(SDAnimatedImageCoder)]) {
                 if ([coder canDecodeFromData:animatedImageData]) {
                     animatedCoder = [[[coder class] alloc] initWithAnimatedImageData:animatedImageData options:@{SDImageCoderDecodeScaleFactor : @(scale)}];

+ 10 - 9
Pods/SDWebImage/SDWebImage/Core/SDAnimatedImagePlayer.m

@@ -160,14 +160,14 @@
     }
 }
 
-- (void)resetCurrentFrameIndex {
-    self.currentFrame = nil;
-    self.currentFrameIndex = 0;
-    self.currentLoopCount = 0;
-    self.currentTime = 0;
-    self.bufferMiss = NO;
-    self.needsDisplayWhenImageBecomesAvailable = NO;
-    [self handleFrameChange];
+- (void)resetCurrentFrameStatus {
+    // These should not trigger KVO, user don't need to receive an `index == 0, image == nil` callback.
+    _currentFrame = nil;
+    _currentFrameIndex = 0;
+    _currentLoopCount = 0;
+    _currentTime = 0;
+    _bufferMiss = NO;
+    _needsDisplayWhenImageBecomesAvailable = NO;
 }
 
 - (void)clearFrameBuffer {
@@ -191,7 +191,8 @@
     [_fetchQueue cancelAllOperations];
     // Using `_displayLink` here because when UIImageView dealloc, it may trigger `[self stopAnimating]`, we already release the display link in SDAnimatedImageView's dealloc method.
     [_displayLink stop];
-    [self resetCurrentFrameIndex];
+    // We need to reset the frame status, but not trigger any handle. This can ensure next time's playing status correct.
+    [self resetCurrentFrameStatus];
 }
 
 - (void)pausePlaying {

+ 2 - 2
Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.h

@@ -14,7 +14,7 @@
 
 /**
  A drop-in replacement for UIImageView/NSImageView, you can use this for animated image rendering.
- Call `setImage:` with `UIImage(NSImage)` which conform to `SDAnimatedImage` protocol will start animated image rendering. Call with normal UIImage(NSImage) will back to normal UIImageView(NSImageView) rendering
+ Call `setImage:` with `UIImage(NSImage)` which conforms to `SDAnimatedImage` protocol will start animated image rendering. Call with normal UIImage(NSImage) will back to normal UIImageView(NSImageView) rendering
  For UIKit: use `-startAnimating`, `-stopAnimating` to control animating. `isAnimating` to check animation state.
  For AppKit: use `-setAnimates:` to control animating, `animates` to check animation state. This view is layer-backed.
  */
@@ -82,7 +82,7 @@
 @property (nonatomic, assign) BOOL resetFrameIndexWhenStopped;
 
 /**
- If the image has more than one frame, set this value to `YES` will automatically
+ If the image which conforms to `SDAnimatedImage` protocol has more than one frame, set this value to `YES` will automatically
  play/stop the animation when the view become visible/invisible.
  Default is YES.
  */

+ 2 - 1
Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.m

@@ -402,7 +402,8 @@
 /// Check if it should be played
 - (void)checkPlay
 {
-    if (self.autoPlayAnimatedImage) {
+    // Only handle for SDAnimatedImage, leave UIAnimatedImage or animationImages for super implementation control
+    if (self.player && self.autoPlayAnimatedImage) {
         [self updateShouldAnimate];
         if (self.shouldAnimate) {
             [self startAnimating];

+ 6 - 1
Pods/SDWebImage/SDWebImage/Core/SDImageCache.m

@@ -532,9 +532,14 @@ static NSString * _defaultDiskCacheDirectory;
                 // the image is from in-memory cache, but need image data
                 diskImage = image;
             } else if (diskData) {
+                BOOL shouldCacheToMomery = YES;
+                if (context[SDWebImageContextStoreCacheType]) {
+                    SDImageCacheType cacheType = [context[SDWebImageContextStoreCacheType] integerValue];
+                    shouldCacheToMomery = (cacheType == SDImageCacheTypeAll || cacheType == SDImageCacheTypeMemory);
+                }
                 // decode image data only if in-memory cache missed
                 diskImage = [self diskImageForKey:key data:diskData options:options context:context];
-                if (diskImage && self.config.shouldCacheImagesInMemory) {
+                if (shouldCacheToMomery && diskImage && self.config.shouldCacheImagesInMemory) {
                     NSUInteger cost = diskImage.sd_memoryCost;
                     [self.memoryCache setObject:diskImage forKey:key cost:cost];
                 }

+ 7 - 0
Pods/SDWebImage/SDWebImage/Core/SDWebImageTransition.m

@@ -89,6 +89,7 @@ CATransition * SDTransitionFromAnimationOptions(SDWebImageAnimationOptions optio
 
 + (SDWebImageTransition *)fadeTransitionWithDuration:(NSTimeInterval)duration {
     SDWebImageTransition *transition = [SDWebImageTransition new];
+    transition.duration = duration;
 #if SD_UIKIT
     transition.animationOptions = UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowUserInteraction;
 #else
@@ -103,6 +104,7 @@ CATransition * SDTransitionFromAnimationOptions(SDWebImageAnimationOptions optio
 
 + (SDWebImageTransition *)flipFromLeftTransitionWithDuration:(NSTimeInterval)duration {
     SDWebImageTransition *transition = [SDWebImageTransition new];
+    transition.duration = duration;
 #if SD_UIKIT
     transition.animationOptions = UIViewAnimationOptionTransitionFlipFromLeft | UIViewAnimationOptionAllowUserInteraction;
 #else
@@ -117,6 +119,7 @@ CATransition * SDTransitionFromAnimationOptions(SDWebImageAnimationOptions optio
 
 + (SDWebImageTransition *)flipFromRightTransitionWithDuration:(NSTimeInterval)duration {
     SDWebImageTransition *transition = [SDWebImageTransition new];
+    transition.duration = duration;
 #if SD_UIKIT
     transition.animationOptions = UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionAllowUserInteraction;
 #else
@@ -131,6 +134,7 @@ CATransition * SDTransitionFromAnimationOptions(SDWebImageAnimationOptions optio
 
 + (SDWebImageTransition *)flipFromTopTransitionWithDuration:(NSTimeInterval)duration {
     SDWebImageTransition *transition = [SDWebImageTransition new];
+    transition.duration = duration;
 #if SD_UIKIT
     transition.animationOptions = UIViewAnimationOptionTransitionFlipFromTop | UIViewAnimationOptionAllowUserInteraction;
 #else
@@ -145,6 +149,7 @@ CATransition * SDTransitionFromAnimationOptions(SDWebImageAnimationOptions optio
 
 + (SDWebImageTransition *)flipFromBottomTransitionWithDuration:(NSTimeInterval)duration {
     SDWebImageTransition *transition = [SDWebImageTransition new];
+    transition.duration = duration;
 #if SD_UIKIT
     transition.animationOptions = UIViewAnimationOptionTransitionFlipFromBottom | UIViewAnimationOptionAllowUserInteraction;
 #else
@@ -159,6 +164,7 @@ CATransition * SDTransitionFromAnimationOptions(SDWebImageAnimationOptions optio
 
 + (SDWebImageTransition *)curlUpTransitionWithDuration:(NSTimeInterval)duration {
     SDWebImageTransition *transition = [SDWebImageTransition new];
+    transition.duration = duration;
 #if SD_UIKIT
     transition.animationOptions = UIViewAnimationOptionTransitionCurlUp | UIViewAnimationOptionAllowUserInteraction;
 #else
@@ -173,6 +179,7 @@ CATransition * SDTransitionFromAnimationOptions(SDWebImageAnimationOptions optio
 
 + (SDWebImageTransition *)curlDownTransitionWithDuration:(NSTimeInterval)duration {
     SDWebImageTransition *transition = [SDWebImageTransition new];
+    transition.duration = duration;
 #if SD_UIKIT
     transition.animationOptions = UIViewAnimationOptionTransitionCurlDown | UIViewAnimationOptionAllowUserInteraction;
 #else

+ 8 - 6
Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.m

@@ -272,9 +272,11 @@ const int64_t SDWebImageProgressUnitCountUnknown = 1LL;
 #endif
     
     if (transition) {
+        NSString *originalOperationKey = view.sd_latestOperationKey;
+
 #if SD_UIKIT
         [UIView transitionWithView:view duration:0 options:0 animations:^{
-            if (!view.sd_latestOperationKey) {
+            if (!view.sd_latestOperationKey || ![originalOperationKey isEqualToString:view.sd_latestOperationKey]) {
                 return;
             }
             // 0 duration to let UIKit render placeholder and prepares block
@@ -283,7 +285,7 @@ const int64_t SDWebImageProgressUnitCountUnknown = 1LL;
             }
         } completion:^(BOOL finished) {
             [UIView transitionWithView:view duration:transition.duration options:transition.animationOptions animations:^{
-                if (!view.sd_latestOperationKey) {
+                if (!view.sd_latestOperationKey || ![originalOperationKey isEqualToString:view.sd_latestOperationKey]) {
                     return;
                 }
                 if (finalSetImageBlock && !transition.avoidAutoSetImage) {
@@ -293,7 +295,7 @@ const int64_t SDWebImageProgressUnitCountUnknown = 1LL;
                     transition.animations(view, image);
                 }
             } completion:^(BOOL finished) {
-                if (!view.sd_latestOperationKey) {
+                if (!view.sd_latestOperationKey || ![originalOperationKey isEqualToString:view.sd_latestOperationKey]) {
                     return;
                 }
                 if (transition.completion) {
@@ -303,7 +305,7 @@ const int64_t SDWebImageProgressUnitCountUnknown = 1LL;
         }];
 #elif SD_MAC
         [NSAnimationContext runAnimationGroup:^(NSAnimationContext * _Nonnull prepareContext) {
-            if (!view.sd_latestOperationKey) {
+            if (!view.sd_latestOperationKey || ![originalOperationKey isEqualToString:view.sd_latestOperationKey]) {
                 return;
             }
             // 0 duration to let AppKit render placeholder and prepares block
@@ -313,7 +315,7 @@ const int64_t SDWebImageProgressUnitCountUnknown = 1LL;
             }
         } completionHandler:^{
             [NSAnimationContext runAnimationGroup:^(NSAnimationContext * _Nonnull context) {
-                if (!view.sd_latestOperationKey) {
+                if (!view.sd_latestOperationKey || ![originalOperationKey isEqualToString:view.sd_latestOperationKey]) {
                     return;
                 }
                 context.duration = transition.duration;
@@ -337,7 +339,7 @@ const int64_t SDWebImageProgressUnitCountUnknown = 1LL;
                     transition.animations(view, image);
                 }
             } completionHandler:^{
-                if (!view.sd_latestOperationKey) {
+                if (!view.sd_latestOperationKey || ![originalOperationKey isEqualToString:view.sd_latestOperationKey]) {
                     return;
                 }
                 if (transition.completion) {

+ 1 - 1
Pods/SwiftLint/LICENSE

@@ -1,6 +1,6 @@
 The MIT License (MIT)
 
-Copyright (c) 2015 Realm Inc.
+Copyright (c) 2020 Realm Inc.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal

BIN
Pods/SwiftLint/swiftlint


+ 56 - 17
Pods/SwiftyBeaver/README.md

@@ -1,6 +1,6 @@
-<p align="center"><a href="https://swiftybeaver.com"><img src="https://cloud.githubusercontent.com/assets/564725/19889302/73b1ee84-a034-11e6-8753-2d060502397c.jpg" style="width: 888px;" alt="SwiftyBeaver"></a><br/><b>Colorful</b>, flexible, <b>lightweight</b> logging for Swift 3, Swift 4 & <b>Swift 5</b>.<br/>Great for <b>development & release</b> with support for Console, File & cloud platforms.<br/>Log <b>during release</b> to the conveniently built-in SwiftyBeaver Platform, the <b>dedicated Mac App</b> & <b>Elasticsearch</b>!<br/><br/><a href="http://docs.swiftybeaver.com">Docs</a> | <a href="https://swiftybeaver.com">Website</a> | <a href="https://slack.swiftybeaver.com">Slack</a> | <a href="https://twitter.com/SwiftyBeaver">Twitter</a> | <a href="https://github.com/SwiftyBeaver/SwiftyBeaver/blob/master/LICENSE">License</a><br/></p>
+<p align="center"><a href="https://swiftybeaver.com"><img src="https://cloud.githubusercontent.com/assets/564725/19889302/73b1ee84-a034-11e6-8753-2d060502397c.jpg" style="width: 888px;" alt="SwiftyBeaver"></a><br/><b>Colorful</b>, flexible, <b>lightweight</b> logging for Swift 3, Swift 4 & <b>Swift 5</b>.<br/>Great for <b>development & release</b> with support for Console, File & cloud platforms.<br/>Log <b>during release</b> to the conveniently built-in SwiftyBeaver Platform, the <b>dedicated Mac App</b> & <b>Elasticsearch</b>!<br/><br/><a href="http://docs.swiftybeaver.com">Docs</a> | <a href="https://swiftybeaver.com">Website</a> | <a href="https://twitter.com/SwiftyBeaver">Twitter</a> | <a href="#privacy">Privacy</a> | <a href="https://github.com/SwiftyBeaver/SwiftyBeaver/blob/master/LICENSE">License</a><br/></p>
 
-<p align="center"><a href="https://swift.org" target="_blank"><img src="https://img.shields.io/badge/Language-Swift%203,%204%20&%205-orange.svg" alt="Language Swift 2, 3, 4 & 5"></a> <a href="https://circleci.com/gh/SwiftyBeaver/SwiftyBeaver" target="_blank"><img src="https://circleci.com/gh/SwiftyBeaver/SwiftyBeaver/tree/master.svg?style=shield" alt="CircleCI"/></a> <a href="https://slack.swiftybeaver.com" target="_blank"><img src="https://img.shields.io/badge/Join-Our%20Slack%20Chat-blue.svg" alt="Slack Status"/></a><br/><p>
+<p align="center"><a href="https://swift.org" target="_blank"><img src="https://img.shields.io/badge/Language-Swift%203,%204%20&%205-orange.svg" alt="Language Swift 2, 3, 4 & 5"></a> <a href="https://circleci.com/gh/SwiftyBeaver/SwiftyBeaver" target="_blank"><img src="https://circleci.com/gh/SwiftyBeaver/SwiftyBeaver/tree/master.svg?style=shield" alt="CircleCI"/></a><br/><p>
 
 ----
 
@@ -41,11 +41,11 @@ Conveniently access your logs during development & release with our [free Mac Ap
 <br/>
 
 
-### On Release: Enterprise-ready Logging to Your Elasticsearch & Kibana (on-premise)
+### On Release: Enterprise-ready Logging to Your Private and Public Cloud
 
 <img src="https://user-images.githubusercontent.com/564725/34486363-dc501aec-efcf-11e7-92b2-1163cca9e7aa.jpg" width="700">
 
-[Learn more](http://docs.swiftybeaver.com/article/34-enterprise-quick-start-via-docker) about **legally compliant**, end-to-end encrypted logging to Elasticsearch with **SwiftyBeaver Enterprise**. Install via Docker or manual, fully-featured free trial included!
+[Learn more](https://swiftybeaver.com/enterprise.html) about **legally compliant**, end-to-end encrypted logging your own cloud with **SwiftyBeaver Enterprise**. Install via Docker or manual, fully-featured free trial included!
 
 <br/>
 
@@ -62,7 +62,8 @@ You can fully customize your log format, turn it into JSON, or create your own d
 
 ## Installation
 
-- For **Swift 3, 4 & 5** install the latest SwiftyBeaver version
+- For **Swift 4 & 5** install the latest SwiftyBeaver version
+- For **Swift 3** install SwiftyBeaver 1.8.4
 - For **Swift 2** install SwiftyBeaver 0.7.0
 
 <br/>
@@ -71,11 +72,17 @@ You can fully customize your log format, turn it into JSON, or create your own d
 
 You can use [Carthage](https://github.com/Carthage/Carthage) to install SwiftyBeaver by adding that to your Cartfile:
 
-Swift 3, 4 & 5:
+Swift 4 & 5:
 ``` Swift
 github "SwiftyBeaver/SwiftyBeaver"
 ```
 
+
+Swift 3:
+``` Swift
+github "SwiftyBeaver/SwiftyBeaver" ~> 1.8.4
+```
+
 Swift 2:
 ``` Swift
 github "SwiftyBeaver/SwiftyBeaver" ~> 0.7
@@ -85,25 +92,33 @@ github "SwiftyBeaver/SwiftyBeaver" ~> 0.7
 
 ### Swift Package Manager
 
-For [Swift Package Manager](https://swift.org/package-manager/) add the following package to your Package.swift file. Just Swift 3, 4 & 5 are supported:
+For [Swift Package Manager](https://swift.org/package-manager/) add the following package to your Package.swift file. Just Swift 4 & 5 are supported:
 
 ``` Swift
-.Package(url: "https://github.com/SwiftyBeaver/SwiftyBeaver.git", majorVersion: 1)
+.package(url: "https://github.com/SwiftyBeaver/SwiftyBeaver.git", .upToNextMajor(from: "1.9.0")),
 ```
 
 <br/>
 
 ### CocoaPods
 
-We plan to discontinue the support for CocoaPods due to its issues with latest Xcode and Swift versions latest at the end of 2018. Please use Carthage or SPM instead to stay on top of new SwiftyBeaver releases.
-
 To use [CocoaPods](https://cocoapods.org) just add this to your Podfile:
 
-Swift 3, 4 & 5:
+Swift 4 & 5:
 ``` Swift
 pod 'SwiftyBeaver'
 ```
 
+Swift 3:
+``` Ruby
+target 'MyProject' do
+  use_frameworks!
+
+  # Pods for MyProject
+  pod 'SwiftyBeaver', '~> 1.8.4'
+end
+```
+
 Swift 2:
 ``` Ruby
 target 'MyProject' do
@@ -134,7 +149,7 @@ let log = SwiftyBeaver.self
 
 ```
 
-At the the beginning of your `AppDelegate:didFinishLaunchingWithOptions()` add the SwiftyBeaver log destinations (console, file, etc.), optionally adjust the [log format](http://docs.swiftybeaver.com//article/20-custom-format) and then you can already do the following log level calls globally:
+At the the beginning of your `AppDelegate:didFinishLaunchingWithOptions()` add the SwiftyBeaver log destinations (console, file, etc.), optionally adjust the [log format](http://docs.swiftybeaver.com/article/20-custom-format) and then you can already do the following log level calls globally:
 
 ``` Swift
 // add log destinations. at least one is needed!
@@ -167,7 +182,7 @@ log.error(["name": "Mr Beaver", "address": "7 Beaver Lodge"])
 
 // optionally add context to a log message
 console.format = "$L: $M $X"
-log.debug("age", 123)  // "DEBUG: age 123"
+log.debug("age", context: 123)  // "DEBUG: age 123"
 log.info("my data", context: [1, "a", 2]) // "INFO: my data [1, \"a\", 2]"
 
 ```
@@ -177,11 +192,11 @@ log.info("my data", context: [1, "a", 2]) // "INFO: my data [1, \"a\", 2]"
 
 ## Server-side Swift
 
-We ❤️ server-side Swift 3, 4 & 5 and SwiftyBeaver supports it **out-of-the-box**! Try for yourself and run SwiftyBeaver inside a Ubuntu Docker container. Just install Docker and then go to your the project folder on macOS or Ubuntu and type:
+We ❤️ server-side Swift 4 & 5 and SwiftyBeaver supports it **out-of-the-box**! Try for yourself and run SwiftyBeaver inside a Ubuntu Docker container. Just install Docker and then go to your the project folder on macOS or Ubuntu and type:
 
 ```shell
 # create docker image, build SwiftyBeaver and run unit tests
-swift build --clean && docker build --rm -t swiftybeaver .
+docker run --rm -it -v $PWD:/app swiftybeaver /bin/bash -c "cd /app ; swift build ; swift test"
 
 # optionally log into container to run Swift CLI and do more stuff
 docker run --rm -it --privileged=true -v $PWD:/app swiftybeaver
@@ -216,13 +231,37 @@ Best: for the popular server-side Swift web framework [Vapor](https://github.com
 **Stay Informed:**
 
 - [Official Website](https://swiftybeaver.com)
-- [Medium Blog](https://medium.com/swiftybeaver-blog)
 - [On Twitter](https://twitter.com/SwiftyBeaver)
 
+<br/>
+<br/>
+
+## Privacy
+
+**SwiftyBeaver is not collecting any data without you as a developer knowing about it**. That's why it is **open-source** and developed in a simple way to be easy to inspect and check what it is actually doing under the hood.
+
+The only sending to servers is done if you use the `SBPlatformDestination`. That destination is meant for production logging and on default it sends your logs plus additional device information **end-to-end encrypted** to our cloud service. Our cloud service **can not decrypt the data**.
+
+Instead, you install our Mac App and that Mac App downloads the encrypted logs from the cloud and decrypts and shows them to you. Additionally, the Mac App stores all data that it downloads in a local SQLite database file on your computer so that you actually "physically" own your data.
+
+The business model of the SwiftyBeaver cloud service is to provide the most secure logging solution in the market. On purpose we do not provide a web UI for you because it would require us to store your encryption key on our servers.
+
+**Only you can see the logging and device data** which is sent from your users' devices. Our servers just see encrypted data and do not know your decryption key.
+
+SwiftyBeaver is **fully GDPR compliant** due to its focus on encryption and transparency in what data is collected and also meets **Apple’s latest requirements** on the privacy of 3rd party frameworks.
+
+Our Enterprise offering is an even more secure solution where you are not using anymore our cloud service and Mac App but you send your end-to-end encrypted logs directly to your own servers and you store them in your Elasticsearch cluster. The **Enterprise offering is used by health tech** and governmental institutions which require the highest level of privacy and security.
+
+<br/>
+<br/>
+
+## End-to-End Encryption
 
-More destination & system documentation is coming soon! <br/>Get support via Github Issues, email and <a href="https://slack.swiftybeaver.com">public Slack channel</a>.
+SwiftyBeaver is using symmetric AES256CBC encryption in the `SBPlatformDestination` destination. No other officially supported destination uses encryption. 
 
+The encryption used in the `SBPlatformDestination` destination is end-to-end. The open-source SwiftyBeaver logging framework symmetrically encrypts all logging data on your client's device inside your app (iPhone, iPad, ...) before it is sent to the SwiftyBeaver Crypto Cloud. The decryption is done on your Mac which has the SwiftyBeaver Mac App installed. All logging data stays encrypted in the SwiftyBeaver Crypto Cloud due to the lack of the password.
 
+You are using the encryption at your own risk. SwiftyBeaver’s authors and contributors do not take over any guarantee about the absence of potential security or cryptopgraphy issues, weaknesses, etc.; please also read the LICENSE file for details. Also if you are interested in cryptography in general, please have a look at the file AES256CBC.swift to learn more about the cryptographical implementation.
 <br/>
 <br/>
 

+ 42 - 118
Pods/SwiftyBeaver/Sources/AES256CBC.swift

@@ -8,32 +8,13 @@
 
 import Foundation
 
-/// cross-platform random numbers generator
-fileprivate struct Random {
-    #if os(Linux)
-    static var initialized = false
-    #endif
-
-    public static func generate(_ upperBound: Int) -> Int {
-        #if os(Linux)
-            if !Random.initialized {
-                srandom(UInt32(time(nil)))
-                Random.initialized = true
-            }
-            return Int(random() % upperBound)
-        #else
-            return Int(arc4random_uniform(UInt32(upperBound)))
-        #endif
-    }
-}
-
 final class AES256CBC {
 
     /// returns optional encrypted string via AES-256CBC
     /// automatically generates and puts a random IV at first 16 chars
     /// the password must be exactly 32 chars long for AES-256
     class func encryptString(_ str: String, password: String) -> String? {
-        if !str.isEmpty && password.length == 32 {
+        if !str.isEmpty && Data(password.utf8).count == 32 {
             let iv = randomText(16)
             let key = password
 
@@ -49,16 +30,12 @@ final class AES256CBC {
     /// returns optional decrypted string via AES-256CBC
     /// IV need to be at first 16 chars, password must be 32 chars long
     class func decryptString(_ str: String, password: String) -> String? {
-        if str.length > 16 && password.length == 32 {
+        if Data(str.utf8).count > 16 && Data(password.utf8).count == 32 {
             // get AES initialization vector from first 16 chars
-            #if swift(>=4.0)
-            let iv = String(str[..<str.index(str.startIndex, offsetBy: 16)])
-            #else
-            let iv = str.substring(to: str.index(str.startIndex, offsetBy: 16))
-            #endif
-
+            let iv = String(str.prefix(16))
             let encryptedString = str.replacingOccurrences(of: iv, with: "",
-                                                           options: String.CompareOptions.literal, range: nil) // remove IV
+                                      options: String.CompareOptions.literal,
+                                      range: nil) // remove IV
 
             guard let decryptedString = try? aesDecrypt(encryptedString, key: password, iv: iv) else {
                 print("an error occured while decrypting")
@@ -68,54 +45,17 @@ final class AES256CBC {
         }
         return nil
     }
-
+    
     /// returns random string (uppercase & lowercase, no spaces) of 32 characters length
-    /// which can be used as SHA-256 compatbile password
-    class func generatePassword() -> String {
-        return randomText(32)
-    }
-
-    /// returns random text of a defined length.
-    /// Optional bool parameter justLowerCase to just generate random lowercase text and
-    /// whitespace to exclude the whitespace character
-    class func randomText(_ length: Int, justLowerCase: Bool = false, whitespace: Bool = false) -> String {
-        var chars = [UInt8]()
-
-        while chars.count < length {
-            let char = CharType.random(justLowerCase, whitespace).randomCharacter()
-            if char == 32 && (chars.last ?? 0) == char {
-                // do not allow two consecutive spaces
-                continue
-            }
-            chars.append(char)
-        }
-        return String(bytes: chars, encoding: .ascii)!
-    }
-
-    /// Used for random text generation
-    fileprivate enum CharType: Int {
-        case LowerCase, UpperCase, Digit, Space
-
-        func randomCharacter() -> UInt8 {
-            switch self {
-            case .LowerCase:
-                return UInt8(Random.generate(26)) + 97
-            case .UpperCase:
-                return UInt8(Random.generate(26)) + 65
-            case .Digit:
-                return UInt8(Random.generate(10)) + 48
-            case .Space:
-                return 32
-            }
-        }
+     /// which can be used as SHA-256 compatbile password
+     class func generatePassword() -> String {
+         return randomText(32)
+     }
 
-        static func random(_ justLowerCase: Bool, _ allowWhitespace: Bool) -> CharType {
-            if justLowerCase {
-                return .LowerCase
-            } else {
-                return CharType(rawValue: Int(Random.generate(allowWhitespace ? 4 : 3)))!
-            }
-        }
+    /// returns random text of a defined length
+    public class func randomText(_ length: Int) -> String {
+        let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+        return String((0..<length).map { _ in letters.randomElement()!})
     }
 
     /// returns encrypted string, IV must be 16 chars long
@@ -125,35 +65,33 @@ final class AES256CBC {
         let data = str.data(using: String.Encoding.utf8)!
         #if swift(>=5)
         let enc = try Data(AESCipher(key: keyData.bytes,
-                                            iv: ivData.bytes).encrypt(bytes: data.bytes))
+                                     iv: ivData.bytes).encrypt(bytes: data.bytes))
         #else
         let enc = try Data(bytes: AESCipher(key: keyData.bytes,
                                             iv: ivData.bytes).encrypt(bytes: data.bytes))
         #endif
-        // Swift 3.1.x has a bug with base64encoding under Linux, so we are using our own
-        #if os(Linux)
-            return Base64.encode([UInt8](enc))
-        #else
-            return enc.base64EncodedString(options: [])
-        #endif
+        return enc.base64EncodedString(options: [])
     }
 
     /// returns decrypted string, IV must be 16 chars long
     fileprivate class func aesDecrypt(_ str: String, key: String, iv: String) throws -> String {
         let keyData = key.data(using: String.Encoding.utf8)!
         let ivData = iv.data(using: String.Encoding.utf8)!
-        let data = Data(base64Encoded: str)!
-        #if swift(>=5)
-        let dec = try Data(AESCipher(key: keyData.bytes,
-                                            iv: ivData.bytes).decrypt(bytes: data.bytes))
-        #else
-        let dec = try Data(bytes: AESCipher(key: keyData.bytes,
-                                            iv: ivData.bytes).decrypt(bytes: data.bytes))
-        #endif
-        guard let decryptStr = String(data: dec, encoding: String.Encoding.utf8) else {
-            throw NSError(domain: "Invalid utf8 data", code: 0, userInfo: nil)
+        if let data = Data(base64Encoded: str) {
+            #if swift(>=5)
+            let dec = try Data(AESCipher(key: keyData.bytes,
+                                         iv: ivData.bytes).decrypt(bytes: data.bytes))
+            #else
+            let dec = try Data(bytes: AESCipher(key: keyData.bytes,
+                                                iv: ivData.bytes).decrypt(bytes: data.bytes))
+            #endif
+            guard let decryptStr = String(data: dec, encoding: String.Encoding.utf8) else {
+                throw NSError(domain: "Invalid utf8 data", code: 0, userInfo: nil)
+            }
+            return decryptStr
+        } else {
+            return "error"
         }
-        return decryptStr
     }
 
 }
@@ -179,7 +117,7 @@ final class AES256CBC {
 
 // MARK: - AESCipher
 
-fileprivate typealias Key = Array<UInt8>
+private typealias Key = Array<UInt8>
 
 final private class AESCipher {
 
@@ -269,12 +207,6 @@ final private class AESCipher {
         self.iv = iv
     }
 
-    convenience init(key: [UInt8]) throws {
-        // default IV is all 0x00...
-        let defaultIV = [UInt8](repeating: 0, count: AESCipher.blockSize)
-        try self.init(key: key, iv: defaultIV)
-    }
-
     /**
      Encrypt message. If padding is necessary, then PKCS7 padding is added and needs to be removed after decryption.
 
@@ -668,16 +600,9 @@ private struct PKCS7 {
     func add(bytes: [UInt8], blockSize: Int) -> [UInt8] {
         let padding = UInt8(blockSize - (bytes.count % blockSize))
         var withPadding = bytes
-        if padding == 0 {
-            // If the original data is a multiple of N bytes, then an extra block of bytes with value N is added.
-            for _ in 0..<blockSize {
-                withPadding.append(contentsOf: [UInt8(blockSize)])
-            }
-        } else {
-            // The value of each added byte is the number of bytes that are added
-            for _ in 0..<padding {
-                withPadding.append(contentsOf: [UInt8(padding)])
-            }
+        // The value of each added byte is the number of bytes that are added
+        for _ in 0..<padding {
+            withPadding.append(contentsOf: [UInt8(padding)])
         }
         return withPadding
     }
@@ -700,7 +625,7 @@ private struct PKCS7 {
 
 // MARK: - Utils
 
-fileprivate func xor(_ a: Array<UInt8>, _ b: Array<UInt8>) -> Array<UInt8> {
+private func xor(_ a: Array<UInt8>, _ b: Array<UInt8>) -> Array<UInt8> {
     var xored = Array<UInt8>(repeating: 0, count: min(a.count, b.count))
     for i in 0..<xored.count {
         xored[i] = a[i] ^ b[i]
@@ -708,26 +633,26 @@ fileprivate func xor(_ a: Array<UInt8>, _ b: Array<UInt8>) -> Array<UInt8> {
     return xored
 }
 
-fileprivate func rotateLeft(_ value: UInt8, by: UInt8) -> UInt8 {
+private func rotateLeft(_ value: UInt8, by: UInt8) -> UInt8 {
     return ((value << by) & 0xFF) | (value >> (8 - by))
 }
 
-fileprivate func rotateLeft(_ value: UInt32, by: UInt32) -> UInt32 {
+private func rotateLeft(_ value: UInt32, by: UInt32) -> UInt32 {
     return ((value << by) & 0xFFFFFFFF) | (value >> (32 - by))
 }
 
-fileprivate protocol BitshiftOperationsType {
+private protocol BitshiftOperationsType {
     static func << (lhs: Self, rhs: Self) -> Self
 }
 
-fileprivate protocol ByteConvertible {
+private protocol ByteConvertible {
     init(_ value: UInt8)
     init(truncatingBitPattern: UInt64)
 }
 
 #if swift(>=4.0)
 #else
-    extension UInt32 : BitshiftOperationsType, ByteConvertible { }
+    extension UInt32: BitshiftOperationsType, ByteConvertible { }
 #endif
 
 fileprivate extension UInt32 {
@@ -740,7 +665,7 @@ fileprivate extension UInt32 {
     }
 }
 
-fileprivate func toUInt32Array(slice: ArraySlice<UInt8>) -> Array<UInt32> {
+private func toUInt32Array(slice: ArraySlice<UInt8>) -> Array<UInt32> {
     var result = Array<UInt32>()
     result.reserveCapacity(16)
     for idx in stride(from: slice.startIndex, to: slice.endIndex, by: MemoryLayout<UInt32>.size) {
@@ -757,7 +682,7 @@ fileprivate func toUInt32Array(slice: ArraySlice<UInt8>) -> Array<UInt32> {
 
 /// Array of bytes, little-endian representation. Don't use if not necessary.
 /// I found this method slow
-fileprivate func arrayOfBytes<T>(value: T, length: Int? = nil) -> Array<UInt8> {
+private func arrayOfBytes<T>(value: T, length: Int? = nil) -> Array<UInt8> {
     let totalBytes = length ?? MemoryLayout<T>.size
 
     let valuePointer = UnsafeMutablePointer<T>.allocate(capacity: 1)
@@ -854,4 +779,3 @@ fileprivate extension Data {
         return Array(self)
     }
 }
-

+ 42 - 112
Pods/SwiftyBeaver/Sources/BaseDestination.swift

@@ -85,7 +85,6 @@ open class BaseDestination: Hashable, Equatable {
 
     open var defaultHashValue: Int {return 0}
 
-
     // each destination instance must have an own serial queue to ensure serial output
     // GCD gives it a prioritization between User Initiated and Utility
     var queue: DispatchQueue? //dispatch_queue_t?
@@ -123,7 +122,7 @@ open class BaseDestination: Hashable, Equatable {
             queue.async(execute: block)
         }
     }
-    
+
     public func executeSynchronously<T>(block: @escaping () throws -> T) rethrows -> T {
         guard let queue = queue else {
             fatalError("Queue not set")
@@ -136,8 +135,7 @@ open class BaseDestination: Hashable, Equatable {
     ////////////////////////////////
 
     /// returns (padding length value, offset in string after padding info)
-    private func parsePadding(_ text: String) -> (Int, Int)
-    {
+    private func parsePadding(_ text: String) -> (Int, Int) {
         // look for digits followed by a alpha character
         var s: String!
         var sign: Int = 1
@@ -147,14 +145,14 @@ open class BaseDestination: Hashable, Equatable {
         } else {
             s = text
         }
-        let numStr = s.prefix { $0 >= "0" && $0 <= "9" }
-        if let num = Int(String(numStr)) {
+        let numStr = String(s.prefix { $0 >= "0" && $0 <= "9" })
+        if let num = Int(numStr) {
             return (sign * num, (sign == -1 ? 1 : 0) + numStr.count)
         } else {
             return (0, 0)
         }
     }
-    
+
     private func paddedString(_ text: String, _ toLength: Int, truncating: Bool = false) -> String {
         if toLength > 0 {
             // Pad to the left of the string
@@ -172,7 +170,7 @@ open class BaseDestination: Hashable, Equatable {
             return text
         }
     }
-    
+
     /// returns the log message based on the format pattern
     func formatMessage(_ format: String, level: SwiftyBeaver.Level, msg: String, thread: String,
         file: String, function: String, line: Int, context: Any? = nil) -> String {
@@ -188,7 +186,7 @@ open class BaseDestination: Hashable, Equatable {
             let formatChar = phrase[formatCharIndex]
             let rangeAfterFormatChar = phrase.index(formatCharIndex, offsetBy: 1)..<phrase.endIndex
             let remainingPhrase = phrase[rangeAfterFormatChar]
-            
+
             switch formatChar {
             case "I":  // ignore
                 text += remainingPhrase
@@ -347,16 +345,16 @@ open class BaseDestination: Hashable, Equatable {
         let dateStr = formatter.string(from: Date())
         return dateStr
     }
-    
+
     /// returns a uptime string
     func uptime() -> String {
         let interval = Date().timeIntervalSince(startDate)
-        
+
         let hours = Int(interval) / 3600
         let minutes = Int(interval / 60) - Int(hours * 60)
         let seconds = Int(interval) - (Int(interval / 60) * 60)
         let milliseconds = Int(interval.truncatingRemainder(dividingBy: 1) * 1000)
-        
+
         return String(format: "%0.2d:%0.2d:%0.2d.%03d", arguments: [hours, minutes, seconds, milliseconds])
     }
 
@@ -437,51 +435,58 @@ open class BaseDestination: Hashable, Equatable {
         if filters.isEmpty {
             if level.rawValue >= minLevel.rawValue {
                 if debugPrint {
-                    print("filters is empty and level >= minLevel")
+                    print("filters are empty and level >= minLevel")
                 }
                 return true
             } else {
                 if debugPrint {
-                    print("filters is empty and level < minLevel")
+                    print("filters are empty and level < minLevel")
                 }
                 return false
             }
         }
 
-        let (matchedExclude, allExclude) = passedExcludedFilters(level, path: path,
-                                                                 function: function, message: message)
-        if allExclude > 0 && matchedExclude != allExclude {
+        let filterCheckResult = FilterValidator.validate(input: .init(filters: self.filters, level: level, path: path, function: function, message: message))
+
+        // Exclusion filters match if they do NOT meet the filter condition (see Filter.apply(_:) method)
+        switch filterCheckResult[.excluded] {
+        case .some(.someFiltersMatch):
+            // Exclusion filters are present and at least one of them matches the log entry
             if debugPrint {
-                print("filters is not empty and message was excluded")
+                print("filters are not empty and message was excluded")
             }
             return false
+        case .some(.allFiltersMatch), .some(.noFiltersMatchingType), .none: break
         }
 
-        let (matchedRequired, allRequired) = passedRequiredFilters(level, path: path,
-                                                                   function: function, message: message)
-        let (matchedNonRequired, allNonRequired) = passedNonRequiredFilters(level, path: path,
-                                                                    function: function, message: message)
-
         // If required filters exist, we should validate or invalidate the log if all of them pass or not
-        if allRequired > 0 {
-            return matchedRequired == allRequired
+        switch filterCheckResult[.required] {
+        case .some(.allFiltersMatch): return true
+        case .some(.someFiltersMatch): return false
+        case .some(.noFiltersMatchingType), .none: break
         }
 
-        // If a non-required filter matches, the log is validated
-		if allNonRequired > 0 {  // Non-required filters exist
-
-			if matchedNonRequired > 0 { return true }  // At least one non-required filter matched
-			else { return false }  // No non-required filters matched
-		}
+        let checkLogLevel: () -> Bool = {
+            // Check if the log message's level matches or exceeds the minLevel of the destination
+            return level.rawValue >= self.minLevel.rawValue
+        }
 
-        if level.rawValue < minLevel.rawValue {
-            if debugPrint {
-                print("filters is not empty and level < minLevel")
+        // Non-required filters should only be applied if the log entry matches the filter condition (e.g. path)
+        switch filterCheckResult[.nonRequired] {
+        case .some(.allFiltersMatch): return true
+        case .some(.noFiltersMatchingType), .none: return checkLogLevel()
+        case .some(.someFiltersMatch(let partialMatchData)):
+            if partialMatchData.fullMatchCount > 0 {
+                // The log entry matches at least one filter condition and the destination's log level
+                return true
+            } else if partialMatchData.conditionMatchCount > 0 {
+                // The log entry matches at least one filter condition, but does not match or exceed the destination's log level
+                return false
+            } else {
+                // There is no filter with a matching filter condition. Check the destination's log level
+                return checkLogLevel()
             }
-            return false
         }
-
-        return true
     }
 
     func getFiltersTargeting(_ target: Filter.TargetType, fromFilters: [FilterType]) -> [FilterType] {
@@ -490,81 +495,6 @@ open class BaseDestination: Hashable, Equatable {
         }
     }
 
-    /// returns a tuple of matched and all filters
-    func passedRequiredFilters(_ level: SwiftyBeaver.Level, path: String,
-                               function: String, message: String?) -> (Int, Int) {
-        let requiredFilters = self.filters.filter { filter in
-            return filter.isRequired() && !filter.isExcluded()
-        }
-
-        let matchingFilters = applyFilters(requiredFilters, level: level, path: path,
-                                           function: function, message: message)
-        if debugPrint {
-            print("matched \(matchingFilters) of \(requiredFilters.count) required filters")
-        }
-
-        return (matchingFilters, requiredFilters.count)
-    }
-
-    /// returns a tuple of matched and all filters
-    func passedNonRequiredFilters(_ level: SwiftyBeaver.Level,
-                                  path: String, function: String, message: String?) -> (Int, Int) {
-        let nonRequiredFilters = self.filters.filter { filter in
-            return !filter.isRequired() && !filter.isExcluded()
-        }
-
-        let matchingFilters = applyFilters(nonRequiredFilters, level: level,
-                                           path: path, function: function, message: message)
-        if debugPrint {
-            print("matched \(matchingFilters) of \(nonRequiredFilters.count) non-required filters")
-        }
-        return (matchingFilters, nonRequiredFilters.count)
-    }
-
-    /// returns a tuple of matched and all exclude filters
-    func passedExcludedFilters(_ level: SwiftyBeaver.Level,
-                               path: String, function: String, message: String?) -> (Int, Int) {
-        let excludeFilters = self.filters.filter { filter in
-            return filter.isExcluded()
-        }
-
-        let matchingFilters = applyFilters(excludeFilters, level: level,
-                                           path: path, function: function, message: message)
-        if debugPrint {
-            print("matched \(matchingFilters) of \(excludeFilters.count) exclude filters")
-        }
-        return (matchingFilters, excludeFilters.count)
-    }
-
-    func applyFilters(_ targetFilters: [FilterType], level: SwiftyBeaver.Level,
-                      path: String, function: String, message: String?) -> Int {
-        return targetFilters.filter { filter in
-
-            let passes: Bool
-
-            if !filter.reachedMinLevel(level) {
-                return false
-            }
-
-            switch filter.getTarget() {
-            case .Path(_):
-                passes = filter.apply(path)
-
-            case .Function(_):
-                passes = filter.apply(function)
-
-            case .Message(_):
-                guard let message = message else {
-                    return false
-                }
-
-                passes = filter.apply(message)
-            }
-
-            return passes
-            }.count
-    }
-
   /**
     Triggered by main flush() method on each destination. Runs in background thread.
    Use for destinations that buffer log items, implement this function to flush those

+ 4 - 5
Pods/SwiftyBeaver/Sources/Extensions.swift

@@ -13,19 +13,19 @@ extension String {
     var length: Int {
         return self.count
     }
-    
+
     /// cross-Swift-compatible first character
     var firstChar: Character? {
         return self.first
     }
-    
+
     /// cross-Swift-compatible last character
     var lastChar: Character? {
         return self.last
     }
-    
+
     /// cross-Swift-compatible index
-    func find(_ char: Character) ->  Index? {
+    func find(_ char: Character) -> Index? {
         #if swift(>=5)
             return self.firstIndex(of: char)
         #else
@@ -33,4 +33,3 @@ extension String {
         #endif
     }
 }
-

+ 142 - 53
Pods/SwiftyBeaver/Sources/FileDestination.swift

@@ -9,20 +9,57 @@
 
 import Foundation
 
-public class FileDestination: BaseDestination {
+open class FileDestination: BaseDestination {
 
     public var logFileURL: URL?
     public var syncAfterEachWrite: Bool = false
+    public var colored: Bool = false {
+        didSet {
+            if colored {
+                // bash font color, first value is intensity, second is color
+                // see http://bit.ly/1Otu3Zr & for syntax http://bit.ly/1Tp6Fw9
+                // uses the 256-color table from http://bit.ly/1W1qJuH
+                reset = "\u{001b}[0m"
+                escape = "\u{001b}[38;5;"
+                levelColor.verbose = "251m"     // silver
+                levelColor.debug = "35m"        // green
+                levelColor.info = "38m"         // blue
+                levelColor.warning = "178m"     // yellow
+                levelColor.error = "197m"       // red
+            } else {
+                reset = ""
+                escape = ""
+                levelColor.verbose = ""
+                levelColor.debug = ""
+                levelColor.info = ""
+                levelColor.warning = ""
+                levelColor.error = ""
+            }
+        }
+    }
+    
+    // LOGFILE ROTATION
+    // ho many bytes should a logfile have until it is rotated?
+    // default is 5 MB. Just is used if logFileAmount > 1
+    public var logFileMaxSize = (5 * 1024 * 1024)
+    // Number of log files used in rotation, default is 1 which deactivates file rotation
+    public var logFileAmount = 1
 
     override public var defaultHashValue: Int {return 2}
     let fileManager = FileManager.default
-    var fileHandle: FileHandle?
 
-    public override init() {
+
+    public init(logFileURL: URL? = nil) {
+        if let logFileURL = logFileURL {
+            self.logFileURL = logFileURL
+            super.init()
+            return
+        }
+
         // platform-dependent logfile directory default
         var baseURL: URL?
         #if os(OSX)
-            if let url = fileManager.urls(for:.cachesDirectory, in: .userDomainMask).first {
+            if let url = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first {
                 baseURL = url
                 // try to use ~/Library/Caches/APP NAME instead of ~/Library/Caches
                 if let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleExecutable") as? String {
@@ -49,20 +86,9 @@ public class FileDestination: BaseDestination {
         #endif
 
         if let baseURL = baseURL {
-            logFileURL = baseURL.appendingPathComponent("swiftybeaver.log", isDirectory: false)
+            self.logFileURL = baseURL.appendingPathComponent("swiftybeaver.log", isDirectory: false)
         }
         super.init()
-
-        // bash font color, first value is intensity, second is color
-        // see http://bit.ly/1Otu3Zr & for syntax http://bit.ly/1Tp6Fw9
-        // uses the 256-color table from http://bit.ly/1W1qJuH
-        reset = "\u{001b}[0m"
-        escape = "\u{001b}[38;5;"
-        levelColor.verbose = "251m"     // silver
-        levelColor.debug = "35m"        // green
-        levelColor.info = "38m"         // blue
-        levelColor.warning = "178m"     // yellow
-        levelColor.error = "197m"       // red
     }
 
     // append to file. uses full base class functionality
@@ -71,57 +97,121 @@ public class FileDestination: BaseDestination {
         let formattedString = super.send(level, msg: msg, thread: thread, file: file, function: function, line: line, context: context)
 
         if let str = formattedString {
-            _ = saveToFile(str: str)
+            _ = validateSaveFile(str: str)
         }
         return formattedString
     }
-
-    deinit {
-        // close file handle if set
-        if let fileHandle = fileHandle {
-            fileHandle.closeFile()
+    
+    // check if filesize is bigger than wanted and if yes then rotate them
+    func validateSaveFile(str: String) -> Bool {
+        if self.logFileAmount > 1 {
+            guard let url = logFileURL else { return false }
+            let filePath = url.path
+            if FileManager.default.fileExists(atPath: filePath) == true {
+                do {
+                    // Get file size
+                    let attr = try FileManager.default.attributesOfItem(atPath: filePath)
+                    let fileSize = attr[FileAttributeKey.size] as! UInt64
+                    // Do file rotation
+                    if fileSize > logFileMaxSize {
+                        rotateFile(filePath)
+                    }
+                } catch {
+                    print("validateSaveFile error: \(error)")
+                }
+            }
         }
+        return saveToFile(str: str)
+    }
+    
+    private func rotateFile(_ filePath: String) {
+       let lastIndex = (logFileAmount-1)
+       let firstIndex = 1
+       do {
+           for index in stride(from: lastIndex, to: firstIndex, by: -1) {
+               let oldFile = String.init(format: "%@.%d", filePath, index)
+
+               if FileManager.default.fileExists(atPath: oldFile) {
+                   if index == lastIndex {
+                       // Delete the last file
+                       try FileManager.default.removeItem(atPath: oldFile)
+                   } else {
+                       // Move the current file to next index
+                       let newFile = String.init(format: "%@.%d", filePath, index+1)
+                       try FileManager.default.moveItem(atPath: oldFile, toPath: newFile)
+                   }
+               }
+           }
+        
+           // Finally, move the current file
+           let newFile = String.init(format: "%@.%d", filePath, firstIndex)
+           try FileManager.default.moveItem(atPath: filePath, toPath: newFile)
+       } catch {
+           print("rotateFile error: \(error)")
+       }
     }
 
     /// appends a string as line to a file.
     /// returns boolean about success
     func saveToFile(str: String) -> Bool {
         guard let url = logFileURL else { return false }
-        do {
-            if fileManager.fileExists(atPath: url.path) == false {
-                // create file if not existing
-                let line = str + "\n"
-                try line.write(to: url, atomically: true, encoding: .utf8)
-                
-                #if os(iOS) || os(watchOS)
-                if #available(iOS 10.0, watchOS 3.0, *) {
-                    var attributes = try fileManager.attributesOfItem(atPath: url.path)
-                    attributes[FileAttributeKey.protectionKey] = FileProtectionType.none
-                    try fileManager.setAttributes(attributes, ofItemAtPath: url.path)
-                }
-                #endif
-            } else {
-                // append to end of file
-                if fileHandle == nil {
-                    // initial setting of file handle
-                    fileHandle = try FileHandle(forWritingTo: url as URL)
-                }
-                if let fileHandle = fileHandle {
-                    _ = fileHandle.seekToEndOfFile()
-                    let line = str + "\n"
-                    if let data = line.data(using: String.Encoding.utf8) {
-                        fileHandle.write(data)
-                        if syncAfterEachWrite {
-                            fileHandle.synchronizeFile()
-                        }
+
+        let line = str + "\n"
+        guard let data = line.data(using: String.Encoding.utf8) else { return false }
+
+        return write(data: data, to: url)
+    }
+
+    private func write(data: Data, to url: URL) -> Bool {
+        
+        #if os(Linux)
+            return true
+        #else
+        var success = false
+        let coordinator = NSFileCoordinator(filePresenter: nil)
+        var error: NSError?
+        coordinator.coordinate(writingItemAt: url, error: &error) { url in
+            do {
+                if fileManager.fileExists(atPath: url.path) == false {
+
+                    let directoryURL = url.deletingLastPathComponent()
+                    if fileManager.fileExists(atPath: directoryURL.path) == false {
+                        try fileManager.createDirectory(
+                            at: directoryURL,
+                            withIntermediateDirectories: true
+                        )
+                    }
+                    fileManager.createFile(atPath: url.path, contents: nil)
+
+                    #if os(iOS) || os(watchOS)
+                    if #available(iOS 10.0, watchOS 3.0, *) {
+                        var attributes = try fileManager.attributesOfItem(atPath: url.path)
+                        attributes[FileAttributeKey.protectionKey] = FileProtectionType.none
+                        try fileManager.setAttributes(attributes, ofItemAtPath: url.path)
                     }
+                    #endif
+                }
+
+                let fileHandle = try FileHandle(forWritingTo: url)
+                fileHandle.seekToEndOfFile()
+                fileHandle.write(data)
+                if syncAfterEachWrite {
+                    fileHandle.synchronizeFile()
                 }
+                fileHandle.closeFile()
+                success = true
+            } catch {
+                print("SwiftyBeaver File Destination could not write to file \(url).")
             }
-            return true
-        } catch {
-            print("SwiftyBeaver File Destination could not write to file \(url).")
+        }
+
+        if let error = error {
+            print("Failed writing file with error: \(String(describing: error))")
             return false
         }
+
+        return success
+        #endif
     }
 
     /// deletes log file.
@@ -130,7 +220,6 @@ public class FileDestination: BaseDestination {
         guard let url = logFileURL, fileManager.fileExists(atPath: url.path) == true else { return true }
         do {
             try fileManager.removeItem(at: url)
-            fileHandle = nil
             return true
         } catch {
             print("SwiftyBeaver File Destination could not remove file \(url).")

+ 10 - 11
Pods/SwiftyBeaver/Sources/Filter.swift

@@ -16,10 +16,9 @@ import Foundation
 ///
 /// A filter must contain a target, which identifies what it filters against
 /// A filter can be required meaning that all required filters against a specific
-/// target must pass in order for the message to be logged. At least one non-required
-/// filter must pass in order for the message to be logged
-public protocol FilterType : class {
-    func apply(_ value: Any) -> Bool
+/// target must pass in order for the message to be logged.
+public protocol FilterType : AnyObject {
+    func apply(_ value: String?) -> Bool
     func getTarget() -> Filter.TargetType
     func isRequired() -> Bool
     func isExcluded() -> Bool
@@ -106,8 +105,8 @@ public class CompareFilter: Filter, FilterType {
         self.filterComparisonType = comparisonType
     }
 
-    public func apply(_ value: Any) -> Bool {
-        guard let value = value as? String else {
+    public func apply(_ value: String?) -> Bool {
+        guard let value = value else {
             return false
         }
 
@@ -157,7 +156,7 @@ public class CompareFilter: Filter, FilterType {
         guard let filterComparisonType = self.filterComparisonType else { return false }
 
         switch filterComparisonType {
-        case .Excludes(_, _):
+        case .Excludes:
             return true
         default:
             return false
@@ -261,7 +260,7 @@ public class PathFilterFactory {
     }
 }
 
-extension Filter.TargetType : Equatable {
+extension Filter.TargetType: Equatable {
 }
 
 // The == does not compare associated values for each enum. Instead == evaluates to true
@@ -269,13 +268,13 @@ extension Filter.TargetType : Equatable {
 public func == (lhs: Filter.TargetType, rhs: Filter.TargetType) -> Bool {
     switch (lhs, rhs) {
 
-    case (.Path(_), .Path(_)):
+    case (.Path, .Path):
         return true
 
-    case (.Function(_), .Function(_)):
+    case (.Function, .Function):
         return true
 
-    case (.Message(_), .Message(_)):
+    case (.Message, .Message):
         return true
 
     default:

+ 129 - 0
Pods/SwiftyBeaver/Sources/FilterValidator.swift

@@ -0,0 +1,129 @@
+//
+//  FilterValidator.swift
+//  SwiftyBeaver (iOS)
+//
+//  Created by Felix Lisczyk on 07.07.19.
+//  Copyright © 2019 Sebastian Kreutzberger. All rights reserved.
+//
+
+import Foundation
+
+/// FilterValidator is a utility class used by BaseDestination.
+/// It encapsulates the filtering logic for excluded, required
+/// and non-required filters.
+///
+/// FilterValidator evaluates a set of filters for a single log
+/// entry. It determines if these filters apply to the log entry
+/// based on their condition (path, function, message) and their
+/// minimum log level.
+
+struct FilterValidator {
+
+    // These are the different filter types that the user can set
+    enum ValidationType: CaseIterable {
+        case excluded
+        case required
+        case nonRequired
+
+        func apply(to filters: [FilterType]) -> [FilterType] {
+            switch self {
+            case .excluded:
+                return filters.filter { $0.isExcluded() }
+            case .required:
+                return filters.filter { $0.isRequired() && !$0.isExcluded() }
+            case .nonRequired:
+                return filters.filter { !$0.isRequired() && !$0.isExcluded() }
+            }
+        }
+    }
+
+    // Wrapper object for input parameters
+    struct Input {
+        let filters: [FilterType]
+        let level: SwiftyBeaver.Level
+        let path: String
+        let function: String
+        let message: String?
+    }
+
+    // Result wrapper object
+    enum Result {
+        case allFiltersMatch                            // All filters fully match the log entry (condition + minimum log level)
+        case someFiltersMatch(PartialMatchData)         // Only some filters fully match the log entry (condition + minimum log level)
+        case noFiltersMatchingType                      // There are no filters set for a particular type (excluded, required, nonRequired)
+
+        struct PartialMatchData {
+            let fullMatchCount: Int                     // Number of filters that match both the condition and the minimum log level of the log entry
+            let conditionMatchCount: Int                // Number of filters that match ONLY the condition of the log entry (path, function, message)
+            let logLevelMatchCount: Int                 // Number of filters that match ONLY the minimum log level of the log entry
+        }
+    }
+
+    static func validate(input: Input, for types: [ValidationType] = ValidationType.allCases) -> [ValidationType: Result] {
+        var results = [ValidationType: Result]()
+        for type in types {
+            let filtersToValidate = type.apply(to: input.filters)
+
+            if filtersToValidate.isEmpty {
+                // There are no filters set for this particular type
+                results[type] = .noFiltersMatchingType
+            } else {
+                var fullMatchCount: Int = 0
+                var conditionMatchCount: Int = 0
+                var logLevelMatchCount: Int = 0
+
+                for filter in filtersToValidate {
+                    let filterMatchesCondition = self.filterMatchesCondition(filter, level: input.level, path: input.path, function: input.function, message: input.message)
+                    let filterMatchesMinLogLevel = self.filterMatchesMinLogLevel(filter, level: input.level)
+
+                    switch (filterMatchesCondition, filterMatchesMinLogLevel) {
+                    // Filter matches both the condition and the minimum log level
+                    case (true, true): fullMatchCount += 1
+                    // Filter matches only the condition (path, function, message)
+                    case (true, false): conditionMatchCount += 1
+                    // Filter matches only the minimum log level
+                    case (false, true): logLevelMatchCount += 1
+                    // Filter does not match the condition nor the minimum log level
+                    case (false, false): break
+                    }
+                }
+
+                if filtersToValidate.count == fullMatchCount {
+                    // All filters fully match the log entry
+                    results[type] = .allFiltersMatch
+                } else {
+                    // Only some filters match the log entry
+                    results[type] = .someFiltersMatch(.init(fullMatchCount: fullMatchCount, conditionMatchCount: conditionMatchCount, logLevelMatchCount: logLevelMatchCount))
+                }
+            }
+        }
+
+        return results
+    }
+
+    private static func filterMatchesCondition(_ filter: FilterType, level: SwiftyBeaver.Level,
+                                                path: String, function: String, message: String?) -> Bool {
+            let passes: Bool
+
+            switch filter.getTarget() {
+            case .Path(_):
+                passes = filter.apply(path)
+
+            case .Function(_):
+                passes = filter.apply(function)
+
+            case .Message(_):
+                guard let message = message else {
+                    return false
+                }
+
+                passes = filter.apply(message)
+            }
+
+            return passes
+    }
+
+    private static func filterMatchesMinLogLevel(_ filter: FilterType, level: SwiftyBeaver.Level) -> Bool {
+        return filter.reachedMinLevel(level)
+    }
+}

+ 18 - 11
Pods/SwiftyBeaver/Sources/SBPlatformDestination.swift

@@ -9,6 +9,10 @@
 
 import Foundation
 
+#if canImport(FoundationNetworking)
+import FoundationNetworking
+#endif
+
 // platform-dependent import frameworks to get device details
 // valid values for os(): OSX, iOS, watchOS, tvOS, Linux
 // in Swift 3 the following were added: FreeBSD, Windows, Android
@@ -305,10 +309,14 @@ public class SBPlatformDestination: BaseDestination {
 
             // POST parameters
             let params = ["payload": payload]
-            do {
-                request.httpBody = try JSONSerialization.data(withJSONObject: params, options: [])
-            } catch {
-                toNSLog("Error! Could not create JSON for server payload.")
+            if(JSONSerialization.isValidJSONObject(params)){
+                do {
+                    request.httpBody = try JSONSerialization.data(withJSONObject: params, options: [])
+                } catch {
+                    toNSLog("Error! Could not create JSON for server payload.")
+                    return complete(false, 0)
+                }
+            }else{
                 return complete(false, 0)
             }
             toNSLog("sending params: \(params)")
@@ -406,7 +414,7 @@ public class SBPlatformDestination: BaseDestination {
     }
 
     /// returns optional array of log dicts from a file which has 1 json string per line
-    func logsFromFile(_ url: URL) -> [[String:Any]]? {
+    func logsFromFile(_ url: URL) -> [[String: Any]]? {
         var lines = 0
         do {
             // try to read file, decode every JSON line and put dict from each line in array
@@ -420,7 +428,7 @@ public class SBPlatformDestination: BaseDestination {
                     if let data = lineJSON.data(using: .utf8) {
                         do {
                             if let dict = try JSONSerialization.jsonObject(with: data,
-                                options: .mutableContainers) as? [String:Any] {
+                                options: .mutableContainers) as? [String: Any] {
                                 if !dict.isEmpty {
                                     dicts.append(dict)
                                 }
@@ -470,10 +478,9 @@ public class SBPlatformDestination: BaseDestination {
         osVersionStr += "." + String(osVersion.minorVersion)
         osVersionStr += "." + String(osVersion.patchVersion)
         details["osVersion"] = osVersionStr
-        details["hostName"] = ProcessInfo.processInfo.hostName
         details["deviceName"] = ""
         details["deviceModel"] = ""
-
+        details["hostName"] = ""
         if DEVICE_NAME != "" {
             details["deviceName"] = DEVICE_NAME
         }
@@ -484,7 +491,7 @@ public class SBPlatformDestination: BaseDestination {
     }
 
     /// returns (updated) analytics dict, optionally loaded from file.
-    func analytics(_ url: URL, update: Bool = false) -> [String:Any] {
+    func analytics(_ url: URL, update: Bool = false) -> [String: Any] {
 
         var dict = [String: Any]()
         let now = NSDate().timeIntervalSince1970
@@ -560,12 +567,12 @@ public class SBPlatformDestination: BaseDestination {
     }
 
     /// returns optional dict from a json encoded file
-    func dictFromFile(_ url: URL) -> [String:Any]? {
+    func dictFromFile(_ url: URL) -> [String: Any]? {
         do {
             let fileContent = try String(contentsOfFile: url.path, encoding: .utf8)
             if let data = fileContent.data(using: .utf8) {
                 return try JSONSerialization.jsonObject(with: data,
-                                    options: .mutableContainers) as? [String:Any]
+                                    options: .mutableContainers) as? [String: Any]
             }
         } catch {
             toNSLog("SwiftyBeaver Platform Destination could not read file \(url)")

+ 5 - 9
Pods/SwiftyBeaver/Sources/SwiftyBeaver.swift

@@ -12,9 +12,9 @@ import Foundation
 open class SwiftyBeaver {
 
     /// version string of framework
-    public static let version = "1.7.0"  // UPDATE ON RELEASE!
+    public static let version = "1.9.4"  // UPDATE ON RELEASE!
     /// build number of framework
-    public static let build = 1700 // version 1.6.2 -> 1620, UPDATE ON RELEASE!
+    public static let build = 1940 // version 1.6.2 -> 1620, UPDATE ON RELEASE!
 
     public enum Level: Int {
         case verbose = 0
@@ -71,12 +71,8 @@ open class SwiftyBeaver {
             if Thread.isMainThread {
                 return ""
             } else {
-                let threadName = Thread.current.name
-                if let threadName = threadName, !threadName.isEmpty {
-                    return threadName
-                } else {
-                    return String(format: "%p", Thread.current)
-                }
+                let name = __dispatch_queue_get_label(nil)
+                return String(cString: name, encoding: .utf8) ?? Thread.current.description
             }
         #endif
     }
@@ -134,7 +130,7 @@ open class SwiftyBeaver {
     }
 
     /// custom logging to manually adjust values, should just be used by other frameworks
-    public class func custom(level: SwiftyBeaver.Level, message: @autoclosure () -> Any,
+    open class func custom(level: SwiftyBeaver.Level, message: @autoclosure () -> Any,
                              file: String = #file, function: String = #function, line: Int = #line, context: Any? = nil) {
         #if swift(>=5)
         dispatch_send(level: level, message: message(), thread: threadName(),

+ 1 - 1
Pods/Target Support Files/DBDebugToolkit/DBDebugToolkit-Info.plist

@@ -15,7 +15,7 @@
   <key>CFBundlePackageType</key>
   <string>FMWK</string>
   <key>CFBundleShortVersionString</key>
-  <string>0.5.0</string>
+  <string>0.6.0</string>
   <key>CFBundleSignature</key>
   <string>????</string>
   <key>CFBundleVersion</key>

+ 2 - 1
Pods/Target Support Files/DBDebugToolkit/DBDebugToolkit.debug.xcconfig

@@ -1,10 +1,11 @@
-APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/DBDebugToolkit
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 2 - 1
Pods/Target Support Files/DBDebugToolkit/DBDebugToolkit.release.xcconfig

@@ -1,10 +1,11 @@
-APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/DBDebugToolkit
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 1 - 1
Pods/Target Support Files/DBDebugToolkit/ResourceBundle-DBDebugToolkit-DBDebugToolkit-Info.plist

@@ -13,7 +13,7 @@
   <key>CFBundlePackageType</key>
   <string>BNDL</string>
   <key>CFBundleShortVersionString</key>
-  <string>0.5.0</string>
+  <string>0.6.0</string>
   <key>CFBundleSignature</key>
   <string>????</string>
   <key>CFBundleVersion</key>

+ 2 - 1
Pods/Target Support Files/InputBarAccessoryView/InputBarAccessoryView.debug.xcconfig

@@ -1,4 +1,4 @@
-APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 OTHER_LDFLAGS = $(inherited) -framework "UIKit"
@@ -7,6 +7,7 @@ PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/InputBarAccessoryView
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 2 - 1
Pods/Target Support Files/InputBarAccessoryView/InputBarAccessoryView.release.xcconfig

@@ -1,4 +1,4 @@
-APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 OTHER_LDFLAGS = $(inherited) -framework "UIKit"
@@ -7,6 +7,7 @@ PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/InputBarAccessoryView
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 0 - 0
Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare-Info.plist → Pods/Target Support Files/Pods-DcShare/Pods-DcShare-Info.plist


+ 27 - 0
Pods/Target Support Files/Pods-DcShare/Pods-DcShare-acknowledgements.markdown

@@ -0,0 +1,27 @@
+# Acknowledgements
+This application makes use of the following third party libraries:
+
+## SDWebImage
+
+Copyright (c) 2009-2020 Olivier Poitrey rs@dailymotion.com
+ 
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+ 
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+ 
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+Generated by CocoaPods - https://cocoapods.org

+ 59 - 0
Pods/Target Support Files/Pods-DcShare/Pods-DcShare-acknowledgements.plist

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>PreferenceSpecifiers</key>
+	<array>
+		<dict>
+			<key>FooterText</key>
+			<string>This application makes use of the following third party libraries:</string>
+			<key>Title</key>
+			<string>Acknowledgements</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>Copyright (c) 2009-2020 Olivier Poitrey rs@dailymotion.com
+ 
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+ 
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+ 
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>SDWebImage</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>Generated by CocoaPods - https://cocoapods.org</string>
+			<key>Title</key>
+			<string></string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+	</array>
+	<key>StringsTable</key>
+	<string>Acknowledgements</string>
+	<key>Title</key>
+	<string>Acknowledgements</string>
+</dict>
+</plist>

+ 5 - 0
Pods/Target Support Files/Pods-DcShare/Pods-DcShare-dummy.m

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

+ 4 - 0
Pods/Target Support Files/UICircularProgressRing/UICircularProgressRing-prefix.pch → Pods/Target Support Files/Pods-DcShare/Pods-DcShare-umbrella.h

@@ -10,3 +10,7 @@
 #endif
 #endif
 
+
+FOUNDATION_EXPORT double Pods_DcShareVersionNumber;
+FOUNDATION_EXPORT const unsigned char Pods_DcShareVersionString[];
+

+ 13 - 0
Pods/Target Support Files/Pods-DcShare/Pods-DcShare.debug.xcconfig

@@ -0,0 +1,13 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers"
+LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks'
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage"
+OTHER_LDFLAGS = $(inherited) -framework "ImageIO" -framework "SDWebImage"
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
+PODS_ROOT = ${SRCROOT}/Pods
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 6 - 0
Pods/Target Support Files/Pods-DcShare/Pods-DcShare.modulemap

@@ -0,0 +1,6 @@
+framework module Pods_DcShare {
+  umbrella header "Pods-DcShare-umbrella.h"
+
+  export *
+  module * { export * }
+}

+ 13 - 0
Pods/Target Support Files/Pods-DcShare/Pods-DcShare.release.xcconfig

@@ -0,0 +1,13 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers"
+LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks'
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage"
+OTHER_LDFLAGS = $(inherited) -framework "ImageIO" -framework "SDWebImage"
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
+PODS_ROOT = ${SRCROOT}/Pods
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 0 - 212
Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare-acknowledgements.markdown

@@ -1,212 +0,0 @@
-# Acknowledgements
-This application makes use of the following third party libraries:
-
-## DBDebugToolkit
-
-Copyright (c) 2016 Dariusz Bukowski <dariusz.m.bukowski@gmail.com>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-
-## InputBarAccessoryView
-
-
-The MIT License (MIT)
-
-Copyright (c) Nathan Tannar <nathantannar4@gmail.com> 2017-2019
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-## ReachabilitySwift
-
-Copyright (c) 2016 Ashley Mills
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-
-## SCSiriWaveformView
-
-
-The MIT License (MIT)
-
-Copyright (c) [2013] [Stefan Ceriu]
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-        
-          
-
-## SDWebImage
-
-Copyright (c) 2009-2020 Olivier Poitrey rs@dailymotion.com
- 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
- 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
- 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-
-
-## SwiftFormat
-
-MIT License
-
-Copyright (c) 2016 Nick Lockwood
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-## SwiftLint
-
-The MIT License (MIT)
-
-Copyright (c) 2015 Realm Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-## SwiftyBeaver
-
-The MIT License (MIT)
-
-Copyright (c) 2015 Sebastian Kreutzberger
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
-## UICircularProgressRing
-
-Copyright (c) 2017 Luis Padron
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Generated by CocoaPods - https://cocoapods.org

+ 0 - 292
Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare-acknowledgements.plist

@@ -1,292 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>PreferenceSpecifiers</key>
-	<array>
-		<dict>
-			<key>FooterText</key>
-			<string>This application makes use of the following third party libraries:</string>
-			<key>Title</key>
-			<string>Acknowledgements</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Copyright (c) 2016 Dariusz Bukowski &lt;dariusz.m.bukowski@gmail.com&gt;
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-</string>
-			<key>License</key>
-			<string>MIT</string>
-			<key>Title</key>
-			<string>DBDebugToolkit</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>
-The MIT License (MIT)
-
-Copyright (c) Nathan Tannar &lt;nathantannar4@gmail.com&gt; 2017-2019
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-</string>
-			<key>License</key>
-			<string>MIT</string>
-			<key>Title</key>
-			<string>InputBarAccessoryView</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Copyright (c) 2016 Ashley Mills
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-</string>
-			<key>License</key>
-			<string>MIT</string>
-			<key>Title</key>
-			<string>ReachabilitySwift</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>
-The MIT License (MIT)
-
-Copyright (c) [2013] [Stefan Ceriu]
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-        
-          </string>
-			<key>License</key>
-			<string>MIT License</string>
-			<key>Title</key>
-			<string>SCSiriWaveformView</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Copyright (c) 2009-2020 Olivier Poitrey rs@dailymotion.com
- 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
- 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
- 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-</string>
-			<key>License</key>
-			<string>MIT</string>
-			<key>Title</key>
-			<string>SDWebImage</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>MIT License
-
-Copyright (c) 2016 Nick Lockwood
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-</string>
-			<key>License</key>
-			<string>MIT</string>
-			<key>Title</key>
-			<string>SwiftFormat</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>The MIT License (MIT)
-
-Copyright (c) 2015 Realm Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-</string>
-			<key>License</key>
-			<string>MIT</string>
-			<key>Title</key>
-			<string>SwiftLint</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>The MIT License (MIT)
-
-Copyright (c) 2015 Sebastian Kreutzberger
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-</string>
-			<key>License</key>
-			<string>MIT</string>
-			<key>Title</key>
-			<string>SwiftyBeaver</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Copyright (c) 2017 Luis Padron
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-</string>
-			<key>License</key>
-			<string>MIT</string>
-			<key>Title</key>
-			<string>UICircularProgressRing</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Generated by CocoaPods - https://cocoapods.org</string>
-			<key>Title</key>
-			<string></string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-	</array>
-	<key>StringsTable</key>
-	<string>Acknowledgements</string>
-	<key>Title</key>
-	<string>Acknowledgements</string>
-</dict>
-</plist>

+ 0 - 5
Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare-dummy.m

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

+ 0 - 16
Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare-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_deltachat_ios_DcShareVersionNumber;
-FOUNDATION_EXPORT const unsigned char Pods_deltachat_ios_DcShareVersionString[];
-

+ 0 - 12
Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare.debug.xcconfig

@@ -1,12 +0,0 @@
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers"
-LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks'
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
-OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "ImageIO" -framework "InputBarAccessoryView" -framework "QuartzCore" -framework "Reachability" -framework "SCSiriWaveformView" -framework "SDWebImage" -framework "SwiftyBeaver" -framework "SystemConfiguration" -framework "UICircularProgressRing" -framework "UIKit"
-OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
-PODS_ROOT = ${SRCROOT}/Pods
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 0 - 6
Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare.modulemap

@@ -1,6 +0,0 @@
-framework module Pods_deltachat_ios_DcShare {
-  umbrella header "Pods-deltachat-ios-DcShare-umbrella.h"
-
-  export *
-  module * { export * }
-}

+ 0 - 12
Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare.release.xcconfig

@@ -1,12 +0,0 @@
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers"
-LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks'
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
-OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "ImageIO" -framework "InputBarAccessoryView" -framework "QuartzCore" -framework "Reachability" -framework "SCSiriWaveformView" -framework "SDWebImage" -framework "SwiftyBeaver" -framework "SystemConfiguration" -framework "UICircularProgressRing" -framework "UIKit"
-OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
-PODS_ROOT = ${SRCROOT}/Pods
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 1 - 12
Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios-acknowledgements.markdown

@@ -153,7 +153,7 @@ SOFTWARE.
 
 The MIT License (MIT)
 
-Copyright (c) 2015 Realm Inc.
+Copyright (c) 2020 Realm Inc.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -198,15 +198,4 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
-
-## UICircularProgressRing
-
-Copyright (c) 2017 Luis Padron
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
 Generated by CocoaPods - https://cocoapods.org

+ 1 - 18
Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios-acknowledgements.plist

@@ -200,7 +200,7 @@ SOFTWARE.
 			<key>FooterText</key>
 			<string>The MIT License (MIT)
 
-Copyright (c) 2015 Realm Inc.
+Copyright (c) 2020 Realm Inc.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -258,23 +258,6 @@ SOFTWARE.
 			<key>Type</key>
 			<string>PSGroupSpecifier</string>
 		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Copyright (c) 2017 Luis Padron
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-</string>
-			<key>License</key>
-			<string>MIT</string>
-			<key>Title</key>
-			<string>UICircularProgressRing</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
 		<dict>
 			<key>FooterText</key>
 			<string>Generated by CocoaPods - https://cocoapods.org</string>

+ 36 - 60
Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios-frameworks.sh

@@ -19,9 +19,8 @@ mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
 
 COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}"
 SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
+BCSYMBOLMAP_DIR="BCSymbolMaps"
 
-# Used as a return value for each invocation of `strip_invalid_archs` function.
-STRIP_BINARY_RETVAL=0
 
 # This protects against multiple targets copying the same framework dependency at the same time. The solution
 # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
@@ -45,6 +44,16 @@ install_framework()
     source="$(readlink "${source}")"
   fi
 
+  if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then
+    # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied
+    find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do
+      echo "Installing $f"
+      install_bcsymbolmap "$f" "$destination"
+      rm "$f"
+    done
+    rmdir "${source}/${BCSYMBOLMAP_DIR}"
+  fi
+
   # Use filter instead of exclude so missing patterns don't throw errors.
   echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\""
   rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
@@ -80,7 +89,6 @@ install_framework()
     done
   fi
 }
-
 # Copies and strips a vendored dSYM
 install_dsym() {
   local source="$1"
@@ -95,12 +103,11 @@ install_dsym() {
     binary_name="$(ls "$source/Contents/Resources/DWARF")"
     binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}"
 
-    # Strip invalid architectures so "fat" simulator / device frameworks work on device
+    # Strip invalid architectures from the dSYM.
     if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then
       strip_invalid_archs "$binary" "$warn_missing_arch"
     fi
-
-    if [[ $STRIP_BINARY_RETVAL == 1 ]]; then
+    if [[ $STRIP_BINARY_RETVAL == 0 ]]; then
       # Move the stripped file into its final destination.
       echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\""
       rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}"
@@ -111,28 +118,8 @@ install_dsym() {
   fi
 }
 
-# Copies the bcsymbolmap files of a vendored framework
-install_bcsymbolmap() {
-    local bcsymbolmap_path="$1"
-    local destination="${BUILT_PRODUCTS_DIR}"
-    echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}""
-    rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"
-}
-
-# Signs a framework with the provided identity
-code_sign_if_enabled() {
-  if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
-    # Use the current code_sign_identity
-    echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
-    local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'"
-
-    if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
-      code_sign_cmd="$code_sign_cmd &"
-    fi
-    echo "$code_sign_cmd"
-    eval "$code_sign_cmd"
-  fi
-}
+# Used as a return value for each invocation of `strip_invalid_archs` function.
+STRIP_BINARY_RETVAL=0
 
 # Strip invalid architectures
 strip_invalid_archs() {
@@ -147,7 +134,7 @@ strip_invalid_archs() {
     if [[ "$warn_missing_arch" == "true" ]]; then
       echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)."
     fi
-    STRIP_BINARY_RETVAL=0
+    STRIP_BINARY_RETVAL=1
     return
   fi
   stripped=""
@@ -161,40 +148,31 @@ strip_invalid_archs() {
   if [[ "$stripped" ]]; then
     echo "Stripped $binary of architectures:$stripped"
   fi
-  STRIP_BINARY_RETVAL=1
+  STRIP_BINARY_RETVAL=0
 }
 
-install_artifact() {
-  artifact="$1"
-  base="$(basename "$artifact")"
-  case $base in
-  *.framework)
-    install_framework "$artifact"
-    ;;
-  *.dSYM)
-    # Suppress arch warnings since XCFrameworks will include many dSYM files
-    install_dsym "$artifact" "false"
-    ;;
-  *.bcsymbolmap)
-    install_bcsymbolmap "$artifact"
-    ;;
-  *)
-    echo "error: Unrecognized artifact "$artifact""
-    ;;
-  esac
+# Copies the bcsymbolmap files of a vendored framework
+install_bcsymbolmap() {
+    local bcsymbolmap_path="$1"
+    local destination="${BUILT_PRODUCTS_DIR}"
+    echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}""
+    rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"
 }
 
-copy_artifacts() {
-  file_list="$1"
-  while read artifact; do
-    install_artifact "$artifact"
-  done <$file_list
-}
+# Signs a framework with the provided identity
+code_sign_if_enabled() {
+  if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
+    # Use the current code_sign_identity
+    echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
+    local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'"
 
-ARTIFACT_LIST_FILE="${BUILT_PRODUCTS_DIR}/cocoapods-artifacts-${CONFIGURATION}.txt"
-if [ -r "${ARTIFACT_LIST_FILE}" ]; then
-  copy_artifacts "${ARTIFACT_LIST_FILE}"
-fi
+    if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
+      code_sign_cmd="$code_sign_cmd &"
+    fi
+    echo "$code_sign_cmd"
+    eval "$code_sign_cmd"
+  fi
+}
 
 if [[ "$CONFIGURATION" == "Debug" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/DBDebugToolkit/DBDebugToolkit.framework"
@@ -203,7 +181,6 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SwiftyBeaver/SwiftyBeaver.framework"
-  install_framework "${BUILT_PRODUCTS_DIR}/UICircularProgressRing/UICircularProgressRing.framework"
 fi
 if [[ "$CONFIGURATION" == "Release" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/DBDebugToolkit/DBDebugToolkit.framework"
@@ -212,7 +189,6 @@ if [[ "$CONFIGURATION" == "Release" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SwiftyBeaver/SwiftyBeaver.framework"
-  install_framework "${BUILT_PRODUCTS_DIR}/UICircularProgressRing/UICircularProgressRing.framework"
 fi
 if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
   wait

+ 6 - 4
Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios.debug.xcconfig

@@ -1,13 +1,15 @@
 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers"
 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
-OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "ImageIO" -framework "InputBarAccessoryView" -framework "QuartzCore" -framework "Reachability" -framework "SCSiriWaveformView" -framework "SDWebImage" -framework "SwiftyBeaver" -framework "SystemConfiguration" -framework "UICircularProgressRing" -framework "UIKit"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver"
+OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "ImageIO" -framework "InputBarAccessoryView" -framework "QuartzCore" -framework "Reachability" -framework "SCSiriWaveformView" -framework "SDWebImage" -framework "SwiftyBeaver" -framework "SystemConfiguration" -framework "UIKit"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
 PODS_ROOT = ${SRCROOT}/Pods
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 6 - 4
Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios.release.xcconfig

@@ -1,13 +1,15 @@
 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers"
 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
-OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "ImageIO" -framework "InputBarAccessoryView" -framework "QuartzCore" -framework "Reachability" -framework "SCSiriWaveformView" -framework "SDWebImage" -framework "SwiftyBeaver" -framework "SystemConfiguration" -framework "UICircularProgressRing" -framework "UIKit"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver"
+OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "ImageIO" -framework "InputBarAccessoryView" -framework "QuartzCore" -framework "Reachability" -framework "SCSiriWaveformView" -framework "SDWebImage" -framework "SwiftyBeaver" -framework "SystemConfiguration" -framework "UIKit"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
 PODS_ROOT = ${SRCROOT}/Pods
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 5 - 3
Pods/Target Support Files/Pods-deltachat-iosTests/Pods-deltachat-iosTests.debug.xcconfig

@@ -1,9 +1,11 @@
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers"
-OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "ImageIO" -framework "InputBarAccessoryView" -framework "QuartzCore" -framework "Reachability" -framework "SCSiriWaveformView" -framework "SDWebImage" -framework "SwiftyBeaver" -framework "SystemConfiguration" -framework "UICircularProgressRing" -framework "UIKit"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers"
+OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "ImageIO" -framework "InputBarAccessoryView" -framework "QuartzCore" -framework "Reachability" -framework "SCSiriWaveformView" -framework "SDWebImage" -framework "SwiftyBeaver" -framework "SystemConfiguration" -framework "UIKit"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
 PODS_ROOT = ${SRCROOT}/Pods
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 5 - 3
Pods/Target Support Files/Pods-deltachat-iosTests/Pods-deltachat-iosTests.release.xcconfig

@@ -1,9 +1,11 @@
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers"
-OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "ImageIO" -framework "InputBarAccessoryView" -framework "QuartzCore" -framework "Reachability" -framework "SCSiriWaveformView" -framework "SDWebImage" -framework "SwiftyBeaver" -framework "SystemConfiguration" -framework "UICircularProgressRing" -framework "UIKit"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers"
+OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "ImageIO" -framework "InputBarAccessoryView" -framework "QuartzCore" -framework "Reachability" -framework "SCSiriWaveformView" -framework "SDWebImage" -framework "SwiftyBeaver" -framework "SystemConfiguration" -framework "UIKit"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
 PODS_ROOT = ${SRCROOT}/Pods
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 2 - 1
Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.debug.xcconfig

@@ -1,4 +1,4 @@
-APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 OTHER_LDFLAGS = $(inherited) -framework "CoreTelephony" -framework "SystemConfiguration"
@@ -7,6 +7,7 @@ PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/ReachabilitySwift
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 2 - 1
Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.release.xcconfig

@@ -1,4 +1,4 @@
-APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 OTHER_LDFLAGS = $(inherited) -framework "CoreTelephony" -framework "SystemConfiguration"
@@ -7,6 +7,7 @@ PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/ReachabilitySwift
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 2 - 1
Pods/Target Support Files/SCSiriWaveformView/SCSiriWaveformView.debug.xcconfig

@@ -1,4 +1,4 @@
-APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit"
@@ -6,6 +6,7 @@ PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/SCSiriWaveformView
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 2 - 1
Pods/Target Support Files/SCSiriWaveformView/SCSiriWaveformView.release.xcconfig

@@ -1,4 +1,4 @@
-APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit"
@@ -6,6 +6,7 @@ PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/SCSiriWaveformView
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 1 - 1
Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist

@@ -15,7 +15,7 @@
   <key>CFBundlePackageType</key>
   <string>FMWK</string>
   <key>CFBundleShortVersionString</key>
-  <string>5.9.1</string>
+  <string>5.9.5</string>
   <key>CFBundleSignature</key>
   <string>????</string>
   <key>CFBundleVersion</key>

+ 2 - 0
Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig

@@ -1,4 +1,5 @@
 APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage
 DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = NO
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
@@ -7,6 +8,7 @@ PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
 SUPPORTS_MACCATALYST = YES

+ 2 - 0
Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig

@@ -1,4 +1,5 @@
 APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage
 DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = NO
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
@@ -7,6 +8,7 @@ PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
 SUPPORTS_MACCATALYST = YES

+ 2 - 1
Pods/Target Support Files/SwiftFormat/SwiftFormat.debug.xcconfig

@@ -1,10 +1,11 @@
-APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftFormat
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftFormat
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 2 - 1
Pods/Target Support Files/SwiftFormat/SwiftFormat.release.xcconfig

@@ -1,10 +1,11 @@
-APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftFormat
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftFormat
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 2 - 1
Pods/Target Support Files/SwiftLint/SwiftLint.debug.xcconfig

@@ -1,10 +1,11 @@
-APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftLint
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftLint
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 2 - 1
Pods/Target Support Files/SwiftLint/SwiftLint.release.xcconfig

@@ -1,10 +1,11 @@
-APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftLint
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftLint
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 1 - 1
Pods/Target Support Files/SwiftyBeaver/SwiftyBeaver-Info.plist

@@ -15,7 +15,7 @@
   <key>CFBundlePackageType</key>
   <string>FMWK</string>
   <key>CFBundleShortVersionString</key>
-  <string>1.7.0</string>
+  <string>1.9.4</string>
   <key>CFBundleSignature</key>
   <string>????</string>
   <key>CFBundleVersion</key>

+ 2 - 1
Pods/Target Support Files/SwiftyBeaver/SwiftyBeaver.debug.xcconfig

@@ -1,4 +1,4 @@
-APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
@@ -6,6 +6,7 @@ PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftyBeaver
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 2 - 1
Pods/Target Support Files/SwiftyBeaver/SwiftyBeaver.release.xcconfig

@@ -1,4 +1,4 @@
-APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
@@ -6,6 +6,7 @@ PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftyBeaver
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 0 - 26
Pods/Target Support Files/UICircularProgressRing/UICircularProgressRing-Info.plist

@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-  <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
-  <key>CFBundleExecutable</key>
-  <string>${EXECUTABLE_NAME}</string>
-  <key>CFBundleIdentifier</key>
-  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
-  <key>CFBundleInfoDictionaryVersion</key>
-  <string>6.0</string>
-  <key>CFBundleName</key>
-  <string>${PRODUCT_NAME}</string>
-  <key>CFBundlePackageType</key>
-  <string>FMWK</string>
-  <key>CFBundleShortVersionString</key>
-  <string>6.2.0</string>
-  <key>CFBundleSignature</key>
-  <string>????</string>
-  <key>CFBundleVersion</key>
-  <string>${CURRENT_PROJECT_VERSION}</string>
-  <key>NSPrincipalClass</key>
-  <string></string>
-</dict>
-</plist>

+ 0 - 5
Pods/Target Support Files/UICircularProgressRing/UICircularProgressRing-dummy.m

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

+ 0 - 17
Pods/Target Support Files/UICircularProgressRing/UICircularProgressRing-umbrella.h

@@ -1,17 +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
-
-#import "UICircularProgressRing.h"
-
-FOUNDATION_EXPORT double UICircularProgressRingVersionNumber;
-FOUNDATION_EXPORT const unsigned char UICircularProgressRingVersionString[];
-

+ 0 - 11
Pods/Target Support Files/UICircularProgressRing/UICircularProgressRing.debug.xcconfig

@@ -1,11 +0,0 @@
-APPLICATION_EXTENSION_API_ONLY = YES
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/UICircularProgressRing
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 0 - 6
Pods/Target Support Files/UICircularProgressRing/UICircularProgressRing.modulemap

@@ -1,6 +0,0 @@
-framework module UICircularProgressRing {
-  umbrella header "UICircularProgressRing-umbrella.h"
-
-  export *
-  module * { export * }
-}

+ 0 - 11
Pods/Target Support Files/UICircularProgressRing/UICircularProgressRing.release.xcconfig

@@ -1,11 +0,0 @@
-APPLICATION_EXTENSION_API_ONLY = YES
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/UICircularProgressRing
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 0 - 10
Pods/Target Support Files/UICircularProgressRing/UICircularProgressRing.xcconfig

@@ -1,10 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/UICircularProgressRing
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 0 - 7
Pods/UICircularProgressRing/LICENSE

@@ -1,7 +0,0 @@
-Copyright (c) 2017 Luis Padron
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 152
Pods/UICircularProgressRing/README.md

@@ -1,152 +0,0 @@
-<p align="center">
-	<img src="https://img.shields.io/github/license/luispadron/UICircularProgressRing.svg">
-	<img src="https://travis-ci.org/luispadron/UICircularProgressRing.svg?branch=master">
-	<img src="https://img.shields.io/github/issues/luispadron/UICircularProgressRing.svg">
-</p>
-
-![Banner](https://raw.githubusercontent.com/luispadron/UICircularProgressRing/master/.github/banner.png)
-
-<h3 align="center">A circular progress bar for iOS written in Swift</h3>
-
-<p align="center">
-<img src="https://raw.githubusercontent.com/luispadron/UICircularProgressRing/master/.github/demo.gif"/>
-</p>
-
-![Styles](https://raw.githubusercontent.com/luispadron/UICircularProgressRing/master/.github/styles-banner.png)
-
-## Features
-
-* 2 views, progress or timer
-* Interface builder designable
-* Highly customizable and flexible
-* Easy to use
-* Fluid and interruptible animations
-* Written in Swift
-* RTL language support
-
-## Apps Using UICircularProgressRing
-
-- [GradePoint](http://gradepoint.luispadron.com) by Luis Padron.
-
-- [UVI Mate](https://itunes.apple.com/us/app/uvi-mate-global-uv-index-now/id1207745216?mt=8) by Alexander Ershov.
-
-- [HotelTonight](https://itunes.apple.com/app/id407690035?mt=8) by Hotel Tonight Inc.
-
-- [הנתיב המהיר](https://itunes.apple.com/us/app/הנתיב-המהיר/id1320456872?mt=8) by Elad Hayun
-
-- [Nyx Nightclub Management](https://itunes.apple.com/dk/app/nyx-nightclub-management-ipad/id954874082?mt=8) by Nyx Systems IVS
-
-- [Barstool Sports](https://itunes.apple.com/us/app/barstool-sports/id456805313) by Barstool Sports
-
-- [88 Days](http://88-days.com) by Stijn Kramer
-
-- [Bookbot](https://www.bookbotkids.com) by Bookbot
-
-## Installation
-
-*NOTE: Objective-C support: Support for Objective-C has been dropped in version 5.0.0, use version 4 or lower if you are using Objective-C.*
-
-### CocoaPods (Recommended)
-
-1. Install [CocoaPods](https://cocoapods.org)
-2. Add this repo to your `Podfile`
-
-	```ruby
-	target 'Example' do
-	    # IMPORTANT: Make sure use_frameworks! is included at the top of the file
-	    use_frameworks!
-
-	    pod 'UICircularProgressRing'
-	end
-	```
-3. Run `pod install`
-4. Open up the `.xcworkspace` that CocoaPods created
-5. Done!
-
-### Carthage
-
-#### Important: Interface builder support with Carthage is either broken or extremely limted
-
-To use with [Carthage](https://github.com/Carthage/Carthage)
-
-1. Make sure Carthage is installed
-
-	`brew install carthage`
-2. Add this repo to your Cartfile
-
-	`github "luispadron/UICircularProgressRing"`
-3. Install dependencies
-	`carthage update --platform iOS`
-
-## Usage
-
-### UICircularProgressRing Example
-
-```swift
-override func viewDidLoad() {
-  // Create the view
-  let progressRing = UICircularProgressRing()
-  // Change any of the properties you'd like
-  progressRing.maxValue = 50
-  progressRing.style = .dashed(pattern: [7.0, 7.0])
-  // etc ...
-}
-```
-
-To set a value and animate the view
-
-```swift
-// Somewhere not in viewDidLoad (since the views have not set yet, thus cannot be animated)
-// Remember to use unowned or weak self if referencing self to avoid retain cycle
-progressRing.startProgress(to: 49, duration: 2.0) {
-  print("Done animating!")
-  // Do anything your heart desires...
-}
-
-// Pause at any time during a running animation
-progressRing.pauseProgress()
-
-// Continue where you left off after a pause
-progressRing.continueProgress()
-```
-
-### UICircularTimerRing Example
-
-```swift
-override func viewDidLoad() {
-	// create the view
-	let timerRing = UICircularTimerRing()
-}
-```
-
-Animate and set time
-
-```swift
-						// seconds
-timerRing.startTimer(to: 60) { state in
-    switch state {
-    case .finished:
-        print("finished")
-    case .continued(let time):
-        print("continued: \(time)")
-    case .paused(let time):
-        print("paused: \(time)")
-    }
-}
-
-timerRing.pauseTimer() // pauses the timer
-
-timerRing.continueTimer() // continues from where we paused
-
-timerRing.resetTimer() // resets and cancels animations previously running
-```
-
-## Documentation
-
-Please **read** this before creating an issue about how to use the library:
-
-[DOCUMENTATION](https://htmlpreview.github.io/?https://raw.githubusercontent.com/luispadron/UICircularProgressRing/master/docs/Classes/UICircularProgressRing.html)
-
-## Misc.
-
-Do you use this library? Want to be featured? Go [here.](https://github.com/luispadron/UICircularProgressRing/issues/54)

+ 0 - 44
Pods/UICircularProgressRing/src/UICircularProgressRing/Extensions.swift

@@ -1,44 +0,0 @@
-//
-//  Extensions.swift
-//  UICircularProgressRing
-//
-//  Created by Luis on 2/5/19.
-//  Copyright © 2019 Luis Padron. All rights reserved.
-//
-
-/**
- * This file includes internal extensions.
- */
-
-/// Helper extension to allow removing layer animation based on AnimationKeys enum
-extension CALayer {
-    func removeAnimation(forKey key: UICircularRing.AnimationKeys) {
-        removeAnimation(forKey: key.rawValue)
-    }
-
-    func animation(forKey key: UICircularRing.AnimationKeys) -> CAAnimation? {
-        return animation(forKey: key.rawValue)
-    }
-
-    func value(forKey key: UICircularRing.AnimationKeys) -> Any? {
-        return value(forKey: key.rawValue)
-    }
-}
-
-/**
- A private extension to CGFloat in order to provide simple
- conversion from degrees to radians, used when drawing the rings.
- */
-extension CGFloat {
-    var rads: CGFloat { return self * CGFloat.pi / 180 }
-}
-
-/// adds simple conversion to CGFloat
-extension TimeInterval {
-    var float: CGFloat { return CGFloat(self) }
-}
-
-/// adds simple conversion to TimeInterval
-extension CGFloat {
-    var interval: TimeInterval { return TimeInterval(self) }
-}

+ 0 - 18
Pods/UICircularProgressRing/src/UICircularProgressRing/UICircularProgressRing.h

@@ -1,18 +0,0 @@
-//
-//  UICircularProgressRing.h
-//  UICircularProgressRing
-//
-//  Created by Luis Padron on 9/13/16.
-//  Copyright © 2016 Luis Padron. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-//! Project version number for UICircularProgressRing.
-FOUNDATION_EXPORT double UICircularProgressRingVersionNumber;
-
-//! Project version string for UICircularProgressRing.
-FOUNDATION_EXPORT const unsigned char UICircularProgressRingVersionString[];
-
-
-

+ 0 - 274
Pods/UICircularProgressRing/src/UICircularProgressRing/UICircularProgressRing.swift

@@ -1,274 +0,0 @@
-//
-//  UICircularProgressRing.swift
-//  UICircularProgressRing
-//
-//  Copyright (c) 2019 Luis Padron
-//
-//  Permission is hereby granted, free of charge, to any person obtaining a
-//  copy of this software and associated documentation files (the "Software"),
-//  to deal in the Software without restriction, including without limitation the
-//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-//  copies of the Software, and to permit persons to whom the Software is furnished
-//  to do so, subject to the following conditions:
-//
-//  The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-//  INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-//  FITNESS FOR A PARTICULAR PURPOSE AND
-//  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
-//  FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
-//  OR OTHERWISE, ARISING FROM, OUT OF OR IN
-//  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-import UIKit
-
-final public class UICircularProgressRing: UICircularRing {
-    // MARK: Members
-
-    /**
-     The delegate for the UICircularRing
-
-     ## Important ##
-     When progress is done updating via UICircularRing.setValue(_:), the
-     finishedUpdatingProgressFor(_ ring: UICircularRing) will be called.
-
-     The ring will be passed to the delegate in order to keep track of
-     multiple ring updates if needed.
-
-     ## Author
-     Luis Padron
-     */
-    public weak var delegate: UICircularProgressRingDelegate?
-
-    /**
-     The value property for the progress ring.
-
-     ## Important ##
-     Default = 0
-
-     Must be a non-negative value. If this value falls below `minValue` it will be
-     clamped and set equal to `minValue`.
-
-     This cannot be used to get the value while the ring is animating, to get
-     current value while animating use `currentValue`.
-
-     The current value of the progress ring after animating, use startProgress(value:)
-     to alter the value with the option to animate and have a completion handler.
-
-     ## Author
-     Luis Padron
-     */
-    @IBInspectable public var value: CGFloat = 0 {
-        didSet {
-            if value < minValue {
-                #if DEBUG
-                print("Warning in: \(#file):\(#line)")
-                print("Attempted to set a value less than minValue, value has been set to minValue.\n")
-                #endif
-                ringLayer.value = minValue
-            } else if value > maxValue {
-                #if DEBUG
-                print("Warning in: \(#file):\(#line)")
-                print("Attempted to set a value greater than maxValue, value has been set to maxValue.\n")
-                #endif
-                ringLayer.value = maxValue
-            } else {
-                ringLayer.value = value
-            }
-        }
-    }
-
-    /**
-     The current value of the progress ring
-
-     This will return the current value of the progress ring,
-     if the ring is animating it will be updated in real time.
-     If the ring is not currently animating then the value returned
-     will be the `value` property of the ring
-
-     ## Author
-     Luis Padron
-     */
-    public var currentValue: CGFloat? {
-        return isAnimating ? layer.presentation()?.value(forKey: .value) as? CGFloat : value
-    }
-
-    /**
-     The minimum value for the progress ring. ex: (0) -> 100.
-
-     ## Important ##
-     Default = 100
-
-     Must be a non-negative value, the absolute value is taken when setting this property.
-
-     The `value` of the progress ring must NOT fall below `minValue` if it does the `value` property is clamped
-     and will be set equal to `value`, you will receive a warning message in the console.
-
-     Making this value greater than
-
-     ## Author
-     Luis Padron
-     */
-    @IBInspectable public var minValue: CGFloat = 0.0 {
-        didSet { ringLayer.minValue = minValue }
-    }
-
-    /**
-     The maximum value for the progress ring. ex: 0 -> (100)
-
-     ## Important ##
-     Default = 100
-
-     Must be a non-negative value, the absolute value is taken when setting this property.
-
-     Unlike the `minValue` member `value` can extend beyond `maxValue`. What happens in this case
-     is the inner ring will do an extra loop through the outer ring, this is not noticible however.
-
-
-     ## Author
-     Luis Padron
-     */
-    @IBInspectable public var maxValue: CGFloat = 100.0 {
-        didSet { ringLayer.maxValue = maxValue }
-    }
-
-    /**
-     The type of animation function the ring view will use
-
-     ## Important ##
-     Default = .easeInEaseOut
-
-     ## Author
-     Luis Padron
-     */
-    public var animationTimingFunction: CAMediaTimingFunctionName = .easeInEaseOut {
-        didSet { ringLayer.animationTimingFunction = animationTimingFunction }
-    }
-
-    /**
-     The formatter responsible for formatting the
-     value of the progress ring into a readable text string
-     which is then displayed in the label of the ring.
-
-     Default formatter is of type `UICircularProgressRingFormatter`.
-
-     ## Author
-     Luis Padron
-     */
-    public var valueFormatter: UICircularRingValueFormatter = UICircularProgressRingFormatter() {
-        didSet { ringLayer.valueFormatter = valueFormatter }
-    }
-
-    /**
-     Typealias for the startProgress(:) method closure
-     */
-    public typealias ProgressCompletion = (() -> Void)
-
-    /// The completion block to call after the animation is done
-    private var completion: ProgressCompletion?
-
-    // MARK: API
-
-    /**
-     Sets the current value for the progress ring, calling this method while ring is
-     animating will cancel the previously set animation and start a new one.
-
-     - Parameter to: The value to be set for the progress ring
-     - Parameter duration: The time interval duration for the animation
-     - Parameter completion: The completion closure block that will be called when
-     animtion is finished (also called when animationDuration = 0), default is nil
-
-     ## Important ##
-     Animation duration = 0 will cause no animation to occur, and value will instantly
-     be set.
-
-     ## Author
-     Luis Padron
-     */
-    public func startProgress(to value: CGFloat, duration: TimeInterval, completion: ProgressCompletion? = nil) {
-        // Store the completion event locally
-        self.completion = completion
-
-        // call super class helper function to begin animating layer
-        startAnimation(duration: duration) {
-            self.delegate?.didFinishProgress(for: self)
-            self.completion?()
-        }
-
-        self.value = value
-    }
-
-    /**
-     Pauses the currently running animation and halts all progress.
-
-     ## Important ##
-     This method has no effect unless called when there is a running animation.
-     You should call this method manually whenever the progress ring is not in an active view,
-     for example in `viewWillDisappear` in a parent view controller.
-
-     ## Author
-     Luis Padron & Nicolai Cornelis
-     */
-    public func pauseProgress() {
-        // call super class helper to stop layer animation
-        pauseAnimation()
-        delegate?.didPauseProgress(for: self)
-    }
-
-    /**
-     Continues the animation with its remaining time from where it left off before it was paused.
-     This method has no effect unless called when there is a paused animation.
-     You should call this method when you wish to resume a paused animation.
-
-     ## Author
-     Luis Padron & Nicolai Cornelis
-     */
-    public func continueProgress() {
-        // call super class helper to continue layer animation
-        continueAnimation {
-            self.delegate?.didFinishProgress(for: self)
-            self.completion?()
-        }
-
-        delegate?.didContinueProgress(for: self)
-    }
-
-    /**
-     Resets the progress back to the `minValue` of the progress ring.
-     Does **not** perform any animations
-
-     ## Author
-     Luis Padron
-     */
-    public func resetProgress() {
-        // call super class helper to reset animation layer
-        resetAnimation()
-        value = minValue
-        // Remove reference to the completion block
-        completion = nil
-    }
-
-    // MARK: Overrides
-
-    override func initialize() {
-        super.initialize()
-        ringLayer.ring = self
-        ringLayer.value = value
-        ringLayer.maxValue = maxValue
-        ringLayer.minValue = minValue
-        ringLayer.valueFormatter = valueFormatter
-    }
-
-    override func didUpdateValue(newValue: CGFloat) {
-        super.didUpdateValue(newValue: newValue)
-        delegate?.didUpdateProgressValue(for: self, to: newValue)
-    }
-
-    override func willDisplayLabel(label: UILabel) {
-        super.willDisplayLabel(label: label)
-        delegate?.willDisplayLabel(for: self, label)
-    }
-}

+ 0 - 92
Pods/UICircularProgressRing/src/UICircularProgressRing/UICircularProgressRingDelegate.swift

@@ -1,92 +0,0 @@
-//
-//  UICircularProgressRingDelegate.swift
-//  UICircularProgressRing
-//
-//  Copyright (c) 2019 Luis Padron
-//
-//  Permission is hereby granted, free of charge, to any person obtaining a
-//  copy of this software and associated documentation files (the "Software"),
-//  to deal in the Software without restriction, including without limitation the
-//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-//  copies of the Software, and to permit persons to whom the Software is furnished
-//  to do so, subject to the following conditions:
-//
-//  The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-//  INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-//  FITNESS FOR A PARTICULAR PURPOSE AND
-//  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
-//  FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
-//  OR OTHERWISE, ARISING FROM, OUT OF OR IN
-//  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-import UIKit
-
-/**
- This is the protocol declaration for the UICircularRing delegate property
- 
- ## Important ##
- When progress is done updating via UICircularRing.setValue(_:), the
- finishedUpdatingProgress(forRing: UICircularRing) will be called.
- 
- The ring will be passed to the delegate in order to keep 
- track of multiple ring updates if needed.
- 
- ## Author
- Luis Padron
- */
-public protocol UICircularProgressRingDelegate: class {
-    /**
-     Called when progress ring is done animating for current value
-     
-     - Paramater
-        - ring: The ring which finished animating
-     
-     */
-    func didFinishProgress(for ring: UICircularProgressRing)
-
-    /**
-     Called when progress has paused
-
-     - Parameter:
-       - ring: The ring which has paused
-     */
-    func didPauseProgress(for ring: UICircularProgressRing)
-
-    /**
-     Called when the progress has continued after a pause
-
-     - Parameter:
-       - ring: The ring which has continued
-     */
-    func didContinueProgress(for ring: UICircularProgressRing)
-
-    /**
-     This method is called whenever the value is updated, this means during animation this method will be called in real time.
-     This can be used to update another label or do some other work, whenever you need the exact current value of the ring
-     during animation.
-
-     ## Important:
-
-     This is a very hot method and may be called hundreds of times per second during animations. As such make sure to only
-     do very simple and non-intensive work in this method. Doing any work that takes time will considerably slow down your application.
-
-     - Paramater
-        - ring: The ring which updated the progress
-        - newValue: The value which the ring has updated to
-     */
-    func didUpdateProgressValue(for ring: UICircularProgressRing, to newValue: CGFloat)
-
-    /**
-     This method is called whenever the label is about to be drawn.
-     This can be used to modify the label looks e.g. NSAttributedString for text kerning
-
-     - Paramater
-        - ring: The ring which the label will be displayed in
-        - label: The label which will be displayed
-     */
-    func willDisplayLabel(for ring: UICircularProgressRing, _ label: UILabel)
-}

+ 0 - 608
Pods/UICircularProgressRing/src/UICircularProgressRing/UICircularRing.swift

@@ -1,608 +0,0 @@
-//
-//  UICircularRing.swift
-//  UICircularProgressRing
-//
-//  Copyright (c) 2019 Luis Padron
-//
-//  Permission is hereby granted, free of charge, to any person obtaining a
-//  copy of this software and associated documentation files (the "Software"),
-//  to deal in the Software without restriction, including without limitation the
-//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-//  copies of the Software, and to permit persons to whom the Software is furnished
-//  to do so, subject to the following conditions:
-//
-//  The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-//  INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-//  FITNESS FOR A PARTICULAR PURPOSE AND
-//  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
-//  FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
-//  OR OTHERWISE, ARISING FROM, OUT OF OR IN
-//  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-import UIKit
-
-/**
- 
- # UICircularRing
-
- This is the base class of `UICircularProgressRing` and `UICircularTimerRing`.
- You should not instantiate this class, instead use one of the concrete classes provided
- or subclass and make your own.
-
- This is the UIView subclass that creates and handles everything
- to do with the circular ring.
- 
- This class has a custom CAShapeLayer (`UICircularRingLayer`) which
- handels the drawing and animating of the view
- 
- ## Author
- Luis Padron
- 
- */
-@IBDesignable open class UICircularRing: UIView {
-
-    // MARK: Circle Properties
-
-    /**
-     Whether or not the progress ring should be a full circle.
-     
-     What this means is that the outer ring will always go from 0 - 360 degrees and
-     the inner ring will be calculated accordingly depending on current value.
-     
-     ## Important ##
-     Default = true
-     
-     When this property is true any value set for `endAngle` will be ignored.
-     
-     ## Author
-     Luis Padron
-     
-     */
-    @IBInspectable open var fullCircle: Bool = true {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    // MARK: View Style
-
-    /**
-     The style of the progress ring.
-     
-     Type: `UICircularRingStyle`
-     
-     The five styles include `inside`, `ontop`, `dashed`, `dotted`, and `gradient`
-     
-     ## Important ##
-     Default = UICircularRingStyle.inside
-     
-     ## Author
-     Luis Padron
-     */
-    open var style: UICircularRingStyle = .inside {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    /**
-     The options for a gradient ring.
-
-     If this is non-`nil` then a gradient style will be applied.
-
-     ## Important ##
-    Default = `nil`
-    */
-    open var gradientOptions: UICircularRingGradientOptions? = nil {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    /**
-     A toggle for showing or hiding the value label.
-     If false the current value will not be shown.
-
-     ## Important ##
-     Default = true
-
-     ## Author
-     Luis Padron
-     */
-    @IBInspectable public var shouldShowValueText: Bool = true {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    /**
-     Style for the value knob, default is `nil`.
-
-     ## Important ##
-     If this is `nil`, no value knob is shown.
-
-    */
-    open var valueKnobStyle: UICircularRingValueKnobStyle? {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    /**
-     The start angle for the entire progress ring view.
-     
-     Please note that Cocoa Touch uses a clockwise rotating unit circle.
-     I.e: 90 degrees is at the bottom and 270 degrees is at the top
-     
-     ## Important ##
-     Default = 0 (degrees)
-     
-     Values should be in degrees (they're converted to radians internally)
-     
-     ## Author
-     Luis Padron
-     */
-    @IBInspectable open var startAngle: CGFloat = 0 {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    /**
-     The end angle for the entire progress ring
-     
-     Please note that Cocoa Touch uses a clockwise rotating unit circle.
-     I.e: 90 degrees is at the bottom and 270 degrees is at the top
-     
-     ## Important ##
-     Default = 360 (degrees)
-     
-     Values should be in degrees (they're converted to radians internally)
-     
-     ## Author
-     Luis Padron
-     */
-    @IBInspectable open var endAngle: CGFloat = 360 {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    // MARK: Outer Ring properties
-
-    /**
-     The width of the outer ring for the progres bar
-     
-     ## Important ##
-     Default = 10.0
-     
-     ## Author
-     Luis Padron
-     */
-    @IBInspectable open var outerRingWidth: CGFloat = 10.0 {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    /**
-     The color for the outer ring
-     
-     ## Important ##
-     Default = UIColor.gray
-     
-     ## Author
-     Luis Padron
-     */
-    @IBInspectable open var outerRingColor: UIColor = UIColor.gray {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    /**
-     The style for the tip/cap of the outer ring
-     
-     Type: `CGLineCap`
-     
-     ## Important ##
-     Default = CGLineCap.butt
-     
-     This is only noticible when ring is not a full circle.
-     
-     ## Author
-     Luis Padron
-     */
-    open var outerCapStyle: CGLineCap = .butt {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    // MARK: Inner Ring properties
-
-    /**
-     The width of the inner ring for the progres bar
-     
-     ## Important ##
-     Default = 5.0
-     
-     ## Author
-     Luis Padron
-     */
-    @IBInspectable open var innerRingWidth: CGFloat = 5.0 {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    /**
-     The color of the inner ring for the progres bar
-     
-     ## Important ##
-     Default = UIColor.blue
-     
-     ## Author
-     Luis Padron
-     */
-    @IBInspectable open var innerRingColor: UIColor = UIColor.blue {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    /**
-     The spacing between the outer ring and inner ring
-     
-     ## Important ##
-     This only applies when using progressRingStyle = 1
-     
-     Default = 1
-     
-     ## Author
-     Luis Padron
-     */
-    @IBInspectable open var innerRingSpacing: CGFloat = 1 {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    /**
-     The style for the tip/cap of the inner ring
-     
-     Type: `CGLineCap`
-     
-     ## Important ##
-     Default = CGLineCap.round
-     
-     ## Author
-     Luis Padron
-     */
-    open var innerCapStyle: CGLineCap = .round {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    // MARK: Label
-
-    /**
-     The text color for the value label field
-     
-     ## Important ##
-     Default = UIColor.black
-     
-     
-     ## Author
-     Luis Padron
-     */
-    @IBInspectable open var fontColor: UIColor = UIColor.black {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    /**
-     The font to be used for the progress indicator.
-     All font attributes are specified here except for font color, which is done
-     using `fontColor`.
-     
-     
-     ## Important ##
-     Default = UIFont.systemFont(ofSize: 18)
-     
-     
-     ## Author
-     Luis Padron
-     */
-    @IBInspectable open var font: UIFont = UIFont.systemFont(ofSize: 18) {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    /**
-     This returns whether or not the ring is currently animating
-     
-     ## Important ##
-     Get only property
-     
-     ## Author
-     Luis Padron
-     */
-    open var isAnimating: Bool {
-        return ringLayer.animation(forKey: .value) != nil
-    }
-
-    /**
-     The direction the circle is drawn in
-     Example: true -> clockwise
-     
-     ## Important ##
-     Default = true (draw the circle clockwise)
-     
-     ## Author
-     Pete Walker
-     */
-    @IBInspectable open var isClockwise: Bool = true {
-        didSet { ringLayer.setNeedsDisplay() }
-    }
-
-    /**
-     Typealias for animateProperties(duration:animations:completion:) fucntion completion
-     */
-    public typealias PropertyAnimationCompletion = (() -> Void)
-
-    // MARK: Private / internal
-
-    /**
-     Set the ring layer to the default layer, cated as custom layer
-     */
-    var ringLayer: UICircularRingLayer {
-        // swiftlint:disable:next force_cast
-        return layer as! UICircularRingLayer
-    }
-
-    /// This variable stores how long remains on the timer when it's paused
-    private var pausedTimeRemaining: TimeInterval = 0
-
-    /// Used to determine when the animation was paused
-    private var animationPauseTime: CFTimeInterval?
-
-    /// This stores the animation when the timer is paused. We use this variable to continue the animation where it left off.
-    /// See https://stackoverflow.com/questions/7568567/restoring-animation-where-it-left-off-when-app-resumes-from-background
-    var snapshottedAnimation: CAAnimation?
-
-    /// The completion timer, also indicates whether or not the view is animating
-    var animationCompletionTimer: Timer?
-
-    typealias AnimationCompletion = () -> Void
-
-    // MARK: Methods
-
-    /**
-     Overrides the default layer with the custom UICircularRingLayer class
-     */
-    override open class var layerClass: AnyClass {
-        return UICircularRingLayer.self
-    }
-
-    /**
-     Overriden public init to initialize the layer and view
-     */
-    override public init(frame: CGRect) {
-        super.init(frame: frame)
-        // Call the internal initializer
-        initialize()
-    }
-
-    /**
-     Overriden public init to initialize the layer and view
-     */
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-        // Call the internal initializer
-        initialize()
-    }
-
-    /**
-     This method initializes the custom CALayer to the default values
-     */
-    func initialize() {
-        // This view will become the value delegate of the layer, which will call the updateValue method when needed
-        ringLayer.ring = self
-
-        // Helps with pixelation and blurriness on retina devices
-        ringLayer.contentsScale = UIScreen.main.scale
-        ringLayer.shouldRasterize = true
-        ringLayer.rasterizationScale = UIScreen.main.scale * 2
-        ringLayer.masksToBounds = false
-
-        backgroundColor = UIColor.clear
-        ringLayer.backgroundColor = UIColor.clear.cgColor
-
-        NotificationCenter.default.addObserver(self,
-                                               selector: #selector(restoreAnimation),
-                                               name: UIApplication.willEnterForegroundNotification,
-                                               object: nil)
-
-        NotificationCenter.default.addObserver(self,
-                                               selector: #selector(snapshotAnimation),
-                                               name: UIApplication.willResignActiveNotification,
-                                               object: nil)
-    }
-
-    /**
-     Overriden because of custom layer drawing in UICircularRingLayer
-     */
-    open override func draw(_ rect: CGRect) {
-        super.draw(rect)
-    }
-
-    // MARK: Internal API
-
-    /**
-     These methods are called from the layer class in order to notify
-     this class about changes to the value and label display.
-
-     In this base class they do nothing.
-     */
-
-    func didUpdateValue(newValue: CGFloat) { }
-
-    func willDisplayLabel(label: UILabel) { }
-
-    /**
-     These functions are here to allow reuse between subclasses.
-     They handle starting, pausing and resetting an animation of the ring.
-    */
-
-    func startAnimation(duration: TimeInterval, completion: @escaping AnimationCompletion) {
-        if isAnimating {
-            animationPauseTime = nil
-        }
-
-        ringLayer.timeOffset = 0
-        ringLayer.beginTime = 0
-        ringLayer.speed = 1
-        ringLayer.animated = duration > 0
-        ringLayer.animationDuration = duration
-
-        // Check if a completion timer is still active and if so stop it
-        animationCompletionTimer?.invalidate()
-        animationCompletionTimer = Timer.scheduledTimer(timeInterval: duration,
-                                                        target: self,
-                                                        selector: #selector(self.animationDidComplete),
-                                                        userInfo: completion,
-                                                        repeats: false)
-    }
-
-    func pauseAnimation() {
-        guard isAnimating else {
-            #if DEBUG
-            print("""
-                    UICircularProgressRing: Progress was paused without having been started.
-                    This has no effect but may indicate that you're unnecessarily calling this method.
-                    """)
-            #endif
-            return
-        }
-
-        snapshotAnimation()
-
-        let pauseTime = ringLayer.convertTime(CACurrentMediaTime(), from: nil)
-        animationPauseTime = pauseTime
-
-        ringLayer.speed = 0.0
-        ringLayer.timeOffset = pauseTime
-
-        if let fireTime = animationCompletionTimer?.fireDate {
-            pausedTimeRemaining = fireTime.timeIntervalSince(Date())
-        } else {
-            pausedTimeRemaining = 0
-        }
-
-        animationCompletionTimer?.invalidate()
-        animationCompletionTimer = nil
-    }
-
-    func continueAnimation(completion: @escaping AnimationCompletion) {
-        guard let pauseTime = animationPauseTime else {
-            #if DEBUG
-            print("""
-                    UICircularRing: Progress was continued without having been paused.
-                    This has no effect but may indicate that you're unnecessarily calling this method.
-                    """)
-            #endif
-            return
-        }
-
-        restoreAnimation()
-
-        ringLayer.speed = 1.0
-        ringLayer.timeOffset = 0.0
-        ringLayer.beginTime = 0.0
-
-        let timeSincePause = ringLayer.convertTime(CACurrentMediaTime(), from: nil) - pauseTime
-
-        ringLayer.beginTime = timeSincePause
-
-        animationCompletionTimer?.invalidate()
-        animationCompletionTimer = Timer.scheduledTimer(timeInterval: pausedTimeRemaining,
-                                               target: self,
-                                               selector: #selector(animationDidComplete),
-                                               userInfo: completion,
-                                               repeats: false)
-
-        animationPauseTime = nil
-    }
-
-    func resetAnimation() {
-        ringLayer.animated = false
-        ringLayer.removeAnimation(forKey: .value)
-        snapshottedAnimation = nil
-
-        // Stop the timer and thus make the completion method not get fired
-        animationCompletionTimer?.invalidate()
-        animationCompletionTimer = nil
-        animationPauseTime = nil
-
-    }
-
-    // MARK: API
-
-    /**
-     This function allows animation of the animatable properties of the `UICircularRing`.
-     These properties include `innerRingColor, innerRingWidth, outerRingColor, outerRingWidth, innerRingSpacing, fontColor`.
-     
-     Simply call this function and inside of the animation block change the animatable properties as you would in any `UView`
-     animation block.
-     
-     The completion block is called when all animations finish.
-     */
-    open func animateProperties(duration: TimeInterval, animations: () -> Void) {
-        animateProperties(duration: duration, animations: animations, completion: nil)
-    }
-
-    /**
-     This function allows animation of the animatable properties of the `UICircularRing`.
-     These properties include `innerRingColor, innerRingWidth, outerRingColor, outerRingWidth, innerRingSpacing, fontColor`.
-     
-     Simply call this function and inside of the animation block change the animatable properties as you would in any `UView`
-     animation block.
-     
-     The completion block is called when all animations finish.
-     */
-    open func animateProperties(duration: TimeInterval, animations: () -> Void,
-                                completion: PropertyAnimationCompletion? = nil) {
-        ringLayer.shouldAnimateProperties = true
-        ringLayer.propertyAnimationDuration = duration
-        CATransaction.begin()
-        CATransaction.setCompletionBlock {
-            // Reset and call completion
-            self.ringLayer.shouldAnimateProperties = false
-            self.ringLayer.propertyAnimationDuration = 0.0
-            completion?()
-        }
-        // Commit and perform animations
-        animations()
-        CATransaction.commit()
-    }
-}
-
-// MARK: Helpers
-
-extension UICircularRing {
-    /**
-     This method is called when the application goes into the background or when the
-     ProgressRing is paused using the pauseProgress method.
-     This is necessary for the animation to properly pick up where it left off.
-     Triggered by UIApplicationWillResignActive.
-
-     ## Author
-     Nicolai Cornelis
-     */
-    @objc func snapshotAnimation() {
-        guard let animation = ringLayer.animation(forKey: .value) else { return }
-        snapshottedAnimation = animation
-    }
-
-    /**
-     This method is called when the application comes back into the foreground or
-     when the ProgressRing is resumed using the continueProgress method.
-     This is necessary for the animation to properly pick up where it left off.
-     Triggered by UIApplicationWillEnterForeground.
-
-     ## Author
-     Nicolai Cornelis
-     */
-    @objc func restoreAnimation() {
-        guard let animation = snapshottedAnimation else { return }
-        ringLayer.add(animation, forKey: AnimationKeys.value.rawValue)
-    }
-
-    /// Called when the animation timer is complete
-    @objc func animationDidComplete(withTimer timer: Timer) {
-        (timer.userInfo as? AnimationCompletion)?()
-    }
-}
-
-extension UICircularRing {
-    /// Helper enum for animation key
-    enum AnimationKeys: String {
-        case value
-    }
-}

+ 0 - 400
Pods/UICircularProgressRing/src/UICircularProgressRing/UICircularRingLayer.swift

@@ -1,400 +0,0 @@
-//
-//  UICircularRingLayer.swift
-//  UICircularProgressRing
-//
-//  Copyright (c) 2019 Luis Padron
-//
-//  Permission is hereby granted, free of charge, to any person obtaining a
-//  copy of this software and associated documentation files (the "Software"),
-//  to deal in the Software without restriction, including without limitation the
-//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-//  copies of the Software, and to permit persons to whom the Software is furnished
-//  to do so, subject to the following conditions:
-//
-//  The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-//  INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-//  FITNESS FOR A PARTICULAR PURPOSE AND
-//  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
-//  FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
-//  OR OTHERWISE, ARISING FROM, OUT OF OR IN
-//  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-import UIKit
-
-/**
- The internal subclass for CAShapeLayer.
- This is the class that handles all the drawing and animation.
- This class is not interacted with, instead
- properties are set in UICircularRing and those are delegated to here.
-
- */
-class UICircularRingLayer: CAShapeLayer {
-
-    // MARK: Properties
-
-    @NSManaged var value: CGFloat
-    @NSManaged var minValue: CGFloat
-    @NSManaged var maxValue: CGFloat
-
-    /// the delegate for the value, is notified when value changes
-    @NSManaged weak var ring: UICircularRing!
-
-    /// formatter for the text of the value label
-    var valueFormatter: UICircularRingValueFormatter?
-
-    /// the style for the value knob
-    var valueKnobStyle: UICircularRingValueKnobStyle?
-
-    // MARK: Animation members
-
-    var animationDuration: TimeInterval = 1.0
-    var animationTimingFunction: CAMediaTimingFunctionName = .easeInEaseOut
-    var animated = false
-
-    /// the value label which draws the text for the current value
-    lazy var valueLabel: UILabel = UILabel(frame: .zero)
-
-    // MARK: Animatable properties
-
-    /// whether or not animatable properties should be animated when changed
-    var shouldAnimateProperties: Bool = false
-
-    /// the animation duration for a animatable property animation
-    var propertyAnimationDuration: TimeInterval = 0.0
-
-    /// the properties which are animatable
-    static let animatableProperties: [String] = ["innerRingWidth", "innerRingColor",
-                                                         "outerRingWidth", "outerRingColor",
-                                                         "fontColor", "innerRingSpacing"]
-
-    // Returns whether or not a given property key is animatable
-    static func isAnimatableProperty(_ key: String) -> Bool {
-        return animatableProperties.firstIndex(of: key) != nil
-    }
-
-    // MARK: Init
-
-    override init() {
-        super.init()
-    }
-
-    override init(layer: Any) {
-        // copy our properties to this layer which will be used for animation
-        guard let layer = layer as? UICircularRingLayer else { fatalError("unable to copy layer") }
-        valueFormatter = layer.valueFormatter
-        valueKnobStyle = layer.valueKnobStyle
-        animationDuration = layer.animationDuration
-        animationTimingFunction = layer.animationTimingFunction
-        animated = layer.animated
-        shouldAnimateProperties = layer.shouldAnimateProperties
-        propertyAnimationDuration = layer.propertyAnimationDuration
-        super.init(layer: layer)
-    }
-
-    required init?(coder aDecoder: NSCoder) { return nil }
-
-    // MARK: Draw
-
-    /**
-     Overriden for custom drawing.
-     Draws the outer ring, inner ring and value label.
-     */
-    override func draw(in ctx: CGContext) {
-        super.draw(in: ctx)
-        UIGraphicsPushContext(ctx)
-        // Draw the rings
-        drawOuterRing()
-        drawInnerRing(in: ctx)
-        // Draw the label
-        drawValueLabel()
-        // Call the delegate and notifiy of updated value
-        if let updatedValue = value(forKey: "value") as? CGFloat {
-            ring.didUpdateValue(newValue: updatedValue)
-        }
-        UIGraphicsPopContext()
-
-    }
-
-    // MARK: Animation methods
-
-    /**
-     Watches for changes in the value property, and setNeedsDisplay accordingly
-     */
-    override class func needsDisplay(forKey key: String) -> Bool {
-        if key == "value" || isAnimatableProperty(key) {
-            return true
-        } else {
-            return super.needsDisplay(forKey: key)
-        }
-    }
-
-    /**
-     Creates animation when value property is changed
-     */
-    override func action(forKey event: String) -> CAAction? {
-        if event == "value" && animated {
-            let animation = CABasicAnimation(keyPath: "value")
-            animation.fromValue = presentation()?.value(forKey: "value")
-            animation.timingFunction = CAMediaTimingFunction(name: animationTimingFunction)
-            animation.duration = animationDuration
-            return animation
-        } else if UICircularRingLayer.isAnimatableProperty(event) && shouldAnimateProperties {
-            let animation = CABasicAnimation(keyPath: event)
-            animation.fromValue = presentation()?.value(forKey: event)
-            animation.timingFunction = CAMediaTimingFunction(name: animationTimingFunction)
-            animation.duration = propertyAnimationDuration
-            return animation
-        } else {
-            return super.action(forKey: event)
-        }
-    }
-
-    // MARK: Helpers
-
-    /**
-     Draws the outer ring for the view.
-     Sets path properties according to how the user has decided to customize the view.
-     */
-    private func drawOuterRing() {
-        guard ring.outerRingWidth > 0 else { return }
-        let center: CGPoint = CGPoint(x: bounds.midX, y: bounds.midY)
-
-        let knobSize = ring.valueKnobStyle?.size ?? 0
-        let borderWidth: CGFloat
-        if case let UICircularRingStyle.bordered(width, _) = ring.style {
-            borderWidth = width
-        } else {
-            borderWidth = 0
-        }
-
-        let offSet = max(ring.outerRingWidth, ring.innerRingWidth) / 2
-                        + (knobSize / 4)
-                        + (borderWidth * 2)
-        let outerRadius: CGFloat = min(bounds.width, bounds.height) / 2 - offSet
-        let start: CGFloat = ring.fullCircle ? 0 : ring.startAngle.rads
-        let end: CGFloat = ring.fullCircle ? .pi * 2 : ring.endAngle.rads
-        let outerPath = UIBezierPath(arcCenter: center,
-                                     radius: outerRadius,
-                                     startAngle: start,
-                                     endAngle: end,
-                                     clockwise: true)
-        outerPath.lineWidth = ring.outerRingWidth
-        outerPath.lineCapStyle = ring.outerCapStyle
-        // Update path depending on style of the ring
-        updateOuterRingPath(outerPath, radius: outerRadius, style: ring.style)
-
-        ring.outerRingColor.setStroke()
-        outerPath.stroke()
-    }
-
-    /**
-     Draws the inner ring for the view.
-     Sets path properties according to how the user has decided to customize the view.
-     */
-    private func drawInnerRing(in ctx: CGContext) {
-        guard ring.innerRingWidth > 0 else { return }
-
-        let center: CGPoint = CGPoint(x: bounds.midX, y: bounds.midY)
-
-        let innerEndAngle = calculateInnerEndAngle()
-        let radiusIn = calculateInnerRadius()
-
-        // Start drawing
-        let innerPath: UIBezierPath = UIBezierPath(arcCenter: center,
-                                                   radius: radiusIn,
-                                                   startAngle: ring.startAngle.rads,
-                                                   endAngle: innerEndAngle.rads,
-                                                   clockwise: ring.isClockwise)
-
-        // Draw path
-        ctx.setLineWidth(ring.innerRingWidth)
-        ctx.setLineJoin(.round)
-        ctx.setLineCap(ring.innerCapStyle)
-        ctx.setStrokeColor(ring.innerRingColor.cgColor)
-        ctx.addPath(innerPath.cgPath)
-        ctx.drawPath(using: .stroke)
-
-        if let gradientOptions = ring.gradientOptions {
-            // Create gradient and draw it
-            var cgColors: [CGColor] = [CGColor]()
-            for color: UIColor in gradientOptions.colors {
-                cgColors.append(color.cgColor)
-            }
-
-            guard let gradient: CGGradient = CGGradient(colorsSpace: nil,
-                                                        colors: cgColors as CFArray,
-                                                        locations: gradientOptions.colorLocations)
-            else {
-                fatalError("\nUnable to create gradient for progress ring.\n" +
-                    "Check values of gradientColors and gradientLocations.\n")
-            }
-
-            ctx.saveGState()
-            ctx.addPath(innerPath.cgPath)
-            ctx.replacePathWithStrokedPath()
-            ctx.clip()
-
-            drawGradient(gradient,
-                         start: gradientOptions.startPosition,
-                         end: gradientOptions.endPosition,
-                         in: ctx)
-
-            ctx.restoreGState()
-        }
-
-        if let knobStyle = ring.valueKnobStyle, value > minValue {
-            let knobOffset = knobStyle.size / 2
-            drawValueKnob(in: ctx, origin: CGPoint(x: innerPath.currentPoint.x - knobOffset,
-                                                   y: innerPath.currentPoint.y - knobOffset))
-        }
-    }
-
-    /// Updates the outer ring path depending on the ring's style
-    private func updateOuterRingPath(_ path: UIBezierPath, radius: CGFloat, style: UICircularRingStyle) {
-        switch style {
-        case .dashed(let pattern):
-            path.setLineDash(pattern, count: pattern.count, phase: 0.0)
-
-        case .dotted:
-            path.setLineDash([0, path.lineWidth * 2], count: 2, phase: 0)
-            path.lineCapStyle = .round
-
-        case .bordered(let borderWidth, let borderColor):
-            let center: CGPoint = CGPoint(x: bounds.midX, y: bounds.midY)
-            let knobSize = valueKnobStyle?.size ?? 0
-            let offSet = max(ring.outerRingWidth, ring.innerRingWidth) / 2
-                            + knobSize / 4
-                            + borderWidth * 2
-            let outerRadius: CGFloat = min(bounds.width, bounds.height) / 2 - offSet
-            let borderStartAngle = ring.outerCapStyle == .butt ? ring.startAngle - borderWidth : ring.startAngle
-            let borderEndAngle = ring.outerCapStyle == .butt ? ring.endAngle + borderWidth : ring.endAngle
-            let start: CGFloat = ring.fullCircle ? 0 : borderStartAngle.rads
-            let end: CGFloat = ring.fullCircle ? .pi * 2 : borderEndAngle.rads
-            let borderPath = UIBezierPath(arcCenter: center,
-                                          radius: outerRadius,
-                                          startAngle: start,
-                                          endAngle: end,
-                                          clockwise: true)
-            UIColor.clear.setFill()
-            borderPath.fill()
-            borderPath.lineWidth = (borderWidth * 2) + ring.outerRingWidth
-            borderPath.lineCapStyle = ring.outerCapStyle
-            borderColor.setStroke()
-            borderPath.stroke()
-        default:
-            break
-        }
-    }
-
-    /// Returns the end angle of the inner ring
-    private func calculateInnerEndAngle() -> CGFloat {
-        let innerEndAngle: CGFloat
-
-        if ring.fullCircle {
-            if !ring.isClockwise {
-                innerEndAngle = ring.startAngle - ((value - minValue) / (maxValue - minValue) * 360.0)
-            } else {
-                innerEndAngle = (value - minValue) / (maxValue - minValue) * 360.0 + ring.startAngle
-            }
-        } else {
-            // Calculate the center difference between the end and start angle
-            let angleDiff: CGFloat = (ring.startAngle > ring.endAngle) ? (360.0 - ring.startAngle + ring.endAngle) : (ring.endAngle - ring.startAngle)
-            // Calculate how much we should draw depending on the value set
-            if !ring.isClockwise {
-                innerEndAngle = ring.startAngle - ((value - minValue) / (maxValue - minValue) * angleDiff)
-            } else {
-                innerEndAngle = (value - minValue) / (maxValue - minValue) * angleDiff + ring.startAngle
-            }
-        }
-
-        return innerEndAngle
-    }
-
-    /// Returns the raidus of the inner ring
-    private func calculateInnerRadius() -> CGFloat {
-        // The radius for style 1 is set below
-        // The radius for style 1 is a bit less than the outer,
-        // this way it looks like its inside the circle
-        let radiusIn: CGFloat
-
-        let knobSize = ring.valueKnobStyle?.size ?? 0
-
-        switch ring.style {
-        case .inside:
-            let difference = ring.outerRingWidth * 2 + ring.innerRingSpacing + knobSize / 2
-            let offSet = ring.innerRingWidth / 2 + knobSize / 2
-            radiusIn = (min(bounds.width - difference, bounds.height - difference) / 2) - offSet
-        case .bordered(let borderWidth, _):
-            let offSet = (max(ring.outerRingWidth, ring.innerRingWidth) / 2) + (knobSize / 4) + (borderWidth * 2)
-            radiusIn = (min(bounds.width, bounds.height) / 2) - offSet
-        default:
-            let offSet = (max(ring.outerRingWidth, ring.innerRingWidth) / 2) + (knobSize / 4)
-            radiusIn = (min(bounds.width, bounds.height) / 2) - offSet
-        }
-
-        return radiusIn
-    }
-
-    /**
-     Draws a gradient with a start and end position inside the provided context
-     */
-    private func drawGradient(_ gradient: CGGradient,
-                              start: UICircularRingGradientPosition,
-                              end: UICircularRingGradientPosition,
-                              in context: CGContext) {
-
-        context.drawLinearGradient(gradient,
-                                   start: start.pointForPosition(in: bounds),
-                                   end: end.pointForPosition(in: bounds),
-                                   options: .drawsBeforeStartLocation)
-    }
-
-    /**
-     Draws the value knob inside the provided context
-     */
-    private func drawValueKnob(in context: CGContext, origin: CGPoint) {
-        guard let knobStyle = ring.valueKnobStyle else { return }
-
-        context.saveGState()
-
-        let rect = CGRect(origin: origin, size: CGSize(width: knobStyle.size, height: knobStyle.size))
-        let knobPath = UIBezierPath(ovalIn: rect)
-
-        context.setShadow(offset: knobStyle.shadowOffset,
-                          blur: knobStyle.shadowBlur,
-                          color: knobStyle.shadowColor.cgColor)
-        context.addPath(knobPath.cgPath)
-        context.setFillColor(knobStyle.color.cgColor)
-        context.setLineCap(.round)
-        context.setLineWidth(12)
-        context.drawPath(using: .fill)
-
-        context.restoreGState()
-    }
-
-    /**
-     Draws the value label for the view.
-     Only drawn if shouldShowValueText = true
-     */
-    func drawValueLabel() {
-        guard ring.shouldShowValueText else { return }
-
-        // Draws the text field
-        // Some basic label properties are set
-        valueLabel.font = ring.font
-        valueLabel.textAlignment = .center
-        valueLabel.textColor = ring.fontColor
-        valueLabel.text = valueFormatter?.string(for: value)
-        ring.willDisplayLabel(label: valueLabel)
-        valueLabel.sizeToFit()
-
-        // Deterime what should be the center for the label
-        valueLabel.center = CGPoint(x: bounds.midX, y: bounds.midY)
-
-        valueLabel.drawText(in: bounds)
-    }
-}

+ 0 - 197
Pods/UICircularProgressRing/src/UICircularProgressRing/UICircularRingStyle.swift

@@ -1,197 +0,0 @@
-//
-//  UICircularRingStyle.swift
-//  UICircularProgressRing
-//
-//  Copyright (c) 2019 Luis Padron
-//
-//  Permission is hereby granted, free of charge, to any person obtaining a
-//  copy of this software and associated documentation files (the "Software"),
-//  to deal in the Software without restriction, including without limitation the
-//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-//  copies of the Software, and to permit persons to whom the Software is furnished
-//  to do so, subject to the following conditions:
-//
-//  The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-//  INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-//  FITNESS FOR A PARTICULAR PURPOSE AND
-//  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
-//  FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
-//  OR OTHERWISE, ARISING FROM, OUT OF OR IN
-//  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-import UIKit.UIColor
-
-// MARK: UICircularRingStyle
-
-/**
- 
- # UICircularRingStyle
- 
- This is an enumeration which is used to determine the style of the progress ring.
- 
- ## Author
- Luis Padron
- 
- */
-public enum UICircularRingStyle {
-    /// inner ring is inside the circle
-    case inside
-
-    /// inner ring is placed ontop of the outer ring
-    case ontop
-
-    /// outer ring is dashed, the pattern list is how the dashes should appear
-    case dashed(pattern: [CGFloat])
-
-    /// outer ring is dotted
-    case dotted
-
-    /// inner ring is placed ontop of the outer ring and outer ring has border
-    case bordered(width: CGFloat, color: UIColor)
-}
-
-// MARK: UICircularRingValueKnobStyle
-
-/**
-
- # UICircularRingValueKnobStyle
-
- Struct for setting the style of the value knob
-
- ## Author
- Luis Padron
-
- */
-public struct UICircularRingValueKnobStyle {
-
-    /// default implmementation of the knob style
-    public static let `default` = UICircularRingValueKnobStyle(size: 15.0, color: .lightGray)
-
-    /// the size of the knob
-    public let size: CGFloat
-
-    /// the color of the knob
-    public let color: UIColor
-
-    /// the amount of blur to give the shadow
-    public let shadowBlur: CGFloat
-
-    /// the offset to give the shadow
-    public let shadowOffset: CGSize
-
-    /// the color for the shadow
-    public let shadowColor: UIColor
-
-    /// creates a new `UICircularRingValueKnobStyle`
-    public init(size: CGFloat,
-                color: UIColor,
-                shadowBlur: CGFloat = 2.0,
-                shadowOffset: CGSize = .zero,
-                shadowColor: UIColor = UIColor.black.withAlphaComponent(0.8)) {
-        self.size = size
-        self.color = color
-        self.shadowBlur = shadowBlur
-        self.shadowOffset = shadowOffset
-        self.shadowColor = shadowColor
-    }
-}
-
-// MARK: UICircularRingGradientPosition
-
-/**
-
- UICircularRingGradientPosition
-
- This is an enumeration which is used to determine the position for a
- gradient. Used inside the `UICircularRingLayer` to allow customization
- for the gradient.
- */
-public enum UICircularRingGradientPosition {
-    /// Gradient positioned at the top
-    case top
-    /// Gradient positioned at the bottom
-    case bottom
-    /// Gradient positioned to the left
-    case left
-    /// Gradient positioned to the right
-    case right
-    /// Gradient positioned in the top left corner
-    case topLeft
-    /// Gradient positioned in the top right corner
-    case topRight
-    /// Gradient positioned in the bottom left corner
-    case bottomLeft
-    /// Gradient positioned in the bottom right corner
-    case bottomRight
-
-    /**
-     Returns a `CGPoint` in the coordinates space of the passed in `CGRect`
-     for the specified position of the gradient.
-     */
-    func pointForPosition(in rect: CGRect) -> CGPoint {
-        switch self {
-        case .top:
-            return CGPoint(x: rect.midX, y: rect.minY)
-        case .bottom:
-            return CGPoint(x: rect.midX, y: rect.maxY)
-        case .left:
-            return CGPoint(x: rect.minX, y: rect.midY)
-        case .right:
-            return CGPoint(x: rect.maxX, y: rect.midY)
-        case .topLeft:
-            return CGPoint(x: rect.minX, y: rect.minY)
-        case .topRight:
-            return CGPoint(x: rect.maxX, y: rect.minY)
-        case .bottomLeft:
-            return CGPoint(x: rect.minX, y: rect.maxY)
-        case .bottomRight:
-            return CGPoint(x: rect.maxX, y: rect.maxY)
-        }
-    }
-}
-
-// MARK: UICircularRingGradientOptions
-
-/**
- UICircularRingGradientOptions
-
- Struct for defining the options for the UICircularRingStyle.gradient case.
-
- ## Important ##
- Make sure the number of `colors` is equal to the number of `colorLocations`
- */
-public struct UICircularRingGradientOptions {
-
-    /// a default styling option for the gradient style
-    public static let `default` = UICircularRingGradientOptions(startPosition: .topRight,
-                                                            endPosition: .bottomLeft,
-                                                            colors: [.red, .blue],
-                                                            colorLocations: [0, 1])
-
-    /// the start location for the gradient
-    public let startPosition: UICircularRingGradientPosition
-
-    /// the end location for the gradient
-    public let endPosition: UICircularRingGradientPosition
-
-    /// the colors to use in the gradient, the count of this list must match the count of `colorLocations`
-    public let colors: [UIColor]
-
-    /// the locations of where to place the colors, valid numbers are from 0.0 - 1.0
-    public let colorLocations: [CGFloat]
-
-    /// create a new UICircularRingGradientOptions
-    public init(startPosition: UICircularRingGradientPosition,
-                endPosition: UICircularRingGradientPosition,
-                colors: [UIColor],
-                colorLocations: [CGFloat]) {
-        self.startPosition = startPosition
-        self.endPosition = endPosition
-        self.colors = colors
-        self.colorLocations = colorLocations
-    }
-}

+ 0 - 167
Pods/UICircularProgressRing/src/UICircularProgressRing/UICircularRingValueFormatter.swift

@@ -1,167 +0,0 @@
-//
-//  UICircularRingValueFormatter.swift
-//  UICircularProgressRing
-//
-//  Created by Luis on 2/7/19.
-//  Copyright © 2019 Luis Padron. All rights reserved.
-//
-
-import Foundation
-
-// MARK: UICircularRingValueFormatter
-
-/**
- UICircularRingValueFormatter
-
- Any custom formatter must conform to this protocol.
-
- */
-public protocol UICircularRingValueFormatter {
-    /// returns a string for the given object
-    func string(for value: Any) -> String?
-}
-
-// MARK: UICircularTimerRingFormatter
-
-/**
- UICircularTimerRingFormatter
-
- The formatter used in UICircularTimerRing class, formats
- the ring value into a time string.
- */
-public struct UICircularTimerRingFormatter: UICircularRingValueFormatter {
-    // MARK: Members
-
-    /// defines the units allowed to be used when converting string, by default `[.minute, .second]`
-    public var units: NSCalendar.Unit {
-        didSet { formatter.allowedUnits = units }
-    }
-
-    /// the style of the formatted string, by default `.short`
-    public var style: DateComponentsFormatter.UnitsStyle {
-        didSet { formatter.unitsStyle = style }
-    }
-
-    /// formatter which formats the time string of the ring label
-    private var formatter: DateComponentsFormatter {
-        let formatter = DateComponentsFormatter()
-        formatter.allowedUnits = units
-        formatter.unitsStyle = style
-        return formatter
-    }
-
-    // MARK: Init
-
-    public init(units: NSCalendar.Unit = [.minute, .second],
-                style: DateComponentsFormatter.UnitsStyle = .short) {
-        self.units = units
-        self.style = style
-    }
-
-    // MARK: API
-
-    /// formats the value of the ring using the date components formatter with given units/style
-    public func string(for value: Any) -> String? {
-        guard let value = value as? CGFloat else { return nil }
-        return formatter.string(from: value.interval)
-    }
-}
-
-// MARK: UICircularProgressRingFormatter
-
-/**
- UICircularProgressRingFormatter
-
- The formatter used in UICircularProgressRing class,
- responsible for formatting the value of the ring into a readable string
- */
-public struct UICircularProgressRingFormatter: UICircularRingValueFormatter {
-
-    // MARK: Members
-
-    /**
-     The name of the value indicator the value label will
-     appened to the value
-     Example: " GB" -> "100 GB"
-
-     ## Important ##
-     Default = "%"
-
-     ## Author
-     Luis Padron
-     */
-    public var valueIndicator: String
-
-    /**
-     A toggle for either placing the value indicator right or left to the value
-     Example: true -> "GB 100" (instead of 100 GB)
-
-     ## Important ##
-     Default = false (place value indicator to the right)
-
-     ## Author
-     Elad Hayun
-     */
-    public var rightToLeft: Bool
-
-    /**
-     A toggle for showing or hiding floating points from
-     the value in the value label
-
-     ## Important ##
-     Default = false (dont show)
-
-     To customize number of decmial places to show, assign a value to decimalPlaces.
-
-     ## Author
-     Luis Padron
-     */
-    public var showFloatingPoint: Bool
-
-    /**
-     The amount of decimal places to show in the value label
-
-     ## Important ##
-     Default = 2
-
-     Only used when showFloatingPoint = true
-
-     ## Author
-     Luis Padron
-     */
-    public var decimalPlaces: Int
-
-    // MARK: Init
-
-    public init(valueIndicator: String = "%",
-                rightToLeft: Bool = false,
-                showFloatingPoint: Bool = false,
-                decimalPlaces: Int = 2) {
-        self.valueIndicator = valueIndicator
-        self.rightToLeft = rightToLeft
-        self.showFloatingPoint = showFloatingPoint
-        self.decimalPlaces = decimalPlaces
-    }
-
-    // MARK: API
-
-    /// formats the value of the progress ring using the given properties
-    public func string(for value: Any) -> String? {
-        guard let value = value as? CGFloat else { return nil }
-
-        if rightToLeft {
-            if showFloatingPoint {
-                return "\(valueIndicator)" + String(format: "%.\(decimalPlaces)f", value)
-            } else {
-                return "\(valueIndicator)\(Int(value))"
-            }
-
-        } else {
-            if showFloatingPoint {
-                return String(format: "%.\(decimalPlaces)f", value) + "\(valueIndicator)"
-            } else {
-                return "\(Int(value))\(valueIndicator)"
-            }
-        }
-    }
-}

+ 0 - 153
Pods/UICircularProgressRing/src/UICircularProgressRing/UICircularTimerRing.swift

@@ -1,153 +0,0 @@
-//
-//  UICircularTimerRing.swift
-//  UICircularProgressRing
-//
-//  Copyright (c) 2019 Luis Padron
-//
-//  Permission is hereby granted, free of charge, to any person obtaining a
-//  copy of this software and associated documentation files (the "Software"),
-//  to deal in the Software without restriction, including without limitation the
-//  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-//  copies of the Software, and to permit persons to whom the Software is furnished
-//  to do so, subject to the following conditions:
-//
-//  The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-//  INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-//  FITNESS FOR A PARTICULAR PURPOSE AND
-//  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
-//  FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
-//  OR OTHERWISE, ARISING FROM, OUT OF OR IN
-//  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-import UIKit
-
-final public class UICircularTimerRing: UICircularRing {
-    // MARK: Members
-
-    /**
-     The formatter used when formatting the value into a string for the ring.
-
-     Default formatter is of type `UICircularTimerRingFormatter`.
-     */
-    public var valueFormatter: UICircularRingValueFormatter = UICircularTimerRingFormatter() {
-        didSet { ringLayer.valueFormatter = valueFormatter }
-    }
-
-    /**
-     The handler for the timer.
-
-     The handler is called whenever the timer finishes or is paused.
-     If the timer is paused handler will be called with (false, elapsedTime)
-     Otherwise the handler will be called with (true, finalTime)
-     */
-    public typealias TimerHandler = (State) -> Void
-
-    // MARK: Private Members
-
-    /// This is the max value for the layer, which corresponds
-    /// to the time that was set for the timer
-    private var time: TimeInterval = 60
-
-    /// the elapsed time since calling `startTimer`
-    private var elapsedTime: TimeInterval? {
-        return layer.presentation()?.value(forKey: .value) as? TimeInterval
-    }
-
-    /// the completion for over all timer
-    private var timerHandler: TimerHandler?
-
-    // MARK: API
-
-    /**
-     Starts the timer until the given time is elapsed.
-
-     Parameters:
-        - startTime: the time at which the timer will begin, default is 0.
-        - endtime: the time at which the timer will end, the animation duration will be `endTime - startTime`.
-        - handler: the handler which is called and updated depending on the state of the timer.
-     */
-    public func startTimer(from startTime: TimeInterval = 0.0, to endTime: TimeInterval, handler: TimerHandler?) {
-        // begin animation to start time, this should be done instantly thus 0 duration
-        startAnimation(duration: 0) {
-            // begin animation to end time, this is done with difference in endTime and startTime
-            self.startAnimation(duration: endTime - startTime) {
-                self.timerHandler?(.finished)
-            }
-
-            // this will cause the animation to the end time value
-            self.ringLayer.value = endTime.float
-            self.ringLayer.maxValue = endTime.float
-        }
-
-        // this causes the animation to the start time
-        ringLayer.value = startTime.float
-        ringLayer.maxValue = endTime.float
-
-        // store time and handler
-        time = endTime
-        timerHandler = handler
-    }
-
-    /**
-     Pauses the timer.
-
-     Handler will be called with (false, elapsedTime)
-     */
-    public func pauseTimer() {
-        timerHandler?(.paused(elpasedTime: elapsedTime))
-        pauseAnimation()
-    }
-
-    /**
-     Continues the timer from a previously paused time.
-     */
-    public func continueTimer() {
-        self.timerHandler?(.continued(elapsedTime: elapsedTime))
-        continueAnimation {
-            self.timerHandler?(.finished)
-        }
-    }
-
-    /**
-     Resets the timer, this means the time is reset and
-     previously set handler will no longer be used.
-     */
-    public func resetTimer() {
-        resetAnimation()
-        ringLayer.value = 0
-        timerHandler = nil
-    }
-
-    // MARK: Overrides
-
-    /// initialize with some defaults relevant to this timer ring
-    override func initialize() {
-        super.initialize()
-        ringLayer.ring = self
-        ringLayer.minValue = 0
-        ringLayer.value = 0
-        ringLayer.maxValue = time.float
-        ringLayer.valueFormatter = valueFormatter
-        ringLayer.animationTimingFunction = .linear
-    }
-}
-
-// MARK: UICircularTimerRing.State
-
-public extension UICircularTimerRing {
-    /// state of the timer ring, used in handler
-    enum State {
-        /// the timer has finished
-        case finished
-
-        /// the timer was continued called `continueTimer`
-        case continued(elapsedTime: TimeInterval?)
-
-        /// the timer was paused called `pauseTimer`
-        case paused(elpasedTime: TimeInterval?)
-    }
-}

+ 11 - 13
deltachat-ios.xcodeproj/project.pbxproj

@@ -83,8 +83,8 @@
 		30FDB70524D1C1000066C48D /* ChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30FDB6F824D1C1000066C48D /* ChatViewController.swift */; };
 		30FDB71F24D8170E0066C48D /* TextMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30FDB71E24D8170E0066C48D /* TextMessageCell.swift */; };
 		30FDB72124D838240066C48D /* BaseMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30FDB72024D838240066C48D /* BaseMessageCell.swift */; };
-		451CF971F08D38BCECADCB45 /* Pods_deltachat_ios_DcShare.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063D4BFB8FD920C4EAA22 /* Pods_deltachat_ios_DcShare.framework */; };
 		6795F63A82E94FF7CD2CEC0F /* Pods_deltachat_iosTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F7009234DB9408201A6CDCB /* Pods_deltachat_iosTests.framework */; };
+		6D58A7F6D79EE0EBB5AC2700 /* Pods_DcShare.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7990B1147DDBF34651340048 /* Pods_DcShare.framework */; };
 		7070FB9B2101ECBB000DC258 /* NewGroupController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7070FB9A2101ECBB000DC258 /* NewGroupController.swift */; };
 		7092474120B3869500AF8799 /* ContactDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7092474020B3869500AF8799 /* ContactDetailViewController.swift */; };
 		70B8882E2091B8550074812E /* ContactCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70B8882D2091B8550074812E /* ContactCell.swift */; };
@@ -199,6 +199,7 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
+		08432784282DC739B8EAC1E2 /* Pods-DcShare.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DcShare.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DcShare/Pods-DcShare.debug.xcconfig"; sourceTree = "<group>"; };
 		21D6C9392606190600D0755A /* NotificationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationManager.swift; sourceTree = "<group>"; };
 		21EE28844E7A690D73BF5285 /* Pods-deltachat-iosTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-deltachat-iosTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-deltachat-iosTests/Pods-deltachat-iosTests.debug.xcconfig"; sourceTree = "<group>"; };
 		2F7009234DB9408201A6CDCB /* Pods_deltachat_iosTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_deltachat_iosTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -325,7 +326,6 @@
 		30FDB6F824D1C1000066C48D /* ChatViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatViewController.swift; sourceTree = "<group>"; };
 		30FDB71E24D8170E0066C48D /* TextMessageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextMessageCell.swift; sourceTree = "<group>"; };
 		30FDB72024D838240066C48D /* BaseMessageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseMessageCell.swift; sourceTree = "<group>"; };
-		546063D4BFB8FD920C4EAA22 /* Pods_deltachat_ios_DcShare.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_deltachat_ios_DcShare.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		6241BE1534A653E79AD5D01D /* Pods_deltachat_ios.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_deltachat_ios.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		7070FB9A2101ECBB000DC258 /* NewGroupController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewGroupController.swift; sourceTree = "<group>"; };
 		7092474020B3869500AF8799 /* ContactDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactDetailViewController.swift; sourceTree = "<group>"; };
@@ -339,6 +339,7 @@
 		78E45E4321D3F14A00D4B15E /* UIImage+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Extension.swift"; sourceTree = "<group>"; };
 		78ED838221D5379000243125 /* TextFieldCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldCell.swift; sourceTree = "<group>"; };
 		78ED839321D5AF8A00243125 /* QrCodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QrCodeView.swift; sourceTree = "<group>"; };
+		7990B1147DDBF34651340048 /* Pods_DcShare.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DcShare.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		7A0052C71FBE6CB40048C3BF /* NewContactController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewContactController.swift; sourceTree = "<group>"; };
 		7A451DAF1FB1F84900177250 /* AppCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppCoordinator.swift; sourceTree = "<group>"; };
 		7A9FB1401FB061E2001FEA36 /* deltachat-ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "deltachat-ios.app"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -348,7 +349,6 @@
 		7A9FB14F1FB061E2001FEA36 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		7AE0A5481FC42F65005ECB4B /* NewChatViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewChatViewController.swift; sourceTree = "<group>"; };
 		8DE110C607A0E4485C43B5FA /* Pods-deltachat-ios.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-deltachat-ios.debug.xcconfig"; path = "Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios.debug.xcconfig"; sourceTree = "<group>"; };
-		914DDA723E78965D83162E78 /* Pods-deltachat-ios-DcShare.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-deltachat-ios-DcShare.debug.xcconfig"; path = "Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare.debug.xcconfig"; sourceTree = "<group>"; };
 		A8615D4600859851E53CAA9C /* Pods-deltachat-ios.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-deltachat-ios.release.xcconfig"; path = "Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios.release.xcconfig"; sourceTree = "<group>"; };
 		AE0AA951247800E700D42A7F /* GalleryCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GalleryCell.swift; sourceTree = "<group>"; };
 		AE0AA9552478191900D42A7F /* GridCollectionViewFlowLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GridCollectionViewFlowLayout.swift; sourceTree = "<group>"; };
@@ -461,7 +461,7 @@
 		B2B9BC1026245F2200F35832 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		B2B9BC1126245F2200F35832 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = "<group>"; };
 		B2B9BC1226245F2200F35832 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = cs; path = cs.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
-		E13946A7FC0AB662737BDFF5 /* Pods-deltachat-ios-DcShare.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-deltachat-ios-DcShare.release.xcconfig"; path = "Pods/Target Support Files/Pods-deltachat-ios-DcShare/Pods-deltachat-ios-DcShare.release.xcconfig"; sourceTree = "<group>"; };
+		C1B60449B860342EE5F2AD54 /* Pods-DcShare.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DcShare.release.xcconfig"; path = "Pods/Target Support Files/Pods-DcShare/Pods-DcShare.release.xcconfig"; sourceTree = "<group>"; };
 		FECB35E2B04CD5F5D02C157A /* Pods-deltachat-iosTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-deltachat-iosTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-deltachat-iosTests/Pods-deltachat-iosTests.release.xcconfig"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
@@ -471,7 +471,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				30E8F2252447622300CE2C90 /* DcCore.framework in Frameworks */,
-				451CF971F08D38BCECADCB45 /* Pods_deltachat_ios_DcShare.framework in Frameworks */,
+				6D58A7F6D79EE0EBB5AC2700 /* Pods_DcShare.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -685,7 +685,7 @@
 				787D6699229F2237000A7A9D /* libdeltachat.a */,
 				6241BE1534A653E79AD5D01D /* Pods_deltachat_ios.framework */,
 				2F7009234DB9408201A6CDCB /* Pods_deltachat_iosTests.framework */,
-				546063D4BFB8FD920C4EAA22 /* Pods_deltachat_ios_DcShare.framework */,
+				7990B1147DDBF34651340048 /* Pods_DcShare.framework */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
@@ -697,8 +697,8 @@
 				A8615D4600859851E53CAA9C /* Pods-deltachat-ios.release.xcconfig */,
 				21EE28844E7A690D73BF5285 /* Pods-deltachat-iosTests.debug.xcconfig */,
 				FECB35E2B04CD5F5D02C157A /* Pods-deltachat-iosTests.release.xcconfig */,
-				914DDA723E78965D83162E78 /* Pods-deltachat-ios-DcShare.debug.xcconfig */,
-				E13946A7FC0AB662737BDFF5 /* Pods-deltachat-ios-DcShare.release.xcconfig */,
+				08432784282DC739B8EAC1E2 /* Pods-DcShare.debug.xcconfig */,
+				C1B60449B860342EE5F2AD54 /* Pods-DcShare.release.xcconfig */,
 			);
 			name = Pods;
 			sourceTree = "<group>";
@@ -1074,7 +1074,6 @@
 				"${BUILT_PRODUCTS_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework",
 				"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
 				"${BUILT_PRODUCTS_DIR}/SwiftyBeaver/SwiftyBeaver.framework",
-				"${BUILT_PRODUCTS_DIR}/UICircularProgressRing/UICircularProgressRing.framework",
 			);
 			name = "[CP] Embed Pods Frameworks";
 			outputPaths = (
@@ -1084,7 +1083,6 @@
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SCSiriWaveformView.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyBeaver.framework",
-				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/UICircularProgressRing.framework",
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
@@ -1198,7 +1196,7 @@
 			outputFileListPaths = (
 			);
 			outputPaths = (
-				"$(DERIVED_FILE_DIR)/Pods-deltachat-ios-DcShare-checkManifestLockResult.txt",
+				"$(DERIVED_FILE_DIR)/Pods-DcShare-checkManifestLockResult.txt",
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
@@ -1536,7 +1534,7 @@
 /* Begin XCBuildConfiguration section */
 		30E8F21C2447285600CE2C90 /* Debug */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = 914DDA723E78965D83162E78 /* Pods-deltachat-ios-DcShare.debug.xcconfig */;
+			baseConfigurationReference = 08432784282DC739B8EAC1E2 /* Pods-DcShare.debug.xcconfig */;
 			buildSettings = {
 				CLANG_ENABLE_OBJC_WEAK = YES;
 				CODE_SIGN_ENTITLEMENTS = DcShare/DcShare.entitlements;
@@ -1561,7 +1559,7 @@
 		};
 		30E8F21D2447285600CE2C90 /* Release */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = E13946A7FC0AB662737BDFF5 /* Pods-deltachat-ios-DcShare.release.xcconfig */;
+			baseConfigurationReference = C1B60449B860342EE5F2AD54 /* Pods-DcShare.release.xcconfig */;
 			buildSettings = {
 				CLANG_ENABLE_OBJC_WEAK = YES;
 				CODE_SIGN_ENTITLEMENTS = DcShare/DcShare.entitlements;

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است