diff --git a/Beethoven.podspec b/Beethoven.podspec
index 67be609..4bcd5ff 100644
--- a/Beethoven.podspec
+++ b/Beethoven.podspec
@@ -1,7 +1,7 @@
 Pod::Spec.new do |s|
   s.name             = "Beethoven"
   s.summary          = "A maestro of pitch detection"
-  s.version          = "4.0.2"
+  s.version          = "5.0.0"
   s.homepage         = "https://github.com/vadymmarkov/Beethoven"
   s.license          = 'MIT'
   s.author           = { "Vadym Markov" => "markov.vadym@gmail.com" }
@@ -19,5 +19,5 @@ Pod::Spec.new do |s|
   s.frameworks = 'Foundation', 'AVFoundation', 'Accelerate'
   s.dependency 'Pitchy', '~> 3.0'
 
-  s.pod_target_xcconfig = { 'SWIFT_VERSION' => '3.0' }
+  s.pod_target_xcconfig = { 'SWIFT_VERSION' => '5.0' }
 end
diff --git a/Example/GuitarTuner/GuitarTuner.xcodeproj/project.pbxproj b/Example/GuitarTuner/GuitarTuner.xcodeproj/project.pbxproj
index 5ef94e5..a82e378 100644
--- a/Example/GuitarTuner/GuitarTuner.xcodeproj/project.pbxproj
+++ b/Example/GuitarTuner/GuitarTuner.xcodeproj/project.pbxproj
@@ -125,8 +125,8 @@
 				D57D40F91BE95A350026B005 /* Sources */,
 				D57D40FA1BE95A350026B005 /* Frameworks */,
 				D57D40FB1BE95A350026B005 /* Resources */,
-				9A1FE1805890F1ADECBB5C91 /* [CP] Embed Pods Frameworks */,
 				BBF9D165E87DC40FC3115EAE /* 📦 Embed Pods Frameworks */,
+				A747E035BB13D8303B3FA356 /* [CP] Embed Pods Frameworks */,
 			);
 			buildRules = (
 			);
