├── Countries.xcodeproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
├── xcuserdata
│ └── pavelgnatyuk.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── project.pbxproj
├── Countries
├── AppDelegate.swift
├── Info.plist
├── Base.lproj
│ └── LaunchScreen.storyboard
├── Assets.xcassets
│ └── AppIcon.appiconset
│ │ └── Contents.json
└── ViewController.swift
├── README.md
└── Untitled Diagram.drawio
/Countries.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Countries.xcodeproj/xcuserdata/pavelgnatyuk.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Countries.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/Countries/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // Countries
4 | //
5 | // Created by Pavel Gnatyuk on 29/06/2017.
6 | // Copyright © 2017 Pavel Gnatyuk. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow? = UIWindow(frame: UIScreen.main.bounds)
15 |
16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
17 | window?.rootViewController = UINavigationController(rootViewController: ViewController(nibName: nil, bundle: nil))
18 | window?.makeKeyAndVisible()
19 | return true
20 | }
21 | }
22 |
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Countries
2 | A demo project Search in Country list created in Xcode 9 beta 2 with iOS 11 SDK.
3 | The navigation bar has large title and contains the search controller - two UI additions from the WWDC 2017.
4 | The following line sets large title for the current view controller and all controller followed after this
5 | ```swift
6 | self.navigationController?.navigationBar.prefersLargeTitles = true
7 | ```
8 | until the mode of the title is changed:
9 | ```swift
10 | self.navigationController?.navigationItem.largeTitleDisplayMode = .never
11 | ```
12 | The following code adds a search controller to the navigation bar:
13 | ```swift
14 | let search = UISearchController(searchResultsController: nil)
15 | search.searchResultsUpdater = self
16 | self.navigationItem.searchController = search
17 | ```
18 |
--------------------------------------------------------------------------------
/Countries/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIRequiredDeviceCapabilities
26 |
27 | armv7
28 |
29 | UISupportedInterfaceOrientations
30 |
31 | UIInterfaceOrientationPortrait
32 | UIInterfaceOrientationLandscapeLeft
33 | UIInterfaceOrientationLandscapeRight
34 |
35 | UISupportedInterfaceOrientations~ipad
36 |
37 | UIInterfaceOrientationPortrait
38 | UIInterfaceOrientationPortraitUpsideDown
39 | UIInterfaceOrientationLandscapeLeft
40 | UIInterfaceOrientationLandscapeRight
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/Countries/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/Countries/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "20x20",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "20x20",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "29x29",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "29x29",
61 | "scale" : "2x"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "size" : "40x40",
66 | "scale" : "1x"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "size" : "40x40",
71 | "scale" : "2x"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "size" : "76x76",
76 | "scale" : "1x"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "size" : "76x76",
81 | "scale" : "2x"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "size" : "83.5x83.5",
86 | "scale" : "2x"
87 | }
88 | ],
89 | "info" : {
90 | "version" : 1,
91 | "author" : "xcode"
92 | }
93 | }
--------------------------------------------------------------------------------
/Countries/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // Countries
4 | //
5 | // Created by Pavel Gnatyuk on 29/06/2017.
6 | // Copyright © 2017 Pavel Gnatyuk. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ViewController: UIViewController {
12 |
13 | fileprivate var filtered = [String]()
14 | fileprivate var filterring = false
15 |
16 | lazy var countries: [String] = {
17 | var names = [String]()
18 | let current = NSLocale(localeIdentifier: "en_US")
19 | for code in NSLocale.isoCountryCodes {
20 | let id = NSLocale.localeIdentifier(fromComponents: [NSLocale.Key.countryCode.rawValue: code])
21 | let name = current.displayName(forKey: NSLocale.Key.identifier, value: id)
22 | if let country = name {
23 | names.append(country)
24 | }
25 | }
26 | return names
27 | }()
28 |
29 | lazy var table: UITableView = {
30 | let tableView = UITableView()
31 | tableView.translatesAutoresizingMaskIntoConstraints = false
32 | tableView.delegate = self
33 | tableView.dataSource = self
34 | tableView.register(UITableViewCell.classForCoder(), forCellReuseIdentifier: "cell")
35 | return tableView
36 | }()
37 |
38 | var tableConstraints: [NSLayoutConstraint] {
39 | var constraints = [NSLayoutConstraint]()
40 | constraints.append(NSLayoutConstraint(item: self.table, attribute: .left, relatedBy: .equal,
41 | toItem: self.view, attribute: .left, multiplier: 1.0, constant: 1.0))
42 | constraints.append(NSLayoutConstraint(item: self.table, attribute: .right, relatedBy: .equal,
43 | toItem: self.view, attribute: .right, multiplier: 1.0, constant: 1.0))
44 | constraints.append(NSLayoutConstraint(item: self.table, attribute: .top, relatedBy: .equal,
45 | toItem: self.view, attribute: .top, multiplier: 1.0, constant: 1.0))
46 | constraints.append(NSLayoutConstraint(item: self.table, attribute: .bottom, relatedBy: .equal,
47 | toItem: self.view, attribute: .bottom, multiplier: 1.0, constant: 1.0))
48 | return constraints
49 | }
50 |
51 | override func viewDidLoad() {
52 | super.viewDidLoad()
53 |
54 | self.view.backgroundColor = UIColor.white
55 | title = "Countries"
56 |
57 | self.navigationController?.navigationBar.prefersLargeTitles = true
58 |
59 | let search = UISearchController(searchResultsController: nil)
60 | search.searchResultsUpdater = self
61 | self.navigationItem.searchController = search
62 |
63 | self.view.addSubview(table)
64 | NSLayoutConstraint.activate(tableConstraints)
65 | }
66 |
67 | override func didReceiveMemoryWarning() {
68 | super.didReceiveMemoryWarning()
69 | // Dispose of any resources that can be recreated.
70 | }
71 |
72 |
73 | }
74 |
75 |
76 | extension ViewController: UITableViewDataSource {
77 | func numberOfSections(in tableView: UITableView) -> Int {
78 | return 1
79 | }
80 |
81 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
82 | return self.filterring ? self.filtered.count : countries.count
83 | }
84 |
85 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
86 | let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
87 | cell.textLabel?.text = self.filterring ? self.filtered[indexPath.row] : self.countries[indexPath.row]
88 | return cell
89 | }
90 | }
91 |
92 | extension ViewController: UITableViewDelegate {
93 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
94 | tableView.deselectRow(at: indexPath, animated: true)
95 | }
96 | }
97 |
98 | extension ViewController: UISearchResultsUpdating {
99 | func updateSearchResults(for searchController: UISearchController) {
100 | if let text = searchController.searchBar.text, !text.isEmpty {
101 | self.filtered = self.countries.filter({ (country) -> Bool in
102 | return country.lowercased().contains(text.lowercased())
103 | })
104 | self.filterring = true
105 | }
106 | else {
107 | self.filterring = false
108 | self.filtered = [String]()
109 | }
110 | self.table.reloadData()
111 | }
112 | }
113 |
114 |
--------------------------------------------------------------------------------
/Untitled Diagram.drawio:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/Countries.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 48;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | E348FBBA1F050A920059F791 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E348FBB91F050A920059F791 /* AppDelegate.swift */; };
11 | E348FBBC1F050A920059F791 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E348FBBB1F050A920059F791 /* ViewController.swift */; };
12 | E348FBC11F050A920059F791 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E348FBC01F050A920059F791 /* Assets.xcassets */; };
13 | E348FBC41F050A920059F791 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E348FBC21F050A920059F791 /* LaunchScreen.storyboard */; };
14 | /* End PBXBuildFile section */
15 |
16 | /* Begin PBXFileReference section */
17 | E348FBB61F050A920059F791 /* Countries.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Countries.app; sourceTree = BUILT_PRODUCTS_DIR; };
18 | E348FBB91F050A920059F791 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
19 | E348FBBB1F050A920059F791 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
20 | E348FBC01F050A920059F791 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
21 | E348FBC31F050A920059F791 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
22 | E348FBC51F050A920059F791 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
23 | /* End PBXFileReference section */
24 |
25 | /* Begin PBXFrameworksBuildPhase section */
26 | E348FBB31F050A920059F791 /* Frameworks */ = {
27 | isa = PBXFrameworksBuildPhase;
28 | buildActionMask = 2147483647;
29 | files = (
30 | );
31 | runOnlyForDeploymentPostprocessing = 0;
32 | };
33 | /* End PBXFrameworksBuildPhase section */
34 |
35 | /* Begin PBXGroup section */
36 | E348FBAD1F050A920059F791 = {
37 | isa = PBXGroup;
38 | children = (
39 | E348FBB81F050A920059F791 /* Countries */,
40 | E348FBB71F050A920059F791 /* Products */,
41 | );
42 | sourceTree = "";
43 | };
44 | E348FBB71F050A920059F791 /* Products */ = {
45 | isa = PBXGroup;
46 | children = (
47 | E348FBB61F050A920059F791 /* Countries.app */,
48 | );
49 | name = Products;
50 | sourceTree = "";
51 | };
52 | E348FBB81F050A920059F791 /* Countries */ = {
53 | isa = PBXGroup;
54 | children = (
55 | E348FBB91F050A920059F791 /* AppDelegate.swift */,
56 | E348FBBB1F050A920059F791 /* ViewController.swift */,
57 | E348FBC01F050A920059F791 /* Assets.xcassets */,
58 | E348FBC21F050A920059F791 /* LaunchScreen.storyboard */,
59 | E348FBC51F050A920059F791 /* Info.plist */,
60 | );
61 | path = Countries;
62 | sourceTree = "";
63 | };
64 | /* End PBXGroup section */
65 |
66 | /* Begin PBXNativeTarget section */
67 | E348FBB51F050A920059F791 /* Countries */ = {
68 | isa = PBXNativeTarget;
69 | buildConfigurationList = E348FBC81F050A930059F791 /* Build configuration list for PBXNativeTarget "Countries" */;
70 | buildPhases = (
71 | E348FBB21F050A920059F791 /* Sources */,
72 | E348FBB31F050A920059F791 /* Frameworks */,
73 | E348FBB41F050A920059F791 /* Resources */,
74 | );
75 | buildRules = (
76 | );
77 | dependencies = (
78 | );
79 | name = Countries;
80 | productName = Countries;
81 | productReference = E348FBB61F050A920059F791 /* Countries.app */;
82 | productType = "com.apple.product-type.application";
83 | };
84 | /* End PBXNativeTarget section */
85 |
86 | /* Begin PBXProject section */
87 | E348FBAE1F050A920059F791 /* Project object */ = {
88 | isa = PBXProject;
89 | attributes = {
90 | LastSwiftUpdateCheck = 0900;
91 | LastUpgradeCheck = 0900;
92 | ORGANIZATIONNAME = "Pavel Gnatyuk";
93 | TargetAttributes = {
94 | E348FBB51F050A920059F791 = {
95 | CreatedOnToolsVersion = 9.0;
96 | };
97 | };
98 | };
99 | buildConfigurationList = E348FBB11F050A920059F791 /* Build configuration list for PBXProject "Countries" */;
100 | compatibilityVersion = "Xcode 8.0";
101 | developmentRegion = en;
102 | hasScannedForEncodings = 0;
103 | knownRegions = (
104 | en,
105 | Base,
106 | );
107 | mainGroup = E348FBAD1F050A920059F791;
108 | productRefGroup = E348FBB71F050A920059F791 /* Products */;
109 | projectDirPath = "";
110 | projectRoot = "";
111 | targets = (
112 | E348FBB51F050A920059F791 /* Countries */,
113 | );
114 | };
115 | /* End PBXProject section */
116 |
117 | /* Begin PBXResourcesBuildPhase section */
118 | E348FBB41F050A920059F791 /* Resources */ = {
119 | isa = PBXResourcesBuildPhase;
120 | buildActionMask = 2147483647;
121 | files = (
122 | E348FBC41F050A920059F791 /* LaunchScreen.storyboard in Resources */,
123 | E348FBC11F050A920059F791 /* Assets.xcassets in Resources */,
124 | );
125 | runOnlyForDeploymentPostprocessing = 0;
126 | };
127 | /* End PBXResourcesBuildPhase section */
128 |
129 | /* Begin PBXSourcesBuildPhase section */
130 | E348FBB21F050A920059F791 /* Sources */ = {
131 | isa = PBXSourcesBuildPhase;
132 | buildActionMask = 2147483647;
133 | files = (
134 | E348FBBC1F050A920059F791 /* ViewController.swift in Sources */,
135 | E348FBBA1F050A920059F791 /* AppDelegate.swift in Sources */,
136 | );
137 | runOnlyForDeploymentPostprocessing = 0;
138 | };
139 | /* End PBXSourcesBuildPhase section */
140 |
141 | /* Begin PBXVariantGroup section */
142 | E348FBC21F050A920059F791 /* LaunchScreen.storyboard */ = {
143 | isa = PBXVariantGroup;
144 | children = (
145 | E348FBC31F050A920059F791 /* Base */,
146 | );
147 | name = LaunchScreen.storyboard;
148 | sourceTree = "";
149 | };
150 | /* End PBXVariantGroup section */
151 |
152 | /* Begin XCBuildConfiguration section */
153 | E348FBC61F050A930059F791 /* Debug */ = {
154 | isa = XCBuildConfiguration;
155 | buildSettings = {
156 | ALWAYS_SEARCH_USER_PATHS = NO;
157 | CLANG_ANALYZER_NONNULL = YES;
158 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
159 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
160 | CLANG_CXX_LIBRARY = "libc++";
161 | CLANG_ENABLE_MODULES = YES;
162 | CLANG_ENABLE_OBJC_ARC = YES;
163 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
164 | CLANG_WARN_BOOL_CONVERSION = YES;
165 | CLANG_WARN_COMMA = YES;
166 | CLANG_WARN_CONSTANT_CONVERSION = YES;
167 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
168 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
169 | CLANG_WARN_EMPTY_BODY = YES;
170 | CLANG_WARN_ENUM_CONVERSION = YES;
171 | CLANG_WARN_INFINITE_RECURSION = YES;
172 | CLANG_WARN_INT_CONVERSION = YES;
173 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
174 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
175 | CLANG_WARN_STRICT_PROTOTYPES = YES;
176 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
177 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
178 | CLANG_WARN_UNREACHABLE_CODE = YES;
179 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
180 | CODE_SIGN_IDENTITY = "iPhone Developer";
181 | COPY_PHASE_STRIP = NO;
182 | DEBUG_INFORMATION_FORMAT = dwarf;
183 | ENABLE_STRICT_OBJC_MSGSEND = YES;
184 | ENABLE_TESTABILITY = YES;
185 | GCC_C_LANGUAGE_STANDARD = gnu11;
186 | GCC_DYNAMIC_NO_PIC = NO;
187 | GCC_NO_COMMON_BLOCKS = YES;
188 | GCC_OPTIMIZATION_LEVEL = 0;
189 | GCC_PREPROCESSOR_DEFINITIONS = (
190 | "DEBUG=1",
191 | "$(inherited)",
192 | );
193 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
194 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
195 | GCC_WARN_UNDECLARED_SELECTOR = YES;
196 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
197 | GCC_WARN_UNUSED_FUNCTION = YES;
198 | GCC_WARN_UNUSED_VARIABLE = YES;
199 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
200 | MTL_ENABLE_DEBUG_INFO = YES;
201 | ONLY_ACTIVE_ARCH = YES;
202 | SDKROOT = iphoneos;
203 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
204 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
205 | };
206 | name = Debug;
207 | };
208 | E348FBC71F050A930059F791 /* Release */ = {
209 | isa = XCBuildConfiguration;
210 | buildSettings = {
211 | ALWAYS_SEARCH_USER_PATHS = NO;
212 | CLANG_ANALYZER_NONNULL = YES;
213 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
214 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
215 | CLANG_CXX_LIBRARY = "libc++";
216 | CLANG_ENABLE_MODULES = YES;
217 | CLANG_ENABLE_OBJC_ARC = YES;
218 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
219 | CLANG_WARN_BOOL_CONVERSION = YES;
220 | CLANG_WARN_COMMA = YES;
221 | CLANG_WARN_CONSTANT_CONVERSION = YES;
222 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
223 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
224 | CLANG_WARN_EMPTY_BODY = YES;
225 | CLANG_WARN_ENUM_CONVERSION = YES;
226 | CLANG_WARN_INFINITE_RECURSION = YES;
227 | CLANG_WARN_INT_CONVERSION = YES;
228 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
229 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
230 | CLANG_WARN_STRICT_PROTOTYPES = YES;
231 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
232 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
233 | CLANG_WARN_UNREACHABLE_CODE = YES;
234 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
235 | CODE_SIGN_IDENTITY = "iPhone Developer";
236 | COPY_PHASE_STRIP = NO;
237 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
238 | ENABLE_NS_ASSERTIONS = NO;
239 | ENABLE_STRICT_OBJC_MSGSEND = YES;
240 | GCC_C_LANGUAGE_STANDARD = gnu11;
241 | GCC_NO_COMMON_BLOCKS = YES;
242 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
243 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
244 | GCC_WARN_UNDECLARED_SELECTOR = YES;
245 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
246 | GCC_WARN_UNUSED_FUNCTION = YES;
247 | GCC_WARN_UNUSED_VARIABLE = YES;
248 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
249 | MTL_ENABLE_DEBUG_INFO = NO;
250 | SDKROOT = iphoneos;
251 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
252 | VALIDATE_PRODUCT = YES;
253 | };
254 | name = Release;
255 | };
256 | E348FBC91F050A930059F791 /* Debug */ = {
257 | isa = XCBuildConfiguration;
258 | buildSettings = {
259 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
260 | DEVELOPMENT_TEAM = 48DVB7QH33;
261 | INFOPLIST_FILE = Countries/Info.plist;
262 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
263 | PRODUCT_BUNDLE_IDENTIFIER = com.pavelgnatyuk.countries;
264 | PRODUCT_NAME = "$(TARGET_NAME)";
265 | SWIFT_VERSION = 4.0;
266 | TARGETED_DEVICE_FAMILY = 1;
267 | };
268 | name = Debug;
269 | };
270 | E348FBCA1F050A930059F791 /* Release */ = {
271 | isa = XCBuildConfiguration;
272 | buildSettings = {
273 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
274 | DEVELOPMENT_TEAM = 48DVB7QH33;
275 | INFOPLIST_FILE = Countries/Info.plist;
276 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
277 | PRODUCT_BUNDLE_IDENTIFIER = com.pavelgnatyuk.countries;
278 | PRODUCT_NAME = "$(TARGET_NAME)";
279 | SWIFT_VERSION = 4.0;
280 | TARGETED_DEVICE_FAMILY = 1;
281 | };
282 | name = Release;
283 | };
284 | /* End XCBuildConfiguration section */
285 |
286 | /* Begin XCConfigurationList section */
287 | E348FBB11F050A920059F791 /* Build configuration list for PBXProject "Countries" */ = {
288 | isa = XCConfigurationList;
289 | buildConfigurations = (
290 | E348FBC61F050A930059F791 /* Debug */,
291 | E348FBC71F050A930059F791 /* Release */,
292 | );
293 | defaultConfigurationIsVisible = 0;
294 | defaultConfigurationName = Release;
295 | };
296 | E348FBC81F050A930059F791 /* Build configuration list for PBXNativeTarget "Countries" */ = {
297 | isa = XCConfigurationList;
298 | buildConfigurations = (
299 | E348FBC91F050A930059F791 /* Debug */,
300 | E348FBCA1F050A930059F791 /* Release */,
301 | );
302 | defaultConfigurationIsVisible = 0;
303 | };
304 | /* End XCConfigurationList section */
305 | };
306 | rootObject = E348FBAE1F050A920059F791 /* Project object */;
307 | }
308 |
--------------------------------------------------------------------------------