Bläddra i källkod

remove IQAudioRecorderController library

cyberta 5 år sedan
förälder
incheckning
9f7b494032
57 ändrade filer med 881 tillägg och 5170 borttagningar
  1. 1 2
      Podfile
  2. 2 6
      Podfile.lock
  3. 0 91
      Pods/IQAudioRecorderController/IQAudioRecorderController/FDWaveformView/IQ_FDWaveformView.h
  4. 0 628
      Pods/IQAudioRecorderController/IQAudioRecorderController/FDWaveformView/IQ_FDWaveformView.m
  5. 0 105
      Pods/IQAudioRecorderController/IQAudioRecorderController/IQAudioCropperViewController.h
  6. 0 1064
      Pods/IQAudioRecorderController/IQAudioRecorderController/IQAudioCropperViewController.m
  7. 0 43
      Pods/IQAudioRecorderController/IQAudioRecorderController/IQAudioRecorderConstants.h
  8. 0 26
      Pods/IQAudioRecorderController/IQAudioRecorderController/IQAudioRecorderConstants.m
  9. 0 144
      Pods/IQAudioRecorderController/IQAudioRecorderController/IQAudioRecorderViewController.h
  10. 0 1000
      Pods/IQAudioRecorderController/IQAudioRecorderController/IQAudioRecorderViewController.m
  11. 0 29
      Pods/IQAudioRecorderController/IQAudioRecorderController/IQCropSelectionBeginView.h
  12. 0 51
      Pods/IQAudioRecorderController/IQAudioRecorderController/IQCropSelectionBeginView.m
  13. 0 29
      Pods/IQAudioRecorderController/IQAudioRecorderController/IQCropSelectionEndView.h
  14. 0 51
      Pods/IQAudioRecorderController/IQAudioRecorderController/IQCropSelectionEndView.m
  15. 0 36
      Pods/IQAudioRecorderController/IQAudioRecorderController/IQCropSelectionView.h
  16. 0 64
      Pods/IQAudioRecorderController/IQAudioRecorderController/IQCropSelectionView.m
  17. 0 46
      Pods/IQAudioRecorderController/IQAudioRecorderController/IQMessageDisplayView.h
  18. 0 152
      Pods/IQAudioRecorderController/IQAudioRecorderController/IQMessageDisplayView.m
  19. 0 50
      Pods/IQAudioRecorderController/IQAudioRecorderController/IQPlaybackDurationView.h
  20. 0 216
      Pods/IQAudioRecorderController/IQAudioRecorderController/IQPlaybackDurationView.m
  21. 0 31
      Pods/IQAudioRecorderController/IQAudioRecorderController/NSString+IQTimeIntervalFormatter.h
  22. 0 46
      Pods/IQAudioRecorderController/IQAudioRecorderController/NSString+IQTimeIntervalFormatter.m
  23. BIN
      Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/audio_record.png
  24. BIN
      Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/audio_record@2x.png
  25. BIN
      Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/audio_record@3x.png
  26. BIN
      Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/microphone_access.png
  27. BIN
      Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/microphone_access@2x.png
  28. BIN
      Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/microphone_access@3x.png
  29. BIN
      Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/scissor.png
  30. BIN
      Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/scissor@2x.png
  31. BIN
      Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/scissor@3x.png
  32. BIN
      Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/stop_playing.png
  33. BIN
      Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/stop_playing@2x.png
  34. BIN
      Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/stop_playing@3x.png
  35. BIN
      Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/stop_recording.png
  36. BIN
      Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/stop_recording@2x.png
  37. BIN
      Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/stop_recording@3x.png
  38. 0 22
      Pods/IQAudioRecorderController/LICENSE
  39. 0 138
      Pods/IQAudioRecorderController/README.md
  40. 2 6
      Pods/Manifest.lock
  41. 862 937
      Pods/Pods.xcodeproj/project.pbxproj
  42. 0 26
      Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController-Info.plist
  43. 0 5
      Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController-dummy.m
  44. 0 12
      Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController-prefix.pch
  45. 0 19
      Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController-umbrella.h
  46. 0 6
      Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController.modulemap
  47. 0 11
      Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController.xcconfig
  48. 0 26
      Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios-acknowledgements.markdown
  49. 0 32
      Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios-acknowledgements.plist
  50. 0 2
      Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios-frameworks.sh
  51. 4 4
      Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios.debug.xcconfig
  52. 4 4
      Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios.release.xcconfig
  53. 3 3
      Pods/Target Support Files/Pods-deltachat-iosTests/Pods-deltachat-iosTests.debug.xcconfig
  54. 3 3
      Pods/Target Support Files/Pods-deltachat-iosTests/Pods-deltachat-iosTests.release.xcconfig
  55. 0 2
      deltachat-ios.xcodeproj/project.pbxproj
  56. 0 1
      deltachat-ios/Coordinator/AppCoordinator.swift
  57. 0 1
      deltachat-ios/Helper/MediaPicker.swift

+ 1 - 2
Podfile

@@ -17,8 +17,7 @@ target 'deltachat-ios' do
   pod 'SwiftyBeaver'
   pod 'DBDebugToolkit'
   pod 'InputBarAccessoryView'
-  pod 'IQAudioRecorderController'
-
+  pod 'SCSiriWaveformView'
   target 'deltachat-iosTests' do
     inherit! :search_paths
     # Pods for testing

+ 2 - 6
Podfile.lock

@@ -4,8 +4,6 @@ PODS:
   - InputBarAccessoryView (4.3.1):
     - InputBarAccessoryView/Core (= 4.3.1)
   - InputBarAccessoryView/Core (4.3.1)
-  - IQAudioRecorderController (1.2.3):
-    - SCSiriWaveformView
   - JGProgressHUD (2.0.3)
   - QuickTableViewController (1.1.1)
   - ReachabilitySwift (4.3.1)
@@ -19,10 +17,10 @@ DEPENDENCIES:
   - ALCameraViewController
   - DBDebugToolkit
   - InputBarAccessoryView
-  - IQAudioRecorderController
   - JGProgressHUD
   - QuickTableViewController
   - ReachabilitySwift
+  - SCSiriWaveformView
   - SwiftFormat/CLI
   - SwiftLint
   - SwiftyBeaver
@@ -33,7 +31,6 @@ SPEC REPOS:
     - ALCameraViewController
     - DBDebugToolkit
     - InputBarAccessoryView
-    - IQAudioRecorderController
     - JGProgressHUD
     - QuickTableViewController
     - ReachabilitySwift
@@ -47,7 +44,6 @@ SPEC CHECKSUMS:
   ALCameraViewController: 144dea45fd749a623aafd8cb7b10cea88499fcc3
   DBDebugToolkit: c04bb6f618051d3de447a4b4323f37826116cfed
   InputBarAccessoryView: 58a348be7ea2736c7eec60e5c315511c2dbb39fd
-  IQAudioRecorderController: 69a67c2e0b87bd8746cbb4de175fd7a0bf820009
   JGProgressHUD: 12b20a8f4ffe05258f8635c1ab92816e451f904d
   QuickTableViewController: 30f689d314a7c1fb726c6dab6fa5ad53c6bc9e94
   ReachabilitySwift: 4032e2f59586e11e3b0ebe15b167abdd587a388b
@@ -57,6 +53,6 @@ SPEC CHECKSUMS:
   SwiftyBeaver: 4cc0080d2e23f980652e28978db11a5c9da39165
   UICircularProgressRing: 0ff679b05a17f15ad6301a7886686837b8c301a9
 
-PODFILE CHECKSUM: 2d97506b02f500bd221608e13dd23a927dc62aec
+PODFILE CHECKSUM: 4fb877c35817d6aa88e7199c2635c724cfdcf87a
 
 COCOAPODS: 1.8.4

+ 0 - 91
Pods/IQAudioRecorderController/IQAudioRecorderController/FDWaveformView/IQ_FDWaveformView.h

@@ -1,91 +0,0 @@
-//
-//  FDWaveformView
-//
-//  Created by William Entriken on 10/6/13.
-//  Copyright (c) 2013 William Entriken. All rights reserved.
-//
-
-#import <UIKit/UIView.h>
-
-@protocol IQ_FDWaveformViewDelegate;
-
-/// A view for rendering audio waveforms
-@interface IQ_FDWaveformView : UIView
-
-/// A delegate to accept progress reporting
-@property (nonatomic, weak) id<IQ_FDWaveformViewDelegate> delegate;
-
-/// The audio file to render
-@property (nonatomic, strong) NSURL *audioURL;
-
-/****************************************************************/
-
-/// The total number of audio samples in the file
-@property (nonatomic, assign, readonly) long int totalSamples;
-
-/// The color of the waveform
-@property (nonatomic, copy) UIColor *wavesColor;
-
-/****************************************************************/
-
-/// A portion of the waveform rendering to be highlighted
-@property (nonatomic, assign) long int progressSamples;
-
-/// The color of the highlighted waveform (see `progressSamples`
-@property (nonatomic, copy) UIColor *progressColor;
-
-/****************************************************************/
-
-/// The color of the cropped waveform
-@property (nonatomic, copy) UIColor *cropColor;
-
-/// crop start samples
-@property (nonatomic, assign) long int cropStartSamples;
-
-/// crop end samples
-@property (nonatomic, assign) long int cropEndSamples;
-
-/****************************************************************/
-
-/// The first sample to render
-@property (nonatomic, assign) long int zoomStartSamples;
-
-/// The last sample to render
-@property (nonatomic, assign) long int zoomEndSamples;
-
-/// Whether to all the scrub gesture
-@property (nonatomic) BOOL doesAllowScrubbing;
-
-/// Whether to allow the stretch gesture
-@property (nonatomic) BOOL doesAllowStretch;
-
-/// Whether to allow the scroll gesture
-@property (nonatomic) BOOL doesAllowScroll;
-
-@end
-
-/// To receive progress updates from FDWaveformView
-@protocol IQ_FDWaveformViewDelegate <NSObject>
-@optional
-
-/// Rendering will begin
-- (void)waveformViewWillRender:(IQ_FDWaveformView *)waveformView;
-
-/// Rendering did complete
-- (void)waveformViewDidRender:(IQ_FDWaveformView *)waveformView;
-
-/// Rendering did failed
-- (void)waveformViewFailedToRender:(IQ_FDWaveformView *)waveformView;
-
-/// An audio file will be loaded
-- (void)waveformViewWillLoad:(IQ_FDWaveformView *)waveformView;
-
-/// An audio file was loaded
-- (void)waveformViewDidLoad:(IQ_FDWaveformView *)waveformView;
-
-/// The panning gesture did begin
-- (void)waveformDidBeginPanning:(IQ_FDWaveformView *)waveformView;
-
-/// The panning gesture did end
-- (void)waveformDidEndPanning:(IQ_FDWaveformView *)waveformView;
-@end

+ 0 - 628
Pods/IQAudioRecorderController/IQAudioRecorderController/FDWaveformView/IQ_FDWaveformView.m

