From c1f40bdc901761f14777e6984d5388c6d803ec69 Mon Sep 17 00:00:00 2001 From: Malcolm Anderson Date: Sat, 25 Jul 2020 08:28:33 -0700 Subject: [PATCH 1/8] SwiftUI classes --- .../TimeZonePreviewSelectionView.swift | 31 +++++++++++ Classes/SwiftUI/TimeZoneSelectorView.swift | 53 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 Classes/SwiftUI/TimeZonePreviewSelectionView.swift create mode 100644 Classes/SwiftUI/TimeZoneSelectorView.swift diff --git a/Classes/SwiftUI/TimeZonePreviewSelectionView.swift b/Classes/SwiftUI/TimeZonePreviewSelectionView.swift new file mode 100644 index 0000000..909ed0e --- /dev/null +++ b/Classes/SwiftUI/TimeZonePreviewSelectionView.swift @@ -0,0 +1,31 @@ +// +// TimeZonePreviewSelectionView.swift +// Clock +// +// Created by Malcolm Anderson on 7/25/20. +// Copyright © 2020 Malcolm Anderson. All rights reserved. +// + +import SwiftUI + +struct TimeZonePreviewSelectionView: View { + @State var b = "" + @State var selectorEnabled = false + var body: some View { + HStack { + Text("New York, USA") + Button(action: {self.selectorEnabled = true}) { + Text("Select...") + } + }.sheet(isPresented: $selectorEnabled) { + TimeZoneSelectorView() + } + + } +} + +struct TimeZonePreviewSelectionView_Previews: PreviewProvider { + static var previews: some View { + TimeZonePreviewSelectionView() + } +} diff --git a/Classes/SwiftUI/TimeZoneSelectorView.swift b/Classes/SwiftUI/TimeZoneSelectorView.swift new file mode 100644 index 0000000..08d6934 --- /dev/null +++ b/Classes/SwiftUI/TimeZoneSelectorView.swift @@ -0,0 +1,53 @@ +// +// TimeZoneSelectorView.swift +// Clock +// +// Created by Malcolm Anderson on 7/25/20. +// Copyright © 2020 Malcolm Anderson. All rights reserved. +// + +import SwiftUI + +struct TimeZoneSelectorView: View { + @State var searchContent = "" { + didSet { + print("WILL SET SEARCH CONTENT") + updateResults() + } + } + + @Environment(\.presentationMode) var presentationMode + var body: some View { + VStack { + TextField("Search", text: $searchContent) + List { + Text("New York, USA") + Text("London, UK(?)") + Text("Tokyo, Japan") + } + HStack { + Button(action: cancel) { Text("Cancel") } + Button(action: confirm) { Text("Select") } + } + } + .frame(minWidth: 200, minHeight: 200) + } + + func updateResults() { + print("new content=\(searchContent)") + } + + func cancel() { + self.presentationMode.wrappedValue.dismiss() + } + + func confirm() { + self.presentationMode.wrappedValue.dismiss() + } +} + +struct TimeZoneSelectorView_Previews: PreviewProvider { + static var previews: some View { + TimeZoneSelectorView() + } +} From 23b4147b53d1445a30e033cc73d3ed7fd5077678 Mon Sep 17 00:00:00 2001 From: Malcolm Anderson Date: Sat, 25 Jul 2020 20:53:34 -0700 Subject: [PATCH 2/8] Cities that match the user's search now displayed Next goal is to allow the user to select an item from the list --- Classes/CityCountryTimeZone.swift | 15 +++-- Classes/SwiftUI/TimeZoneDataManager.swift | 58 +++++++++++++++++++ .../TimeZonePreviewSelectionView.swift | 6 +- Classes/SwiftUI/TimeZoneSelectorView.swift | 39 +++++++------ 4 files changed, 92 insertions(+), 26 deletions(-) create mode 100644 Classes/SwiftUI/TimeZoneDataManager.swift diff --git a/Classes/CityCountryTimeZone.swift b/Classes/CityCountryTimeZone.swift index 88f184c..0bb5457 100644 --- a/Classes/CityCountryTimeZone.swift +++ b/Classes/CityCountryTimeZone.swift @@ -8,11 +8,18 @@ import Foundation -struct CityCountryTimeZone: Codable { +struct CityCountryTimeZone: Codable, Hashable, Identifiable { + var city = "" + var country = "" + var timeZoneName = "" - let city: String - let country: String - let timeZoneName: String + public var id: String { return city + country } + + init() { + self.city = "NULL" + self.country = "NULL" + self.timeZoneName = "NULL" + } init(city: String, country: String, timeZoneName: String) { self.city = city diff --git a/Classes/SwiftUI/TimeZoneDataManager.swift b/Classes/SwiftUI/TimeZoneDataManager.swift new file mode 100644 index 0000000..15992a1 --- /dev/null +++ b/Classes/SwiftUI/TimeZoneDataManager.swift @@ -0,0 +1,58 @@ +// +// TimeZoneDataManager.swift +// Clock +// +// Created by Malcolm Anderson on 7/25/20. +// Copyright © 2020 Malcolm Anderson. All rights reserved. +// + +import Foundation + +class TimeZoneDataManager { + static let sharedInstance = TimeZoneDataManager() + + var timeZones: [CityCountryTimeZone] = [] + + private init() { + print("Initialize TimeZoneDataManager...") + self.loadTimeZoneData() + } + + func loadTimeZoneData() { + // copied from TimeZonePickerDataSource.swift + print("Load time zone data on another thread") + DispatchQueue.global(qos: .userInitiated).async { + print("we're in the other thread") + do { + if let file = Bundle(for: TimeZoneDataManager.self).url(forResource: "CitiesAndTimeZones", withExtension: "json") { + let data = try Data(contentsOf: file) + print(file.absoluteString) + do { + var timeZones = try JSONDecoder().decode([CityCountryTimeZone].self, from: data) + timeZones.sort() + print("TIMEZONE - sorted!") + DispatchQueue.main.async { + self.timeZones = timeZones + print("TIMEZONE - list is set, we should be all good :)") + } + } catch { + // should never get here / invalid json + print("TIMEZONE ERROR - json was invalid") + } + } else { + // should never get here / file does not exist + print("TIMEZONE ERROR - file doesn't exist") + } + } catch { + // should never get here / unless Data or JSONSerialization throw an error + print("TIMEZONE ERROR - Data, JSONSerialization threw error") + } + } + } + + func filter(_ str: String) -> [CityCountryTimeZone] { + return self.timeZones.filter { timeZone -> Bool in + timeZone.contains(str) + } + } +} diff --git a/Classes/SwiftUI/TimeZonePreviewSelectionView.swift b/Classes/SwiftUI/TimeZonePreviewSelectionView.swift index 909ed0e..969d998 100644 --- a/Classes/SwiftUI/TimeZonePreviewSelectionView.swift +++ b/Classes/SwiftUI/TimeZonePreviewSelectionView.swift @@ -9,16 +9,16 @@ import SwiftUI struct TimeZonePreviewSelectionView: View { - @State var b = "" + @State var cityItem: CityCountryTimeZone? @State var selectorEnabled = false var body: some View { HStack { - Text("New York, USA") + Text(cityItem != nil ? "\(cityItem!.city), \(cityItem!.country)" : "None") Button(action: {self.selectorEnabled = true}) { Text("Select...") } }.sheet(isPresented: $selectorEnabled) { - TimeZoneSelectorView() + TimeZoneSelectorView(selectedTimeZone: self.$cityItem) } } diff --git a/Classes/SwiftUI/TimeZoneSelectorView.swift b/Classes/SwiftUI/TimeZoneSelectorView.swift index 08d6934..81e7ee5 100644 --- a/Classes/SwiftUI/TimeZoneSelectorView.swift +++ b/Classes/SwiftUI/TimeZoneSelectorView.swift @@ -9,21 +9,14 @@ import SwiftUI struct TimeZoneSelectorView: View { - @State var searchContent = "" { - didSet { - print("WILL SET SEARCH CONTENT") - updateResults() - } - } - + @State var searchContent = "" + @Binding var selectedTimeZone: CityCountryTimeZone? @Environment(\.presentationMode) var presentationMode var body: some View { VStack { - TextField("Search", text: $searchContent) - List { - Text("New York, USA") - Text("London, UK(?)") - Text("Tokyo, Japan") + TextField("Search", text: self.$searchContent) + List(self.getFilteredList(), selection: self.$selectedTimeZone) { item in + Text(item.string()).tag(item) } HStack { Button(action: cancel) { Text("Cancel") } @@ -33,8 +26,8 @@ struct TimeZoneSelectorView: View { .frame(minWidth: 200, minHeight: 200) } - func updateResults() { - print("new content=\(searchContent)") + func getFilteredList() -> [CityCountryTimeZone] { + return TimeZoneDataManager.sharedInstance.filter(self.searchContent) } func cancel() { @@ -46,8 +39,16 @@ struct TimeZoneSelectorView: View { } } -struct TimeZoneSelectorView_Previews: PreviewProvider { - static var previews: some View { - TimeZoneSelectorView() - } -} +//struct TimeZoneListItem: View { +// @State var timeZoneItem: CityCountryTimeZone +// @State var selectedString: String +// var body: some View { +// Text(timeZoneItem.string()) +// } +//} + +//struct TimeZoneSelectorView_Previews: PreviewProvider { +// static var previews: some View { +//// TimeZoneSelectorView() +// } +//} From 78bf4ec2b547b31bb95f6ce6b0b581ecc35fde31 Mon Sep 17 00:00:00 2001 From: Malcolm Anderson Date: Mon, 27 Jul 2020 11:29:48 -0700 Subject: [PATCH 3/8] Seems to be working correctly now on macOS! I think the next step is to get it working on iOS as well! --- Classes/CityCountryTimeZone.swift | 2 +- Classes/SwiftUI/TimeZonePreviewSelectionView.swift | 11 +++++++---- Classes/SwiftUI/TimeZoneSelectorView.swift | 3 ++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Classes/CityCountryTimeZone.swift b/Classes/CityCountryTimeZone.swift index 0bb5457..d35baa6 100644 --- a/Classes/CityCountryTimeZone.swift +++ b/Classes/CityCountryTimeZone.swift @@ -28,7 +28,7 @@ struct CityCountryTimeZone: Codable, Hashable, Identifiable { } func contains(_ string: String) -> Bool { - return city.lowercased().contains(string.lowercased()) || country.lowercased().contains(string.lowercased()) + return self.string().lowercased().contains(string.lowercased()) } func string() -> String { diff --git a/Classes/SwiftUI/TimeZonePreviewSelectionView.swift b/Classes/SwiftUI/TimeZonePreviewSelectionView.swift index 969d998..6cb66f3 100644 --- a/Classes/SwiftUI/TimeZonePreviewSelectionView.swift +++ b/Classes/SwiftUI/TimeZonePreviewSelectionView.swift @@ -9,23 +9,26 @@ import SwiftUI struct TimeZonePreviewSelectionView: View { - @State var cityItem: CityCountryTimeZone? + @Binding var cityItem: CityCountryTimeZone? @State var selectorEnabled = false var body: some View { HStack { - Text(cityItem != nil ? "\(cityItem!.city), \(cityItem!.country)" : "None") + Text(cityItem != nil ? cityItem!.string() : "None") + Spacer() Button(action: {self.selectorEnabled = true}) { Text("Select...") } }.sheet(isPresented: $selectorEnabled) { - TimeZoneSelectorView(selectedTimeZone: self.$cityItem) + TimeZoneSelectorView(searchContent: (self.cityItem != nil ? self.cityItem!.string() : ""), selectedTimeZone: self.$cityItem) } } } struct TimeZonePreviewSelectionView_Previews: PreviewProvider { +// @Binding var b = CityCountryTimeZone() static var previews: some View { - TimeZonePreviewSelectionView() + Text("bad") +// TimeZonePreviewSelectionView(cityItem: self.$b) } } diff --git a/Classes/SwiftUI/TimeZoneSelectorView.swift b/Classes/SwiftUI/TimeZoneSelectorView.swift index 81e7ee5..e5817c0 100644 --- a/Classes/SwiftUI/TimeZoneSelectorView.swift +++ b/Classes/SwiftUI/TimeZoneSelectorView.swift @@ -15,8 +15,9 @@ struct TimeZoneSelectorView: View { var body: some View { VStack { TextField("Search", text: self.$searchContent) - List(self.getFilteredList(), selection: self.$selectedTimeZone) { item in + List(self.getFilteredList(), id: \.self, selection: self.$selectedTimeZone) { item in Text(item.string()).tag(item) + } HStack { Button(action: cancel) { Text("Cancel") } From c5391072e26905a0bd252b471a5d97ada5aca28c Mon Sep 17 00:00:00 2001 From: Malcolm Anderson Date: Mon, 27 Jul 2020 18:31:56 -0700 Subject: [PATCH 4/8] Did some print statement cleanup --- Classes/SwiftUI/TimeZoneDataManager.swift | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/Classes/SwiftUI/TimeZoneDataManager.swift b/Classes/SwiftUI/TimeZoneDataManager.swift index 15992a1..2d80447 100644 --- a/Classes/SwiftUI/TimeZoneDataManager.swift +++ b/Classes/SwiftUI/TimeZoneDataManager.swift @@ -14,38 +14,33 @@ class TimeZoneDataManager { var timeZones: [CityCountryTimeZone] = [] private init() { - print("Initialize TimeZoneDataManager...") self.loadTimeZoneData() } func loadTimeZoneData() { // copied from TimeZonePickerDataSource.swift - print("Load time zone data on another thread") DispatchQueue.global(qos: .userInitiated).async { - print("we're in the other thread") do { if let file = Bundle(for: TimeZoneDataManager.self).url(forResource: "CitiesAndTimeZones", withExtension: "json") { let data = try Data(contentsOf: file) - print(file.absoluteString) do { var timeZones = try JSONDecoder().decode([CityCountryTimeZone].self, from: data) timeZones.sort() - print("TIMEZONE - sorted!") DispatchQueue.main.async { self.timeZones = timeZones - print("TIMEZONE - list is set, we should be all good :)") + print("TimeZoneDataManager - setup is complete") } } catch { // should never get here / invalid json - print("TIMEZONE ERROR - json was invalid") + print("TimeZoneDataManager - invalid JSON") } } else { // should never get here / file does not exist - print("TIMEZONE ERROR - file doesn't exist") + print("TimeZoneDataManager - JSON file doesn't exist") } } catch { // should never get here / unless Data or JSONSerialization throw an error - print("TIMEZONE ERROR - Data, JSONSerialization threw error") + print("TimeZoneDataManager - Data or JSONSerialization threw error") } } } From da3c71be6e4108a1001a1495136c3e1ff8d2e78a Mon Sep 17 00:00:00 2001 From: Malcolm Anderson Date: Thu, 30 Jul 2020 09:50:56 -0700 Subject: [PATCH 5/8] Code cleanup and SwiftUI in README --- Classes/CityCountryTimeZone.swift | 1 + Classes/SwiftUI/TimeZoneDataManager.swift | 2 +- .../TimeZonePreviewSelectionView.swift | 10 +------ Classes/SwiftUI/TimeZoneSelectorView.swift | 16 +---------- README.md | 27 +++++++++++++++++- Screenshots/SwiftUI_macOS_picker.png | Bin 0 -> 34865 bytes Screenshots/SwiftUI_macOS_preview.png | Bin 0 -> 11218 bytes 7 files changed, 30 insertions(+), 26 deletions(-) create mode 100644 Screenshots/SwiftUI_macOS_picker.png create mode 100644 Screenshots/SwiftUI_macOS_preview.png diff --git a/Classes/CityCountryTimeZone.swift b/Classes/CityCountryTimeZone.swift index d35baa6..bc2ffed 100644 --- a/Classes/CityCountryTimeZone.swift +++ b/Classes/CityCountryTimeZone.swift @@ -3,6 +3,7 @@ // TimeZonePicker // // Created by Gligor Kotushevski on 19/07/17. +// Edited by Malcolm Anderson on 7/25/20. // Copyright © 2017 Gligor Kotushevski. All rights reserved. // diff --git a/Classes/SwiftUI/TimeZoneDataManager.swift b/Classes/SwiftUI/TimeZoneDataManager.swift index 2d80447..856dc8b 100644 --- a/Classes/SwiftUI/TimeZoneDataManager.swift +++ b/Classes/SwiftUI/TimeZoneDataManager.swift @@ -1,6 +1,6 @@ // // TimeZoneDataManager.swift -// Clock +// TimeZonePicker // // Created by Malcolm Anderson on 7/25/20. // Copyright © 2020 Malcolm Anderson. All rights reserved. diff --git a/Classes/SwiftUI/TimeZonePreviewSelectionView.swift b/Classes/SwiftUI/TimeZonePreviewSelectionView.swift index 6cb66f3..9693f05 100644 --- a/Classes/SwiftUI/TimeZonePreviewSelectionView.swift +++ b/Classes/SwiftUI/TimeZonePreviewSelectionView.swift @@ -1,6 +1,6 @@ // // TimeZonePreviewSelectionView.swift -// Clock +// TimeZonePicker // // Created by Malcolm Anderson on 7/25/20. // Copyright © 2020 Malcolm Anderson. All rights reserved. @@ -24,11 +24,3 @@ struct TimeZonePreviewSelectionView: View { } } - -struct TimeZonePreviewSelectionView_Previews: PreviewProvider { -// @Binding var b = CityCountryTimeZone() - static var previews: some View { - Text("bad") -// TimeZonePreviewSelectionView(cityItem: self.$b) - } -} diff --git a/Classes/SwiftUI/TimeZoneSelectorView.swift b/Classes/SwiftUI/TimeZoneSelectorView.swift index e5817c0..0831296 100644 --- a/Classes/SwiftUI/TimeZoneSelectorView.swift +++ b/Classes/SwiftUI/TimeZoneSelectorView.swift @@ -1,6 +1,6 @@ // // TimeZoneSelectorView.swift -// Clock +// TimeZonePicker // // Created by Malcolm Anderson on 7/25/20. // Copyright © 2020 Malcolm Anderson. All rights reserved. @@ -39,17 +39,3 @@ struct TimeZoneSelectorView: View { self.presentationMode.wrappedValue.dismiss() } } - -//struct TimeZoneListItem: View { -// @State var timeZoneItem: CityCountryTimeZone -// @State var selectedString: String -// var body: some View { -// Text(timeZoneItem.string()) -// } -//} - -//struct TimeZoneSelectorView_Previews: PreviewProvider { -// static var previews: some View { -//// TimeZoneSelectorView() -// } -//} diff --git a/README.md b/README.md index d63643a..c9ea4cc 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Buy Me a Coffee at ko-fi.com -A TimeZonePicker UIViewController similar to the iOS Settings app. Search and select from a range of cities and countries to find your most suitable time zone. +A TimeZonePicker UIViewController and SwiftUI View similar to the iOS Settings app. Search and select from a range of cities and countries to find your most suitable time zone. ## Screenshots @@ -61,6 +61,31 @@ func timeZonePicker(_ timeZonePicker: TimeZonePickerViewController, didSelectTim Please check the `TimeZonePickerExample` project for the above usage example. If you have any questions do not hesitate to get in touch with me. +### SwiftUI +In addition to the UIKit-based view controllers, there is also a SwiftUI View available, called `TimeZonePreviewSelectionView`. + +![Preview view](Screenshots/SwiftUI_macOS_preview.png) +![Select view](Screenshots/SwiftUI_macOS_picker.png) + +To use TimeZonePicker in a SwiftUI app, include `TimeZonePreviewSelectionView()` in your `View`, and bind it to a `CityCountryTimeZone` variable, like so: +```swift +struct ContentView: View { + // variable storing the time zone data + @State var myTimeZone: CityCountryTimeZone = CityCountryTimeZone() + + var body: some View { + VStack { + // Creates the time zone preview picker + TimeZonePreviewSelectionView(cityItem: self.$myTimeZone) + + // Displays the selected time zone + Text("The selected time zone is \(self.myTimeZone.timeZoneName)") + } + } +} +``` +**Note:** So far, this has only been tested on macOS Catalina. It *should* work on iOS as well, but it is not guaranteed yet. + ## Requirements * iOS 8 or later. diff --git a/Screenshots/SwiftUI_macOS_picker.png b/Screenshots/SwiftUI_macOS_picker.png new file mode 100644 index 0000000000000000000000000000000000000000..659e8527bb7317a67d8cae4ec9f2eea8a047142f GIT binary patch literal 34865 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 Date: Thu, 30 Jul 2020 16:47:30 -0700 Subject: [PATCH 6/8] Updated podspec file iOS 13+, as well as SwiftUI framework --- TimeZonePicker.podspec | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/TimeZonePicker.podspec b/TimeZonePicker.podspec index 23db4d6..2e9a8ac 100644 --- a/TimeZonePicker.podspec +++ b/TimeZonePicker.podspec @@ -2,7 +2,7 @@ Pod::Spec.new do |s| s.name = 'TimeZonePicker' s.version = '1.3.0' - s.summary = 'A TimeZonePicker UIViewController similar to the iOS Settings app.' + s.summary = 'A TimeZonePicker UIViewController and SwiftUI View similar to the iOS Settings app.' s.description = <<-DESC * A ready view controller that can be used in any iOS app. * Search/filter functionality ready using a search bar. @@ -12,15 +12,15 @@ Pod::Spec.new do |s| s.license = { :type => 'Apache License, Version 2.0', :file => 'LICENSE' } s.author = { 'Gligor Kotushevski' => 'gligorkot@gmail.com' } s.social_media_url = 'https://twitter.com/gligor_nz' - s.platform = :ios, '8.0' - s.ios.deployment_target = '8.0' + s.platform = :ios, '13.0' + s.ios.deployment_target = '13.0' s.source = { :git => 'https://github.com/gligorkot/TimeZonePicker.git', :tag => s.version.to_s } s.source_files = 'Classes', 'Classes/*.{swift}' s.resources = 'Resources/*.{json,storyboard}' s.pod_target_xcconfig = { 'SWIFT_VERSION' => '5.2' } - s.frameworks = 'UIKit' + s.frameworks = 'UIKit', 'SwiftUI' s.requires_arc = true s.swift_versions = ['4.0', '4.1', '4.2', '5.0', '5.1', '5.2'] From 05043d129c52120a4dd025a2a1b3593325ddca01 Mon Sep 17 00:00:00 2001 From: Malcolm Anderson Date: Thu, 30 Jul 2020 17:01:59 -0700 Subject: [PATCH 7/8] Added description + SwiftUI source files --- TimeZonePicker.podspec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/TimeZonePicker.podspec b/TimeZonePicker.podspec index 2e9a8ac..d75472b 100644 --- a/TimeZonePicker.podspec +++ b/TimeZonePicker.podspec @@ -7,6 +7,7 @@ Pod::Spec.new do |s| * A ready view controller that can be used in any iOS app. * Search/filter functionality ready using a search bar. * Selection invokes a delegate with the selected TimeZone. + * SwiftUI implementation DESC s.homepage = 'https://github.com/gligorkot/TimeZonePicker' s.license = { :type => 'Apache License, Version 2.0', :file => 'LICENSE' } @@ -16,7 +17,7 @@ Pod::Spec.new do |s| s.ios.deployment_target = '13.0' s.source = { :git => 'https://github.com/gligorkot/TimeZonePicker.git', :tag => s.version.to_s } - s.source_files = 'Classes', 'Classes/*.{swift}' + s.source_files = 'Classes', 'Classes/*.{swift}', 'Classes/SwiftUI/*.{swift}' s.resources = 'Resources/*.{json,storyboard}' s.pod_target_xcconfig = { 'SWIFT_VERSION' => '5.2' } From b965efd12eb3d4336f0fd534f50754e6dd9d48b3 Mon Sep 17 00:00:00 2001 From: Malcolm Anderson Date: Wed, 5 Aug 2020 15:04:24 -0700 Subject: [PATCH 8/8] Updated example podfile for iOS 13 --- TimeZonePickerExample/Podfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TimeZonePickerExample/Podfile b/TimeZonePickerExample/Podfile index a00b7bf..1487e9f 100644 --- a/TimeZonePickerExample/Podfile +++ b/TimeZonePickerExample/Podfile @@ -6,7 +6,7 @@ workspace 'TimeZonePickerExample' target :'TimeZonePickerExample' do project 'TimeZonePickerExample.xcodeproj' - platform :ios, '8.0' + platform :ios, '13.0' pod 'TimeZonePicker', :path => '../' end