Skip to content

Commit

Permalink
Bump minimum iOS version for deployment (#21)
Browse files Browse the repository at this point in the history
* ADD: unit tests

* FIX: errors in image processors

* FIX: upload preprocessors' members visibilty

* FIX: unit tests for image preprocessors

* CHANGE: pod version and iOS deployment target version

* FIX: unit tests and pod lint failures

* ADD: request body checks in unit tests for uploads

* ADD: unit tests for retry timeout
  • Loading branch information
AniVerma17 authored Dec 18, 2023
1 parent 0778a9c commit 0193c77
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 14 deletions.
5 changes: 5 additions & 0 deletions Example/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ target 'ImageKit_Example' do
end

post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
end
end
installer.pods_project.targets.each do |target|
if target.name == "Nimble"
target.build_configurations.each do |config|
Expand Down
2 changes: 2 additions & 0 deletions Example/imagekit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = ImageKit/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MODULE_NAME = ExampleApp;
PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)";
Expand All @@ -399,6 +400,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = ImageKit/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MODULE_NAME = ExampleApp;
PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)";
Expand Down
4 changes: 3 additions & 1 deletion ImageKit/ImageKit.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ open class ImageKit: NSObject {
lazy var userDefaults = UserDefaults.standard

public static let shared = ImageKit()

private let sharedUploader = ImageKitUploader()

public override init() {

Expand Down Expand Up @@ -79,7 +81,7 @@ open class ImageKit: NSObject {
}

public func uploader() -> ImageKitUploader {
return ImageKitUploader()
return sharedUploader
}

}
25 changes: 15 additions & 10 deletions ImageKit/ImageKitUploader.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,18 @@ import Network
//import Reachability

public class ImageKitUploader {

var currentNetworkPath: NWPath

public init() {
let monitor = NWPathMonitor()
currentNetworkPath = monitor.currentPath
monitor.pathUpdateHandler = { path in
self.currentNetworkPath = path
}
monitor.start(queue: .main)
UIDevice.current.isBatteryMonitoringEnabled = true
}

public func upload(
file: Data,
Expand Down Expand Up @@ -197,17 +209,10 @@ public class ImageKitUploader {
}

internal func checkUploadPolicy(_ policy: UploadPolicy, _ completion: @escaping (Result<(HTTPURLResponse?, UploadAPIResponse?), Error>) -> Void) -> Bool {
if policy.networkType == .UNMETERED {
var isNetworkMetered = false
if #available(iOS 12.0, *) {
isNetworkMetered = NWPathMonitor().currentPath.isExpensive
}
if isNetworkMetered {
completion(Result.failure(UploadAPIError(message: "POLICY_ERROR_METERED_NETWORK", help: nil)))
return false
}
if policy.networkType == .UNMETERED && currentNetworkPath.isExpensive {
completion(Result.failure(UploadAPIError(message: "POLICY_ERROR_METERED_NETWORK", help: nil)))
return false
}
UIDevice.current.isBatteryMonitoringEnabled = true
if policy.requiresCharging && UIDevice.current.batteryState == .unplugged {
completion(Result.failure(UploadAPIError(message: "POLICY_ERROR_BATTERY_DISCHARGING", help: nil)))
return false
Expand Down
3 changes: 2 additions & 1 deletion ImageKit/Util/UploadApi.swift
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ class UploadAPI: NSObject, URLSessionTaskDelegate {
}

request.setValue(formData.contentType, forHTTPHeaderField: "Content-Type")
print("Retry attempt: \(retryCount), timeout: \(getRetryTimeOut(uploadPolicy, retryCount))")

DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(getRetryTimeOut(uploadPolicy, retryCount))) {
do {
Expand Down Expand Up @@ -148,7 +149,7 @@ class UploadAPI: NSObject, URLSessionTaskDelegate {
}
}

private static func getRetryTimeOut(_ policy: UploadPolicy, _ retryCount: Int) -> Int {
internal static func getRetryTimeOut(_ policy: UploadPolicy, _ retryCount: Int) -> Int {
return policy.backoffPolicy == .LINEAR
? policy.backoffMillis * retryCount
: policy.backoffPolicy == .EXPONENTIAL && retryCount > 0
Expand Down
3 changes: 1 addition & 2 deletions ImageKitIO.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,9 @@ ImageKit is a complete image optimization and transformation solution that comes
s.source = { :git => 'https://github.com/imagekit-developer/imagekit-ios.git', :tag => s.version.to_s }

s.swift_version = '4.0'
s.ios.deployment_target = '11.0'
s.ios.deployment_target = '12.0'

s.source_files = 'ImageKit/**/*'
# s.dependency 'ReachabilitySwift'

s.test_spec 'Tests' do |test_spec|
test_spec.source_files = 'Tests/**/*'
Expand Down
32 changes: 32 additions & 0 deletions Tests/Tests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1111,6 +1111,38 @@ class UploadSpec: QuickSpec {
}
}

class UploadPolicySpec: QuickSpec {

override func spec() {
beforeSuite {
_ = ImageKit.init(publicKey: "Dummy public key", urlEndpoint: "https://ik.imagekit.io/demo", transformationPosition: TransformationPosition.PATH)
}

describe("Retry timeouts") {
it("With linear backoff") {
let backoffPolicy = UploadPolicy.Builder()
.backoffCriteria(backoffMillis: 200, backoffPolicy: .LINEAR)
.build()
expect(UploadAPI.getRetryTimeOut(backoffPolicy, 0)).to(equal(0))
expect(UploadAPI.getRetryTimeOut(backoffPolicy, 1)).to(equal(200))
expect(UploadAPI.getRetryTimeOut(backoffPolicy, 2)).to(equal(400))
expect(UploadAPI.getRetryTimeOut(backoffPolicy, 3)).to(equal(600))
expect(UploadAPI.getRetryTimeOut(backoffPolicy, 4)).to(equal(800))
}
it("With exponential backoff") {
let backoffPolicy = UploadPolicy.Builder()
.backoffCriteria(backoffMillis: 200, backoffPolicy: .EXPONENTIAL)
.build()
expect(UploadAPI.getRetryTimeOut(backoffPolicy, 0)).to(equal(0))
expect(UploadAPI.getRetryTimeOut(backoffPolicy, 1)).to(equal(200))
expect(UploadAPI.getRetryTimeOut(backoffPolicy, 2)).to(equal(400))
expect(UploadAPI.getRetryTimeOut(backoffPolicy, 3)).to(equal(800))
expect(UploadAPI.getRetryTimeOut(backoffPolicy, 4)).to(equal(1600))
}
}
}
}

class UploadPreprocessorSpec: QuickSpec {
override func spec() {
beforeSuite {
Expand Down

0 comments on commit 0193c77

Please sign in to comment.