@@ -1,628 +0,0 @@
-//
-//  FDWaveformView
-//
-//  Created by William Entriken on 10/6/13.
-//  Copyright (c) 2013 William Entriken. All rights reserved.
-//
-
-
-// FROM http://stackoverflow.com/questions/5032775/drawing-waveform-with-avassetreader
-// DO SEE http://stackoverflow.com/questions/1191868/uiimageview-scaling-interpolation
-// see http://stackoverflow.com/questions/3514066/how-to-tint-a-transparent-png-image-in-iphone
-
-#import <AVFoundation/AVAssetTrack.h>
-#import <AVFoundation/AVAssetReader.h>
-#import <AVFoundation/AVAssetReaderOutput.h>
-#import <AVFoundation/AVFAudio.h>
-#import <CoreMedia/CMFormatDescription.h>
-
-#import "IQ_FDWaveformView.h"
-
-#define absX(x) ((x)<0?0-(x):(x))
-#define minMaxX(x,mn,mx) ((x)<=(mn)?(mn):((x)>=(mx)?(mx):(x)))
-#define noiseFloor (-50.0)
-#define decibel(amplitude) (20.0 * log10(absX(amplitude)/32767.0))
-
-// Drawing a larger image than needed to have it available for scrolling
-#define horizontalMinimumBleed 0.1
-#define horizontalMaximumBleed 3
-#define horizontalTargetBleed 0.5
-// Drawing more pixels than shown to get antialiasing
-#define horizontalMinimumOverdraw 2
-#define horizontalMaximumOverdraw 5
-#define horizontalTargetOverdraw 3
-#define verticalMinimumOverdraw 1
-#define verticalMaximumOverdraw 3
-#define verticalTargetOverdraw 2
-
-
-@interface IQ_FDWaveformView() <UIGestureRecognizerDelegate>
-@property (nonatomic, strong) UIImageView *image;
-@property (nonatomic, strong) UIImageView *highlightedImage;
-@property (nonatomic, strong) UIImageView *croppedImage;
-
-@property (nonatomic, strong) AVAsset *asset;
-@property (nonatomic, strong) AVAssetTrack *assetTrack;
-@property (nonatomic, assign) long int totalSamples;
-@property (nonatomic, assign) long int cachedStartSamples;
-@property (nonatomic, assign) long int cachedEndSamples;
-@property (nonatomic, strong) UIPinchGestureRecognizer *pinchRecognizer;
-@property (nonatomic, strong) UIPanGestureRecognizer *panRecognizer;
-@property (nonatomic, strong) UITapGestureRecognizer *tapRecognizer;
-@property BOOL renderingInProgress;
-@property BOOL loadingInProgress;
-@end
-
-@implementation IQ_FDWaveformView
-
-- (void)initialize
-{
-    {
-        self.image = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
-        self.image.contentMode = UIViewContentModeScaleToFill;
-        [self addSubview:self.image];
-    }
-    
-    {
-        self.highlightedImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
-        self.highlightedImage.contentMode = UIViewContentModeScaleToFill;
-        [self addSubview:self.highlightedImage];
-    }
-
-    {
-        self.croppedImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
-        self.croppedImage.contentMode = UIViewContentModeScaleToFill;
-        [self addSubview:self.croppedImage];
-    }
-    
-    self.clipsToBounds = YES;
-    
-    self.wavesColor = [UIColor blackColor];
-    self.progressColor = [UIColor blueColor];
-    
-    self.pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchGesture:)];
-    self.pinchRecognizer.delegate = self;
-    [self addGestureRecognizer:self.pinchRecognizer];
-
-    self.panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
-    self.panRecognizer.delegate = self;
-    [self addGestureRecognizer:self.panRecognizer];
-    
-    self.tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
-    [self addGestureRecognizer:self.tapRecognizer];
-}
-
-- (instancetype)initWithCoder:(NSCoder *)aCoder
-{
-    if (self = [super initWithCoder:aCoder])
-        [self initialize];
-    return self;
-}
-
-- (instancetype)initWithFrame:(CGRect)rect
-{
-    if (self = [super initWithFrame:rect])
-        [self initialize];
-    return self;
-}
-
-- (void)setAudioURL:(NSURL *)audioURL
-{
-    _audioURL = audioURL;
-    self.loadingInProgress = YES;
-    if ([self.delegate respondsToSelector:@selector(waveformViewWillLoad:)])
-        [self.delegate waveformViewWillLoad:self];
-    self.asset = [AVURLAsset URLAssetWithURL:audioURL options:nil];
-    self.assetTrack = [[self.asset tracksWithMediaType:AVMediaTypeAudio] firstObject];
-
-    __weak typeof(self) weakSelf = self;
-
-    [self.asset loadValuesAsynchronouslyForKeys:@[@"duration"] completionHandler:^{
-        weakSelf.loadingInProgress = NO;
-        if ([weakSelf.delegate respondsToSelector:@selector(waveformViewDidLoad:)])
-            [weakSelf.delegate waveformViewDidLoad:weakSelf];
-        
-        NSError *error = nil;
-        AVKeyValueStatus durationStatus = [weakSelf.asset statusOfValueForKey:@"duration" error:&error];
-        switch (durationStatus) {
-            case AVKeyValueStatusLoaded:{
-                
-                void (^threadSafeNilImage)(void) = ^{
-                    weakSelf.image.image = nil;
-                    weakSelf.highlightedImage.image = nil;
-                    weakSelf.croppedImage.image = nil;
-                };
-                
-                if ([NSThread isMainThread]) {
-                    threadSafeNilImage();
-                } else {
-                    dispatch_sync(dispatch_get_main_queue(), ^{
-                        threadSafeNilImage();
-                    });
-                }
-                
-                NSArray *formatDesc = weakSelf.assetTrack.formatDescriptions;
-                CMAudioFormatDescriptionRef item = (__bridge CMAudioFormatDescriptionRef)formatDesc[0];
-                const AudioStreamBasicDescription *asbd = CMAudioFormatDescriptionGetStreamBasicDescription(item);
-                unsigned long int samples = asbd->mSampleRate * (float)weakSelf.asset.duration.value/weakSelf.asset.duration.timescale;
-                self.totalSamples = weakSelf.zoomEndSamples = weakSelf.cropEndSamples = samples;
-                self.progressSamples = weakSelf.zoomStartSamples = weakSelf.cropStartSamples = 0;
-
-                void (^threadSafeUpdate)(void) = ^{
-                    
-                    [weakSelf setNeedsDisplay];
-                    [weakSelf setNeedsLayout];
-                };
-                
-                if ([NSThread isMainThread]) {
-                    threadSafeUpdate();
-                } else {
-                    dispatch_sync(dispatch_get_main_queue(), ^{
-                        threadSafeUpdate();
-                    });
-                }
-
-                break;
-            }
-            case AVKeyValueStatusUnknown:
-            case AVKeyValueStatusLoading:
-            case AVKeyValueStatusFailed:
-            case AVKeyValueStatusCancelled:
-                NSLog(@"IQ_FDWaveformView could not load asset: %@", error.localizedDescription);
-                break;
-            default:
-                break;
-        }
-    }];
-}
-
-- (void)setProgressSamples:(long)progressSamples
-{
-    _progressSamples = progressSamples;
-    if (self.totalSamples) {
-        float progress = (float)self.progressSamples / self.totalSamples;
-        
-        __weak typeof(self) weakSelf = self;
-
-        void (^threadSafeUpdate)(void) = ^{
-            
-            CALayer *layer = [[CALayer alloc] init];
-            layer.frame = CGRectMake(0,0,weakSelf.frame.size.width*progress,weakSelf.frame.size.height);
-            layer.backgroundColor = [[UIColor blackColor] CGColor];
-            weakSelf.highlightedImage.layer.mask = layer;
-            [weakSelf setNeedsLayout];
-        };
-        
-        if ([NSThread isMainThread]) {
-            threadSafeUpdate();
-        } else {
-            dispatch_sync(dispatch_get_main_queue(), ^{
-                threadSafeUpdate();
-            });
-        }
-    }
-}
-
--(void)setCropStartSamples:(long)cropStartSamples
-{
-    _cropStartSamples = cropStartSamples;
-
-    if (self.totalSamples) {
-        float startProgress = (float)self.cropStartSamples / self.totalSamples;
-        float endProgress = (float)self.cropEndSamples / self.totalSamples;
-
-        __weak typeof(self) weakSelf = self;
-
-        void (^threadSafeUpdate)(void) = ^{
-            
-            CGRect visibleRect = CGRectMake(weakSelf.frame.size.width*startProgress,0,weakSelf.frame.size.width*(endProgress-startProgress),weakSelf.frame.size.height);;
-            UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRect:weakSelf.croppedImage.bounds];
-            [bezierPath appendPath:[UIBezierPath bezierPathWithRect:visibleRect]];
-            
-            CAShapeLayer *layer = [[CAShapeLayer alloc] init];
-            layer.frame = weakSelf.croppedImage.bounds;
-            layer.fillRule = kCAFillRuleEvenOdd;
-            layer.fillColor = [UIColor blackColor].CGColor;
-            layer.path = bezierPath.CGPath;
-            
-            weakSelf.croppedImage.layer.mask = layer;
-            [weakSelf setNeedsLayout];
-        };
-        
-        if ([NSThread isMainThread]) {
-            threadSafeUpdate();
-        } else {
-            dispatch_sync(dispatch_get_main_queue(), ^{
-                threadSafeUpdate();
-            });
-        }
-    }
-}
-
--(void)setCropEndSamples:(long)cropEndSamples
-{
-    _cropEndSamples = cropEndSamples;
-
-    if (self.totalSamples) {
-        float startProgress = (float)self.cropStartSamples / self.totalSamples;
-        float endProgress = (float)self.cropEndSamples / self.totalSamples;
-        
-        CGRect visibleRect = CGRectMake(self.frame.size.width*startProgress,0,self.frame.size.width*(endProgress-startProgress),self.frame.size.height);;
-        UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRect:self.croppedImage.bounds];
-        [bezierPath appendPath:[UIBezierPath bezierPathWithRect:visibleRect]];
-        
-        CAShapeLayer *layer = [[CAShapeLayer alloc] init];
-        layer.frame = self.croppedImage.bounds;
-        layer.fillRule = kCAFillRuleEvenOdd;
-        layer.fillColor = [UIColor blackColor].CGColor;
-        layer.path = bezierPath.CGPath;
-        
-        self.croppedImage.layer.mask = layer;
-        [self setNeedsLayout];
-    }
-}
-
-- (void)setZoomStartSamples:(long)startSamples
-{
-    _zoomStartSamples = startSamples;
-
-    __weak typeof(self) weakSelf = self;
-
-    void (^threadSafeUpdate)(void) = ^{
-        
-        [weakSelf setNeedsDisplay];
-        [weakSelf setNeedsLayout];
-    };
-    
-    if ([NSThread isMainThread]) {
-        threadSafeUpdate();
-    } else {
-        dispatch_sync(dispatch_get_main_queue(), ^{
-            threadSafeUpdate();
-        });
-    }
-}
-
-- (void)setZoomEndSamples:(long)endSamples
-{
-    _zoomEndSamples = endSamples;
-    
-    __weak typeof(self) weakSelf = self;
-
-    void (^threadSafeUpdate)(void) = ^{
-        
-        [weakSelf setNeedsDisplay];
-        [weakSelf setNeedsLayout];
-    };
-    
-    if ([NSThread isMainThread]) {
-        threadSafeUpdate();
-    } else {
-        dispatch_sync(dispatch_get_main_queue(), ^{
-            threadSafeUpdate();
-        });
-    }
-}
-
-- (void)layoutSubviews
-{
-    [super layoutSubviews];
-    
-    if (!self.assetTrack || self.renderingInProgress || self.zoomEndSamples == 0)
-        return;
-    
-    unsigned long int displayRange = self.zoomEndSamples - self.zoomStartSamples;
-    BOOL needToRender = NO;
-    if (!self.image.image)
-        needToRender = YES;
-    if (self.cachedStartSamples < (unsigned long)minMaxX((float)self.zoomStartSamples - displayRange * horizontalMaximumBleed, 0, self.totalSamples))
-        needToRender = YES;
-    if (self.cachedStartSamples > (unsigned long)minMaxX((float)self.zoomStartSamples - displayRange * horizontalMinimumBleed, 0, self.totalSamples))
-        needToRender = YES;
-    if (self.cachedEndSamples < (unsigned long)minMaxX((float)self.zoomEndSamples + displayRange * horizontalMinimumBleed, 0, self.totalSamples))
-        needToRender = YES;
-    if (self.cachedEndSamples > (unsigned long)minMaxX((float)self.zoomEndSamples + displayRange * horizontalMaximumBleed, 0, self.totalSamples))
-        needToRender = YES;
-    if (self.image.image.size.width < self.frame.size.width * [UIScreen mainScreen].scale * horizontalMinimumOverdraw)
-        needToRender = YES;
-    if (self.image.image.size.width > self.frame.size.width * [UIScreen mainScreen].scale * horizontalMaximumOverdraw)
-        needToRender = YES;
-    if (self.image.image.size.height < self.frame.size.height * [UIScreen mainScreen].scale * verticalMinimumOverdraw)
-        needToRender = YES;
-    if (self.image.image.size.height > self.frame.size.height * [UIScreen mainScreen].scale * verticalMaximumOverdraw)
-        needToRender = YES;
-    if (needToRender) {
-        
-        __weak typeof(self) weakSelf = self;
-
-        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
-            [weakSelf renderAsset];
-        });
-        return;
-    }
-    
-    // We need to place the images which have samples from cachedStart..cachedEnd
-    // inside our frame which represents startSamples..endSamples
-    // all figures are a portion of our frame size
-    float scaledStart = 0, scaledEnd = 1, scaledWidth = 1;
-    if (self.cachedEndSamples > self.cachedStartSamples) {
-        scaledStart = ((float)self.cachedStartSamples-self.zoomStartSamples)/(self.zoomEndSamples-self.zoomStartSamples);
-        scaledEnd = ((float)self.cachedEndSamples-self.zoomStartSamples)/(self.zoomEndSamples-self.zoomStartSamples);
-        scaledWidth = scaledEnd - scaledStart;
-    }
-    
-    CGRect frame = CGRectMake(self.frame.size.width*scaledStart, 0, self.frame.size.width*scaledWidth, self.frame.size.height);
-    self.image.frame = self.highlightedImage.frame = self.croppedImage.frame = frame;
-}
-
-- (void)renderAsset
-{
-    if (self.renderingInProgress)
-        return;
-    self.renderingInProgress = YES;
-    if ([self.delegate respondsToSelector:@selector(waveformViewWillRender:)])
-        [self.delegate waveformViewWillRender:self];
-    unsigned long int displayRange = self.zoomEndSamples - self.zoomStartSamples;
-    unsigned long int renderStartSamples = minMaxX((long)self.zoomStartSamples - displayRange * horizontalTargetBleed, 0, self.totalSamples);
-    unsigned long int renderEndSamples = minMaxX((long)self.zoomEndSamples + displayRange * horizontalTargetBleed, 0, self.totalSamples);
-    
-    __block CGFloat widthInPixels = 0;
-    __block CGFloat heightInPixels = 0;
-    __weak typeof(self) weakSelf = self;
-
-    if ([NSThread isMainThread])
-    {
-        widthInPixels = self.frame.size.width * [UIScreen mainScreen].scale * horizontalTargetOverdraw;
-        heightInPixels = self.frame.size.height * [UIScreen mainScreen].scale * verticalTargetOverdraw;
-    }
-    else
-    {
-        dispatch_sync(dispatch_get_main_queue(), ^{
-            widthInPixels = weakSelf.frame.size.width * [UIScreen mainScreen].scale * horizontalTargetOverdraw;
-            heightInPixels = weakSelf.frame.size.height * [UIScreen mainScreen].scale * verticalTargetOverdraw;
-        });
-    }
-    
-    [IQ_FDWaveformView sliceAndDownsampleAsset:self.asset track:self.assetTrack startSamples:renderStartSamples endSamples:renderEndSamples targetSamples:widthInPixels done:^(NSData *samples, NSInteger sampleCount, Float32 sampleMax) {
-        
-
-        if (samples == nil)
-        {
-            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
-                
-                weakSelf.image.image = nil;
-                weakSelf.highlightedImage.image = nil;
-                weakSelf.croppedImage.image = nil;
-                weakSelf.cachedStartSamples = 0;
-                weakSelf.cachedEndSamples = 0;
-                weakSelf.renderingInProgress = NO;
-                if ([weakSelf.delegate respondsToSelector:@selector(waveformViewFailedToRender:)])
-                    [weakSelf.delegate waveformViewFailedToRender:weakSelf];
-            }];
-        }
-        else
-        {
-            [weakSelf plotLogGraph:samples
-                  maximumValue:sampleMax
-                  mimimumValue:noiseFloor
-                   sampleCount:sampleCount
-                   imageHeight:heightInPixels
-                          done:^(UIImage *image,
-                                 UIImage *selectedImage,
-                                 UIImage *cropImage) {
-                              
-                              [[NSOperationQueue mainQueue] addOperationWithBlock:^{
-                                  
-                                  weakSelf.image.image = image;
-                                  weakSelf.highlightedImage.image = selectedImage;
-                                  weakSelf.croppedImage.image = cropImage;
-                                  weakSelf.cachedStartSamples = renderStartSamples;
-                                  weakSelf.cachedEndSamples = renderEndSamples;
-                                  weakSelf.renderingInProgress = NO;
-                                  [weakSelf setNeedsLayout];
-                                  if ([weakSelf.delegate respondsToSelector:@selector(waveformViewDidRender:)])
-                                      [weakSelf.delegate waveformViewDidRender:weakSelf];
-                              }];
-                          }
-             ];
-        }
-    }];
-}
-
-+ (void)sliceAndDownsampleAsset:(AVAsset *)songAsset
-                          track:(AVAssetTrack *)songTrack
-                   startSamples:(unsigned long int)start
-                     endSamples:(unsigned long int)end
-                  targetSamples:(unsigned long int)targetSamples
-                           done:(void(^)(NSData *samples, NSInteger sampleCount, Float32 sampleMax))done
-{
-    NSError *error = nil;
-    AVAssetReader *reader = [AVAssetReader assetReaderWithAsset:songAsset error:&error];
-    reader.timeRange = CMTimeRangeMake(CMTimeMake(start, songAsset.duration.timescale), CMTimeMake((end-start), songAsset.duration.timescale));
-    NSDictionary *outputSettingsDict = @{AVFormatIDKey: @(kAudioFormatLinearPCM),
-                                         AVLinearPCMBitDepthKey: @16,
-                                         AVLinearPCMIsBigEndianKey: @NO,
-                                         AVLinearPCMIsFloatKey: @NO,
-                                         AVLinearPCMIsNonInterleaved: @NO};
-    AVAssetReaderTrackOutput *output = [AVAssetReaderTrackOutput assetReaderTrackOutputWithTrack:songTrack outputSettings:outputSettingsDict];
-    output.alwaysCopiesSampleData = NO;
-    [reader addOutput:output];
-    UInt32 channelCount = 0;
-    NSArray *formatDesc = songTrack.formatDescriptions;
-    for(unsigned int i = 0; i < [formatDesc count]; ++i) {
-        CMAudioFormatDescriptionRef item = (__bridge CMAudioFormatDescriptionRef)formatDesc[i];
-        const AudioStreamBasicDescription* fmtDesc = CMAudioFormatDescriptionGetStreamBasicDescription(item);
-        if (!fmtDesc) return; //!
-        channelCount = fmtDesc->mChannelsPerFrame;
-    }
-    
-    UInt32 bytesPerInputSample = 2 * channelCount;
-    Float32 sampleMax = noiseFloor;
-    Float64 tally = 0;
-    Float32 tallyCount = 0;
-    
-    NSInteger downsampleFactor = (end-start) / targetSamples;
-    downsampleFactor = downsampleFactor<1 ? 1 : downsampleFactor;
-    NSMutableData *fullSongData = [NSMutableData dataWithCapacity:(NSUInteger)songAsset.duration.value/downsampleFactor*2]; // 16-bit samples
-    [reader startReading];
-    
-    while (reader.status == AVAssetReaderStatusReading) {
-        AVAssetReaderTrackOutput * trackOutput = (AVAssetReaderTrackOutput *)(reader.outputs)[0];
-        CMSampleBufferRef sampleBufferRef = [trackOutput copyNextSampleBuffer];
-        if (sampleBufferRef) {
-            CMBlockBufferRef blockBufferRef = CMSampleBufferGetDataBuffer(sampleBufferRef);
-            size_t bufferLength = CMBlockBufferGetDataLength(blockBufferRef);
-            void *data = malloc(bufferLength);
-            CMBlockBufferCopyDataBytes(blockBufferRef, 0, bufferLength, data);
-            
-            SInt16 *samples = (SInt16 *) data;
-            int sampleCount = (int) bufferLength / bytesPerInputSample;
-            for (int i=0; i<sampleCount; i++) {
-                Float32 rawData = (Float32) *samples++;
-                Float32 sample = minMaxX(decibel(rawData),noiseFloor,0);
-                tally += sample; // Should be RMS?
-                for (int j=1; j<channelCount; j++)
-                    samples++;
-                tallyCount++;
-                
-                if (tallyCount == downsampleFactor) {
-                    sample = tally / tallyCount;
-                    sampleMax = sampleMax > sample ? sampleMax : sample;
-                    [fullSongData appendBytes:&sample length:sizeof(sample)];
-                    tally = 0;
-                    tallyCount = 0;
-                }
-            }
-            CMSampleBufferInvalidate(sampleBufferRef);
-            CFRelease(sampleBufferRef);
-            free(data);
-        }
-    }
-    
-    // if (reader.status == AVAssetReaderStatusFailed || reader.status == AVAssetReaderStatusUnknown)
-    // Something went wrong. Handle it.
-    if (reader.status == AVAssetReaderStatusCompleted){
-        done(fullSongData, fullSongData.length/4, sampleMax);
-    } else {
-        done(nil, 0, 0);
-    }
-}
-
-- (void)plotLogGraph:(NSData *) samplesData
-        maximumValue:(Float32) normalizeMax
-        mimimumValue:(Float32) normalizeMin
-         sampleCount:(NSInteger) sampleCount
-         imageHeight:(float) imageHeight
-                done:(void(^)(UIImage *image,
-                              UIImage *selectedImage,
-                              UIImage *cropImage))done
-{
-    Float32 *samples = (Float32 *)samplesData.bytes;
-    
-    // TODO: switch to a synchronous function that paints onto a given context? (for issue #2)
-    CGSize imageSize = CGSizeMake(sampleCount, imageHeight);
-    UIGraphicsBeginImageContext(imageSize);
-    CGContextRef context = UIGraphicsGetCurrentContext();
-    CGContextSetShouldAntialias(context, NO);
-    CGContextSetAlpha(context,1.0);
-    CGContextSetLineWidth(context, 1.0);
-    CGContextSetStrokeColorWithColor(context, [self.wavesColor CGColor]);
-    
-    float halfGraphHeight = (imageHeight / 2);
-    float centerLeft = halfGraphHeight;
-    float sampleAdjustmentFactor;
-    if(normalizeMax - noiseFloor == 0){
-        sampleAdjustmentFactor = imageHeight / 2;
-    }else{
-        sampleAdjustmentFactor = imageHeight / (normalizeMax - noiseFloor) / 2;
-    }
-
-    for (NSInteger intSample=0; intSample<sampleCount; intSample++) {
-        Float32 sample = *samples++;
-        float pixels = (sample - noiseFloor) * sampleAdjustmentFactor;
-        if (pixels == 0) {
-            pixels = 1;
-        }
-        CGContextMoveToPoint(context, intSample, centerLeft-pixels);
-        CGContextAddLineToPoint(context, intSample, centerLeft+pixels);
-        CGContextStrokePath(context);
-    }
-    
-    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
-
-    CGRect drawRect = CGRectMake(0, 0, image.size.width, image.size.height);
-    [self.progressColor set];
-    UIRectFillUsingBlendMode(drawRect, kCGBlendModeSourceAtop);
-    UIImage *tintedImage = UIGraphicsGetImageFromCurrentImageContext();
-
-    [self.cropColor set];
-    UIRectFillUsingBlendMode(drawRect, kCGBlendModeSourceAtop);
-    UIImage *cropImage = UIGraphicsGetImageFromCurrentImageContext();
-
-    UIGraphicsEndImageContext();
-    done(image, tintedImage,cropImage);
-}
-
-#pragma mark - Interaction
-
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
-    return YES;
-}
-
-- (void)handlePinchGesture:(UIPinchGestureRecognizer *)recognizer
-{
-    if (!self.doesAllowStretch)
-        return;
-    if (recognizer.scale == 1) return;
-    
-    unsigned long middleSamples = (self.zoomStartSamples + self.zoomEndSamples) / 2;
-    unsigned long rangeSamples = self.zoomEndSamples - self.zoomStartSamples;
-    if (middleSamples - 1/recognizer.scale*rangeSamples/2 >= 0)
-        _zoomStartSamples = middleSamples - 1/recognizer.scale*rangeSamples/2;
-    else
-        _zoomStartSamples = 0;
-    if (middleSamples + 1/recognizer.scale*rangeSamples/2 <= self.totalSamples)
-        _zoomEndSamples = middleSamples + 1/recognizer.scale*rangeSamples/2;
-    else
-        _zoomEndSamples = self.totalSamples;
-    [self setNeedsDisplay];
-    [self setNeedsLayout];
-    recognizer.scale = 1;
-}
-
-- (void)handlePanGesture:(UIPanGestureRecognizer *)recognizer
-{
-    CGPoint point = [recognizer translationInView:self];
-    NSLog(@"translation: %f", point.x);
-
-    if (self.doesAllowScroll) {
-        if (recognizer.state == UIGestureRecognizerStateBegan && [self.delegate respondsToSelector:@selector(waveformDidBeginPanning:)])
-          [self.delegate waveformDidBeginPanning:self];
-      
-        long translationSamples = (float)(self.zoomEndSamples-self.zoomStartSamples) * point.x / self.bounds.size.width;
-        [recognizer setTranslation:CGPointZero inView:self];
-        if ((float)self.zoomStartSamples - translationSamples < 0)
-            translationSamples = (float)self.zoomStartSamples;
-        if ((float)self.zoomEndSamples - translationSamples > self.totalSamples)
-            translationSamples = self.zoomEndSamples - self.totalSamples;
-        _zoomStartSamples -= translationSamples;
-        _zoomEndSamples -= translationSamples;
-      
-        if (recognizer.state == UIGestureRecognizerStateEnded && [self.delegate respondsToSelector:@selector(waveformDidEndPanning:)])
-          [self.delegate waveformDidEndPanning:self];
-      
-        [self setNeedsDisplay];
-        [self setNeedsLayout];
-    } else if (self.doesAllowScrubbing) {
-        self.progressSamples = self.zoomStartSamples + (float)(self.zoomEndSamples-self.zoomStartSamples) * [recognizer locationInView:self].x / self.bounds.size.width;
-    }
-}
-
-- (void)handleTapGesture:(UITapGestureRecognizer *)recognizer
-{
-    if (self.doesAllowScrubbing) {
-        self.progressSamples = self.zoomStartSamples + (float)(self.zoomEndSamples-self.zoomStartSamples) * [recognizer locationInView:self].x / self.bounds.size.width;
-    }
-}
-
-@end

+ 0 - 105
Pods/IQAudioRecorderController/IQAudioRecorderController/IQAudioCropperViewController.h

@@ -1,105 +0,0 @@
-//
-//  IQAudioCropperViewController.h
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Iftekhar Qurashi
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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/UIViewController.h>
-
-@class IQAudioCropperViewController;
-
-@protocol IQAudioCropperViewControllerDelegate <NSObject>
-
-@required
-/**
- Returns the temporary audio filePath, you need to copy the audio file to your own location and don't rely on the filePath anymore. You need to dismiss controller from yourself.
- */
--(void)audioCropperController:(nonnull IQAudioCropperViewController*)controller didFinishWithAudioAtPath:(nonnull NSString*)filePath;
-
-@optional
-/**
- Optional method to determine if user taps on Cancel button. If you implement this delegate then you need to dismiss controller yourself.
- */
--(void)audioCropperControllerDidCancel:(nonnull IQAudioCropperViewController*)controller;
-
-@end
-
-
-@interface IQAudioCropperViewController : UIViewController
-
-/**
- Initialise with audio file path
- */
--(nonnull instancetype)initWithFilePath:(nonnull NSString*)audioFilePath;
-
-/**
- Original audio file path
- */
-@property(nonnull, nonatomic, strong, readonly) NSString *originalAudioFilePath;
-
-/**
- Original audio file path
- */
-@property(nonnull, nonatomic, strong, readonly) NSString *currentAudioFilePath;
-
-/**
- Title to show on navigationBar
- */
-@property(nullable, nonatomic,copy) NSString *title;
-
-///--------------------------
-/// @name Delegate callback
-///--------------------------
-
-/**
- IQAudioCropperViewController delegate.
- */
-@property(nullable, nonatomic, weak) id<IQAudioCropperViewControllerDelegate> delegate;
-
-
-///--------------------------
-/// @name User Interface
-///--------------------------
-
-/**
- Support light and dark style UI for the user interface. If you would like to present light style then you may need to set barStyle to UIBarStyleDefault, otherwise dark style UI is the default.
- */
-@property(nonatomic,assign) UIBarStyle barStyle;
-
-/**
- normalTintColor is used for showing wave tintColor while not recording, it is also used for navigationBar and toolbar tintColor.
- */
-@property (nullable, nonatomic, strong) UIColor *normalTintColor;
-
-/**
- Highlighted tintColor is used when playing the recorded audio file or when recording the audio file.
- */
-@property (nullable, nonatomic, strong) UIColor *highlightedTintColor;
-
-@end
-
-
-@interface UIViewController (IQAudioCropperViewController)
-
-- (void)presentAudioCropperViewControllerAnimated:(nonnull IQAudioCropperViewController *)audioCropperViewController;
-- (void)presentBlurredAudioCropperViewControllerAnimated:(nonnull IQAudioCropperViewController *)audioCropperViewController;
-
-@end

