@@ -15,47 +15,46 @@ public enum VersionCheckType: Int {
1515 case weekly = 7
1616}
1717
18- struct AppStoreDefaults {
18+ enum AppStoreDefaults {
1919 static let storedVersionCheckDate = " storedVersionCheckDate "
2020 static let storedSkippedVersion = " storedSkippedVersion "
2121}
2222
2323public class AppStoreManager {
24-
2524 public static let shared = AppStoreManager ( )
26-
25+
2726 var title : String = AppStoreManagerConstant . alertTitle
2827 var message : String ? = AppStoreManagerConstant . alertMessage
29-
28+
3029 var skipButtonTitle : String = AppStoreManagerConstant . skipButtonTitle
3130 var updateButtonTitle : String = AppStoreManagerConstant . updateButtonTitle
32-
31+
3332 var lastVersionCheckDate : Date ? {
34- didSet{
33+ didSet {
3534 UserDefaults . standard. set ( self . lastVersionCheckDate, forKey: AppStoreDefaults . storedVersionCheckDate)
3635 UserDefaults . standard. synchronize ( )
3736 }
3837 }
39-
38+
4039 let bundleId = Bundle . main. bundleIdentifier ?? " "
41-
40+
4241 var currentInstalledVersion : String ? {
4342 return Bundle . main. object ( forInfoDictionaryKey: " CFBundleShortVersionString " ) as? String
4443 }
45-
44+
4645 var appStoreResult : AppStoreResult ?
47-
46+
4847 init ( ) {
4948 self . lastVersionCheckDate = UserDefaults . standard. object ( forKey: AppStoreDefaults . storedVersionCheckDate) as? Date
5049 }
51-
52- func getStoreVersion( completion: @escaping ( AppStoreResult ? ) -> ( ) ) {
50+
51+ func getStoreVersion( completion: @escaping ( AppStoreResult ? ) -> Void ) {
5352 guard let url = URL ( string: " https://itunes.apple.com/lookup?bundleId= \( self . bundleId) " ) else {
5453 completion ( nil )
5554 return
5655 }
5756 let session = URLSession ( configuration: . default)
58- let task = session. dataTask ( with: url) { [ weak self] ( data, response , error) in
57+ let task = session. dataTask ( with: url) { [ weak self] data, _ , error in
5958 if let er = error {
6059 self ? . log ( er. localizedDescription)
6160 completion ( nil )
@@ -67,16 +66,16 @@ public class AppStoreManager {
6766 self ? . log ( " AppStore version: \( result. version ?? " " ) " )
6867 self ? . appStoreResult = result
6968 completion ( result)
70- } else {
69+ } else {
7170 self ? . appStoreResult = nil
7271 completion ( nil )
7372 }
7473 }
7574 task. resume ( )
7675 }
77-
78- public func checkNewVersion( _ type: VersionCheckType , isAvailable: @escaping ( Bool ) -> ( ) ) {
79- self . getStoreVersion { [ weak self] ( result) in
76+
77+ public func checkNewVersion( _ type: VersionCheckType , isAvailable: @escaping ( Bool ) -> Void ) {
78+ self . getStoreVersion { [ weak self] result in
8079 if let currentInstalledVersion = self ? . currentInstalledVersion,
8180 let appStoreVersion = result? . version {
8281 switch currentInstalledVersion. compare ( appStoreVersion, options: . numeric) {
@@ -94,24 +93,24 @@ public class AppStoreManager {
9493 if Date . days ( since: lastVersionCheckDate) >= type. rawValue {
9594 self ? . lastVersionCheckDate = Date ( )
9695 isAvailable ( true )
97- } else {
96+ } else {
9897 isAvailable ( false )
9998 }
10099 }
101100 case . orderedDescending, . orderedSame:
102101 isAvailable ( false )
103102 }
104- } else {
103+ } else {
105104 isAvailable ( false )
106105 }
107106 }
108107 }
109-
108+
110109 public func checkNewVersionAndShowAlert( _ type: VersionCheckType ,
111110 at vc: UIViewController ,
112111 canSkip: Bool ,
113112 preferredStyle: UIAlertController . Style = . alert) {
114- self . getStoreVersion { [ weak self] ( result) in
113+ self . getStoreVersion { [ weak self] result in
115114 if let currentInstalledVersion = self ? . currentInstalledVersion,
116115 let appStoreVersion = result? . version {
117116 switch currentInstalledVersion. compare ( appStoreVersion, options: . numeric) {
@@ -121,31 +120,31 @@ public class AppStoreManager {
121120 case . orderedDescending, . orderedSame:
122121 break
123122 }
124- } else {
123+ } else {
125124 self ? . log ( " Can't get Version " )
126125 }
127126 }
128127 }
129-
130- //MARK: - Alert
131-
128+
129+ // MARK: - Alert
130+
132131 public func configureAlert( title: String ? , message: String ? ) {
133132 self . title = title ?? AppStoreManagerConstant . alertTitle
134133 self . message = message
135134 }
136-
135+
137136 public func configureAlert( updateButtonTitle: String ? , skipButtonTitle: String ? ) {
138137 self . updateButtonTitle = updateButtonTitle ?? AppStoreManagerConstant . updateButtonTitle
139138 self . skipButtonTitle = skipButtonTitle ?? AppStoreManagerConstant . skipButtonTitle
140139 }
141-
142- public func showAlertUpdate( at vc: UIViewController , canSkip: Bool , preferredStyle: UIAlertController . Style = . alert) {
140+
141+ public func showAlertUpdate( at vc: UIViewController , canSkip: Bool , preferredStyle: UIAlertController . Style = . alert) {
143142 DispatchQueue . main. async { [ weak self] in
144143 let alertVc = UIAlertController ( title: self ? . title, message: self ? . message, preferredStyle: preferredStyle)
145- let skip = UIAlertAction ( title: self ? . skipButtonTitle ?? AppStoreManagerConstant . skipButtonTitle, style: . cancel) { ( _ ) in
144+ let skip = UIAlertAction ( title: self ? . skipButtonTitle ?? AppStoreManagerConstant . skipButtonTitle, style: . cancel) { _ in
146145 //
147146 }
148- let update = UIAlertAction ( title: self ? . updateButtonTitle ?? AppStoreManagerConstant . updateButtonTitle, style: . default) { ( _ ) in
147+ let update = UIAlertAction ( title: self ? . updateButtonTitle ?? AppStoreManagerConstant . updateButtonTitle, style: . default) { _ in
149148 self ? . openAppStore ( )
150149 }
151150 alertVc. addAction ( update)
@@ -155,12 +154,12 @@ public class AppStoreManager {
155154 vc. present ( alertVc, animated: true , completion: nil )
156155 }
157156 }
158-
157+
159158 public func openAppStore( ) {
160159 if let appStoreId = self . appStoreResult? . trackId {
161160 self . openAppStore ( id: appStoreId)
162- } else {
163- self . getStoreVersion { [ weak self] ( result) in
161+ } else {
162+ self . getStoreVersion { [ weak self] result in
164163 guard let appStoreId = result? . trackId else {
165164 self ? . log ( " Can't get an AppId " )
166165 return
@@ -169,21 +168,19 @@ public class AppStoreManager {
169168 }
170169 }
171170 }
172-
171+
173172 func openAppStore( id appStoreId: Int ) {
174173 if let url = URL ( string: " https://itunes.apple.com/app/id \( appStoreId) " ) ,
175174 UIApplication . shared. canOpenURL ( url) {
176175 UIApplication . shared. open ( url, options: [ : ] , completionHandler: nil )
177- } else {
176+ } else {
178177 self . log ( " Can't open AppStore " )
179178 }
180179 }
181-
180+
182181 func log( _ value: String ) {
183182 print ( " 📲: [AppStore] => \( value) " )
184183 }
185-
186184}
187185
188-
189186#endif
0 commit comments