@@ -143,7 +143,7 @@
 		D57D40F51BE95A350026B005 /* Project object */ = {
 			isa = PBXProject;
 			attributes = {
-				LastUpgradeCheck = 0900;
+				LastUpgradeCheck = 1250;
 				ORGANIZATIONNAME = "Vadym Markov";
 				TargetAttributes = {
 					D57D40FC1BE95A350026B005 = {
@@ -218,7 +218,7 @@
 			shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n    cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n    exit 1\nfi\n";
 			showEnvVarsInLog = 0;
 		};
-		9A1FE1805890F1ADECBB5C91 /* [CP] Embed Pods Frameworks */ = {
+		A747E035BB13D8303B3FA356 /* [CP] Embed Pods Frameworks */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
@@ -287,6 +287,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_MODULES = YES;
@@ -295,14 +296,17 @@
 				CLANG_WARN_BOOL_CONVERSION = YES;
 				CLANG_WARN_COMMA = YES;
 				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 				CLANG_WARN_EMPTY_BODY = YES;
 				CLANG_WARN_ENUM_CONVERSION = YES;
 				CLANG_WARN_INFINITE_RECURSION = YES;
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
 				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
 				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
 				CLANG_WARN_STRICT_PROTOTYPES = YES;
 				CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -327,7 +331,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 				MTL_ENABLE_DEBUG_INFO = YES;
 				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
@@ -340,6 +344,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_MODULES = YES;
@@ -348,14 +353,17 @@
 				CLANG_WARN_BOOL_CONVERSION = YES;
 				CLANG_WARN_COMMA = YES;
 				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 				CLANG_WARN_EMPTY_BODY = YES;
 				CLANG_WARN_ENUM_CONVERSION = YES;
 				CLANG_WARN_INFINITE_RECURSION = YES;
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
 				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
 				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
 				CLANG_WARN_STRICT_PROTOTYPES = YES;
 				CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -374,7 +382,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 				MTL_ENABLE_DEBUG_INFO = NO;
 				SDKROOT = iphoneos;
 				SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
diff --git a/Example/GuitarTuner/Podfile b/Example/GuitarTuner/Podfile
index d490dac..5b9dc36 100644
--- a/Example/GuitarTuner/Podfile
+++ b/Example/GuitarTuner/Podfile
@@ -8,17 +8,3 @@ target 'GuitarTuner' do
   pod 'Cartography', '~> 3.0'
 end
 
-post_install do |installer|
-    installer.pods_project.targets.each do |target|
-        target.build_configurations.each do |config|
-            config.build_settings['SWIFT_VERSION'] = '5.0'
-            config.build_settings.delete('CODE_SIGNING_ALLOWED')
-            config.build_settings.delete('CODE_SIGNING_REQUIRED')
-        end
-    end
-    installer.pods_project.build_configurations.each do |config|
-        config.build_settings['SWIFT_VERSION'] = '5.0'
-        config.build_settings.delete('CODE_SIGNING_ALLOWED')
-        config.build_settings.delete('CODE_SIGNING_REQUIRED')
-    end
-end
diff --git a/Example/GuitarTuner/Podfile.lock b/Example/GuitarTuner/Podfile.lock
index 6a8220f..cecba3d 100644
--- a/Example/GuitarTuner/Podfile.lock
+++ b/Example/GuitarTuner/Podfile.lock
@@ -1,5 +1,5 @@
 PODS:
-  - Beethoven (4.0.2):
+  - Beethoven (5.0.0):
     - Pitchy (~> 3.0)
   - Cartography (3.1.0)
   - Hue (5.0.0)
@@ -21,11 +21,11 @@ EXTERNAL SOURCES:
     :path: "../../"
 
 SPEC CHECKSUMS:
-  Beethoven: 04f99571a7ad2a37184161762be757fe0b8ccc20
+  Beethoven: e318691697c38933a69081d4bf4d2506213505fd
   Cartography: 1988b7578871a56c036e7af17195cb2190edf18c
   Hue: c129cb67be7d093a82bbbc30ce8a96757bf6f37a
   Pitchy: 15407e4425b6d88fa3e7eef8927ba659fab52d7a
 
-PODFILE CHECKSUM: 36c8d115bba4c2b8ff7ae95956fd288002fa13e5
+PODFILE CHECKSUM: 09339adf6e9f2003f0c75ae60b9eca9f6719d5e8
 
-COCOAPODS: 1.8.4
+COCOAPODS: 1.10.1
diff --git a/Source/Library/YINUtil.swift b/Source/Library/YINUtil.swift
index 2b970aa..de98f1c 100644
--- a/Source/Library/YINUtil.swift
+++ b/Source/Library/YINUtil.swift
@@ -38,7 +38,8 @@ final class YINUtil {
     var vSum: Float = 0.0
 
     for tau in 0 ..< bufferHalfCount {
-      let bufferTau = UnsafePointer<Float>(buffer).advanced(by: tau)
+        
+      let bufferTau = buffer.withUnsafeBufferPointer({ $0 }).baseAddress!.advanced(by: tau)
       // do a diff of buffer with itself at tau offset
       vDSP_vsub(buffer, 1, bufferTau, 1, &tempBuffer, 1, len)
       // square each value of the diff vector
@@ -90,9 +91,14 @@ final class YINUtil {
     let fftSetup = vDSP_create_fftsetup(log2n, Int32(kFFTRadix2))
     var audioRealp = [Float](repeating: 0, count: inputCount)
     var audioImagp = [Float](repeating: 0, count: inputCount)
-    var audioTransformedComplex = DSPSplitComplex(realp: &audioRealp, imagp: &audioImagp)
-
-    let temp = UnsafePointer<Float>(buffer)
+    var audioTransformedComplex:DSPSplitComplex!
+    audioRealp.withUnsafeMutableBufferPointer { realp in
+        audioImagp.withUnsafeMutableBufferPointer { imagp in
+            audioTransformedComplex = DSPSplitComplex(realp: realp.baseAddress!, imagp: imagp.baseAddress!)
+        }
+    }
+    
+    let temp = buffer.withUnsafeBufferPointer({ $0 }).baseAddress!
 
     temp.withMemoryRebound(to: DSPComplex.self, capacity: buffer.count) { (typeConvertedTransferBuffer) -> Void in
       vDSP_ctoz(typeConvertedTransferBuffer, 2, &audioTransformedComplex, 1, vDSP_Length(inputCount))
@@ -115,9 +121,14 @@ final class YINUtil {
 
     var kernelRealp = [Float](repeating: 0, count: frameSize)
     var kernelImagp = [Float](repeating: 0, count: frameSize)
-    var kernelTransformedComplex = DSPSplitComplex(realp: &kernelRealp, imagp: &kernelImagp)
-
-    let ktemp = UnsafePointer<Float>(kernel)
+    var kernelTransformedComplex:DSPSplitComplex!
+    kernelRealp.withUnsafeMutableBufferPointer { realp in
+        kernelImagp.withUnsafeMutableBufferPointer { imagp in
+            kernelTransformedComplex = DSPSplitComplex(realp: realp.baseAddress!, imagp: imagp.baseAddress!)
+          }
+      }
+    
+    let ktemp = kernel.withUnsafeBufferPointer({ $0 }).baseAddress!
 
     ktemp.withMemoryRebound(to: DSPComplex.self, capacity: kernel.count) { (typeConvertedTransferBuffer) -> Void in
       vDSP_ctoz(typeConvertedTransferBuffer, 2, &kernelTransformedComplex, 1, vDSP_Length(inputCount))
@@ -127,7 +138,13 @@ final class YINUtil {
 
     var yinStyleACFRealp = [Float](repeating: 0, count: frameSize)
     var yinStyleACFImagp = [Float](repeating: 0, count: frameSize)
-    var yinStyleACFComplex = DSPSplitComplex(realp: &yinStyleACFRealp, imagp: &yinStyleACFImagp)
+    var yinStyleACFComplex:DSPSplitComplex!
+    yinStyleACFRealp.withUnsafeMutableBufferPointer { realp in
+        yinStyleACFImagp.withUnsafeMutableBufferPointer { imagp in
+            yinStyleACFComplex = DSPSplitComplex(realp: realp.baseAddress!, imagp: imagp.baseAddress!)
+          }
+      }
+    
 
     for j in 0 ..< inputCount {
       yinStyleACFRealp[j] = audioRealp[j] * kernelRealp[j] - audioImagp[j] * kernelImagp[j]
@@ -211,7 +228,7 @@ final class YINUtil {
       betterTau = Float(tau)
     }
 
-    return fabs(betterTau)
+    return abs(betterTau)
   }
 
   class func sumSquare(yinBuffer: [Float], start: Int, end: Int) -> Float {
diff --git a/Source/PitchEngine.swift b/Source/PitchEngine.swift
index 696b3dd..1f0bfe7 100644
--- a/Source/PitchEngine.swift
+++ b/Source/PitchEngine.swift
@@ -2,7 +2,7 @@ import UIKit
 import AVFoundation
 import Pitchy
 
-public protocol PitchEngineDelegate: class {
+public protocol PitchEngineDelegate: AnyObject {
   func pitchEngine(_ pitchEngine: PitchEngine, didReceivePitch pitch: Pitch)
   func pitchEngine(_ pitchEngine: PitchEngine, didReceiveError error: Error)
   func pitchEngineWentBelowLevelThreshold(_ pitchEngine: PitchEngine)
@@ -74,15 +74,19 @@ public final class PitchEngine {
     let audioSession = AVAudioSession.sharedInstance()
 
     switch audioSession.recordPermission {
-    case AVAudioSessionRecordPermission.granted:
+    case AVAudioSession.RecordPermission.granted:
       activate()
-    case AVAudioSessionRecordPermission.denied:
+    case AVAudioSession.RecordPermission.denied:
       DispatchQueue.main.async {
         if let settingsURL = URL(string: UIApplication.openSettingsURLString) {
-          UIApplication.shared.openURL(settingsURL)
+            if #available(iOS 10.0, *) {
+                UIApplication.shared.open(settingsURL, options: [:], completionHandler: nil)
+            } else {
+                UIApplication.shared.openURL(settingsURL)
+            }
         }
       }
-    case AVAudioSessionRecordPermission.undetermined:
+    case AVAudioSession.RecordPermission.undetermined:
       AVAudioSession.sharedInstance().requestRecordPermission { [weak self] granted  in
         guard let weakSelf = self else { return }
 
@@ -96,6 +100,8 @@ public final class PitchEngine {
           weakSelf.activate()
         }
       }
+    @unknown default:
+        break
     }
   }
 
diff --git a/Source/SignalTracking/SignalTracker.swift b/Source/SignalTracking/SignalTracker.swift
index 82a21d0..64fb1b7 100644
--- a/Source/SignalTracking/SignalTracker.swift
+++ b/Source/SignalTracking/SignalTracker.swift
@@ -1,6 +1,6 @@
 import AVFoundation
 
-public protocol SignalTrackerDelegate: class {
+public protocol SignalTrackerDelegate: AnyObject {
   func signalTracker(_ signalTracker: SignalTracker,
                      didReceiveBuffer buffer: AVAudioPCMBuffer,
                      atTime time: AVAudioTime)
@@ -11,12 +11,12 @@ public enum SignalTrackerMode {
   case record, playback
 }
 
-public protocol SignalTracker: class {
+public protocol SignalTracker: AnyObject {
   var mode: SignalTrackerMode { get }
   var levelThreshold: Float? { get set }
   var peakLevel: Float? { get }
   var averageLevel: Float? { get }
-    var delegate: SignalTrackerDelegate? { get set }
+  var delegate: SignalTrackerDelegate? { get set }
 
   func start() throws
   func stop()
diff --git a/Source/Transform/Strategies/FFTTransformer.swift b/Source/Transform/Strategies/FFTTransformer.swift
index 12cba48..00634b8 100644
--- a/Source/Transform/Strategies/FFTTransformer.swift
+++ b/Source/Transform/Strategies/FFTTransformer.swift
@@ -11,7 +11,13 @@ final class FFTTransformer: Transformer {
 
     var realp = [Float](repeating: 0, count: inputCount)
     var imagp = [Float](repeating: 0, count: inputCount)
-    var output = DSPSplitComplex(realp: &realp, imagp: &imagp)
+    
+    var output:DSPSplitComplex!
+    realp.withUnsafeMutableBufferPointer { realp in
+        imagp.withUnsafeMutableBufferPointer { imagp in
+            output = DSPSplitComplex(realp: realp.baseAddress!, imagp: imagp.baseAddress!)
+        }
+    }
 
     let windowSize = bufferSizePOT
     var transferBuffer = [Float](repeating: 0, count: windowSize)
@@ -21,8 +27,7 @@ final class FFTTransformer: Transformer {
     vDSP_vmul((buffer.floatChannelData?.pointee)!, 1, window,
       1, &transferBuffer, 1, vDSP_Length(windowSize))
 
-    let temp = UnsafePointer<Float>(transferBuffer)
-
+    let temp = transferBuffer.withUnsafeBufferPointer({ $0 }).baseAddress!
     temp.withMemoryRebound(to: DSPComplex.self, capacity: transferBuffer.count) { (typeConvertedTransferBuffer) -> Void in
         vDSP_ctoz(typeConvertedTransferBuffer, 2, &output, 1, vDSP_Length(inputCount))
     }