+ 0 - 1064
Pods/IQAudioRecorderController/IQAudioRecorderController/IQAudioCropperViewController.m

@@ -1,1064 +0,0 @@
-//
-//  IQAudioCropperViewController.m
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Iftekhar Qurashi
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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 <AVFoundation/AVFAudio.h>
-#import <AVFoundation/AVAssetTrack.h>
-#import <AVFoundation/AVAudioMix.h>
-#import <AVFoundation/AVAssetExportSession.h>
-#import <CoreMedia/CMTime.h>
-
-#import "IQAudioCropperViewController.h"
-#import "IQ_FDWaveformView.h"
-#import "NSString+IQTimeIntervalFormatter.h"
-#import "IQCropSelectionBeginView.h"
-#import "IQCropSelectionEndView.h"
-
-typedef NS_ENUM(NSUInteger, IQCropGestureState) {
-    IQCropGestureStateNone,
-    IQCropGestureStateLeft,
-    IQCropGestureStateRight,
-};
-
-@interface IQAudioCropperViewController ()<IQ_FDWaveformViewDelegate,AVAudioPlayerDelegate>
-{
-    BOOL _isFirstTime;
-
-    CADisplayLink *playProgressDisplayLink;
-    
-    //Private variables
-    NSString *_oldSessionCategory;
-    BOOL _wasIdleTimerDisabled;
-}
-
-@property(nonatomic, strong, readonly) UIVisualEffectView *visualEffectView;
-@property(nonatomic, strong, readonly) UIView *middleContainerView;
-@property(nonatomic, strong, readonly) IQ_FDWaveformView *waveformView;
-@property(nonatomic, strong, readonly) UIActivityIndicatorView *waveLoadingIndicatorView;
-@property(nonatomic, strong, readonly) UIActivityIndicatorView *cropActivityIndicatorView;
-
-@property(nonnull, nonatomic, strong, readwrite) NSString *originalAudioFilePath;
-@property(nonnull, nonatomic, strong, readwrite) NSString *currentAudioFilePath;
-
-@property(nonatomic, assign) BOOL blurrEnabled;
-
-@property(nonatomic, readonly) IQCropGestureState gestureState;
-@property(nonatomic, readonly) UIPanGestureRecognizer *cropPanGesture;
-@property(nonatomic, readonly) UITapGestureRecognizer *cropTapGesture;
-
-@property IQCropSelectionView *leftCropView;
-@property IQCropSelectionView *rightCropView;
-@property AVAudioPlayer *audioPlayer;
-
-//Navigation Bar
-@property UIBarButtonItem *cancelButton, *doneButton;
-
-//Toolbar
-@property UIBarButtonItem *playButton, *pauseButton, *stopPlayButton, *cropButton, *cropActivityBarButton, *flexItem;
-
-@end
-
-@implementation IQAudioCropperViewController
-@synthesize gestureState = _gestureState;
-@dynamic title;
-
-@synthesize visualEffectView = _visualEffectView;
-@synthesize middleContainerView = _middleContainerView;
-@synthesize waveformView = _waveformView;
-@synthesize waveLoadingIndicatorView = _waveLoadingIndicatorView;
-@synthesize cropActivityIndicatorView = _cropActivityIndicatorView;
-
-
--(instancetype)initWithFilePath:(NSString*)audioFilePath
-{
-    self = [super init];
-    
-    if (self)
-    {
-        self.originalAudioFilePath = audioFilePath;
-        self.currentAudioFilePath = audioFilePath;
-    }
-
-    return self;
-}
-
--(UIVisualEffectView *)visualEffectView
-{
-    if (_visualEffectView == nil)
-    {
-        _visualEffectView = [[UIVisualEffectView alloc] initWithEffect:nil];
-        _visualEffectView.frame = [UIScreen mainScreen].bounds;
-    }
-    
-    return _visualEffectView;
-}
-
--(UIView *)middleContainerView
-{
-    if (_middleContainerView == nil)
-    {
-        _middleContainerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 200)];
-    }
-    
-    return _middleContainerView;
-}
-
--(IQ_FDWaveformView *)waveformView
-{
-    if (_waveformView == nil)
-    {
-        _waveformView = [[IQ_FDWaveformView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 150)];
-    }
-    
-    return _waveformView;
-}
-
--(UIActivityIndicatorView *)waveLoadingIndicatorView
-{
-    if (_waveLoadingIndicatorView == nil)
-    {
-        _waveLoadingIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
-    }
-    
-    return _waveLoadingIndicatorView;
-}
-
--(UIActivityIndicatorView *)cropActivityIndicatorView
-{
-    if (_cropActivityIndicatorView == nil)
-    {
-        _cropActivityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
-    }
-    
-    return _cropActivityIndicatorView;
-}
-
--(void)setNormalTintColor:(UIColor *)normalTintColor
-{
-    _normalTintColor = normalTintColor;
-    
-    _playButton.tintColor = [self _normalTintColor];
-    _pauseButton.tintColor = [self _normalTintColor];
-    _stopPlayButton.tintColor = [self _normalTintColor];
-    _cropButton.tintColor = [self _normalTintColor];
-    _waveformView.wavesColor = [self _normalTintColor];
-}
-
--(UIColor*)_normalTintColor
-{
-    if (_normalTintColor)
-    {
-        return _normalTintColor;
-    }
-    else
-    {
-        if (self.barStyle == UIBarStyleDefault)
-        {
-            return [UIColor colorWithRed:0 green:0.5 blue:1.0 alpha:1.0];
-        }
-        else
-        {
-            return [UIColor whiteColor];
-        }
-    }
-}
-
--(void)setHighlightedTintColor:(UIColor *)highlightedTintColor
-{
-    _highlightedTintColor = highlightedTintColor;
-    _waveformView.progressColor = [self _highlightedTintColor];
-}
-
--(UIColor *)_highlightedTintColor
-{
-    if (_highlightedTintColor)
-    {
-        return _highlightedTintColor;
-    }
-    else
-    {
-        if (self.barStyle == UIBarStyleDefault)
-        {
-            return [UIColor colorWithRed:255.0/255.0 green:64.0/255.0 blue:64.0/255.0 alpha:1.0];
-        }
-        else
-        {
-            return [UIColor colorWithRed:0 green:0.5 blue:1.0 alpha:1.0];
-        }
-    }
-}
-
--(void)setBarStyle:(UIBarStyle)barStyle
-{
-    _barStyle = barStyle;
-    
-    if (self.barStyle == UIBarStyleDefault)
-    {
-        self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
-        self.navigationController.toolbar.barStyle = UIBarStyleDefault;
-        self.navigationController.navigationBar.tintColor = [self _normalTintColor];
-        self.navigationController.toolbar.tintColor = [self _normalTintColor];
-        self.cropActivityIndicatorView.color = [UIColor lightGrayColor];
-        self.waveLoadingIndicatorView.color = [UIColor lightGrayColor];
-    }
-    else
-    {
-        self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
-        self.navigationController.toolbar.barStyle = UIBarStyleBlack;
-        self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
-        self.navigationController.toolbar.tintColor = [UIColor whiteColor];
-        self.cropActivityIndicatorView.color = [UIColor whiteColor];
-        self.waveLoadingIndicatorView.color = [UIColor whiteColor];
-    }
-    
-    self.visualEffectView.tintColor = [self _normalTintColor];
-    self.highlightedTintColor = self.highlightedTintColor;
-    self.normalTintColor = self.normalTintColor;
-}
-
--(void)loadView
-{
-    self.view = self.visualEffectView;
-}
-
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-
-    _isFirstTime = YES;
-
-    {
-        if (self.title.length == 0)
-        {
-            self.navigationItem.title = NSLocalizedString(@"Edit",nil);
-        }
-    }
-    
-    NSURL *audioURL = [NSURL fileURLWithPath:self.currentAudioFilePath];
-    
-    self.middleContainerView.alpha = 0.0;
-    [self.visualEffectView.contentView addSubview:self.middleContainerView];
-    [self.visualEffectView.contentView addSubview:self.waveLoadingIndicatorView];
-    
-
-    {
-        self.middleContainerView.translatesAutoresizingMaskIntoConstraints = NO;
-        self.waveLoadingIndicatorView.translatesAutoresizingMaskIntoConstraints = NO;
-
-        NSDictionary *views = @{@"middleContainerView":self.middleContainerView};
-        
-        NSMutableArray<NSLayoutConstraint*> *constraints = [[NSMutableArray alloc] init];
-        
-        [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[middleContainerView]-|" options:0 metrics:nil views:views]];
-
-        [constraints addObject:[NSLayoutConstraint constraintWithItem:self.middleContainerView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.visualEffectView.contentView attribute:NSLayoutAttributeCenterY multiplier:1 constant:0]];
-        [constraints addObject:[NSLayoutConstraint constraintWithItem:self.waveLoadingIndicatorView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.middleContainerView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]];
-        [constraints addObject:[NSLayoutConstraint constraintWithItem:self.waveLoadingIndicatorView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.self.middleContainerView attribute:NSLayoutAttributeCenterY multiplier:1 constant:0]];
-        
-        [self.visualEffectView.contentView addConstraints:constraints];
-    }
-    
-    {
-        self.waveformView.userInteractionEnabled = NO;
-        self.waveformView.delegate = self;
-        self.waveformView.audioURL = audioURL;
-        self.waveformView.wavesColor = [self _normalTintColor];
-        self.waveformView.progressColor = [self _highlightedTintColor];
-        self.waveformView.cropColor = [UIColor yellowColor];
-        
-        self.waveformView.doesAllowScroll = NO;
-        self.waveformView.doesAllowScrubbing = NO;
-        self.waveformView.doesAllowStretch = NO;
-        [self.middleContainerView addSubview:self.waveformView];
-        
-        {
-            self.waveformView.translatesAutoresizingMaskIntoConstraints = NO;
-
-            NSDictionary *views = @{@"waveformView":self.waveformView};
-            
-            NSMutableArray<NSLayoutConstraint*> *constraints = [[NSMutableArray alloc] init];
-            
-            [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-22-[waveformView]-22-|" options:0 metrics:nil views:views]];
-            [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-25-[waveformView(==150)]-25-|" options:0 metrics:nil views:views]];
-
-            [self.middleContainerView addConstraints:constraints];
-        }
-    }
-    
-    {
-        _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:nil];
-        _audioPlayer.delegate = self;
-        _audioPlayer.meteringEnabled = YES;
-    }
-
-    {
-        _cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelAction:)];
-        self.navigationItem.leftBarButtonItem = _cancelButton;
-        _doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneAction:)];
-        _doneButton.enabled = NO;
-        self.navigationItem.rightBarButtonItem = _doneButton;
-    }
-    
-    {
-        NSBundle* bundle = [NSBundle bundleForClass:self.class];
-        if (bundle == nil)  bundle = [NSBundle mainBundle];
-        NSBundle *resourcesBundle = [NSBundle bundleWithPath:[bundle pathForResource:@"IQAudioRecorderController" ofType:@"bundle"]];
-        if (resourcesBundle == nil) resourcesBundle = bundle;
-        
-        self.navigationController.toolbarHidden = NO;
-        
-        _flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
-
-        _stopPlayButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"stop_playing" inBundle:resourcesBundle compatibleWithTraitCollection:nil] style:UIBarButtonItemStylePlain target:self action:@selector(stopPlayingButtonAction:)];
-        _stopPlayButton.enabled = NO;
-        _stopPlayButton.tintColor = [self _normalTintColor];
-        _playButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:@selector(playAction:)];
-        _playButton.tintColor = [self _normalTintColor];
-        
-        _pauseButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPause target:self action:@selector(pauseAction:)];
-        _pauseButton.tintColor = [self _normalTintColor];
-
-        _cropButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"scissor" inBundle:resourcesBundle compatibleWithTraitCollection:nil] style:UIBarButtonItemStylePlain target:self action:@selector(cropAction:)];
-        _cropButton.tintColor = [self _normalTintColor];
-        _cropButton.enabled = NO;
-        
-        _cropActivityBarButton = [[UIBarButtonItem alloc] initWithCustomView:self.cropActivityIndicatorView];
-        
-        [self setToolbarItems:@[_stopPlayButton,_flexItem, _playButton,_flexItem,_cropButton] animated:NO];
-    }
-    
-    {
-        CGFloat margin = 30;
-        
-        _leftCropView = [[IQCropSelectionBeginView alloc] initWithFrame:CGRectMake(0, 0, 45, CGRectGetHeight(self.waveformView.frame)+margin*2)];
-        _leftCropView.center = CGPointMake(CGRectGetMinX(self.waveformView.frame), CGRectGetMidY(self.waveformView.frame));
-        _leftCropView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;
-        
-        _rightCropView = [[IQCropSelectionEndView alloc] initWithFrame:CGRectMake(0, 0, 45, CGRectGetHeight(self.waveformView.frame)+margin*2)];
-        _rightCropView.center = CGPointMake(CGRectGetMaxX(self.waveformView.frame), CGRectGetMidY(self.waveformView.frame));
-        _rightCropView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;
-        _leftCropView.cropTime = 0;
-        _rightCropView.cropTime = _audioPlayer.duration;
-        self.waveformView.cropStartSamples = self.waveformView.totalSamples*(_leftCropView.cropTime/_audioPlayer.duration);
-        self.waveformView.cropEndSamples = self.waveformView.totalSamples*(_rightCropView.cropTime/_audioPlayer.duration);
-
-        [self.middleContainerView addSubview:_leftCropView];
-        [self.middleContainerView addSubview:_rightCropView];
-        
-        _cropPanGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(cropPanRecognizer:)];
-        [self.middleContainerView addGestureRecognizer:self.cropPanGesture];
-
-        _cropTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cropTapRecognizer:)];
-        [_cropTapGesture requireGestureRecognizerToFail:self.cropPanGesture];
-        [self.middleContainerView addGestureRecognizer:self.cropTapGesture];
-    }
-}
-
--(void)viewWillAppear:(BOOL)animated
-{
-    [super viewWillAppear:animated];
-
-    if (_isFirstTime)
-    {
-        _isFirstTime = NO;
-        
-        if (self.blurrEnabled)
-        {
-            __weak typeof(self) weakSelf = self;
-
-            [UIView animateWithDuration:0.3 animations:^{
-                
-                if (weakSelf.barStyle == UIBarStyleDefault)
-                {
-                    weakSelf.visualEffectView.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight];
-                }
-                else
-                {
-                    weakSelf.visualEffectView.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
-                }
-            }];
-        }
-        else
-        {
-            if (self.barStyle == UIBarStyleDefault)
-            {
-                self.visualEffectView.backgroundColor = [UIColor whiteColor];
-            }
-            else
-            {
-                self.visualEffectView.backgroundColor = [UIColor darkGrayColor];
-            }
-        }
-    }
-}
-
--(void)cropTapRecognizer:(UITapGestureRecognizer*)tapRecognizer
-{
-    if (tapRecognizer.state == UIGestureRecognizerStateEnded)
-    {
-        NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[_stopPlayButton.target methodSignatureForSelector:_stopPlayButton.action]];
-        invocation.target = _stopPlayButton.target;
-        invocation.selector = _stopPlayButton.action;
-        [invocation invoke];
-        
-        CGPoint tappedLocation = [tapRecognizer locationInView:self.middleContainerView];
-        
-        CGFloat leftDistance = ABS(_leftCropView.center.x-tappedLocation.x);
-        CGFloat rightDistance = ABS(_rightCropView.center.x-tappedLocation.x);
-        
-        IQCropGestureState state = leftDistance > rightDistance ? IQCropGestureStateRight : IQCropGestureStateLeft;
-        
-        __weak typeof(self) weakSelf = self;
-
-        switch (state)
-        {
-            case IQCropGestureStateLeft:
-            {
-                //Left Margin
-                CGFloat pointX = MAX(CGRectGetMinX(self.waveformView.frame), tappedLocation.x);
-                
-                //Right Margin from right cropper
-                pointX = MIN(CGRectGetMinX(_rightCropView.frame), pointX);
-                
-                CGPoint leftCropViewCenter = CGPointMake(pointX, _leftCropView.center.y);
-                
-                [UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionBeginFromCurrentState|UIViewAnimationOptionCurveEaseInOut animations:^{
-                    weakSelf.leftCropView.center = leftCropViewCenter;
-                } completion:NULL];
-
-                {
-                    CGPoint centerInWaveform = [_leftCropView.superview convertPoint:leftCropViewCenter toView:self.waveformView];
-                    
-                    _leftCropView.cropTime = (centerInWaveform.x/self.waveformView.frame.size.width)*_audioPlayer.duration;
-                    _audioPlayer.currentTime = _leftCropView.cropTime;
-                    self.waveformView.progressSamples = self.waveformView.totalSamples*(_audioPlayer.currentTime/_audioPlayer.duration);
-                    self.waveformView.cropStartSamples = self.waveformView.totalSamples*(_leftCropView.cropTime/_audioPlayer.duration);
-                }
-            }
-                break;
-            case IQCropGestureStateRight:
-            {
-                //Right Margin
-                CGFloat pointX = MIN(CGRectGetMaxX(self.waveformView.frame), tappedLocation.x);
-                
-                //Left Margin from left cropper
-                pointX = MAX(CGRectGetMaxX(_leftCropView.frame), pointX);
-                
-                CGPoint rightCropViewCenter = CGPointMake(pointX, _rightCropView.center.y);
-                
-                [UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionBeginFromCurrentState|UIViewAnimationOptionCurveEaseInOut animations:^{
-                    weakSelf.rightCropView.center = rightCropViewCenter;
-                } completion:NULL];
-                
-                {
-                    CGPoint centerInWaveform = [_rightCropView.superview convertPoint:rightCropViewCenter toView:self.waveformView];
-                    
-                    _rightCropView.cropTime = (centerInWaveform.x/self.waveformView.frame.size.width)*_audioPlayer.duration;
-                    self.waveformView.cropEndSamples = self.waveformView.totalSamples*(_rightCropView.cropTime/_audioPlayer.duration);
-                }
-            }
-                break;
-                
-            default:
-                break;
-        }
-
-        
-        if (_leftCropView.cropTime == 0 && _rightCropView.cropTime == _audioPlayer.duration)
-        {
-            _cropButton.enabled = NO;
-        }
-        else
-        {
-            _cropButton.enabled = YES;
-        }
-    }
-}
-
-
--(void)cropPanRecognizer:(UIPanGestureRecognizer*)panRecognizer
-{
-    static CGPoint beginCenter;
-    CGPoint currentLocation = [panRecognizer locationInView:self.middleContainerView];
-    
-    if (panRecognizer.state == UIGestureRecognizerStateBegan)
-    {
-        NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[_stopPlayButton.target methodSignatureForSelector:_stopPlayButton.action]];
-        invocation.target = _stopPlayButton.target;
-        invocation.selector = _stopPlayButton.action;
-        [invocation invoke];
-        
-        CGFloat leftDistance = ABS(_leftCropView.center.x-currentLocation.x);
-        CGFloat rightDistance = ABS(_rightCropView.center.x-currentLocation.x);
-        
-        _gestureState = leftDistance > rightDistance ? IQCropGestureStateRight : IQCropGestureStateLeft;
-
-        switch (_gestureState)
-        {
-            case IQCropGestureStateLeft:
-            {
-                beginCenter = _leftCropView.center;
-            }
-                break;
-            case IQCropGestureStateRight:
-            {
-                beginCenter = _rightCropView.center;
-            }
-                break;
-                
-            default:
-                break;
-        }
-    }
-    
-    if (panRecognizer.state == UIGestureRecognizerStateBegan ||
-        panRecognizer.state == UIGestureRecognizerStateChanged)
-    {
-        __weak typeof(self) weakSelf = self;
-
-        switch (_gestureState)
-        {
-            case IQCropGestureStateLeft:
-            {
-                //Left Margin
-                CGFloat pointX = MAX(CGRectGetMinX(self.waveformView.frame), currentLocation.x);
-                
-                //Right Margin from right cropper
-                pointX = MIN(CGRectGetMinX(_rightCropView.frame), pointX);
-                
-                CGPoint leftCropViewCenter = CGPointMake(pointX, beginCenter.y);
-
-                [UIView animateWithDuration:(panRecognizer.state == UIGestureRecognizerStateBegan ? 0.2:0) delay:0 options:UIViewAnimationOptionBeginFromCurrentState|UIViewAnimationOptionCurveEaseInOut animations:^{
-                    weakSelf.leftCropView.center = leftCropViewCenter;
-                } completion:NULL];
-
-                {
-                    CGPoint centerInWaveform = [_leftCropView.superview convertPoint:leftCropViewCenter toView:self.waveformView];
-                    
-                    _leftCropView.cropTime = (centerInWaveform.x/self.waveformView.frame.size.width)*_audioPlayer.duration;
-                    _audioPlayer.currentTime = _leftCropView.cropTime;
-                    self.waveformView.progressSamples = self.waveformView.totalSamples*(_audioPlayer.currentTime/_audioPlayer.duration);
-                    self.waveformView.cropStartSamples = self.waveformView.totalSamples*(_leftCropView.cropTime/_audioPlayer.duration);
-                }
-            }
-                break;
-                case IQCropGestureStateRight:
-            {
-                //Right Margin
-                CGFloat pointX = MIN(CGRectGetMaxX(self.waveformView.frame), currentLocation.x);
-                
-                //Left Margin from left cropper
-                pointX = MAX(CGRectGetMaxX(_leftCropView.frame), pointX);
-                
-                CGPoint rightCropViewCenter = CGPointMake(pointX, beginCenter.y);
-                
-                [UIView animateWithDuration:(panRecognizer.state == UIGestureRecognizerStateBegan ? 0.2:0) delay:0 options:UIViewAnimationOptionBeginFromCurrentState|UIViewAnimationOptionCurveEaseInOut animations:^{
-                    weakSelf.rightCropView.center = rightCropViewCenter;
-                } completion:NULL];
-                
-                {
-                    CGPoint centerInWaveform = [_rightCropView.superview convertPoint:rightCropViewCenter toView:self.waveformView];
-                    
-                    _rightCropView.cropTime = (centerInWaveform.x/self.waveformView.frame.size.width)*_audioPlayer.duration;
-                    self.waveformView.cropEndSamples = self.waveformView.totalSamples*(_rightCropView.cropTime/_audioPlayer.duration);
-                }
-            }
-                break;
-                
-            default:
-                break;
-        }
-    }
-    else if (panRecognizer.state == UIGestureRecognizerStateEnded|| panRecognizer.state == UIGestureRecognizerStateFailed)
-    {
-        beginCenter = CGPointZero;
-
-        if (_leftCropView.cropTime == 0 && _rightCropView.cropTime == _audioPlayer.duration)
-        {
-            _cropButton.enabled = NO;
-        }
-        else
-        {
-            _cropButton.enabled = YES;
-        }
-        
-        _gestureState = IQCropGestureStateNone;
-    }
-}
-
-#pragma mark - Audio Play
-
--(void)updatePlayProgress
-{
-    self.waveformView.progressSamples = self.waveformView.totalSamples*(_audioPlayer.currentTime/_audioPlayer.duration);
-    
-    if (_audioPlayer.currentTime >= _rightCropView.cropTime)
-    {
-        NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[_stopPlayButton.target methodSignatureForSelector:_stopPlayButton.action]];
-        invocation.target = _stopPlayButton.target;
-        invocation.selector = _stopPlayButton.action;
-        [invocation invoke];
-    }
-}
-
-- (void)playAction:(UIBarButtonItem *)item
-{
-    _oldSessionCategory = [AVAudioSession sharedInstance].category;
-    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
-    [UIApplication sharedApplication].idleTimerDisabled = YES;
-    
-    [_audioPlayer prepareToPlay];
-    [_audioPlayer play];
-    
-    //UI Update
-    {
-        [self setToolbarItems:@[_stopPlayButton,_flexItem, _pauseButton,_flexItem,_cropButton] animated:YES];
-        _stopPlayButton.enabled = YES;
-        _cropButton.enabled = NO;
-        _cancelButton.enabled = NO;
-        _doneButton.enabled = NO;
-    }
-    
-    {
-        [playProgressDisplayLink invalidate];
-        playProgressDisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updatePlayProgress)];
-        [playProgressDisplayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
-    }
-}
-
--(void)pauseAction:(UIBarButtonItem*)item
-{
-    [[AVAudioSession sharedInstance] setCategory:_oldSessionCategory error:nil];
-    [UIApplication sharedApplication].idleTimerDisabled = _wasIdleTimerDisabled;
-    
-    [_audioPlayer pause];
-
-    //    //UI Update
-    {
-        [self setToolbarItems:@[_stopPlayButton,_flexItem, _playButton,_flexItem,_cropButton] animated:YES];
-    }
-}
-
--(void)stopPlayingButtonAction:(UIBarButtonItem*)item
-{
-    //UI Update
-    {
-        [self setToolbarItems:@[_stopPlayButton,_flexItem, _playButton,_flexItem,_cropButton] animated:YES];
-        _stopPlayButton.enabled = NO;
-        _cancelButton.enabled = YES;
-
-        if ([self.originalAudioFilePath isEqualToString:self.currentAudioFilePath])
-        {
-            _doneButton.enabled = NO;
-        }
-        else
-        {
-            _doneButton.enabled = YES;
-        }
-        
-        if (_leftCropView.cropTime == 0 && _rightCropView.cropTime == _audioPlayer.duration)
-        {
-            _cropButton.enabled = NO;
-        }
-        else
-        {
-            _cropButton.enabled = YES;
-        }
-    }
-    
-    {
-        [playProgressDisplayLink invalidate];
-        playProgressDisplayLink = nil;
-    }
-
-    [_audioPlayer stop];
-    
-    {
-        _audioPlayer.currentTime = _leftCropView.cropTime;
-        self.waveformView.progressSamples = self.waveformView.totalSamples*(_audioPlayer.currentTime/_audioPlayer.duration);
-    }
-
-    [[AVAudioSession sharedInstance] setCategory:_oldSessionCategory error:nil];
-    [UIApplication sharedApplication].idleTimerDisabled = _wasIdleTimerDisabled;
-}
-
-#pragma mark - Crop
-
--(void)cropAction:(UIBarButtonItem*)item
-{
-    {
-        [_cropActivityIndicatorView startAnimating];
-        [self setToolbarItems:@[_stopPlayButton,_flexItem, _playButton,_flexItem,_cropActivityBarButton] animated:YES];
-        _stopPlayButton.enabled = NO;
-        _playButton.enabled = NO;
-        _cancelButton.enabled = NO;
-        _doneButton.enabled = NO;
-        self.visualEffectView.userInteractionEnabled = NO;
-    }
-
-        {
-            NSURL *audioURL = [NSURL fileURLWithPath:self.currentAudioFilePath];
-
-            AVAsset *asset = [AVAsset assetWithURL:audioURL];
-            
-            // get the first audio track
-            NSArray *tracks = [asset tracksWithMediaType:AVMediaTypeAudio];
-            
-            AVAssetTrack *track = [tracks firstObject];
-            
-            // create the export session
-            // no need for a retain here, the session will be retained by the
-            // completion handler since it is referenced there
-            AVAssetExportSession *exportSession = [AVAssetExportSession
-                                                   exportSessionWithAsset:asset
-                                                   presetName:AVAssetExportPresetAppleM4A];
-            
-            CMTimeScale scale = [track naturalTimeScale];
-
-            CMTime startTime = CMTimeMake(_leftCropView.cropTime*scale, scale);
-            CMTime stopTime = CMTimeMake(_rightCropView.cropTime*scale, scale);
-            CMTimeRange exportTimeRange = CMTimeRangeFromTimeToTime(startTime, stopTime);
-            
-            // setup audio mix
-            AVMutableAudioMix *exportAudioMix = [AVMutableAudioMix audioMix];
-            AVMutableAudioMixInputParameters *exportAudioMixInputParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:track];
-            
-            exportAudioMix.inputParameters = [NSArray arrayWithObject:exportAudioMixInputParameters];
-            
-            NSString *globallyUniqueString = [NSProcessInfo processInfo].globallyUniqueString;
-            
-            NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.m4a",globallyUniqueString]];
-
-            // configure export session  output with all our parameters
-            exportSession.outputURL = [NSURL fileURLWithPath:filePath]; // output path
-            exportSession.outputFileType = AVFileTypeAppleM4A; // output file type
-            exportSession.timeRange = exportTimeRange; // trim time range
-            exportSession.audioMix = exportAudioMix; // fade in audio mix
-            
-            __weak typeof(self) weakSelf = self;
-
-            // perform the export
-            [exportSession exportAsynchronouslyWithCompletionHandler:^{
-                
-                switch (exportSession.status)
-                {
-                    case AVAssetExportSessionStatusCancelled:
-                    case AVAssetExportSessionStatusCompleted:
-                    case AVAssetExportSessionStatusFailed:
-                    {
-                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
-                            
-                            if (exportSession.status == AVAssetExportSessionStatusCompleted)
-                            {
-                                NSString *globallyUniqueString = [NSProcessInfo processInfo].globallyUniqueString;
-                                NSString *newFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.m4a",globallyUniqueString]];
-                                NSURL *audioURL = [NSURL fileURLWithPath:newFilePath];
-
-                                [[NSFileManager defaultManager] moveItemAtURL:exportSession.outputURL toURL:audioURL error:nil];
-                                weakSelf.currentAudioFilePath = newFilePath;
-                                
-                                weakSelf.waveformView.audioURL = audioURL;
-                                [weakSelf.audioPlayer stop];
-                                weakSelf.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:nil];
-                                weakSelf.audioPlayer.delegate = self;
-                                weakSelf.audioPlayer.meteringEnabled = YES;
-
-                                [UIView animateWithDuration:0.2 animations:^{
-
-                                    weakSelf.leftCropView.center = CGPointMake(CGRectGetMinX(weakSelf.waveformView.frame), CGRectGetMidY(weakSelf.waveformView.frame));
-                                    weakSelf.rightCropView.center = CGPointMake(CGRectGetMaxX(weakSelf.waveformView.frame), CGRectGetMidY(weakSelf.waveformView.frame));
-                                    weakSelf.leftCropView.cropTime = 0;
-                                    weakSelf.rightCropView.cropTime = weakSelf.audioPlayer.duration;
-                                }];
-                            }
-                            
-                            [weakSelf.cropActivityIndicatorView stopAnimating];
-                            [weakSelf setToolbarItems:@[weakSelf.stopPlayButton,weakSelf.flexItem, weakSelf.playButton,weakSelf.flexItem,weakSelf.cropButton] animated:YES];
-                            weakSelf.stopPlayButton.enabled = YES;
-                            weakSelf.playButton.enabled = YES;
-                            weakSelf.cancelButton.enabled = YES;
-                            weakSelf.doneButton.enabled = YES;
-                            weakSelf.cropButton.enabled = NO;
-                            weakSelf.visualEffectView.userInteractionEnabled = YES;
-                        }];
-                    }
-                        break;
-                        
-                    default:
-                        break;
-                }
-            }];
-        }
-}
-
-#pragma mark - AVAudioPlayerDelegate
-/*
- Occurs when the audio player instance completes playback
- */
--(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
-{
-    //To update UI on stop playing
-    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[_stopPlayButton.target methodSignatureForSelector:_stopPlayButton.action]];
-    invocation.target = _stopPlayButton.target;
-    invocation.selector = _stopPlayButton.action;
-    [invocation invoke];
-}
-
-#pragma mark - IQ_FDWaveformView delegate
-
-- (void)waveformViewWillRender:(IQ_FDWaveformView *)waveformView
-{
-    __weak typeof(self) weakSelf = self;
-
-    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
-        [UIView animateWithDuration:0.1 animations:^{
-            weakSelf.middleContainerView.alpha = 0.0;
-            [weakSelf.waveLoadingIndicatorView startAnimating];
-        }];
-    }];
-}
-
-- (void)waveformViewDidRender:(IQ_FDWaveformView *)waveformView
-{
-    __weak typeof(self) weakSelf = self;
-
-    [UIView animateWithDuration:0.1 animations:^{
-        weakSelf.middleContainerView.alpha = 1.0;
-        [weakSelf.waveLoadingIndicatorView stopAnimating];
-    }];
-}
-
--(void)waveformViewFailedToRender:(IQ_FDWaveformView *)waveformView
-{
-    __weak typeof(self) weakSelf = self;
-
-    [UIView animateWithDuration:0.1 animations:^{
-        [weakSelf.waveLoadingIndicatorView stopAnimating];
-    }];
-    
-    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Failed?",nil) message:NSLocalizedString(@"An error occured and rendering failed. Would you like to retry?",nil) preferredStyle:UIAlertControllerStyleAlert];
-    
-    [alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Retry",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
-        waveformView.audioURL = waveformView.audioURL;
-    }]];
-    
-    [alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel",nil) style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
-        [weakSelf notifyCancelDelegate];
-    }]];
-    
-    alertController.popoverPresentationController.sourceView = self.waveLoadingIndicatorView;
-    [self presentViewController:alertController animated:YES completion:nil];
-}
-
-- (void)waveformViewWillLoad:(IQ_FDWaveformView *)waveformView
-{
-//    NSLog(@"%@",NSStringFromSelector(_cmd));
-}
-
-- (void)waveformViewDidLoad:(IQ_FDWaveformView *)waveformView
-{
-//    NSLog(@"%@",NSStringFromSelector(_cmd));
-}
-
-- (void)waveformDidBeginPanning:(IQ_FDWaveformView *)waveformView
-{
-//    NSLog(@"%@",NSStringFromSelector(_cmd));
-}
-
-- (void)waveformDidEndPanning:(IQ_FDWaveformView *)waveformView
-{
-//    NSLog(@"%@",NSStringFromSelector(_cmd));
-}
-
-
-
-#pragma mark - Cancel or Done
-
--(void)cancelAction:(UIBarButtonItem*)item
-{
-    if ([self.originalAudioFilePath isEqualToString:self.currentAudioFilePath] == NO)
-    {
-        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Discard changes?",nil) message:NSLocalizedString(@"You have some unsaved changes. Audio will not be saved. Are you sure you want to discard?",nil) preferredStyle:UIAlertControllerStyleAlert];
-        
-        [alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel",nil) style:UIAlertActionStyleDefault handler:nil]];
-        
-        [alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Discard",nil) style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
-            
-            [self notifyCancelDelegate];
-        }]];
-        
-        alertController.popoverPresentationController.barButtonItem = item;
-        [self presentViewController:alertController animated:YES completion:nil];
-    }
-    else
-    {
-        [self notifyCancelDelegate];
-    }
-}
-
--(void)doneAction:(UIBarButtonItem*)item
-{
-    [self notifySuccessDelegate];
-}
-
--(void)notifyCancelDelegate
-{
-    __weak typeof(self) weakSelf = self;
-
-    void (^notifyDelegateBlock)(void) = ^{
-        if ([weakSelf.delegate respondsToSelector:@selector(audioCropperControllerDidCancel:)])
-        {
-            [weakSelf.delegate audioCropperControllerDidCancel:weakSelf];
-        }
-        else
-        {
-            [weakSelf dismissViewControllerAnimated:YES completion:nil];
-        }
-    };
-    
-    if (self.blurrEnabled)
-    {
-        [self.navigationController setToolbarHidden:YES animated:YES];
-        [self.navigationController setNavigationBarHidden:YES animated:YES];
-        [UIView animateWithDuration:0.3 animations:^{
-            weakSelf.visualEffectView.effect = nil;
-            weakSelf.middleContainerView.alpha = 0;
-        } completion:^(BOOL finished) {
-            notifyDelegateBlock();
-        }];
-    }
-    else
-    {
-        notifyDelegateBlock();
-    }
-}
-
--(void)notifySuccessDelegate
-{
-    __weak typeof(self) weakSelf = self;
-
-    void (^notifyDelegateBlock)(void) = ^{
-        if ([weakSelf.delegate respondsToSelector:@selector(audioCropperController:didFinishWithAudioAtPath:)])
-        {
-            [weakSelf.delegate audioCropperController:weakSelf didFinishWithAudioAtPath:weakSelf.currentAudioFilePath];
-        }
-        else
-        {
-            [weakSelf dismissViewControllerAnimated:YES completion:nil];
-        }
-    };
-    
-    if (self.blurrEnabled)
-    {
-        [self.navigationController setToolbarHidden:YES animated:YES];
-        [self.navigationController setNavigationBarHidden:YES animated:YES];
-        [UIView animateWithDuration:0.3 animations:^{
-            weakSelf.visualEffectView.effect = nil;
-            weakSelf.middleContainerView.alpha = 0;
-        } completion:^(BOOL finished) {
-            notifyDelegateBlock();
-        }];
-    }
-    else
-    {
-        notifyDelegateBlock();
-    }
-}
-
-#pragma mark - Orientation
-
--(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
-{
-    __weak typeof(self) weakSelf = self;
-
-    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
-
-        CGPoint leftCropViewCenter = CGPointMake(CGRectGetMinX(weakSelf.waveformView.frame)+((weakSelf.leftCropView.cropTime/weakSelf.audioPlayer.duration)*CGRectGetWidth(weakSelf.waveformView.frame)),weakSelf.leftCropView.center.y);
-        CGPoint rightCropViewCenter = CGPointMake(CGRectGetMinX(weakSelf.waveformView.frame)+((weakSelf.rightCropView.cropTime/weakSelf.audioPlayer.duration)*CGRectGetWidth(weakSelf.waveformView.frame)),weakSelf.rightCropView.center.y);
-
-        weakSelf.leftCropView.center = leftCropViewCenter;
-        weakSelf.rightCropView.center = rightCropViewCenter;
-        
-     } completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
-
-         {
-             CGPoint centerInWaveform = [weakSelf.leftCropView.superview convertPoint:weakSelf.leftCropView.center toView:weakSelf.waveformView];
-             
-             weakSelf.leftCropView.cropTime = (centerInWaveform.x/weakSelf.waveformView.frame.size.width)*weakSelf.audioPlayer.duration;
-             weakSelf.audioPlayer.currentTime = weakSelf.leftCropView.cropTime;
-             weakSelf.waveformView.progressSamples = weakSelf.waveformView.totalSamples*(weakSelf.audioPlayer.currentTime/weakSelf.audioPlayer.duration);
-             weakSelf.waveformView.cropStartSamples = weakSelf.waveformView.totalSamples*(weakSelf.leftCropView.cropTime/weakSelf.audioPlayer.duration);
-         }
-         
-         {
-             CGPoint centerInWaveform = [weakSelf.rightCropView.superview convertPoint:weakSelf.rightCropView.center toView:weakSelf.waveformView];
-             
-             weakSelf.rightCropView.cropTime = (centerInWaveform.x/weakSelf.waveformView.frame.size.width)*weakSelf.audioPlayer.duration;
-             weakSelf.waveformView.cropEndSamples = weakSelf.waveformView.totalSamples*(weakSelf.rightCropView.cropTime/weakSelf.audioPlayer.duration);
-         }
-     }];
-}
-
-@end
-
-
-@implementation UIViewController (IQAudioCropperViewController)
-
-- (void)presentAudioCropperViewControllerAnimated:(nonnull IQAudioCropperViewController *)audioCropperViewController
-{
-    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:audioCropperViewController];
-    
-    navigationController.toolbarHidden = NO;
-    navigationController.toolbar.translucent = YES;
-    
-    navigationController.navigationBar.translucent = YES;
-    
-    audioCropperViewController.barStyle = audioCropperViewController.barStyle;        //This line is used to refresh UI of Audio Recorder View Controller
-    [self presentViewController:navigationController animated:YES completion:^{
-    }];
-}
-
-- (void)presentBlurredAudioCropperViewControllerAnimated:(nonnull IQAudioCropperViewController *)audioCropperViewController
-{
-    audioCropperViewController.blurrEnabled = YES;
-    
-    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:audioCropperViewController];
-    
-    navigationController.toolbarHidden = NO;
-    navigationController.toolbar.translucent = YES;
-    [navigationController.toolbar setBackgroundImage:[UIImage new] forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
-    [navigationController.toolbar setShadowImage:[UIImage new] forToolbarPosition:UIBarPositionAny];
-    
-    navigationController.navigationBar.translucent = YES;
-    [navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
-    [navigationController.navigationBar setShadowImage:[UIImage new]];
-    
-    navigationController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
-    navigationController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
-    
-    audioCropperViewController.barStyle = audioCropperViewController.barStyle;        //This line is used to refresh UI of Audio Recorder View Controller
-    [self presentViewController:navigationController animated:NO completion:nil];
-}
-
-@end
-

+ 0 - 43
Pods/IQAudioRecorderController/IQAudioRecorderController/IQAudioRecorderConstants.h

@@ -1,43 +0,0 @@
-//
-//  IQAudioRecorderConstants.h
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Iftekhar Qurashi
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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 <Foundation/Foundation.h>
-#import <CoreAudio/CoreAudioTypes.h>
-#import <AVFoundation/AVFoundation.h>
-
-typedef NS_ENUM(NSUInteger, IQAudioFormat) {
-    IQAudioFormatDefault,  //   kAudioFormatMPEG4AAC    .m4a
-    IQAudioFormat_m4a       = kAudioFormatMPEG4AAC,  //.m4a
-    IQAudioFormat_caf       = kAudioFormatAppleLossless,  //.caf
-};
-
-typedef NS_ENUM(NSUInteger, IQAudioQuality) {
-    IQAudioQualityDefault   = -1,
-    IQAudioQualityMin       = AVAudioQualityMin,
-    IQAudioQualityLow       = AVAudioQualityLow,
-    IQAudioQualityMedium    = AVAudioQualityMedium,
-    IQAudioQualityHigh      = AVAudioQualityHigh,
-    IQAudioQualityMax       = AVAudioQualityMax,
-};
-

+ 0 - 26
Pods/IQAudioRecorderController/IQAudioRecorderController/IQAudioRecorderConstants.m

@@ -1,26 +0,0 @@
-//
-//  IQAudioRecorderConstants.m
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Iftekhar Qurashi
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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 "IQAudioRecorderConstants.h"
-

+ 0 - 144
Pods/IQAudioRecorderController/IQAudioRecorderController/IQAudioRecorderViewController.h

@@ -1,144 +0,0 @@
-//
-// IQAudioRecorderController.h
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Iftekhar Qurashi
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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/UIViewController.h>
-
-#import "IQAudioRecorderConstants.h"
-
-@class IQAudioRecorderViewController;
-
-@protocol IQAudioRecorderViewControllerDelegate <NSObject>
-
-@required
-/**
- Returns the temporary recorded filePath, you need to copy the recorded file to your own location and don't rely on the filePath anymore. You need to dismiss controller yourself.
- */
--(void)audioRecorderController:(nonnull IQAudioRecorderViewController*)controller didFinishWithAudioAtPath:(nonnull NSString*)filePath;
-
-@optional
-/**
- Optional method to determine if user taps on Cancel button. If you implement this delegate then you need to dismiss controller yourself.
- */
--(void)audioRecorderControllerDidCancel:(nonnull IQAudioRecorderViewController*)controller;
-
-@end
-
-
-
-@interface IQAudioRecorderViewController : UIViewController
-
-/**
- Title to show on navigationBar
- */
-@property(nullable, nonatomic,copy) NSString *title;
-
-///--------------------------
-/// @name Delegate callback
-///--------------------------
-
-/**
- IQAudioRecorderController delegate.
- */
-@property(nullable, nonatomic, weak) id<IQAudioRecorderViewControllerDelegate> delegate;
-
-
-///--------------------------
-/// @name User Interface
-///--------------------------
-
-/**
- Support light and dark style UI for the user interface. If you would like to present light style then you may need to set barStyle to UIBarStyleDefault, otherwise dark style UI is the default.
- */
-@property(nonatomic,assign) UIBarStyle barStyle;
-
-/**
- normalTintColor is used for showing wave tintColor while not recording, it is also used for navigationBar and toolbar tintColor.
- */
-@property (nullable, nonatomic, strong) UIColor *normalTintColor;
-
-/**
- Highlighted tintColor is used when playing the recorded audio file or when recording the audio file.
- */
-@property (nullable, nonatomic, strong) UIColor *highlightedTintColor;
-
-/**
- Allows to crop audio files.
- */
-@property (nonatomic, assign) BOOL allowCropping;
-
-/**
- Show record button to switch between recording and playing media layout
- */
-@property (nonatomic, assign) BOOL allowPlayback;
-
-///--------------------------
-/// @name Audio Settings
-///--------------------------
-
-
-/**
- Maximum duration of the audio file to be recorded.
- */
-@property(nonatomic) NSTimeInterval maximumRecordDuration;
-
-/**
- Audio format. default is IQAudioFormat_m4a.
- */
-@property(nonatomic,assign) IQAudioFormat audioFormat;
-
-/**
- sampleRate should be floating point in Hertz.
- */
-@property(nonatomic,assign) CGFloat sampleRate;
-
-/**
- Number of channels.
- */
-@property(nonatomic,assign) NSInteger numberOfChannels;
-
-/**
- Audio quality.
- */
-@property(nonatomic,assign) IQAudioQuality audioQuality;
-
-/**
- bitRate.
- */
-@property(nonatomic,assign) NSInteger bitRate;
-
-/**
- Immediately start recording on presenting IQAudioRecorderViewController
-*/
-@property(nonatomic,assign) BOOL recordOnCreation;
-
-@end
-
-
-@interface UIViewController (IQAudioRecorderViewController)
-
-- (void)presentAudioRecorderViewControllerAnimated:(nonnull IQAudioRecorderViewController *)audioRecorderViewController;
-- (void)presentBlurredAudioRecorderViewControllerAnimated:(nonnull IQAudioRecorderViewController *)audioRecorderViewController;
-
-@end

+ 0 - 1000
Pods/IQAudioRecorderController/IQAudioRecorderController/IQAudioRecorderViewController.m

@@ -1,1000 +0,0 @@
-//
-// IQAudioRecorderController.m
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Iftekhar Qurashi
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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 <CoreMedia/CMTime.h>
-
-#import "IQAudioRecorderViewController.h"
-#import "NSString+IQTimeIntervalFormatter.h"
-#import "IQPlaybackDurationView.h"
-#import "IQMessageDisplayView.h"
-#import "SCSiriWaveformView.h"
-#import "IQAudioCropperViewController.h"
-
-/************************************/
-
-@interface IQAudioRecorderViewController() <AVAudioRecorderDelegate,AVAudioPlayerDelegate,IQPlaybackDurationViewDelegate,IQMessageDisplayViewDelegate,IQAudioCropperViewControllerDelegate>
-{
-    BOOL _isFirstTime;
-    
-    //Recording...
-    CADisplayLink *meterUpdateDisplayLink;
-    
-    //Playing
-    AVAudioPlayer *_audioPlayer;
-    BOOL _wasPlaying;
-    CADisplayLink *playProgressDisplayLink;
-
-    //Recording controls
-    BOOL _isRecordingPaused;
-    
-    //Private variables
-    NSString *_oldSessionCategory;
-    BOOL _wasIdleTimerDisabled;
-}
-
-//BlurrView
-@property UIVisualEffectView *visualEffectView;
-
-//Playing
-@property IQPlaybackDurationView *viewPlayerDuration;
-
-//Recording...
-@property AVAudioRecorder *audioRecorder;
-@property SCSiriWaveformView *musicFlowView;
-@property NSString *recordingFilePath;
-
-//Access
-@property IQMessageDisplayView *viewMicrophoneDenied;
-
-//Navigation Bar
-@property NSString *navigationTitle;
-@property UIBarButtonItem *cancelButton, *doneButton;
-
-//Playing controls
-@property UIBarButtonItem *playButton, *pauseButton, *stopPlayButton, *flexItem;
-
-//Recording controls
-@property UIBarButtonItem *cancelRecordingButton, *startRecordingButton, *continueRecordingButton, *pauseRecordingButton, *stopRecordingButton;
-
-//Crop/Delete controls
-@property UIBarButtonItem *cropOrDeleteButton;
-
-@property(nonatomic, assign) BOOL blurrEnabled;
-
-@end
-
-@implementation IQAudioRecorderViewController
-
-@dynamic title;
-
-#pragma mark - Private Helper
-
--(void)setNormalTintColor:(UIColor *)normalTintColor
-{
-    _normalTintColor = normalTintColor;
-
-    _playButton.tintColor = [self _normalTintColor];
-    _pauseButton.tintColor = [self _normalTintColor];
-    _stopPlayButton.tintColor = [self _normalTintColor];
-    _startRecordingButton.tintColor = [self _normalTintColor];
-    _cropOrDeleteButton.tintColor = [self _normalTintColor];
-}
-
--(UIColor*)_normalTintColor
-{
-    if (_normalTintColor)
-    {
-        return _normalTintColor;
-    }
-    else
-    {
-        if (self.barStyle == UIBarStyleDefault)
-        {
-            return [UIColor colorWithRed:0 green:0.5 blue:1.0 alpha:1.0];
-        }
-        else
-        {
-            return [UIColor whiteColor];
-        }
-    }
-}
-
--(void)setHighlightedTintColor:(UIColor *)highlightedTintColor
-{
-    _highlightedTintColor = highlightedTintColor;
-    _viewPlayerDuration.tintColor = [self _highlightedTintColor];
-    _cancelRecordingButton.tintColor = [self _highlightedTintColor];
-}
-
--(UIColor *)_highlightedTintColor
-{
-    if (_highlightedTintColor)
-    {
-        return _highlightedTintColor;
-    }
-    else
-    {
-        if (self.barStyle == UIBarStyleDefault)
-        {
-            return [UIColor colorWithRed:255.0/255.0 green:64.0/255.0 blue:64.0/255.0 alpha:1.0];
-        }
-        else
-        {
-            return [UIColor colorWithRed:0 green:0.5 blue:1.0 alpha:1.0];
-        }
-    }
-}
-
-#pragma mark - View Lifecycle
-
--(void)loadView
-{
-    _visualEffectView = [[UIVisualEffectView alloc] initWithEffect:nil];
-    _visualEffectView.frame = [UIScreen mainScreen].bounds;
-    
-    self.view = _visualEffectView;
-}
-
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-
-    _isFirstTime = YES;
-    
-    if (self.title.length == 0)
-    {
-        _navigationTitle = NSLocalizedString(@"Audio Recorder",nil);
-    }
-    else
-    {
-        _navigationTitle = self.title;
-    }
-
-    NSBundle* bundle = [NSBundle bundleForClass:self.class];
-    if (bundle == nil)  bundle = [NSBundle mainBundle];
-    NSBundle *resourcesBundle = [NSBundle bundleWithPath:[bundle pathForResource:@"IQAudioRecorderController" ofType:@"bundle"]];
-    if (resourcesBundle == nil) resourcesBundle = bundle;
-
-    {
-        _viewMicrophoneDenied = [[IQMessageDisplayView alloc] initWithFrame:_visualEffectView.contentView.bounds];
-        _viewMicrophoneDenied.delegate = self;
-        _viewMicrophoneDenied.alpha = 0.0;
-        
-        if (self.barStyle == UIBarStyleDefault)
-        {
-            _viewMicrophoneDenied.tintColor = [UIColor darkGrayColor];
-        }
-        else
-        {
-            _viewMicrophoneDenied.tintColor = [UIColor whiteColor];
-        }
-        
-        _viewMicrophoneDenied.image = [[UIImage imageNamed:@"microphone_access" inBundle:resourcesBundle compatibleWithTraitCollection:nil] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
-        _viewMicrophoneDenied.title = NSLocalizedString(@"Microphone Access Denied!",nil);
-        _viewMicrophoneDenied.message = NSLocalizedString(@"Unable to access microphone. Please enable microphone access in Settings.",nil);
-        _viewMicrophoneDenied.buttonTitle = NSLocalizedString(@"Go to Settings",nil);
-        [_visualEffectView.contentView addSubview:_viewMicrophoneDenied];
-        
-    }
-    
-    {
-        _musicFlowView = [[SCSiriWaveformView alloc] initWithFrame:_visualEffectView.contentView.bounds];
-        _musicFlowView.alpha = 0.0;
-        _musicFlowView.backgroundColor = [UIColor clearColor];
-        [_visualEffectView.contentView addSubview:_musicFlowView];
-    }
-    
-    {
-        _viewMicrophoneDenied.translatesAutoresizingMaskIntoConstraints = NO;
-        _musicFlowView.translatesAutoresizingMaskIntoConstraints = NO;
-
-        NSDictionary *views = @{@"viewMicrophoneDenied":_viewMicrophoneDenied,@"musicFlowView":_musicFlowView};
-        
-        NSMutableArray<NSLayoutConstraint*> *constraints = [[NSMutableArray alloc] init];
-        
-        [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[musicFlowView]-|" options:0 metrics:nil views:views]];
-        [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[viewMicrophoneDenied]-|" options:0 metrics:nil views:views]];
-
-        [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[musicFlowView]-|" options:0 metrics:nil views:views]];
-
-        [constraints addObject:[NSLayoutConstraint constraintWithItem:_viewMicrophoneDenied attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:_visualEffectView.contentView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]];
-
-        [_visualEffectView.contentView addConstraints:constraints];
-    }
-
-    {
-        _flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
-        
-        //Recording controls
-        _startRecordingButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"audio_record" inBundle:resourcesBundle compatibleWithTraitCollection:nil] style:UIBarButtonItemStylePlain target:self action:@selector(recordingButtonAction:)];
-        _startRecordingButton.tintColor = [self _normalTintColor];
-        _pauseRecordingButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPause target:self action:@selector(pauseRecordingButtonAction:)];
-        _pauseRecordingButton.tintColor = [UIColor redColor];
-        _continueRecordingButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"audio_record" inBundle:resourcesBundle compatibleWithTraitCollection:nil] style:UIBarButtonItemStylePlain target:self action:@selector(continueRecordingButtonAction:)];
-        _continueRecordingButton.tintColor = [UIColor redColor];
-        _stopRecordingButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"stop_recording" inBundle:resourcesBundle compatibleWithTraitCollection:nil] style:UIBarButtonItemStylePlain target:self action:@selector(stopRecordingButtonAction:)];
-        
-        _stopRecordingButton.tintColor = [UIColor redColor];
-        _cancelRecordingButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelRecordingAction:)];
-        _cancelRecordingButton.tintColor = [self _highlightedTintColor];
-        
-        //Playing controls
-        _stopPlayButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"stop_playing" inBundle:resourcesBundle compatibleWithTraitCollection:nil] style:UIBarButtonItemStylePlain target:self action:@selector(stopPlayingButtonAction:)];
-        _stopPlayButton.tintColor = [self _normalTintColor];
-        _playButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:@selector(playAction:)];
-
-        _playButton.tintColor = [self _normalTintColor];
-
-        _pauseButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPause target:self action:@selector(pausePlayingAction:)];
-        _pauseButton.tintColor = [self _normalTintColor];
-
-        //crop/delete control
-        
-        if (self.allowCropping)
-        {
-            _cropOrDeleteButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"scissor" inBundle:resourcesBundle compatibleWithTraitCollection:nil] style:UIBarButtonItemStylePlain target:self action:@selector(cropAction:)];
-        }
-        else
-        {
-            _cropOrDeleteButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(deleteAction:)];
-        }
-
-        _cropOrDeleteButton.tintColor = [self _normalTintColor];
-
-        if (self.allowPlayback) {
-            [self setToolbarItems:@[_playButton,_flexItem, _startRecordingButton,_flexItem, _cropOrDeleteButton] animated:NO];
-        } else {
-            [self setToolbarItems:@[_startRecordingButton] animated:NO];
-        }
-
-        _playButton.enabled = NO;
-        _cropOrDeleteButton.enabled = NO;
-    }
-    
-    // Define the recorder setting
-    {
-        NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] init];
-
-        NSString *globallyUniqueString = [NSProcessInfo processInfo].globallyUniqueString;
-
-        if (self.audioFormat == IQAudioFormatDefault || self.audioFormat == IQAudioFormat_m4a)
-        {
-            _recordingFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.m4a",globallyUniqueString]];
-
-            recordSettings[AVFormatIDKey] = @(kAudioFormatMPEG4AAC);
-        }
-        else if (self.audioFormat == IQAudioFormat_caf)
-        {
-            _recordingFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.caf",globallyUniqueString]];
-
-            recordSettings[AVFormatIDKey] = @(kAudioFormatAppleLossless);
-        }
-        
-        if (self.sampleRate > 0.0f)
-        {
-            recordSettings[AVSampleRateKey] = @(self.sampleRate);
-        }
-        else
-        {
-            recordSettings[AVSampleRateKey] = @44100.0f;
-        }
-        
-        if (self.numberOfChannels >0)
-        {
-            recordSettings[AVNumberOfChannelsKey] = @(self.numberOfChannels);
-        }
-        else
-        {
-            recordSettings[AVNumberOfChannelsKey] = @1;
-        }
-
-        if (self.audioQuality != IQAudioQualityDefault)
-        {
-            recordSettings[AVEncoderAudioQualityKey] = @(self.audioQuality);
-        }
-
-        if (self.bitRate > 0)
-        {
-            recordSettings[AVEncoderBitRateKey] = @(self.bitRate);
-        }
-        
-        // Initiate and prepare the recorder
-        _audioRecorder = [[AVAudioRecorder alloc] initWithURL:[NSURL fileURLWithPath:_recordingFilePath] settings:recordSettings error:nil];
-        _audioRecorder.delegate = self;
-        _audioRecorder.meteringEnabled = YES;
-        
-        _musicFlowView.primaryWaveLineWidth = 3.0f;
-        _musicFlowView.secondaryWaveLineWidth = 1.0;
-    }
-
-    //Navigation Bar Settings
-    {
-        if (self.title.length == 0 && self.navigationItem.title.length == 0)
-        {
-            self.navigationItem.title = NSLocalizedString(@"Audio Recorder",nil);
-        }
-
-        _cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelAction:)];
-        self.navigationItem.leftBarButtonItem = _cancelButton;
-        _doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneAction:)];
-        if (!self.recordOnCreation) {
-            _doneButton.enabled = NO;
-        }
-        self.navigationItem.rightBarButtonItem = _doneButton;
-    }
-    
-    //Player Duration View
-    {
-        _viewPlayerDuration = [[IQPlaybackDurationView alloc] initWithFrame:self.navigationController.navigationBar.bounds];
-        _viewPlayerDuration.delegate = self;
-        _viewPlayerDuration.tintColor = [self _highlightedTintColor];
-        _viewPlayerDuration.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
-        _viewPlayerDuration.backgroundColor = [UIColor clearColor];
-    }
-
-    if (self.recordOnCreation) {
-        [self recordingButtonAction: nil];
-    }
-}
-
--(void)setBarStyle:(UIBarStyle)barStyle
-{
-    _barStyle = barStyle;
-    
-    if (self.barStyle == UIBarStyleDefault)
-    {
-        self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
-        self.navigationController.toolbar.barStyle = UIBarStyleDefault;
-        self.navigationController.navigationBar.tintColor = [self _normalTintColor];
-        self.navigationController.toolbar.tintColor = [self _normalTintColor];
-    }
-    else
-    {
-        self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
-        self.navigationController.toolbar.barStyle = UIBarStyleBlack;
-        self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
-        self.navigationController.toolbar.tintColor = [UIColor whiteColor];
-    }
-
-    _viewMicrophoneDenied.tintColor = [self _normalTintColor];
-    _visualEffectView.tintColor = [self _normalTintColor];
-    self.highlightedTintColor = self.highlightedTintColor;
-    self.normalTintColor = self.normalTintColor;
-}
-
--(void)viewWillAppear:(BOOL)animated
-{
-    [super viewWillAppear:animated];
-    
-    [self startUpdatingMeter];
-    
-    _wasIdleTimerDisabled = [[UIApplication sharedApplication] isIdleTimerDisabled];
-    
-    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didBecomeActiveNotification:) name:UIApplicationDidBecomeActiveNotification object:nil];
-    [self validateMicrophoneAccess];
-    
-    if (_isFirstTime)
-    {
-        _isFirstTime = NO;
-
-        if (self.blurrEnabled)
-        {
-            __weak typeof(self) weakSelf = self;
-
-            [UIView animateWithDuration:0.3 animations:^{
-                if (weakSelf.barStyle == UIBarStyleDefault)
-                {
-                    weakSelf.visualEffectView.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight];
-                }
-                else
-                {
-                    weakSelf.visualEffectView.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
-                }
-            }];
-        }
-        else
-        {
-            if (self.barStyle == UIBarStyleDefault)
-            {
-                _visualEffectView.backgroundColor = [UIColor whiteColor];
-            }
-            else
-            {
-                _visualEffectView.backgroundColor = [UIColor darkGrayColor];
-            }
-        }
-    }
-}
-
--(void)viewWillDisappear:(BOOL)animated
-{
-    [super viewWillDisappear:animated];
-    
-    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];
-    
-    _audioPlayer.delegate = nil;
-    [_audioPlayer stop];
-    _audioPlayer = nil;
-    
-    _audioRecorder.delegate = nil;
-    [_audioRecorder stop];
-    _audioRecorder = nil;
-    
-    [self stopUpdatingMeter];
-    
-    [UIApplication sharedApplication].idleTimerDisabled = _wasIdleTimerDisabled;
-}
-
-#pragma mark - Update Meters
-
-- (void)updateMeters
-{
-    if (_audioRecorder.isRecording || _isRecordingPaused)
-    {
-        [_audioRecorder updateMeters];
-        
-        CGFloat normalizedValue = pow (10, [_audioRecorder averagePowerForChannel:0] / 20);
-        
-        _musicFlowView.waveColor = [self _highlightedTintColor];
-        [_musicFlowView updateWithLevel:normalizedValue];
-        
-        self.navigationItem.title = [NSString timeStringForTimeInterval:_audioRecorder.currentTime];
-    }
-    else if (_audioPlayer)
-    {
-        if (_audioPlayer.isPlaying)
-        {
-            [_audioPlayer updateMeters];
-            CGFloat normalizedValue = pow (10, [_audioPlayer averagePowerForChannel:0] / 20);
-            [_musicFlowView updateWithLevel:normalizedValue];
-        }
-
-        _musicFlowView.waveColor = [self _highlightedTintColor];
-    }
-    else
-    {
-        _musicFlowView.waveColor = [self _normalTintColor];
-        [_musicFlowView updateWithLevel:0];
-    }
-}
-
--(void)startUpdatingMeter
-{
-    [meterUpdateDisplayLink invalidate];
-    meterUpdateDisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateMeters)];
-    [meterUpdateDisplayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
-}
-
--(void)stopUpdatingMeter
-{
-    [meterUpdateDisplayLink invalidate];
-    meterUpdateDisplayLink = nil;
-}
-
-#pragma mark - Audio Play
-
--(void)updatePlayProgress
-{
-    [_viewPlayerDuration setCurrentTime:_audioPlayer.currentTime animated:YES];
-}
-
-- (void)playbackDurationView:(IQPlaybackDurationView *)playbackView didStartScrubbingAtTime:(NSTimeInterval)time
-{
-    _wasPlaying = _audioPlayer.isPlaying;
-    
-    if (_audioPlayer.isPlaying)
-    {
-        [_audioPlayer pause];
-    }
-}
-- (void)playbackDurationView:(IQPlaybackDurationView *)playbackView didScrubToTime:(NSTimeInterval)time
-{
-    _audioPlayer.currentTime = time;
-}
-
-- (void)playbackDurationView:(IQPlaybackDurationView *)playbackView didEndScrubbingAtTime:(NSTimeInterval)time
-{
-    if (_wasPlaying)
-    {
-        [_audioPlayer play];
-    }
-}
-
-- (void)playAction:(UIBarButtonItem *)item
-{
-    _oldSessionCategory = [AVAudioSession sharedInstance].category;
-    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
-    [UIApplication sharedApplication].idleTimerDisabled = YES;
-
-    if (_audioPlayer == nil)
-    {
-        _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:_recordingFilePath] error:nil];
-        _audioPlayer.delegate = self;
-        _audioPlayer.meteringEnabled = YES;
-    }
-    
-    [_audioPlayer prepareToPlay];
-    [_audioPlayer play];
-    
-    //UI Update
-    {
-        [self setToolbarItems:@[_pauseButton,_flexItem, _stopPlayButton,_flexItem, _cropOrDeleteButton] animated:YES];
-        [self showNavigationButton:NO];
-        _cropOrDeleteButton.enabled = NO;
-    }
-    
-    //Start regular update
-    {
-        _viewPlayerDuration.duration = _audioPlayer.duration;
-        _viewPlayerDuration.currentTime = _audioPlayer.currentTime;
-        
-        self.navigationItem.titleView = _viewPlayerDuration;
-
-        _viewPlayerDuration.translatesAutoresizingMaskIntoConstraints = YES;
-        _viewPlayerDuration.frame = self.navigationController.navigationBar.bounds;
-        [_viewPlayerDuration setNeedsLayout];
-        [_viewPlayerDuration layoutIfNeeded];
-
-        _viewPlayerDuration.alpha = 0.0;
-        __weak typeof(self) weakSelf = self;
-        [UIView animateWithDuration:0.2 delay:0.1 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
-            weakSelf.viewPlayerDuration.alpha = 1.0;
-        } completion:^(BOOL finished) {
-        }];
-        
-        [playProgressDisplayLink invalidate];
-        playProgressDisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updatePlayProgress)];
-        [playProgressDisplayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
-    }
-}
-
--(void)pausePlayingAction:(UIBarButtonItem*)item
-{
-    //UI Update
-    {
-        [self setToolbarItems:@[_playButton,_flexItem, _stopPlayButton,_flexItem, _cropOrDeleteButton] animated:YES];
-    }
-    
-    [_audioPlayer pause];
-    
-    [[AVAudioSession sharedInstance] setCategory:_oldSessionCategory error:nil];
-    [UIApplication sharedApplication].idleTimerDisabled = _wasIdleTimerDisabled;
-}
-
--(void)stopPlayingButtonAction:(UIBarButtonItem*)item
-{
-    //UI Update
-    {
-        [self setToolbarItems:@[_playButton,_flexItem, _startRecordingButton,_flexItem, _cropOrDeleteButton] animated:YES];
-        _cropOrDeleteButton.enabled = YES;
-    }
-    
-    {
-        [playProgressDisplayLink invalidate];
-        playProgressDisplayLink = nil;
-        
-        __weak typeof(self) weakSelf = self;
-
-        [UIView animateWithDuration:0.1 animations:^{
-            weakSelf.viewPlayerDuration.alpha = 0.0;
-        } completion:^(BOOL finished) {
-            self.navigationItem.titleView = nil;
-            [self showNavigationButton:YES];
-        }];
-    }
-    
-    _audioPlayer.delegate = nil;
-    [_audioPlayer stop];
-    _audioPlayer = nil;
-    
-    [[AVAudioSession sharedInstance] setCategory:_oldSessionCategory error:nil];
-    [UIApplication sharedApplication].idleTimerDisabled = _wasIdleTimerDisabled;
-}
-
-#pragma mark - AVAudioPlayerDelegate
-/*
- Occurs when the audio player instance completes playback
- */
--(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
-{
-    //To update UI on stop playing
-    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[_stopPlayButton.target methodSignatureForSelector:_stopPlayButton.action]];
-    invocation.target = _stopPlayButton.target;
-    invocation.selector = _stopPlayButton.action;
-    [invocation invoke];
-}
-
-#pragma mark - Audio Record
-
-- (void)recordingButtonAction:(UIBarButtonItem *)item
-{
-    //UI Update
-    {
-        if (self.allowPlayback) {
-            [self setToolbarItems:@[_stopRecordingButton,_flexItem, _pauseRecordingButton,_flexItem, _cropOrDeleteButton] animated:YES];
-            _doneButton.enabled = NO;
-        } else {
-            [self setToolbarItems:@[_flexItem, _pauseRecordingButton, _flexItem] animated:YES];
-        }
-        _cropOrDeleteButton.enabled = NO;
-        [self.navigationItem setLeftBarButtonItem:_cancelRecordingButton animated:YES];
-    }
-    
-    /*
-     Create the recorder
-     */
-    if ([[NSFileManager defaultManager] fileExistsAtPath:_recordingFilePath])
-    {
-        [[NSFileManager defaultManager] removeItemAtPath:_recordingFilePath error:nil];
-    }
-    
-    _oldSessionCategory = [AVAudioSession sharedInstance].category;
-    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:nil];
-    [UIApplication sharedApplication].idleTimerDisabled = YES;
-    [_audioRecorder prepareToRecord];
-    
-    _isRecordingPaused = YES;
-    
-    if (self.maximumRecordDuration <=0)
-    {
-        [_audioRecorder record];
-    }
-    else
-    {
-        [_audioRecorder recordForDuration:self.maximumRecordDuration];
-    }
-}
-
-- (void)continueRecordingButtonAction:(UIBarButtonItem *)item
-{
-    //UI Update
-    {
-        if (self.allowPlayback) {
-            [self setToolbarItems:@[_stopRecordingButton,_flexItem, _pauseRecordingButton,_flexItem, _cropOrDeleteButton] animated:YES];
-        } else {
-            [self setToolbarItems:@[_flexItem, _pauseRecordingButton, _flexItem] animated:YES];
-        }
-    }
-
-    _isRecordingPaused = NO;
-    [_audioRecorder record];
-}
-
--(void)pauseRecordingButtonAction:(UIBarButtonItem*)item
-{
-    _isRecordingPaused = YES;
-    [_audioRecorder pause];
-    if (self.allowPlayback) {
-        [self setToolbarItems:@[_stopRecordingButton,_flexItem, _continueRecordingButton,_flexItem, _cropOrDeleteButton] animated:YES];
-    } else {
-        [self setToolbarItems:@[_flexItem, _continueRecordingButton, _flexItem] animated:YES];
-    }
-}
-
--(void)stopRecordingButtonAction:(UIBarButtonItem*)item
-{
-    _isRecordingPaused = NO;
-    [_audioRecorder stop];
-}
-
--(void)cancelRecordingAction:(UIBarButtonItem*)item
-{
-    _isRecordingPaused = NO;
-    [_audioRecorder stop];
-    
-    [[NSFileManager defaultManager] removeItemAtPath:_recordingFilePath error:nil];
-    self.navigationItem.title = [NSString timeStringForTimeInterval:_audioRecorder.currentTime];
-}
-
-#pragma mark - AVAudioRecorderDelegate
-
-- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag
-{
-    if (flag)
-    {
-        //UI Update
-        {
-            if (self.allowPlayback) {
-                [self setToolbarItems:@[_playButton,_flexItem, _startRecordingButton,_flexItem, _cropOrDeleteButton] animated:YES];
-            } else {
-                [self setToolbarItems:@[_flexItem, _startRecordingButton, _flexItem] animated:YES];
-            }
-
-            [self.navigationItem setLeftBarButtonItem:_cancelButton animated:YES];
-            
-            if ([[NSFileManager defaultManager] fileExistsAtPath:_recordingFilePath])
-            {
-                _playButton.enabled = YES;
-                _cropOrDeleteButton.enabled = YES;
-                _doneButton.enabled = YES;
-            }
-            else
-            {
-                _playButton.enabled = NO;
-                _cropOrDeleteButton.enabled = NO;
-                _doneButton.enabled = !self.allowPlayback;
-            }
-        }
-
-        [[AVAudioSession sharedInstance] setCategory:_oldSessionCategory error:nil];
-        [UIApplication sharedApplication].idleTimerDisabled = _wasIdleTimerDisabled;
-    }
-    else
-    {
-        [[NSFileManager defaultManager] removeItemAtPath:_recordingFilePath error:nil];
-    }
-}
-
-- (void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder *)recorder error:(NSError *)error
-{
-    //    NSLog(@"%@: %@",NSStringFromSelector(_cmd),error);
-}
-
-
-#pragma mark - Cancel or Done
-
--(void)cancelAction:(UIBarButtonItem*)item
-{
-    [self notifyCancelDelegate];
-}
-
--(void)doneAction:(UIBarButtonItem*)item
-{
-    if (!self.allowPlayback) {
-        [self stopRecordingButtonAction:nil];
-    }
-    [self notifySuccessDelegate];
-}
-
--(void)notifyCancelDelegate
-{
-    __weak typeof(self) weakSelf = self;
-
-    void (^notifyDelegateBlock)(void) = ^{
-        if ([self.delegate respondsToSelector:@selector(audioRecorderControllerDidCancel:)])
-        {
-            [self.delegate audioRecorderControllerDidCancel:self];
-        }
-        else
-        {
-            [self dismissViewControllerAnimated:YES completion:nil];
-        }
-    };
-    
-    if (self.blurrEnabled)
-    {
-        [self.navigationController setToolbarHidden:YES animated:YES];
-        [self.navigationController setNavigationBarHidden:YES animated:YES];
-        [UIView animateWithDuration:0.3 animations:^{
-            weakSelf.visualEffectView.effect = nil;
-            weakSelf.musicFlowView.alpha = 0;
-        } completion:^(BOOL finished) {
-            notifyDelegateBlock();
-        }];
-    }
-    else
-    {
-        notifyDelegateBlock();
-    }
-}
-
--(void)notifySuccessDelegate
-{
-    __weak typeof(self) weakSelf = self;
-
-    void (^notifyDelegateBlock)(void) = ^{
-        if ([weakSelf.delegate respondsToSelector:@selector(audioRecorderController:didFinishWithAudioAtPath:)])
-        {
-            [weakSelf.delegate audioRecorderController:weakSelf didFinishWithAudioAtPath:weakSelf.recordingFilePath];
-        }
-        else
-        {
-            [weakSelf dismissViewControllerAnimated:YES completion:nil];
-        }
-    };
-    
-    if (self.blurrEnabled)
-    {
-        [self.navigationController setToolbarHidden:YES animated:YES];
-        [self.navigationController setNavigationBarHidden:YES animated:YES];
-        [UIView animateWithDuration:0.3 animations:^{
-            weakSelf.visualEffectView.effect = nil;
-            weakSelf.musicFlowView.alpha = 0;
-        } completion:^(BOOL finished) {
-            notifyDelegateBlock();
-        }];
-    }
-    else
-    {
-        notifyDelegateBlock();
-    }
-}
-
-#pragma mark - Crop Audio
-
--(void)cropAction:(UIBarButtonItem*)item
-{
-    IQAudioCropperViewController *controller = [[IQAudioCropperViewController alloc] initWithFilePath:_recordingFilePath];
-    controller.delegate = self;
-    controller.barStyle = self.barStyle;
-    controller.normalTintColor = self.normalTintColor;
-    controller.highlightedTintColor = self.highlightedTintColor;
-    
-    if (self.blurrEnabled)
-    {
-        [self presentBlurredAudioCropperViewControllerAnimated:controller];
-    }
-    else
-    {
-        [self presentAudioCropperViewControllerAnimated:controller];
-    }
-    
-    [self stopUpdatingMeter];
-}
-
--(void)audioCropperController:(IQAudioCropperViewController *)controller didFinishWithAudioAtPath:(NSString *)filePath
-{
-    _recordingFilePath = filePath;
-    NSURL *audioFileURL = [NSURL fileURLWithPath:_recordingFilePath];
-    
-    AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:audioFileURL options:nil];
-    CMTime audioDuration = audioAsset.duration;
-    self.navigationItem.title = [NSString timeStringForTimeInterval:CMTimeGetSeconds(audioDuration)];
-    
-    [controller dismissViewControllerAnimated:YES completion:nil];
-
-    [self startUpdatingMeter];
-}
-
--(void)audioCropperControllerDidCancel:(IQAudioCropperViewController *)controller
-{
-    [controller dismissViewControllerAnimated:YES completion:nil];
-
-    [self startUpdatingMeter];
-}
-
-#pragma mark - Delete Audio
-
--(void)deleteAction:(UIBarButtonItem*)item
-{
-    __weak typeof(self) weakSelf = self;
-
-    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
-    
-    UIAlertAction *action1 = [UIAlertAction actionWithTitle:NSLocalizedString(@"Delete Recording",nil)
-                                                      style:UIAlertActionStyleDestructive
-                                                    handler:^(UIAlertAction *action){
-
-                                                        [[NSFileManager defaultManager] removeItemAtPath:weakSelf.recordingFilePath error:nil];
-                                                        
-                                                        weakSelf.playButton.enabled = NO;
-                                                        weakSelf.cropOrDeleteButton.enabled = NO;
-                                                        weakSelf.doneButton.enabled = NO;
-                                                        weakSelf.navigationItem.title = weakSelf.navigationTitle;
-                                                    }];
-    
-    UIAlertAction *action2 = [UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel",nil)
-                                                      style:UIAlertActionStyleCancel
-                                                    handler:nil];
-    
-    [alertController addAction:action1];
-    [alertController addAction:action2];
-    alertController.popoverPresentationController.barButtonItem = item;
-    [self presentViewController:alertController animated:YES completion:nil];
-}
-
-#pragma mark - Message Display View
-
--(void)messageDisplayViewDidTapOnButton:(IQMessageDisplayView *)displayView
-{
-    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
-}
-
-#pragma mark - Private helper
-
--(void)updateUI
-{
-
-}
-
--(void)showNavigationButton:(BOOL)show
-{
-    if (show)
-    {
-        [self.navigationItem setLeftBarButtonItem:_cancelButton animated:YES];
-        [self.navigationItem setRightBarButtonItem:_doneButton animated:YES];
-    }
-    else
-    {
-        [self.navigationItem setLeftBarButtonItem:nil animated:YES];
-        [self.navigationItem setRightBarButtonItem:nil animated:YES];
-    }
-}
-
-- (void)validateMicrophoneAccess
-{
-    __weak typeof(self) weakSelf = self;
-
-    AVAudioSession *session = [AVAudioSession sharedInstance];
-    
-    [session requestRecordPermission:^(BOOL granted) {
-        
-        dispatch_async(dispatch_get_main_queue(), ^{
-            
-            weakSelf.viewMicrophoneDenied.alpha = !granted;
-            weakSelf.musicFlowView.alpha = granted;
-            weakSelf.startRecordingButton.enabled = granted;
-        });
-    }];
-}
-
--(void)didBecomeActiveNotification:(NSNotification*)notification
-{
-    [self validateMicrophoneAccess];
-}
-
-
-@end
-
-
-@implementation UIViewController (IQAudioRecorderViewController)
-
-- (void)presentAudioRecorderViewControllerAnimated:(nonnull IQAudioRecorderViewController *)audioRecorderViewController
-{
-    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:audioRecorderViewController];
-
-    navigationController.toolbarHidden = NO;
-    navigationController.toolbar.translucent = YES;
-    
-    navigationController.navigationBar.translucent = YES;
-
-    audioRecorderViewController.barStyle = audioRecorderViewController.barStyle;        //This line is used to refresh UI of Audio Recorder View Controller
-    [self presentViewController:navigationController animated:YES completion:^{
-    }];
-}
-
-- (void)presentBlurredAudioRecorderViewControllerAnimated:(nonnull IQAudioRecorderViewController *)audioRecorderViewController
-{
-    audioRecorderViewController.blurrEnabled = YES;
-    
-    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:audioRecorderViewController];
-    
-    navigationController.toolbarHidden = NO;
-    navigationController.toolbar.translucent = YES;
-    [navigationController.toolbar setBackgroundImage:[UIImage new] forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
-    [navigationController.toolbar setShadowImage:[UIImage new] forToolbarPosition:UIBarPositionAny];
-    
-    navigationController.navigationBar.translucent = YES;
-    [navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
-    [navigationController.navigationBar setShadowImage:[UIImage new]];
-    
-    navigationController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
-    navigationController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
-    
-    audioRecorderViewController.barStyle = audioRecorderViewController.barStyle;        //This line is used to refresh UI of Audio Recorder View Controller
-    [self presentViewController:navigationController animated:NO completion:nil];
-}
-
-@end

+ 0 - 29
Pods/IQAudioRecorderController/IQAudioRecorderController/IQCropSelectionBeginView.h

@@ -1,29 +0,0 @@
-//
-//  IQCropSelectionBeginView.h
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Iftekhar Qurashi
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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 "IQCropSelectionView.h"
-
-@interface IQCropSelectionBeginView : IQCropSelectionView
-
-@end

+ 0 - 51
Pods/IQAudioRecorderController/IQAudioRecorderController/IQCropSelectionBeginView.m

@@ -1,51 +0,0 @@
-//
-//  IQCropSelectionBeginView.m
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Iftekhar Qurashi
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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 "IQCropSelectionBeginView.h"
-
-@implementation IQCropSelectionBeginView
-
-- (instancetype)initWithFrame:(CGRect)frame
-{
-    self = [super initWithFrame:frame];
-    if (self) {
-        timeLabel.textAlignment = NSTextAlignmentRight;
-    }
-    return self;
-}
-
--(void)layoutSubviews
-{
-    [super layoutSubviews];
-
-    static CGFloat timeLabelheight = 20;
-    
-    lineView.frame =CGRectMake(CGRectGetMidX(self.bounds), timeLabelheight, CGRectGetWidth(lineView.frame), CGRectGetHeight(self.bounds)-timeLabelheight*2);
-
-    smallLineView.frame =CGRectMake(CGRectGetMidX(lineView.frame), CGRectGetMaxY(lineView.frame)-CGRectGetWidth(lineView.frame), CGRectGetWidth(self.bounds)/2, CGRectGetWidth(lineView.frame));
-    
-    timeLabel.frame = CGRectMake(0, 0, CGRectGetWidth(self.bounds), timeLabelheight);
-}
-
-@end

+ 0 - 29
Pods/IQAudioRecorderController/IQAudioRecorderController/IQCropSelectionEndView.h

@@ -1,29 +0,0 @@
-//
-//  IQCropSelectionEndView.h
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Iftekhar Qurashi
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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 "IQCropSelectionView.h"
-
-@interface IQCropSelectionEndView : IQCropSelectionView
-
-@end

+ 0 - 51
Pods/IQAudioRecorderController/IQAudioRecorderController/IQCropSelectionEndView.m

@@ -1,51 +0,0 @@
-//
-//  IQCropSelectionEndView.m
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Iftekhar Qurashi
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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 "IQCropSelectionEndView.h"
-
-@implementation IQCropSelectionEndView
-
-- (instancetype)initWithFrame:(CGRect)frame
-{
-    self = [super initWithFrame:frame];
-    if (self) {
-        timeLabel.textAlignment = NSTextAlignmentLeft;
-    }
-    return self;
-}
-
--(void)layoutSubviews
-{
-    [super layoutSubviews];
-    
-    static CGFloat timeLabelheight = 20;
-    
-    lineView.frame =CGRectMake(CGRectGetMidX(self.bounds), timeLabelheight, CGRectGetWidth(lineView.frame), CGRectGetHeight(self.bounds)-timeLabelheight*2);
-    
-    smallLineView.frame =CGRectMake(CGRectGetMinX(self.bounds), timeLabelheight, CGRectGetWidth(self.bounds)/2, CGRectGetWidth(lineView.frame));
-    
-    timeLabel.frame = CGRectMake(0, CGRectGetHeight(self.bounds)-timeLabelheight, CGRectGetWidth(self.bounds), timeLabelheight);
-}
-
-@end

+ 0 - 36
Pods/IQAudioRecorderController/IQAudioRecorderController/IQCropSelectionView.h

@@ -1,36 +0,0 @@
-//
-//  IQCropSelectionView.h
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Iftekhar Qurashi
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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/UIView.h>
-
-@interface IQCropSelectionView : UIView
-{
-    UIView *lineView;
-    UIView *smallLineView;
-    UILabel *timeLabel;
-}
-
-@property(nonatomic, assign) NSTimeInterval cropTime;
-
-@end

+ 0 - 64
Pods/IQAudioRecorderController/IQAudioRecorderController/IQCropSelectionView.m

@@ -1,64 +0,0 @@
-//
-//  IQCropSelectionView.m
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Iftekhar Qurashi
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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 "IQCropSelectionView.h"
-#import "NSString+IQTimeIntervalFormatter.h"
-
-@implementation IQCropSelectionView
-
-- (instancetype)initWithFrame:(CGRect)frame
-{
-    self = [super initWithFrame:frame];
-    if (self) {
-        
-        lineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 2, CGRectGetHeight(self.bounds))];
-        lineView.userInteractionEnabled = NO;
-        lineView.backgroundColor = [UIColor redColor];
-        [self addSubview:lineView];
-        
-        smallLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.bounds)/2, CGRectGetWidth(lineView.frame))];
-        smallLineView.backgroundColor = [UIColor redColor];
-        smallLineView.userInteractionEnabled = NO;
-        [self addSubview:smallLineView];
-        
-        timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.bounds)-20, CGRectGetWidth(self.bounds), 20)];
-        timeLabel.textColor = [UIColor redColor];
-        timeLabel.minimumScaleFactor = 0.5;
-        timeLabel.adjustsFontSizeToFitWidth = YES;
-        timeLabel.textAlignment = NSTextAlignmentCenter;
-        timeLabel.font = [UIFont boldSystemFontOfSize:12];
-        [self addSubview:timeLabel];
-        self.clipsToBounds = NO;
-    }
-    return self;
-}
-
--(void)setCropTime:(NSTimeInterval)cropTime
-{
-    _cropTime = cropTime;
-    
-    timeLabel.text = [NSString timeStringForTimeInterval:cropTime];
-}
-
-@end

+ 0 - 46
Pods/IQAudioRecorderController/IQAudioRecorderController/IQMessageDisplayView.h

@@ -1,46 +0,0 @@
-//
-// IQMessageDisplayView.h
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Iftekhar Qurashi
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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/UIView.h>
-
-@class IQMessageDisplayView;
-
-@protocol IQMessageDisplayViewDelegate <NSObject>
-
-@optional
-- (void)messageDisplayViewDidTapOnButton:(nonnull IQMessageDisplayView *)displayView;
-
-@end
-
-@interface IQMessageDisplayView : UIView
-
-@property(nullable, nonatomic, weak) IBOutlet id<IQMessageDisplayViewDelegate> delegate;
-
-@property(nullable, nonatomic, strong) UIImage *image;
-@property(nullable, nonatomic, strong) NSString *title;
-@property(nullable, nonatomic, strong) NSString *message;
-@property(nullable, nonatomic, strong) NSString *buttonTitle;
-
-@end

+ 0 - 152
Pods/IQAudioRecorderController/IQAudioRecorderController/IQMessageDisplayView.m

@@ -1,152 +0,0 @@
-//
-// IQMessageDisplayView.m
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Iftekhar Qurashi
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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 "IQMessageDisplayView.h"
-
-//IB_DESIGNABLE
-@implementation IQMessageDisplayView
-{
-    UIImageView *imageView;
-    UILabel *labelTitle;
-    UILabel *labelMessage;
-    UIButton *buttonAction;
-}
-
-- (instancetype)initWithFrame:(CGRect)frame
-{
-    self = [super initWithFrame:frame];
-    if (self) {
-        [self setup];
-    }
-    return self;
-}
-
-- (instancetype)initWithCoder:(NSCoder *)coder
-{
-    self = [super initWithCoder:coder];
-    if (self) {
-        [self setup];
-    }
-    return self;
-}
-
-- (void)setup
-{
-    imageView = [[UIImageView alloc] init];
-    imageView.tintColor = [UIColor lightGrayColor];
-    [self addSubview:imageView];
-    
-    labelTitle = [[UILabel alloc] init];
-    labelTitle.font = [UIFont boldSystemFontOfSize:20.0];
-    labelTitle.textColor = [UIColor lightGrayColor];
-    labelTitle.numberOfLines = 0;
-    labelTitle.textAlignment = NSTextAlignmentCenter;
-    [self addSubview:labelTitle];
-    
-    labelMessage = [[UILabel alloc] init];
-    labelMessage.font = [UIFont systemFontOfSize:13.0];
-    labelMessage.textColor = [UIColor lightGrayColor];
-    labelMessage.numberOfLines = 0;
-    labelMessage.textAlignment = NSTextAlignmentCenter;
-    [self addSubview:labelMessage];
-    
-    buttonAction = [UIButton buttonWithType:UIButtonTypeSystem];
-    buttonAction.enabled = NO;
-    [buttonAction addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
-    buttonAction.titleLabel.font = [UIFont boldSystemFontOfSize:17];
-    [self addSubview:buttonAction];
-    
-    //Constraint
-    {
-        imageView.translatesAutoresizingMaskIntoConstraints = NO;
-        labelTitle.translatesAutoresizingMaskIntoConstraints = NO;
-        labelMessage.translatesAutoresizingMaskIntoConstraints = NO;
-        buttonAction.translatesAutoresizingMaskIntoConstraints = NO;
-
-        NSDictionary *views = @{@"imageView":imageView,@"labelTitle":labelTitle,@"labelMessage":labelMessage,@"buttonAction":buttonAction};
-        
-        NSMutableArray<NSLayoutConstraint*> *constraints = [[NSMutableArray alloc] init];
-        
-        [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[imageView]-[labelTitle]-[labelMessage]-[buttonAction]-|" options:NSLayoutFormatAlignAllCenterX metrics:nil views:views]];
-
-        [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[labelTitle]-|" options:0 metrics:nil views:views]];
-        [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[labelMessage]-|" options:0 metrics:nil views:views]];
-
-        [self addConstraints:constraints];
-    }
-}
-
--(void)setImage:(UIImage *)image
-{
-    _image = image;
-    imageView.image = image;
-}
-
--(void)setTitle:(NSString *)title
-{
-    _title = title;
-    labelTitle.text = title;
-}
-
--(void)setMessage:(NSString *)message
-{
-    _message = message;
-    labelMessage.text = message;
-}
-
--(void)setButtonTitle:(NSString *)buttonTitle
-{
-    _buttonTitle = buttonTitle;
-    [buttonAction setTitle:buttonTitle forState:UIControlStateNormal];
-    buttonAction.enabled = buttonTitle.length;
-}
-
-- (void)prepareForInterfaceBuilder
-{
-    NSBundle* bundle = [NSBundle bundleForClass:self.class];
-    if (bundle == nil)  bundle = [NSBundle mainBundle];
-    NSBundle *resourcesBundle = [NSBundle bundleWithPath:[bundle pathForResource:@"IQAudioRecorderController" ofType:@"bundle"]];
-    if (resourcesBundle == nil) resourcesBundle = bundle;
-
-    self.image = [UIImage imageNamed:@"microphone_access" inBundle:resourcesBundle compatibleWithTraitCollection:nil];
-    self.title = NSLocalizedString(@"Access Denied!",nil);
-    self.message = NSLocalizedString(@"We are unable to access microphone due to privacy restrictions. Please enable access for microphone in Settings->Privacy Settings->Microphone",nil);
-    self.buttonTitle = NSLocalizedString(@"Go to Settings",nil);
-}
-
--(void)buttonAction:(UIButton*)button
-{
-    if ([self.delegate respondsToSelector:@selector(messageDisplayViewDidTapOnButton:)])
-    {
-        [self.delegate messageDisplayViewDidTapOnButton:self];
-    }
-}
-
--(void)dealloc
-{
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
-}
-
-@end

+ 0 - 50
Pods/IQAudioRecorderController/IQAudioRecorderController/IQPlaybackDurationView.h

@@ -1,50 +0,0 @@
-//
-//  IQPlaybackDurationView.h
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Sebastian Ludwig
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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/UIView.h>
-
-@class IQPlaybackDurationView;
-
-@protocol IQPlaybackDurationViewDelegate <NSObject>
-
-@optional
-- (void)playbackDurationView:(nonnull IQPlaybackDurationView *)playbackView didStartScrubbingAtTime:(NSTimeInterval)time;
-- (void)playbackDurationView:(nonnull IQPlaybackDurationView *)playbackView didScrubToTime:(NSTimeInterval)time;
-- (void)playbackDurationView:(nonnull IQPlaybackDurationView *)playbackView didEndScrubbingAtTime:(NSTimeInterval)time;
-
-@end
-
-@interface IQPlaybackDurationView : UIView
-
-@property (nullable, nonatomic, weak) IBOutlet id<IQPlaybackDurationViewDelegate> delegate;
-
-@property (nonatomic, getter=isShowingRemainingTime) IBInspectable BOOL showRemainingTime;
-
-@property (nonatomic, assign) NSTimeInterval duration;
-@property (nonatomic, assign) NSTimeInterval currentTime;
-
-- (void)setCurrentTime:(NSTimeInterval)time animated:(BOOL)animated;
-
-@end

+ 0 - 216
Pods/IQAudioRecorderController/IQAudioRecorderController/IQPlaybackDurationView.m

@@ -1,216 +0,0 @@
-//
-//  IQPlaybackDurationView.m
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Sebastian Ludwig
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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 "IQPlaybackDurationView.h"
-#import "NSString+IQTimeIntervalFormatter.h"
-
-//IB_DESIGNABLE
-@implementation IQPlaybackDurationView
-{
-    UISlider *_playerSlider;
-    UILabel *_labelCurrentTime;
-    UILabel *_labelRemainingTime;
-}
-
-- (instancetype)initWithFrame:(CGRect)frame
-{
-    if (self = [super initWithFrame:frame]) {
-        [self setup];
-    }
-    return self;
-}
-
-- (instancetype)initWithCoder:(NSCoder *)aDecoder
-{
-    if (self = [super initWithCoder:aDecoder]) {
-        [self setup];
-    }
-    return self;
-}
-
--(void)tintColorDidChange
-{
-    [super tintColorDidChange];
-    
-    _labelCurrentTime.textColor = self.tintColor;
-    _labelRemainingTime.textColor = self.tintColor;
-    _playerSlider.minimumTrackTintColor = self.tintColor;
-}
-
-- (void)setup
-{
-    //Current Time
-    {
-        _labelCurrentTime = [[UILabel alloc] init];
-
-        {
-            _labelCurrentTime.translatesAutoresizingMaskIntoConstraints = NO;
-            [_labelCurrentTime setContentHuggingPriority:UILayoutPriorityDefaultLow+1 forAxis:UILayoutConstraintAxisHorizontal];
-            [_labelCurrentTime setContentHuggingPriority:UILayoutPriorityDefaultLow+1 forAxis:UILayoutConstraintAxisVertical];
-        }
-        
-        _labelCurrentTime.textColor = self.tintColor;
-        _labelCurrentTime.text = [NSString timeStringForTimeInterval:0];
-        _labelCurrentTime.font = [UIFont boldSystemFontOfSize:14.0];
-        [self addSubview:_labelCurrentTime];
-    }
-    
-    //Player Slider
-    {
-        _playerSlider = [[UISlider alloc] init];
-        
-        {
-            _playerSlider.translatesAutoresizingMaskIntoConstraints = NO;
-            [_playerSlider setContentHuggingPriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal];
-            [_playerSlider setContentHuggingPriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisVertical];
-        }
-
-        _playerSlider.minimumTrackTintColor = self.tintColor;
-        _playerSlider.value = 0;
-        [_playerSlider addTarget:self action:@selector(sliderStart) forControlEvents:UIControlEventTouchDown];
-        [_playerSlider addTarget:self action:@selector(sliderMoved) forControlEvents:UIControlEventValueChanged];
-        [_playerSlider addTarget:self action:@selector(sliderEnd) forControlEvents:UIControlEventTouchUpInside];
-        [_playerSlider addTarget:self action:@selector(sliderEnd) forControlEvents:UIControlEventTouchUpOutside];
-        [_playerSlider addTarget:self action:@selector(sliderEnd) forControlEvents:UIControlEventTouchCancel];
-        [self addSubview:_playerSlider];
-    }
-    
-    //Remaining Time
-    {
-        _labelRemainingTime = [[UILabel alloc] init];
-        
-        {
-            _labelRemainingTime.translatesAutoresizingMaskIntoConstraints = NO;
-            [_labelRemainingTime setContentHuggingPriority:UILayoutPriorityDefaultLow+1 forAxis:UILayoutConstraintAxisHorizontal];
-            [_labelRemainingTime setContentHuggingPriority:UILayoutPriorityDefaultLow+1 forAxis:UILayoutConstraintAxisVertical];
-        }
-
-        _labelRemainingTime.textColor = self.tintColor;
-        _labelRemainingTime.text = [NSString timeStringForTimeInterval:0];
-        _labelRemainingTime.userInteractionEnabled = YES;
-        [_labelRemainingTime addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(toggleRemainingTimeDisplay:)]];
-        _labelRemainingTime.font = _labelCurrentTime.font;
-        [self addSubview:_labelRemainingTime];
-    }
-
-    //Constraint
-    {
-        NSDictionary *views = @{@"currentTime": _labelCurrentTime,
-                                @"slider": _playerSlider,
-                                @"remainingTime": _labelRemainingTime};
-        
-        NSArray *constraints1 = [NSLayoutConstraint constraintsWithVisualFormat:@"|-[currentTime]-[slider]-[remainingTime]-|" options:NSLayoutFormatAlignAllCenterY metrics:nil views:views];
-        [self addConstraints:constraints1];
-        
-        NSArray *constraints2 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[slider]|" options:0 metrics:nil views:views];
-        [self addConstraints:constraints2];
-        
-        [self addConstraint:[NSLayoutConstraint constraintWithItem:_playerSlider attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier:1 constant:0]];
-    }
-}
-
-- (void)prepareForInterfaceBuilder
-{
-    self.duration = 60;
-    self.currentTime = 17;
-    [self updateRemainingTimeLabel];
-}
-
-- (void)setShowRemainingTime:(BOOL)showRemainingTime
-{
-    _showRemainingTime = showRemainingTime;
-    
-    [self updateRemainingTimeLabel];
-}
-
-- (void)setDuration:(NSTimeInterval)duration
-{
-    _duration = duration;
-    _playerSlider.maximumValue = duration;
-    
-    [self updateRemainingTimeLabel];
-}
-
--(void)setCurrentTime:(NSTimeInterval)currentTime
-{
-    [self setCurrentTime:currentTime animated:NO];
-}
-
-- (void)setCurrentTime:(NSTimeInterval)currentTime animated:(BOOL)animated
-{
-    _currentTime = currentTime;
-    [_playerSlider setValue:currentTime animated:animated];
-    _labelCurrentTime.text = [NSString timeStringForTimeInterval:currentTime];
-    
-    [self updateRemainingTimeLabel];
-}
-
-#pragma mark Private methods
-
-- (void)updateRemainingTimeLabel
-{
-    if (self.showRemainingTime)
-    {
-        _labelRemainingTime.text = [NSString timeStringForTimeInterval:(self.duration-self.currentTime)];
-    }
-    else
-    {
-        _labelRemainingTime.text = [NSString timeStringForTimeInterval:self.duration];
-    }
-}
-
-- (void)toggleRemainingTimeDisplay:(UITapGestureRecognizer*)gesture
-{
-    if (gesture.state == UIGestureRecognizerStateEnded)
-    {
-        self.showRemainingTime = !self.showRemainingTime;
-    }
-}
-
--(void)sliderStart
-{
-    if ([self.delegate respondsToSelector:@selector(playbackDurationView:didStartScrubbingAtTime:)])
-    {
-        [self.delegate playbackDurationView:self didStartScrubbingAtTime:_playerSlider.value];
-    }
-}
-
--(void)sliderMoved
-{
-    if ([self.delegate respondsToSelector:@selector(playbackDurationView:didScrubToTime:)])
-    {
-        [self.delegate playbackDurationView:self didScrubToTime:_playerSlider.value];
-    }
-}
-
--(void)sliderEnd
-{
-    if ([self.delegate respondsToSelector:@selector(playbackDurationView:didEndScrubbingAtTime:)])
-    {
-        [self.delegate playbackDurationView:self didEndScrubbingAtTime:_playerSlider.value];
-    }
-}
-
-@end

+ 0 - 31
Pods/IQAudioRecorderController/IQAudioRecorderController/NSString+IQTimeIntervalFormatter.h

@@ -1,31 +0,0 @@
-//
-// NSString+IQTimeIntervalFormatter.h
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Iftekhar Qurashi
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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 <Foundation/NSString.h>
-
-@interface NSString (IQTimeIntervalFormatter)
-
-+(nonnull NSString*)timeStringForTimeInterval:(NSTimeInterval)timeInterval;
-
-@end

+ 0 - 46
Pods/IQAudioRecorderController/IQAudioRecorderController/NSString+IQTimeIntervalFormatter.m

@@ -1,46 +0,0 @@
-//
-// NSString+IQTimeIntervalFormatter.m
-// https://github.com/hackiftekhar/IQAudioRecorderController
-// Created by Iftekhar Qurashi
-// Copyright (c) 2015-16 Iftekhar Qurashi
-//
-// 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 "NSString+IQTimeIntervalFormatter.h"
-
-@implementation NSString (IQTimeIntervalFormatter)
-
-+(NSString*)timeStringForTimeInterval:(NSTimeInterval)timeInterval
-{
-    NSInteger ti = (NSInteger)timeInterval;
-    NSInteger seconds = ti % 60;
-    NSInteger minutes = (ti / 60) % 60;
-    NSInteger hours = (ti / 3600);
-    
-    if (hours > 0)
-    {
-        return [NSString stringWithFormat:@"%02li:%02li:%02li", (long)hours, (long)minutes, (long)seconds];
-    }
-    else
-    {
-        return  [NSString stringWithFormat:@"%02li:%02li", (long)minutes, (long)seconds];
-    }
-}
-
-@end

BIN
Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/audio_record.png


BIN
Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/audio_record@2x.png


BIN
Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/audio_record@3x.png


BIN
Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/microphone_access.png


BIN
Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/microphone_access@2x.png


BIN
Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/microphone_access@3x.png


BIN
Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/scissor.png


BIN
Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/scissor@2x.png


BIN
Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/scissor@3x.png


BIN
Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/stop_playing.png


BIN
Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/stop_playing@2x.png


BIN
Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/stop_playing@3x.png


BIN
Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/stop_recording.png


BIN
Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/stop_recording@2x.png


BIN
Pods/IQAudioRecorderController/IQAudioRecorderController/Resources/IQAudioRecorderController.bundle/stop_recording@3x.png


+ 0 - 22
Pods/IQAudioRecorderController/LICENSE

@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Mohd Iftekhar Qurashi
-
-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 - 138
Pods/IQAudioRecorderController/README.md

@@ -1,138 +0,0 @@
-<p align="center">
-  <img src="https://raw.githubusercontent.com/hackiftekhar/IQAudioRecorderController/master/Screenshot/iconScreenshot.png" alt="Icon"/>
-</p>
-<H1 align="center">IQAudioRecorderController</H1>
-
-`IQAudioRecorderController` is a drop-in universal library allows to record and crop audio within the app with a nice User Interface. There are also optional callback delegate methods to return recorded file path.
-
-![Idle](./Screenshot/Screenshot_Idle.jpeg)
-![Recording](./Screenshot/Screenshot_Recording.jpg)
-![Playing](./Screenshot/Screenshot_Playing.jpeg)
-![No Access](./Screenshot/Screenshot_Cropping.jpg)
-
-## Installation
-
-#### CocoaPods
-You can use [CocoaPods](http://cocoapods.org/) to install `IQAudioRecorderController` by adding it to your `Podfile`:
-
-```ruby
-platform :ios, '8.0'
-use_frameworks!
-pod 'IQAudioRecorderController'
-```
-
-To get the full benefits import `IQAudioRecorderController` wherever you import UIKit
-
-``` swift
-import UIKit
-import IQAudioRecorderController
-```
-
-#### Manually
-1. Download and drop ```/IQAudioRecorderController```folder in your project.  
-2. Congratulations!
-
-## Supported format
-Currently `IQAudioRecorderController` library only support **.m4a** file format.
-
-## Customization
-There are optional properties to customize the appearance according to your app theme.
-
-***barStyle: UIBarStyle:***
-Library support light and dark style UI for user interface. If you would like to present light style UI then you need to set barStyle to UIBarStyleDefault, otherwise dark style UI is the default.
-
-***normalTintColor: UIColor:***
-This tintColor is used for showing wave tintColor while not recording, it is also used for top navigationBar and bottom toolbar tintColor.
-
-***highlightedTintColor: UIColor:***
-Highlighted tintColor is used when playing recorded audio file or when recording audio file.
-
-## How to use
-
-There are two seprate classes to Record and Crop Audio files.
-
-To Record audio file, try something like this:-
-
-```objc
-#import "IQAudioRecorderViewController.h"
-
-@interface ViewController ()<IQAudioRecorderViewControllerDelegate>
-@end
-
-@implementation ViewController
-
-- (void)recordAction:(id)sender {
-    IQAudioRecorderViewController *controller = [[IQAudioRecorderViewController alloc] init];
-    controller.delegate = self;
-    controller.title = "Recorder";
-    controller.maximumRecordDuration = 10;
-    controller.allowCropping = YES;
-//    controller.barStyle = UIBarStyleDefault;
-//    controller.normalTintColor = [UIColor magentaColor];
-//    controller.highlightedTintColor = [UIColor orangeColor];
-    [self presentBlurredAudioRecorderViewControllerAnimated:controller];
-}
-
--(void)audioRecorderController:(IQAudioRecorderViewController *)controller didFinishWithAudioAtPath:(NSString *)filePath {
-    //Do your custom work with file at filePath.
-    [controller dismissViewControllerAnimated:YES completion:nil];
-}
-
--(void)audioRecorderControllerDidCancel:(IQAudioRecorderViewController *)controller {
-    //Notifying that user has clicked cancel.
-    [controller dismissViewControllerAnimated:YES completion:nil];
-}
-
-@end
-```
-
-To Crop audio file, try something like this:-
-
-```objc
-#import "IQAudioCropperViewController.h"
-
-@interface ViewController ()<IQAudioCropperViewControllerDelegate>
-@end
-
-@implementation ViewController
-
--(void)cropAction:(id)item {
-    IQAudioCropperViewController *controller = [[IQAudioCropperViewController alloc] initWithFilePath:filePath];
-    controller.delegate = self;
-    controller.title = "Edit";
-//    controller.barStyle = UIBarStyleDefault;
-//    controller.normalTintColor = [UIColor magentaColor];
-//    controller.highlightedTintColor = [UIColor orangeColor];
-    [self presentBlurredAudioCropperViewControllerAnimated:controller];
-}
-
--(void)audioCropperController:(IQAudioCropperViewController *)controller didFinishWithAudioAtPath:(NSString *)filePath {
-    //Do your custom work with file at filePath.
-    [controller dismissViewControllerAnimated:YES completion:nil];
-}
-
--(void)audioCropperControllerDidCancel:(IQAudioCropperViewController *)controller {
-    //Notifying that user has clicked cancel.
-    [controller dismissViewControllerAnimated:YES completion:nil];
-}
-
-@end
-```
-
-## Attributions
-
-Thanks to [Stefan Ceriu](https://github.com/stefanceriu) for his brilliant [SCSiriWaveformView](https://github.com/stefanceriu/SCSiriWaveformView) library.
-
-Thanks to [William Entriken](https://github.com/fulldecent) for his [FDWaveformView](https://github.com/fulldecent/FDWaveformView) library.
-
-## LICENSE
-
-Distributed under the MIT license. See ``LICENSE`` for more information.
-
-## Contributions
-
-Any contribution is more than welcome! You can contribute through pull requests and issues on GitHub.
-
-## Author
-
-If you wish to contact me, email at: hack.iftekhar@gmail.com

+ 2 - 6
Pods/Manifest.lock

@@ -4,8 +4,6 @@ PODS:
   - InputBarAccessoryView (4.3.1):
     - InputBarAccessoryView/Core (= 4.3.1)
   - InputBarAccessoryView/Core (4.3.1)
-  - IQAudioRecorderController (1.2.3):
-    - SCSiriWaveformView
   - JGProgressHUD (2.0.3)
   - QuickTableViewController (1.1.1)
   - ReachabilitySwift (4.3.1)
@@ -19,10 +17,10 @@ DEPENDENCIES:
   - ALCameraViewController
   - DBDebugToolkit
   - InputBarAccessoryView
-  - IQAudioRecorderController
   - JGProgressHUD
   - QuickTableViewController
   - ReachabilitySwift
+  - SCSiriWaveformView
   - SwiftFormat/CLI
   - SwiftLint
   - SwiftyBeaver
@@ -33,7 +31,6 @@ SPEC REPOS:
     - ALCameraViewController
     - DBDebugToolkit
     - InputBarAccessoryView
-    - IQAudioRecorderController
     - JGProgressHUD
     - QuickTableViewController
     - ReachabilitySwift
@@ -47,7 +44,6 @@ SPEC CHECKSUMS:
   ALCameraViewController: 144dea45fd749a623aafd8cb7b10cea88499fcc3
   DBDebugToolkit: c04bb6f618051d3de447a4b4323f37826116cfed
   InputBarAccessoryView: 58a348be7ea2736c7eec60e5c315511c2dbb39fd
-  IQAudioRecorderController: 69a67c2e0b87bd8746cbb4de175fd7a0bf820009
   JGProgressHUD: 12b20a8f4ffe05258f8635c1ab92816e451f904d
   QuickTableViewController: 30f689d314a7c1fb726c6dab6fa5ad53c6bc9e94
   ReachabilitySwift: 4032e2f59586e11e3b0ebe15b167abdd587a388b
@@ -57,6 +53,6 @@ SPEC CHECKSUMS:
   SwiftyBeaver: 4cc0080d2e23f980652e28978db11a5c9da39165
   UICircularProgressRing: 0ff679b05a17f15ad6301a7886686837b8c301a9
 
-PODFILE CHECKSUM: 2d97506b02f500bd221608e13dd23a927dc62aec
+PODFILE CHECKSUM: 4fb877c35817d6aa88e7199c2635c724cfdcf87a
 
 COCOAPODS: 1.8.4

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 862 - 937
Pods/Pods.xcodeproj/project.pbxproj


+ 0 - 26
Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController-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>1.2.3</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/IQAudioRecorderController/IQAudioRecorderController-dummy.m

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

+ 0 - 12
Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController-prefix.pch

@@ -1,12 +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
-

+ 0 - 19
Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController-umbrella.h

@@ -1,19 +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 "IQAudioRecorderViewController.h"
-#import "IQAudioCropperViewController.h"
-#import "IQAudioRecorderConstants.h"
-
-FOUNDATION_EXPORT double IQAudioRecorderControllerVersionNumber;
-FOUNDATION_EXPORT const unsigned char IQAudioRecorderControllerVersionString[];
-

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

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

+ 0 - 11
Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController.xcconfig

@@ -1,11 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView"
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreAudio" -framework "CoreGraphics" -framework "CoreMotion" -framework "Foundation" -framework "UIKit"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/IQAudioRecorderController
-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/Pods-deltachat-ios/Pods-deltachat-ios-acknowledgements.markdown

@@ -50,32 +50,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 
 
-## IQAudioRecorderController
-
-The MIT License (MIT)
-
-Copyright (c) 2015 Mohd Iftekhar Qurashi
-
-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
 
 

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

@@ -73,38 +73,6 @@ THE SOFTWARE.
 			<key>Type</key>
 			<string>PSGroupSpecifier</string>
 		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>The MIT License (MIT)
-
-Copyright (c) 2015 Mohd Iftekhar Qurashi
-
-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>IQAudioRecorderController</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
 		<dict>
 			<key>FooterText</key>
 			<string>

+ 0 - 2
Pods/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios-frameworks.sh

@@ -163,7 +163,6 @@ strip_invalid_archs() {
 if [[ "$CONFIGURATION" == "Debug" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/ALCameraViewController/ALCameraViewController.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/DBDebugToolkit/DBDebugToolkit.framework"
-  install_framework "${BUILT_PRODUCTS_DIR}/IQAudioRecorderController/IQAudioRecorderController.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/JGProgressHUD/JGProgressHUD.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/QuickTableViewController/QuickTableViewController.framework"
@@ -175,7 +174,6 @@ fi
 if [[ "$CONFIGURATION" == "Release" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/ALCameraViewController/ALCameraViewController.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/DBDebugToolkit/DBDebugToolkit.framework"
-  install_framework "${BUILT_PRODUCTS_DIR}/IQAudioRecorderController/IQAudioRecorderController.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/JGProgressHUD/JGProgressHUD.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/QuickTableViewController/QuickTableViewController.framework"

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

@@ -1,10 +1,10 @@
 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController" "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController" "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController/ALCameraViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController/IQAudioRecorderController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD/JGProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController/QuickTableViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.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}/ALCameraViewController/ALCameraViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD/JGProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController/QuickTableViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.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'
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController/ALCameraViewController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController/IQAudioRecorderController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD/JGProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController/QuickTableViewController.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}/SwiftyBeaver/SwiftyBeaver.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
-OTHER_LDFLAGS = $(inherited) -framework "ALCameraViewController" -framework "AVFoundation" -framework "CoreAudio" -framework "CoreGraphics" -framework "CoreMotion" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "IQAudioRecorderController" -framework "InputBarAccessoryView" -framework "JGProgressHUD" -framework "QuartzCore" -framework "QuickTableViewController" -framework "Reachability" -framework "SCSiriWaveformView" -framework "SwiftyBeaver" -framework "SystemConfiguration" -framework "UICircularProgressRing" -framework "UIKit"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController/ALCameraViewController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD/JGProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController/QuickTableViewController.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}/SwiftyBeaver/SwiftyBeaver.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
+OTHER_LDFLAGS = $(inherited) -framework "ALCameraViewController" -framework "AVFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "InputBarAccessoryView" -framework "JGProgressHUD" -framework "QuartzCore" -framework "QuickTableViewController" -framework "Reachability" -framework "SCSiriWaveformView" -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)

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

@@ -1,10 +1,10 @@
 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController" "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController" "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController/ALCameraViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController/IQAudioRecorderController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD/JGProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController/QuickTableViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.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}/ALCameraViewController/ALCameraViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD/JGProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController/QuickTableViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.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'
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController/ALCameraViewController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController/IQAudioRecorderController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD/JGProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController/QuickTableViewController.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}/SwiftyBeaver/SwiftyBeaver.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
-OTHER_LDFLAGS = $(inherited) -framework "ALCameraViewController" -framework "AVFoundation" -framework "CoreAudio" -framework "CoreGraphics" -framework "CoreMotion" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "IQAudioRecorderController" -framework "InputBarAccessoryView" -framework "JGProgressHUD" -framework "QuartzCore" -framework "QuickTableViewController" -framework "Reachability" -framework "SCSiriWaveformView" -framework "SwiftyBeaver" -framework "SystemConfiguration" -framework "UICircularProgressRing" -framework "UIKit"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController/ALCameraViewController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD/JGProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController/QuickTableViewController.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}/SwiftyBeaver/SwiftyBeaver.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
+OTHER_LDFLAGS = $(inherited) -framework "ALCameraViewController" -framework "AVFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "InputBarAccessoryView" -framework "JGProgressHUD" -framework "QuartzCore" -framework "QuickTableViewController" -framework "Reachability" -framework "SCSiriWaveformView" -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)

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

@@ -1,7 +1,7 @@
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController" "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController" "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController/ALCameraViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController/IQAudioRecorderController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD/JGProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController/QuickTableViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers"
-OTHER_LDFLAGS = $(inherited) -framework "ALCameraViewController" -framework "AVFoundation" -framework "CoreAudio" -framework "CoreGraphics" -framework "CoreMotion" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "IQAudioRecorderController" -framework "InputBarAccessoryView" -framework "JGProgressHUD" -framework "QuartzCore" -framework "QuickTableViewController" -framework "Reachability" -framework "SCSiriWaveformView" -framework "SwiftyBeaver" -framework "SystemConfiguration" -framework "UICircularProgressRing" -framework "UIKit"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController/ALCameraViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD/JGProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController/QuickTableViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers"
+OTHER_LDFLAGS = $(inherited) -framework "ALCameraViewController" -framework "AVFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "InputBarAccessoryView" -framework "JGProgressHUD" -framework "QuartzCore" -framework "QuickTableViewController" -framework "Reachability" -framework "SCSiriWaveformView" -framework "SwiftyBeaver" -framework "SystemConfiguration" -framework "UICircularProgressRing" -framework "UIKit"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

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

@@ -1,7 +1,7 @@
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController" "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController" "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController/ALCameraViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController/IQAudioRecorderController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD/JGProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController/QuickTableViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers"
-OTHER_LDFLAGS = $(inherited) -framework "ALCameraViewController" -framework "AVFoundation" -framework "CoreAudio" -framework "CoreGraphics" -framework "CoreMotion" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "IQAudioRecorderController" -framework "InputBarAccessoryView" -framework "JGProgressHUD" -framework "QuartzCore" -framework "QuickTableViewController" -framework "Reachability" -framework "SCSiriWaveformView" -framework "SwiftyBeaver" -framework "SystemConfiguration" -framework "UICircularProgressRing" -framework "UIKit"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ALCameraViewController/ALCameraViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DBDebugToolkit/DBDebugToolkit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD/JGProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/QuickTableViewController/QuickTableViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/UICircularProgressRing/UICircularProgressRing.framework/Headers"
+OTHER_LDFLAGS = $(inherited) -framework "ALCameraViewController" -framework "AVFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "DBDebugToolkit" -framework "Foundation" -framework "InputBarAccessoryView" -framework "JGProgressHUD" -framework "QuartzCore" -framework "QuickTableViewController" -framework "Reachability" -framework "SCSiriWaveformView" -framework "SwiftyBeaver" -framework "SystemConfiguration" -framework "UICircularProgressRing" -framework "UIKit"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

+ 0 - 2
deltachat-ios.xcodeproj/project.pbxproj

@@ -904,7 +904,6 @@
 				"${PODS_ROOT}/Target Support Files/Pods-deltachat-ios/Pods-deltachat-ios-frameworks.sh",
 				"${BUILT_PRODUCTS_DIR}/ALCameraViewController/ALCameraViewController.framework",
 				"${BUILT_PRODUCTS_DIR}/DBDebugToolkit/DBDebugToolkit.framework",
-				"${BUILT_PRODUCTS_DIR}/IQAudioRecorderController/IQAudioRecorderController.framework",
 				"${BUILT_PRODUCTS_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework",
 				"${BUILT_PRODUCTS_DIR}/JGProgressHUD/JGProgressHUD.framework",
 				"${BUILT_PRODUCTS_DIR}/QuickTableViewController/QuickTableViewController.framework",
@@ -917,7 +916,6 @@
 			outputPaths = (
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ALCameraViewController.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DBDebugToolkit.framework",
-				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IQAudioRecorderController.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/InputBarAccessoryView.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JGProgressHUD.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/QuickTableViewController.framework",

+ 0 - 1
deltachat-ios/Coordinator/AppCoordinator.swift

@@ -2,7 +2,6 @@ import UIKit
 import ALCameraViewController
 import Photos
 import MobileCoreServices
-import IQAudioRecorderController
 
 class AppCoordinator: NSObject, Coordinator {
     private let window: UIWindow

+ 0 - 1
deltachat-ios/Helper/MediaPicker.swift

@@ -2,7 +2,6 @@ import UIKit
 import Photos
 import MobileCoreServices
 import ALCameraViewController
-import IQAudioRecorderController
 
 protocol MediaPickerDelegate: class {
     func onImageSelected(image: UIImage)

Vissa filer visades inte eftersom för många filer har ändrats