├── WRUserSettingsExample
├── WRUserSettingsExample
│ ├── Assets.xcassets
│ │ ├── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── MyUserSettings.swift
│ ├── AppDelegate.swift
│ ├── Info.plist
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ └── ViewController.swift
├── Podfile
├── WRUserSettingsExample.xcodeproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── project.pbxproj
└── Podfile.lock
├── Podfile
├── WRUserSettings.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── xcshareddata
│ └── xcschemes
│ │ └── WRUserSettings.xcscheme
└── project.pbxproj
├── Podfile.lock
├── WRUserSettings.podspec
├── .gitignore
├── WRUserSettingsTests
├── Info.plist
├── UserDefaults+Clear.swift
├── MyUserSettings.swift
└── WRUserSettingsSpec.swift
├── WRUserSettings
├── Info.plist
├── WRUserSettings.h
└── WRUserSettings.swift
├── LICENSE
└── README.md
/WRUserSettingsExample/WRUserSettingsExample/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/WRUserSettingsExample/Podfile:
--------------------------------------------------------------------------------
1 | platform :ios, '9.0'
2 | use_frameworks!
3 |
4 | target 'WRUserSettingsExample' do
5 | pod 'WRUserSettings', :path => './../'
6 | end
7 |
--------------------------------------------------------------------------------
/Podfile:
--------------------------------------------------------------------------------
1 | platform :ios, '9.0'
2 | use_frameworks!
3 |
4 | target 'WRUserSettingsTests' do
5 | inherit! :search_paths
6 | pod 'Nimble', '8.0.1'
7 | pod 'Quick', '2.1.0'
8 | end
9 |
--------------------------------------------------------------------------------
/WRUserSettings.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/WRUserSettingsExample/WRUserSettingsExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/WRUserSettings.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/WRUserSettingsExample/WRUserSettingsExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/WRUserSettingsExample/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - WRUserSettings (5.0.0)
3 |
4 | DEPENDENCIES:
5 | - WRUserSettings (from `./../`)
6 |
7 | EXTERNAL SOURCES:
8 | WRUserSettings:
9 | :path: "./../"
10 |
11 | SPEC CHECKSUMS:
12 | WRUserSettings: 9de034c7003c3c2e26993588885e4cdfda8dcbce
13 |
14 | PODFILE CHECKSUM: 3bf4ea594c632812b645959051f05668a614fd06
15 |
16 | COCOAPODS: 1.6.1
17 |
--------------------------------------------------------------------------------
/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - Nimble (8.0.1)
3 | - Quick (2.1.0)
4 |
5 | DEPENDENCIES:
6 | - Nimble (= 8.0.1)
7 | - Quick (= 2.1.0)
8 |
9 | SPEC REPOS:
10 | https://github.com/cocoapods/specs.git:
11 | - Nimble
12 | - Quick
13 |
14 | SPEC CHECKSUMS:
15 | Nimble: 45f786ae66faa9a709624227fae502db55a8bdd0
16 | Quick: 4be43f6634acfa727dd106bdf3929ce125ffa79d
17 |
18 | PODFILE CHECKSUM: 03c71b715f7dc1edb7425813801a0bce1d1fd5b3
19 |
20 | COCOAPODS: 1.6.1
21 |
--------------------------------------------------------------------------------
/WRUserSettings.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = 'WRUserSettings'
3 | s.version = '5.0.0'
4 | s.license = 'MIT'
5 | s.summary = 'Magical User settings class for iOS written in Swift'
6 | s.homepage = 'https://github.com/rafalwojcik/WRUserSettings'
7 | s.authors = 'Rafał Wójcik'
8 | s.source = { :git => 'https://github.com/rafalwojcik/WRUserSettings.git', :tag => s.version.to_s }
9 |
10 | s.module_name = 'WRUserSettings'
11 | s.platform = :ios, '9.0'
12 | s.ios.deployment_target = '9.0'
13 | s.requires_arc = true
14 | s.source_files = 'WRUserSettings/**/*.swift'
15 | s.swift_version = '5.0.0'
16 | end
17 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | build/
4 | *.pbxuser
5 | !default.pbxuser
6 | *.mode1v3
7 | !default.mode1v3
8 | *.mode2v3
9 | !default.mode2v3
10 | *.perspectivev3
11 | !default.perspectivev3
12 | xcuserdata
13 | *.xccheckout
14 | *.moved-aside
15 | DerivedData
16 | *.hmap
17 | *.ipa
18 | *.xcuserstate
19 |
20 | # CocoaPods
21 | #
22 | # We recommend against adding the Pods directory to your .gitignore. However
23 | # you should judge for yourself, the pros and cons are mentioned at:
24 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
25 | #
26 |
27 | Pods
28 | WRUserSettings.xcworkspace
29 | WRUserSettingsExample/Pods
30 | WRUserSettingsExample/WRUserSettingsExample.xcworkspace
31 |
--------------------------------------------------------------------------------
/WRUserSettingsTests/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 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/WRUserSettings/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 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 |
22 |
23 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Rafał Wójcik
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/WRUserSettingsTests/UserDefaults+Clear.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2019 Chilli Coder - Rafał Wójcik
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 |
22 | import Foundation
23 |
24 | extension UserDefaults {
25 | func clear() {
26 | for (key, _) in dictionaryRepresentation() {
27 | removeObject(forKey: key)
28 | }
29 | synchronize()
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/WRUserSettingsTests/MyUserSettings.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2019 Chilli Coder - Rafał Wójcik
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 |
22 | import Foundation
23 |
24 | class MyUserSettings: WRUserSettings {
25 | dynamic var shouldShowTutorial: Bool = true
26 | dynamic var temperatureUnit: String = "C"
27 | dynamic var notificationOn: Bool = false
28 | dynamic var lastSyncDate: Date? = nil
29 | }
30 |
--------------------------------------------------------------------------------
/WRUserSettingsExample/WRUserSettingsExample/MyUserSettings.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2019 Chilli Coder - Rafał Wójcik
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 |
22 | import Foundation
23 | import WRUserSettings
24 |
25 | class MyUserSettings: WRUserSettings {
26 | dynamic var shouldShowTutorial: Bool = true
27 | dynamic var temperatureUnit: String = "C"
28 | dynamic var notificationOn: Bool = false
29 | }
30 |
--------------------------------------------------------------------------------
/WRUserSettingsExample/WRUserSettingsExample/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2019 Chilli Coder - Rafał Wójcik
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 |
22 | import UIKit
23 |
24 | @UIApplicationMain
25 | class AppDelegate: UIResponder, UIApplicationDelegate {
26 | var window: UIWindow?
27 |
28 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
29 | return true
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/WRUserSettings/WRUserSettings.h:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2019 Chilli Coder - Rafał Wójcik
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 |
22 |
23 | #import
24 |
25 | //! Project version number for WRUserSettings.
26 | FOUNDATION_EXPORT double WRUserSettingsVersionNumber;
27 |
28 | //! Project version string for WRUserSettings.
29 | FOUNDATION_EXPORT const unsigned char WRUserSettingsVersionString[];
30 |
31 | // In this header, you should import all the public headers of your framework using statements like #import
32 |
33 |
34 |
--------------------------------------------------------------------------------
/WRUserSettingsExample/WRUserSettingsExample/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 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/WRUserSettingsExample/WRUserSettingsExample/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 |
--------------------------------------------------------------------------------
/WRUserSettingsExample/WRUserSettingsExample/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 | "idiom" : "ios-marketing",
90 | "size" : "1024x1024",
91 | "scale" : "1x"
92 | }
93 | ],
94 | "info" : {
95 | "version" : 1,
96 | "author" : "xcode"
97 | }
98 | }
--------------------------------------------------------------------------------
/WRUserSettingsExample/WRUserSettingsExample/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2019 Chilli Coder - Rafał Wójcik
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 |
22 | import UIKit
23 | import WRUserSettings
24 |
25 | class ViewController: UIViewController {
26 | @IBOutlet weak var tutorialSwitch: UISwitch!
27 | @IBOutlet weak var temperatureTextField: UITextField!
28 | @IBOutlet weak var notificationSwitch: UISwitch!
29 |
30 | override func viewDidLoad() {
31 | super.viewDidLoad()
32 | populateData()
33 | }
34 |
35 | func populateData() {
36 | tutorialSwitch.isOn = MyUserSettings.shared.shouldShowTutorial
37 | temperatureTextField.text = MyUserSettings.shared.temperatureUnit
38 | notificationSwitch.isOn = MyUserSettings.shared.notificationOn
39 | }
40 |
41 | @IBAction func temperatureChanged(_ sender: UITextField) {
42 | MyUserSettings.shared.temperatureUnit = sender.text ?? ""
43 | }
44 |
45 | @IBAction func switchChanged(_ sender: UISwitch) {
46 | switch sender {
47 | case tutorialSwitch: MyUserSettings.shared.shouldShowTutorial = sender.isOn
48 | case notificationSwitch: MyUserSettings.shared.notificationOn = sender.isOn
49 | default: break
50 | }
51 | }
52 |
53 | @IBAction func resetTapped(_ sender: Any) {
54 | MyUserSettings.shared.reset()
55 | populateData()
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/WRUserSettingsTests/WRUserSettingsSpec.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 | //
3 | // Copyright (c) 2019 Chilli Coder - Rafał Wójcik
4 | //
5 | // Permission is hereby granted, free of charge, to any person obtaining a copy
6 | // of this software and associated documentation files (the "Software"), to deal
7 | // in the Software without restriction, including without limitation the rights
8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | // copies of the Software, and to permit persons to whom the Software is
10 | // furnished to do so, subject to the following conditions:
11 | //
12 | // The above copyright notice and this permission notice shall be included in
13 | // all copies or substantial portions of the Software.
14 | //
15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | // THE SOFTWARE.
22 |
23 | import Quick
24 | import Nimble
25 | @testable import WRUserSettings
26 |
27 | class WRUserSettingsSpec: QuickSpec {
28 | override func spec() {
29 | describe("MyUserSettings", closure: {
30 | beforeEach {
31 | UserDefaults.standard.clear()
32 | UserDefaults(suiteName: "me.rwojcik.wrusersettings")?.clear()
33 | MyUserSettings.shared.clearInstances()
34 | MyUserSettings.shared.reset()
35 | }
36 |
37 | it("should set value in user defaults") {
38 | MyUserSettings.shared.shouldShowTutorial = false
39 | expect(MyUserSettings.shared.shouldShowTutorial).to(beFalse())
40 | MyUserSettings.shared.notificationOn = true
41 | expect(MyUserSettings.shared.notificationOn).to(beTrue())
42 | MyUserSettings.shared.temperatureUnit = "F"
43 | expect(MyUserSettings.shared.temperatureUnit).to(equal("F"))
44 | }
45 |
46 | it("should allow to clear optional value") {
47 | let date = Date()
48 | MyUserSettings.shared.lastSyncDate = date
49 | expect(MyUserSettings.shared.lastSyncDate).to(equal(date))
50 | MyUserSettings.shared.lastSyncDate = nil
51 | expect(MyUserSettings.shared.lastSyncDate).to(beNil())
52 | }
53 |
54 | it("should remain values over app restarts") {
55 | MyUserSettings.shared.shouldShowTutorial = false
56 | MyUserSettings.shared.notificationOn = true
57 | MyUserSettings.shared.temperatureUnit = "F"
58 | MyUserSettings.shared.clearInstances()
59 | expect(MyUserSettings.shared.shouldShowTutorial).to(beFalse())
60 | expect(MyUserSettings.shared.notificationOn).to(beTrue())
61 | expect(MyUserSettings.shared.temperatureUnit).to(equal("F"))
62 | }
63 |
64 | it("should allow to reset values to defaults") {
65 | MyUserSettings.shared.shouldShowTutorial = false
66 | MyUserSettings.shared.notificationOn = true
67 | MyUserSettings.shared.temperatureUnit = "F"
68 | MyUserSettings.shared.reset()
69 | expect(MyUserSettings.shared.shouldShowTutorial).to(beTrue())
70 | expect(MyUserSettings.shared.notificationOn).to(beFalse())
71 | expect(MyUserSettings.shared.temperatureUnit).to(equal("C"))
72 | }
73 | })
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/WRUserSettings.xcodeproj/xcshareddata/xcschemes/WRUserSettings.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
34 |
40 |
41 |
42 |
43 |
44 |
50 |
51 |
52 |
53 |
54 |
55 |
65 |
66 |
72 |
73 |
74 |
75 |
76 |
77 |
83 |
84 |
90 |
91 |
92 |
93 |
95 |
96 |
99 |
100 |
101 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # WRUserSettings
2 | Magical User settings class for iOS
3 |
4 | ## Usage
5 |
6 | To start using WRUserSettings just subclass ```WRUserSettings``` class and you are ready to go!!!
7 |
8 | So every property you add to your subclass will be stored in NSUserDefaults. Default property is nil or filled by default system value for primitive types like NSInteger, BOOL, CGRect etc.
9 |
10 | ### Basic usage
11 |
12 | To simple usage you only need add properties to header file of subclass:
13 |
14 | ```swift
15 | class MyUserSettings: WRUserSettings {
16 | dynamic var shouldShowTutorial: Bool = true
17 | dynamic var temperatureUnit: String = "C"
18 | dynamic var notificationOn: Bool = false
19 | }
20 | ```
21 |
22 | From now every time you set property is automatically save it in NSUserDefaults for you.
23 |
24 | ### Setting value
25 |
26 | Your class is singleton so you should use ```+shared``` method to get instance of it:
27 |
28 | ```swift
29 | MyUserSettings.shared.shouldShowTutorial = false
30 | ```
31 |
32 | Class will automatically save value ```false``` to NSUserDefaults
33 |
34 | ### Getting value
35 |
36 | To get value just get instance of class and property:
37 |
38 | ```swift
39 | let shouldItReallyShowTutorial = MyUserSettings.shared.shouldShowTutorial
40 | ```
41 |
42 | ### Default values
43 |
44 | To set default values just use default assigment as above. We are storing defaults in instance.
45 |
46 | ### Reset settings
47 |
48 | If you want reset settings call anywhere method ```reset()``` on your singleton. This method iterate through all saved settings and delete it from NSUserDefaults and assign to properties default values.
49 |
50 | ### Printing description
51 |
52 | To print description of stored values simply print your singleton. It prints only stored values so it don't show default values that you set.
53 |
54 | ### Using `suiteName`
55 |
56 | To use `suiteName` all you need to do is override method `func suiteName() -> String?` in your subclass:
57 |
58 | ```swift
59 | class MyUserSettings: WRUserSettings {
60 | dynamic var shouldShowTutorial: Bool = true
61 |
62 | override func suiteName() -> String? {
63 | return "com.chillicoder.my_app_group"
64 | }
65 | }
66 | ```
67 |
68 | ## Installation
69 |
70 | ### CocoaPods
71 |
72 | [CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command:
73 |
74 | ```bash
75 | $ gem install cocoapods
76 | ```
77 |
78 | > CocoaPods 1.1.0+ is required to build WRUserSettings 3.0.0+.
79 |
80 | To integrate WRUserSettings into your Xcode project using CocoaPods, specify it in your `Podfile`:
81 |
82 | ```ruby
83 | source 'https://github.com/CocoaPods/Specs.git'
84 | platform :ios, '8.0'
85 | use_frameworks!
86 |
87 | target '' do
88 | pod 'WRUserSettings', '~> 3.0.0'
89 | end
90 | ```
91 |
92 | Then, run the following command:
93 |
94 | ```bash
95 | $ pod install
96 | ```
97 |
98 | ## Change log
99 |
100 | #### 5.0.0
101 |
102 | \- Rewrite to support Swift 5.0.0
103 |
104 | \- Added example in swift
105 |
106 | \- Tests with 71% coverage
107 |
108 | #### 4.0.0
109 |
110 | \- Added support for suiteName
111 |
112 | \- Auto migration from standard user defaults
113 |
114 | #### 3.0.0
115 |
116 | \- Refactored Swift 4.0 version
117 |
118 | \- Added support for `suiteName`
119 |
120 | \- Auto migration when you start using `suiteName`
121 |
122 | \- BUG: fix problem with not unregistred notifications after deinit
123 |
124 | #### 3.0.0
125 |
126 | \- Refactored Swift 3.0 version
127 |
128 | #### 2.0.0
129 |
130 | \- Swift version
131 |
132 | #### 1.0.2
133 |
134 | \- Add ```-resetSettings``` method
135 |
136 | \- Add simple tests
137 |
138 | \- Example now use pod instead of imported ```WRUserSettings``` files.
139 |
140 | #### 1.0.1
141 |
142 | \- Added support for structures like: ```CGPoint```, ```CGRect```, ```CGSize``` etc.
143 |
144 | \- Modify example to show ```CGPoint``` usage.
145 |
146 | #### 1.0.0
147 |
148 | \- Basic stuff working
149 |
150 | ## TODO
151 |
152 | * [x] Make example
153 | * [x] Tests
154 | * [] 100% test coverage
155 |
156 | ## Requirements
157 |
158 | WRUserSettings requires either iOS 8.0 and above.
159 |
160 | ## License
161 |
162 | WRUserSettings is available under the MIT license. See the LICENSE file for more info.
163 |
164 | ## ARC
165 |
166 | WRUserSettings uses ARC.
167 |
168 | ## Contact
169 |
170 | [Rafał Wójcik](https://rwojcik.me)
171 |
--------------------------------------------------------------------------------
/WRUserSettings/WRUserSettings.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2019 Chilli Coder - Rafał Wójcik
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 |
22 | import Foundation
23 |
24 | public protocol SharedInstanceType: class {
25 | init(classType: AnyClass)
26 | func clearInstances()
27 | }
28 |
29 | private var userSettingsSingletons = [String: SharedInstanceType]()
30 | extension SharedInstanceType {
31 | public static var shared: Self {
32 | let className = String(describing: self)
33 | guard let singleton = userSettingsSingletons[className] as? Self else {
34 | let singleton = Self.init(classType: self)
35 | userSettingsSingletons[className] = singleton
36 | return singleton
37 | }
38 | return singleton
39 | }
40 |
41 | public func clearInstances() {
42 | userSettingsSingletons = [:]
43 | }
44 | }
45 |
46 | @objcMembers
47 | open class WRUserSettings: NSObject, SharedInstanceType {
48 | typealias Property = String
49 |
50 | private var migrationUserDefaultKey: String { return "MigrationKey-\(uniqueIdentifierKey)" }
51 | private let childClassName: String
52 | private var uniqueIdentifierKey: String { return "\(childClassName)-WRUserSettingsIdentifier" }
53 | private var userDefaults = UserDefaults.standard
54 | private var defaultValues: [String: Data] = [:]
55 |
56 | required public init(classType: AnyClass) {
57 | childClassName = String(describing: classType)
58 | super.init()
59 | if let suiteName = suiteName(), let newUserDefaults = UserDefaults(suiteName: suiteName) {
60 | migrateIfNeeded(from: userDefaults, to: newUserDefaults)
61 | userDefaults = newUserDefaults
62 | }
63 | let mirror = Mirror(reflecting: self)
64 | for attr in mirror.children {
65 | guard let property = attr.label else { continue }
66 | saveDefaultValue(property)
67 | fillProperty(property)
68 | observe(property: property)
69 | }
70 | }
71 |
72 | deinit {
73 | let mirror = Mirror(reflecting: self)
74 | for attr in mirror.children {
75 | guard let property = attr.label else { continue }
76 | self.removeObserver(self, forKeyPath: property)
77 | }
78 | }
79 |
80 | private func userDefaultsKey(forProperty property: Property) -> String {
81 | return "\(uniqueIdentifierKey).\(property)"
82 | }
83 |
84 | private func saveDefaultValue(_ property: Property) {
85 | guard let object = self.value(forKeyPath: property) else { return }
86 | let archivedObject = try? NSKeyedArchiver.data(object: object)
87 | defaultValues[property] = archivedObject
88 | }
89 |
90 | private func fillProperty(_ property: Property) {
91 | if let data = userDefaults.object(forKey: userDefaultsKey(forProperty: property)) as? Data {
92 | let value = NSKeyedUnarchiver.object(data: data)
93 | self.setValue(value, forKey: property)
94 | }
95 | }
96 |
97 | private func observe(property: Property) {
98 | self.addObserver(self, forKeyPath: property, options: [.new], context: nil)
99 | }
100 |
101 | open func suiteName() -> String? { return nil }
102 |
103 | private func migrateIfNeeded(from: UserDefaults, to: UserDefaults) {
104 | guard !from.bool(forKey: migrationUserDefaultKey) else { return }
105 | for (key, value) in from.dictionaryRepresentation() where key.hasPrefix(uniqueIdentifierKey) {
106 | to.set(value, forKey: key)
107 | from.removeObject(forKey: key)
108 | }
109 | guard to.synchronize() else { return }
110 | from.set(true, forKey: migrationUserDefaultKey)
111 | from.synchronize()
112 | }
113 | }
114 |
115 | // MARK: Public methods
116 | extension WRUserSettings {
117 | public func reset() {
118 | for (property, defaultValue) in defaultValues {
119 | let value = NSKeyedUnarchiver.object(data: defaultValue)
120 | self.setValue(value, forKey: property)
121 | }
122 | }
123 | }
124 |
125 | // MARK: Description
126 | extension WRUserSettings {
127 | override open var description: String {
128 | var settings = [String: Any]()
129 | for (key, value) in userDefaults.dictionaryRepresentation() where key.hasPrefix(uniqueIdentifierKey) {
130 | guard let data = value as? Data else { continue }
131 | let newKey = key.replacingOccurrences(of: "\(uniqueIdentifierKey).", with: "")
132 | let object = NSKeyedUnarchiver.object(data: data)
133 | settings[newKey] = object
134 | }
135 | return settings.description
136 | }
137 | }
138 |
139 | // MARK: KVO
140 | extension WRUserSettings {
141 | override open func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
142 | guard let keyPath = keyPath else { return }
143 | let usKey = userDefaultsKey(forProperty: keyPath)
144 | guard let object = self.value(forKeyPath: keyPath) else {
145 | userDefaults.removeObject(forKey: usKey)
146 | return
147 | }
148 | let archivedObject = try? NSKeyedArchiver.data(object: object)
149 | userDefaults.set(archivedObject, forKey: usKey)
150 | userDefaults.synchronize()
151 | }
152 | }
153 |
154 | private extension NSKeyedUnarchiver {
155 | class func object(data: Data) -> Any? {
156 | if #available(iOS 11.0, macOS 10.12, *) {
157 | return (try? self.unarchiveTopLevelObjectWithData(data)) ?? nil
158 | } else {
159 | return self.unarchiveObject(with: data)
160 | }
161 | }
162 | }
163 |
164 | private extension NSKeyedArchiver {
165 | class func data(object: Any) throws -> Data {
166 | if #available(iOS 11.0, macOS 10.12, *) {
167 | return try self.archivedData(withRootObject: object, requiringSecureCoding: false)
168 | } else {
169 | return self.archivedData(withRootObject: object)
170 | }
171 | }
172 | }
173 |
174 |
--------------------------------------------------------------------------------
/WRUserSettingsExample/WRUserSettingsExample/Base.lproj/Main.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 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/WRUserSettingsExample/WRUserSettingsExample.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 1BAF29A5DEA81CED3DD2E4AC /* Pods_WRUserSettingsExample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 89A112DC6B39C37EDFC573A5 /* Pods_WRUserSettingsExample.framework */; };
11 | 79D3E8E222A4106D009A5168 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79D3E8E122A4106D009A5168 /* AppDelegate.swift */; };
12 | 79D3E8E422A4106D009A5168 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79D3E8E322A4106D009A5168 /* ViewController.swift */; };
13 | 79D3E8E722A4106D009A5168 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 79D3E8E522A4106D009A5168 /* Main.storyboard */; };
14 | 79D3E8E922A41071009A5168 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 79D3E8E822A41071009A5168 /* Assets.xcassets */; };
15 | 79D3E8EC22A41071009A5168 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 79D3E8EA22A41071009A5168 /* LaunchScreen.storyboard */; };
16 | 79D3E90222A4465A009A5168 /* MyUserSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79D3E90122A4465A009A5168 /* MyUserSettings.swift */; };
17 | /* End PBXBuildFile section */
18 |
19 | /* Begin PBXFileReference section */
20 | 25E554EB48335D3F3349F094 /* Pods-WRUserSettingsExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WRUserSettingsExample.debug.xcconfig"; path = "Target Support Files/Pods-WRUserSettingsExample/Pods-WRUserSettingsExample.debug.xcconfig"; sourceTree = ""; };
21 | 79D3E8DE22A4106D009A5168 /* WRUserSettingsExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WRUserSettingsExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
22 | 79D3E8E122A4106D009A5168 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
23 | 79D3E8E322A4106D009A5168 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
24 | 79D3E8E622A4106D009A5168 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
25 | 79D3E8E822A41071009A5168 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
26 | 79D3E8EB22A41071009A5168 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
27 | 79D3E8ED22A41071009A5168 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
28 | 79D3E90122A4465A009A5168 /* MyUserSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyUserSettings.swift; sourceTree = ""; };
29 | 89A112DC6B39C37EDFC573A5 /* Pods_WRUserSettingsExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_WRUserSettingsExample.framework; sourceTree = BUILT_PRODUCTS_DIR; };
30 | 90F8B2D56AF338A1E3CF37BC /* Pods-WRUserSettingsExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WRUserSettingsExample.release.xcconfig"; path = "Target Support Files/Pods-WRUserSettingsExample/Pods-WRUserSettingsExample.release.xcconfig"; sourceTree = ""; };
31 | /* End PBXFileReference section */
32 |
33 | /* Begin PBXFrameworksBuildPhase section */
34 | 79D3E8DB22A4106D009A5168 /* Frameworks */ = {
35 | isa = PBXFrameworksBuildPhase;
36 | buildActionMask = 2147483647;
37 | files = (
38 | 1BAF29A5DEA81CED3DD2E4AC /* Pods_WRUserSettingsExample.framework in Frameworks */,
39 | );
40 | runOnlyForDeploymentPostprocessing = 0;
41 | };
42 | /* End PBXFrameworksBuildPhase section */
43 |
44 | /* Begin PBXGroup section */
45 | 79D3E8D522A4106D009A5168 = {
46 | isa = PBXGroup;
47 | children = (
48 | 79D3E8E022A4106D009A5168 /* WRUserSettingsExample */,
49 | 79D3E8DF22A4106D009A5168 /* Products */,
50 | 95C72831338E786F437C0EAA /* Pods */,
51 | BCFB3CBE52A88503AC0A46C7 /* Frameworks */,
52 | );
53 | sourceTree = "";
54 | };
55 | 79D3E8DF22A4106D009A5168 /* Products */ = {
56 | isa = PBXGroup;
57 | children = (
58 | 79D3E8DE22A4106D009A5168 /* WRUserSettingsExample.app */,
59 | );
60 | name = Products;
61 | sourceTree = "";
62 | };
63 | 79D3E8E022A4106D009A5168 /* WRUserSettingsExample */ = {
64 | isa = PBXGroup;
65 | children = (
66 | 79D3E90122A4465A009A5168 /* MyUserSettings.swift */,
67 | 79D3E8E122A4106D009A5168 /* AppDelegate.swift */,
68 | 79D3E8E322A4106D009A5168 /* ViewController.swift */,
69 | 79D3E8E522A4106D009A5168 /* Main.storyboard */,
70 | 79D3E8E822A41071009A5168 /* Assets.xcassets */,
71 | 79D3E8EA22A41071009A5168 /* LaunchScreen.storyboard */,
72 | 79D3E8ED22A41071009A5168 /* Info.plist */,
73 | );
74 | path = WRUserSettingsExample;
75 | sourceTree = "";
76 | };
77 | 95C72831338E786F437C0EAA /* Pods */ = {
78 | isa = PBXGroup;
79 | children = (
80 | 25E554EB48335D3F3349F094 /* Pods-WRUserSettingsExample.debug.xcconfig */,
81 | 90F8B2D56AF338A1E3CF37BC /* Pods-WRUserSettingsExample.release.xcconfig */,
82 | );
83 | path = Pods;
84 | sourceTree = "";
85 | };
86 | BCFB3CBE52A88503AC0A46C7 /* Frameworks */ = {
87 | isa = PBXGroup;
88 | children = (
89 | 89A112DC6B39C37EDFC573A5 /* Pods_WRUserSettingsExample.framework */,
90 | );
91 | name = Frameworks;
92 | sourceTree = "";
93 | };
94 | /* End PBXGroup section */
95 |
96 | /* Begin PBXNativeTarget section */
97 | 79D3E8DD22A4106D009A5168 /* WRUserSettingsExample */ = {
98 | isa = PBXNativeTarget;
99 | buildConfigurationList = 79D3E8FB22A41071009A5168 /* Build configuration list for PBXNativeTarget "WRUserSettingsExample" */;
100 | buildPhases = (
101 | 884EAAC56F84AF9393D65059 /* [CP] Check Pods Manifest.lock */,
102 | 79D3E8DA22A4106D009A5168 /* Sources */,
103 | 79D3E8DB22A4106D009A5168 /* Frameworks */,
104 | 79D3E8DC22A4106D009A5168 /* Resources */,
105 | BF1A798A6F7EBAEF6B7542F6 /* [CP] Embed Pods Frameworks */,
106 | );
107 | buildRules = (
108 | );
109 | dependencies = (
110 | );
111 | name = WRUserSettingsExample;
112 | productName = WRUserSettingsExample;
113 | productReference = 79D3E8DE22A4106D009A5168 /* WRUserSettingsExample.app */;
114 | productType = "com.apple.product-type.application";
115 | };
116 | /* End PBXNativeTarget section */
117 |
118 | /* Begin PBXProject section */
119 | 79D3E8D622A4106D009A5168 /* Project object */ = {
120 | isa = PBXProject;
121 | attributes = {
122 | LastSwiftUpdateCheck = 1020;
123 | LastUpgradeCheck = 1020;
124 | ORGANIZATIONNAME = "Rafał Wójcik";
125 | TargetAttributes = {
126 | 79D3E8DD22A4106D009A5168 = {
127 | CreatedOnToolsVersion = 10.2.1;
128 | };
129 | };
130 | };
131 | buildConfigurationList = 79D3E8D922A4106D009A5168 /* Build configuration list for PBXProject "WRUserSettingsExample" */;
132 | compatibilityVersion = "Xcode 9.3";
133 | developmentRegion = en;
134 | hasScannedForEncodings = 0;
135 | knownRegions = (
136 | en,
137 | Base,
138 | );
139 | mainGroup = 79D3E8D522A4106D009A5168;
140 | productRefGroup = 79D3E8DF22A4106D009A5168 /* Products */;
141 | projectDirPath = "";
142 | projectRoot = "";
143 | targets = (
144 | 79D3E8DD22A4106D009A5168 /* WRUserSettingsExample */,
145 | );
146 | };
147 | /* End PBXProject section */
148 |
149 | /* Begin PBXResourcesBuildPhase section */
150 | 79D3E8DC22A4106D009A5168 /* Resources */ = {
151 | isa = PBXResourcesBuildPhase;
152 | buildActionMask = 2147483647;
153 | files = (
154 | 79D3E8EC22A41071009A5168 /* LaunchScreen.storyboard in Resources */,
155 | 79D3E8E922A41071009A5168 /* Assets.xcassets in Resources */,
156 | 79D3E8E722A4106D009A5168 /* Main.storyboard in Resources */,
157 | );
158 | runOnlyForDeploymentPostprocessing = 0;
159 | };
160 | /* End PBXResourcesBuildPhase section */
161 |
162 | /* Begin PBXShellScriptBuildPhase section */
163 | 884EAAC56F84AF9393D65059 /* [CP] Check Pods Manifest.lock */ = {
164 | isa = PBXShellScriptBuildPhase;
165 | buildActionMask = 2147483647;
166 | files = (
167 | );
168 | inputFileListPaths = (
169 | );
170 | inputPaths = (
171 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
172 | "${PODS_ROOT}/Manifest.lock",
173 | );
174 | name = "[CP] Check Pods Manifest.lock";
175 | outputFileListPaths = (
176 | );
177 | outputPaths = (
178 | "$(DERIVED_FILE_DIR)/Pods-WRUserSettingsExample-checkManifestLockResult.txt",
179 | );
180 | runOnlyForDeploymentPostprocessing = 0;
181 | shellPath = /bin/sh;
182 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
183 | showEnvVarsInLog = 0;
184 | };
185 | BF1A798A6F7EBAEF6B7542F6 /* [CP] Embed Pods Frameworks */ = {
186 | isa = PBXShellScriptBuildPhase;
187 | buildActionMask = 2147483647;
188 | files = (
189 | );
190 | inputFileListPaths = (
191 | );
192 | inputPaths = (
193 | "${PODS_ROOT}/Target Support Files/Pods-WRUserSettingsExample/Pods-WRUserSettingsExample-frameworks.sh",
194 | "${BUILT_PRODUCTS_DIR}/WRUserSettings/WRUserSettings.framework",
195 | );
196 | name = "[CP] Embed Pods Frameworks";
197 | outputFileListPaths = (
198 | );
199 | outputPaths = (
200 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WRUserSettings.framework",
201 | );
202 | runOnlyForDeploymentPostprocessing = 0;
203 | shellPath = /bin/sh;
204 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-WRUserSettingsExample/Pods-WRUserSettingsExample-frameworks.sh\"\n";
205 | showEnvVarsInLog = 0;
206 | };
207 | /* End PBXShellScriptBuildPhase section */
208 |
209 | /* Begin PBXSourcesBuildPhase section */
210 | 79D3E8DA22A4106D009A5168 /* Sources */ = {
211 | isa = PBXSourcesBuildPhase;
212 | buildActionMask = 2147483647;
213 | files = (
214 | 79D3E8E422A4106D009A5168 /* ViewController.swift in Sources */,
215 | 79D3E8E222A4106D009A5168 /* AppDelegate.swift in Sources */,
216 | 79D3E90222A4465A009A5168 /* MyUserSettings.swift in Sources */,
217 | );
218 | runOnlyForDeploymentPostprocessing = 0;
219 | };
220 | /* End PBXSourcesBuildPhase section */
221 |
222 | /* Begin PBXVariantGroup section */
223 | 79D3E8E522A4106D009A5168 /* Main.storyboard */ = {
224 | isa = PBXVariantGroup;
225 | children = (
226 | 79D3E8E622A4106D009A5168 /* Base */,
227 | );
228 | name = Main.storyboard;
229 | sourceTree = "";
230 | };
231 | 79D3E8EA22A41071009A5168 /* LaunchScreen.storyboard */ = {
232 | isa = PBXVariantGroup;
233 | children = (
234 | 79D3E8EB22A41071009A5168 /* Base */,
235 | );
236 | name = LaunchScreen.storyboard;
237 | sourceTree = "";
238 | };
239 | /* End PBXVariantGroup section */
240 |
241 | /* Begin XCBuildConfiguration section */
242 | 79D3E8F922A41071009A5168 /* Debug */ = {
243 | isa = XCBuildConfiguration;
244 | buildSettings = {
245 | ALWAYS_SEARCH_USER_PATHS = NO;
246 | CLANG_ANALYZER_NONNULL = YES;
247 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
248 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
249 | CLANG_CXX_LIBRARY = "libc++";
250 | CLANG_ENABLE_MODULES = YES;
251 | CLANG_ENABLE_OBJC_ARC = YES;
252 | CLANG_ENABLE_OBJC_WEAK = YES;
253 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
254 | CLANG_WARN_BOOL_CONVERSION = YES;
255 | CLANG_WARN_COMMA = YES;
256 | CLANG_WARN_CONSTANT_CONVERSION = YES;
257 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
258 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
259 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
260 | CLANG_WARN_EMPTY_BODY = YES;
261 | CLANG_WARN_ENUM_CONVERSION = YES;
262 | CLANG_WARN_INFINITE_RECURSION = YES;
263 | CLANG_WARN_INT_CONVERSION = YES;
264 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
265 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
266 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
267 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
268 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
269 | CLANG_WARN_STRICT_PROTOTYPES = YES;
270 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
271 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
272 | CLANG_WARN_UNREACHABLE_CODE = YES;
273 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
274 | CODE_SIGN_IDENTITY = "iPhone Developer";
275 | COPY_PHASE_STRIP = NO;
276 | DEBUG_INFORMATION_FORMAT = dwarf;
277 | ENABLE_STRICT_OBJC_MSGSEND = YES;
278 | ENABLE_TESTABILITY = YES;
279 | GCC_C_LANGUAGE_STANDARD = gnu11;
280 | GCC_DYNAMIC_NO_PIC = NO;
281 | GCC_NO_COMMON_BLOCKS = YES;
282 | GCC_OPTIMIZATION_LEVEL = 0;
283 | GCC_PREPROCESSOR_DEFINITIONS = (
284 | "DEBUG=1",
285 | "$(inherited)",
286 | );
287 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
288 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
289 | GCC_WARN_UNDECLARED_SELECTOR = YES;
290 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
291 | GCC_WARN_UNUSED_FUNCTION = YES;
292 | GCC_WARN_UNUSED_VARIABLE = YES;
293 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
294 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
295 | MTL_FAST_MATH = YES;
296 | ONLY_ACTIVE_ARCH = YES;
297 | SDKROOT = iphoneos;
298 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
299 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
300 | };
301 | name = Debug;
302 | };
303 | 79D3E8FA22A41071009A5168 /* Release */ = {
304 | isa = XCBuildConfiguration;
305 | buildSettings = {
306 | ALWAYS_SEARCH_USER_PATHS = NO;
307 | CLANG_ANALYZER_NONNULL = YES;
308 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
309 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
310 | CLANG_CXX_LIBRARY = "libc++";
311 | CLANG_ENABLE_MODULES = YES;
312 | CLANG_ENABLE_OBJC_ARC = YES;
313 | CLANG_ENABLE_OBJC_WEAK = YES;
314 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
315 | CLANG_WARN_BOOL_CONVERSION = YES;
316 | CLANG_WARN_COMMA = YES;
317 | CLANG_WARN_CONSTANT_CONVERSION = YES;
318 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
319 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
320 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
321 | CLANG_WARN_EMPTY_BODY = YES;
322 | CLANG_WARN_ENUM_CONVERSION = YES;
323 | CLANG_WARN_INFINITE_RECURSION = YES;
324 | CLANG_WARN_INT_CONVERSION = YES;
325 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
326 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
327 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
328 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
329 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
330 | CLANG_WARN_STRICT_PROTOTYPES = YES;
331 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
332 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
333 | CLANG_WARN_UNREACHABLE_CODE = YES;
334 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
335 | CODE_SIGN_IDENTITY = "iPhone Developer";
336 | COPY_PHASE_STRIP = NO;
337 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
338 | ENABLE_NS_ASSERTIONS = NO;
339 | ENABLE_STRICT_OBJC_MSGSEND = YES;
340 | GCC_C_LANGUAGE_STANDARD = gnu11;
341 | GCC_NO_COMMON_BLOCKS = YES;
342 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
343 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
344 | GCC_WARN_UNDECLARED_SELECTOR = YES;
345 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
346 | GCC_WARN_UNUSED_FUNCTION = YES;
347 | GCC_WARN_UNUSED_VARIABLE = YES;
348 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
349 | MTL_ENABLE_DEBUG_INFO = NO;
350 | MTL_FAST_MATH = YES;
351 | SDKROOT = iphoneos;
352 | SWIFT_COMPILATION_MODE = wholemodule;
353 | SWIFT_OPTIMIZATION_LEVEL = "-O";
354 | VALIDATE_PRODUCT = YES;
355 | };
356 | name = Release;
357 | };
358 | 79D3E8FC22A41071009A5168 /* Debug */ = {
359 | isa = XCBuildConfiguration;
360 | baseConfigurationReference = 25E554EB48335D3F3349F094 /* Pods-WRUserSettingsExample.debug.xcconfig */;
361 | buildSettings = {
362 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
363 | CODE_SIGN_STYLE = Manual;
364 | DEVELOPMENT_TEAM = "";
365 | INFOPLIST_FILE = WRUserSettingsExample/Info.plist;
366 | LD_RUNPATH_SEARCH_PATHS = (
367 | "$(inherited)",
368 | "@executable_path/Frameworks",
369 | );
370 | PRODUCT_BUNDLE_IDENTIFIER = me.rwojcik.WRUserSettingsExample;
371 | PRODUCT_NAME = "$(TARGET_NAME)";
372 | PROVISIONING_PROFILE_SPECIFIER = "";
373 | SWIFT_VERSION = 5.0;
374 | TARGETED_DEVICE_FAMILY = "1,2";
375 | };
376 | name = Debug;
377 | };
378 | 79D3E8FD22A41071009A5168 /* Release */ = {
379 | isa = XCBuildConfiguration;
380 | baseConfigurationReference = 90F8B2D56AF338A1E3CF37BC /* Pods-WRUserSettingsExample.release.xcconfig */;
381 | buildSettings = {
382 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
383 | CODE_SIGN_STYLE = Manual;
384 | DEVELOPMENT_TEAM = "";
385 | INFOPLIST_FILE = WRUserSettingsExample/Info.plist;
386 | LD_RUNPATH_SEARCH_PATHS = (
387 | "$(inherited)",
388 | "@executable_path/Frameworks",
389 | );
390 | PRODUCT_BUNDLE_IDENTIFIER = me.rwojcik.WRUserSettingsExample;
391 | PRODUCT_NAME = "$(TARGET_NAME)";
392 | PROVISIONING_PROFILE_SPECIFIER = "";
393 | SWIFT_VERSION = 5.0;
394 | TARGETED_DEVICE_FAMILY = "1,2";
395 | };
396 | name = Release;
397 | };
398 | /* End XCBuildConfiguration section */
399 |
400 | /* Begin XCConfigurationList section */
401 | 79D3E8D922A4106D009A5168 /* Build configuration list for PBXProject "WRUserSettingsExample" */ = {
402 | isa = XCConfigurationList;
403 | buildConfigurations = (
404 | 79D3E8F922A41071009A5168 /* Debug */,
405 | 79D3E8FA22A41071009A5168 /* Release */,
406 | );
407 | defaultConfigurationIsVisible = 0;
408 | defaultConfigurationName = Release;
409 | };
410 | 79D3E8FB22A41071009A5168 /* Build configuration list for PBXNativeTarget "WRUserSettingsExample" */ = {
411 | isa = XCConfigurationList;
412 | buildConfigurations = (
413 | 79D3E8FC22A41071009A5168 /* Debug */,
414 | 79D3E8FD22A41071009A5168 /* Release */,
415 | );
416 | defaultConfigurationIsVisible = 0;
417 | defaultConfigurationName = Release;
418 | };
419 | /* End XCConfigurationList section */
420 | };
421 | rootObject = 79D3E8D622A4106D009A5168 /* Project object */;
422 | }
423 |
--------------------------------------------------------------------------------
/WRUserSettings.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 721A4F857C706E3393E53384 /* Pods_WRUserSettingsTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B218068C5CA0025F5F766DF /* Pods_WRUserSettingsTests.framework */; };
11 | 79A340E822A3EF3800124FD2 /* WRUserSettings.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79A340DE22A3EF3800124FD2 /* WRUserSettings.framework */; };
12 | 79A340ED22A3EF3800124FD2 /* WRUserSettingsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A340EC22A3EF3800124FD2 /* WRUserSettingsSpec.swift */; };
13 | 79A340EF22A3EF3800124FD2 /* WRUserSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 79A340E122A3EF3800124FD2 /* WRUserSettings.h */; settings = {ATTRIBUTES = (Public, ); }; };
14 | 79A340F922A3EF5500124FD2 /* WRUserSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A340F822A3EF5500124FD2 /* WRUserSettings.swift */; };
15 | 79A340FB22A3EF7100124FD2 /* MyUserSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A340FA22A3EF7100124FD2 /* MyUserSettings.swift */; };
16 | 79A340FC22A3EF9600124FD2 /* WRUserSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A340F822A3EF5500124FD2 /* WRUserSettings.swift */; };
17 | 79CACB5F22A467C60032E619 /* UserDefaults+Clear.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79CACB5E22A467C60032E619 /* UserDefaults+Clear.swift */; };
18 | /* End PBXBuildFile section */
19 |
20 | /* Begin PBXContainerItemProxy section */
21 | 79A340E922A3EF3800124FD2 /* PBXContainerItemProxy */ = {
22 | isa = PBXContainerItemProxy;
23 | containerPortal = 79A340D522A3EF3800124FD2 /* Project object */;
24 | proxyType = 1;
25 | remoteGlobalIDString = 79A340DD22A3EF3800124FD2;
26 | remoteInfo = WRUserSettings;
27 | };
28 | /* End PBXContainerItemProxy section */
29 |
30 | /* Begin PBXFileReference section */
31 | 5B218068C5CA0025F5F766DF /* Pods_WRUserSettingsTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_WRUserSettingsTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
32 | 79A340DE22A3EF3800124FD2 /* WRUserSettings.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WRUserSettings.framework; sourceTree = BUILT_PRODUCTS_DIR; };
33 | 79A340E122A3EF3800124FD2 /* WRUserSettings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WRUserSettings.h; sourceTree = ""; };
34 | 79A340E222A3EF3800124FD2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
35 | 79A340E722A3EF3800124FD2 /* WRUserSettingsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WRUserSettingsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
36 | 79A340EC22A3EF3800124FD2 /* WRUserSettingsSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WRUserSettingsSpec.swift; sourceTree = ""; };
37 | 79A340EE22A3EF3800124FD2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
38 | 79A340F822A3EF5500124FD2 /* WRUserSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WRUserSettings.swift; sourceTree = ""; };
39 | 79A340FA22A3EF7100124FD2 /* MyUserSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyUserSettings.swift; sourceTree = ""; };
40 | 79CACB5E22A467C60032E619 /* UserDefaults+Clear.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserDefaults+Clear.swift"; sourceTree = ""; };
41 | A0773EFA01DDF055F8EAB70D /* Pods-WRUserSettingsTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WRUserSettingsTests.release.xcconfig"; path = "Target Support Files/Pods-WRUserSettingsTests/Pods-WRUserSettingsTests.release.xcconfig"; sourceTree = ""; };
42 | E261517AE41BCA8A479EB688 /* Pods-WRUserSettingsTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WRUserSettingsTests.debug.xcconfig"; path = "Target Support Files/Pods-WRUserSettingsTests/Pods-WRUserSettingsTests.debug.xcconfig"; sourceTree = ""; };
43 | /* End PBXFileReference section */
44 |
45 | /* Begin PBXFrameworksBuildPhase section */
46 | 79A340DB22A3EF3800124FD2 /* Frameworks */ = {
47 | isa = PBXFrameworksBuildPhase;
48 | buildActionMask = 2147483647;
49 | files = (
50 | );
51 | runOnlyForDeploymentPostprocessing = 0;
52 | };
53 | 79A340E422A3EF3800124FD2 /* Frameworks */ = {
54 | isa = PBXFrameworksBuildPhase;
55 | buildActionMask = 2147483647;
56 | files = (
57 | 79A340E822A3EF3800124FD2 /* WRUserSettings.framework in Frameworks */,
58 | 721A4F857C706E3393E53384 /* Pods_WRUserSettingsTests.framework in Frameworks */,
59 | );
60 | runOnlyForDeploymentPostprocessing = 0;
61 | };
62 | /* End PBXFrameworksBuildPhase section */
63 |
64 | /* Begin PBXGroup section */
65 | 2AE70571E3D2DD43DD3254E4 /* Frameworks */ = {
66 | isa = PBXGroup;
67 | children = (
68 | 5B218068C5CA0025F5F766DF /* Pods_WRUserSettingsTests.framework */,
69 | );
70 | name = Frameworks;
71 | sourceTree = "";
72 | };
73 | 2CEC806479DBA897005D0C12 /* Pods */ = {
74 | isa = PBXGroup;
75 | children = (
76 | E261517AE41BCA8A479EB688 /* Pods-WRUserSettingsTests.debug.xcconfig */,
77 | A0773EFA01DDF055F8EAB70D /* Pods-WRUserSettingsTests.release.xcconfig */,
78 | );
79 | path = Pods;
80 | sourceTree = "";
81 | };
82 | 79A340D422A3EF3800124FD2 = {
83 | isa = PBXGroup;
84 | children = (
85 | 79A340E022A3EF3800124FD2 /* WRUserSettings */,
86 | 79A340EB22A3EF3800124FD2 /* WRUserSettingsTests */,
87 | 79A340DF22A3EF3800124FD2 /* Products */,
88 | 2CEC806479DBA897005D0C12 /* Pods */,
89 | 2AE70571E3D2DD43DD3254E4 /* Frameworks */,
90 | );
91 | sourceTree = "";
92 | };
93 | 79A340DF22A3EF3800124FD2 /* Products */ = {
94 | isa = PBXGroup;
95 | children = (
96 | 79A340DE22A3EF3800124FD2 /* WRUserSettings.framework */,
97 | 79A340E722A3EF3800124FD2 /* WRUserSettingsTests.xctest */,
98 | );
99 | name = Products;
100 | sourceTree = "";
101 | };
102 | 79A340E022A3EF3800124FD2 /* WRUserSettings */ = {
103 | isa = PBXGroup;
104 | children = (
105 | 79A340E122A3EF3800124FD2 /* WRUserSettings.h */,
106 | 79A340F822A3EF5500124FD2 /* WRUserSettings.swift */,
107 | 79A340E222A3EF3800124FD2 /* Info.plist */,
108 | );
109 | path = WRUserSettings;
110 | sourceTree = "";
111 | };
112 | 79A340EB22A3EF3800124FD2 /* WRUserSettingsTests */ = {
113 | isa = PBXGroup;
114 | children = (
115 | 79A340FA22A3EF7100124FD2 /* MyUserSettings.swift */,
116 | 79A340EC22A3EF3800124FD2 /* WRUserSettingsSpec.swift */,
117 | 79A340EE22A3EF3800124FD2 /* Info.plist */,
118 | 79CACB5E22A467C60032E619 /* UserDefaults+Clear.swift */,
119 | );
120 | path = WRUserSettingsTests;
121 | sourceTree = "";
122 | };
123 | /* End PBXGroup section */
124 |
125 | /* Begin PBXHeadersBuildPhase section */
126 | 79A340D922A3EF3800124FD2 /* Headers */ = {
127 | isa = PBXHeadersBuildPhase;
128 | buildActionMask = 2147483647;
129 | files = (
130 | 79A340EF22A3EF3800124FD2 /* WRUserSettings.h in Headers */,
131 | );
132 | runOnlyForDeploymentPostprocessing = 0;
133 | };
134 | /* End PBXHeadersBuildPhase section */
135 |
136 | /* Begin PBXNativeTarget section */
137 | 79A340DD22A3EF3800124FD2 /* WRUserSettings */ = {
138 | isa = PBXNativeTarget;
139 | buildConfigurationList = 79A340F222A3EF3800124FD2 /* Build configuration list for PBXNativeTarget "WRUserSettings" */;
140 | buildPhases = (
141 | 79A340D922A3EF3800124FD2 /* Headers */,
142 | 79A340DA22A3EF3800124FD2 /* Sources */,
143 | 79A340DB22A3EF3800124FD2 /* Frameworks */,
144 | 79A340DC22A3EF3800124FD2 /* Resources */,
145 | );
146 | buildRules = (
147 | );
148 | dependencies = (
149 | );
150 | name = WRUserSettings;
151 | productName = WRUserSettings;
152 | productReference = 79A340DE22A3EF3800124FD2 /* WRUserSettings.framework */;
153 | productType = "com.apple.product-type.framework";
154 | };
155 | 79A340E622A3EF3800124FD2 /* WRUserSettingsTests */ = {
156 | isa = PBXNativeTarget;
157 | buildConfigurationList = 79A340F522A3EF3800124FD2 /* Build configuration list for PBXNativeTarget "WRUserSettingsTests" */;
158 | buildPhases = (
159 | 39283981C18E5C8831371D67 /* [CP] Check Pods Manifest.lock */,
160 | 79A340E322A3EF3800124FD2 /* Sources */,
161 | 79A340E422A3EF3800124FD2 /* Frameworks */,
162 | 79A340E522A3EF3800124FD2 /* Resources */,
163 | 0A0E8A2999FE0D31E71A07DA /* [CP] Embed Pods Frameworks */,
164 | );
165 | buildRules = (
166 | );
167 | dependencies = (
168 | 79A340EA22A3EF3800124FD2 /* PBXTargetDependency */,
169 | );
170 | name = WRUserSettingsTests;
171 | productName = WRUserSettingsTests;
172 | productReference = 79A340E722A3EF3800124FD2 /* WRUserSettingsTests.xctest */;
173 | productType = "com.apple.product-type.bundle.unit-test";
174 | };
175 | /* End PBXNativeTarget section */
176 |
177 | /* Begin PBXProject section */
178 | 79A340D522A3EF3800124FD2 /* Project object */ = {
179 | isa = PBXProject;
180 | attributes = {
181 | LastSwiftUpdateCheck = 1020;
182 | LastUpgradeCheck = 1020;
183 | ORGANIZATIONNAME = "Rafał Wójcik";
184 | TargetAttributes = {
185 | 79A340DD22A3EF3800124FD2 = {
186 | CreatedOnToolsVersion = 10.2.1;
187 | LastSwiftMigration = 1020;
188 | };
189 | 79A340E622A3EF3800124FD2 = {
190 | CreatedOnToolsVersion = 10.2.1;
191 | };
192 | };
193 | };
194 | buildConfigurationList = 79A340D822A3EF3800124FD2 /* Build configuration list for PBXProject "WRUserSettings" */;
195 | compatibilityVersion = "Xcode 9.3";
196 | developmentRegion = en;
197 | hasScannedForEncodings = 0;
198 | knownRegions = (
199 | en,
200 | );
201 | mainGroup = 79A340D422A3EF3800124FD2;
202 | productRefGroup = 79A340DF22A3EF3800124FD2 /* Products */;
203 | projectDirPath = "";
204 | projectRoot = "";
205 | targets = (
206 | 79A340DD22A3EF3800124FD2 /* WRUserSettings */,
207 | 79A340E622A3EF3800124FD2 /* WRUserSettingsTests */,
208 | );
209 | };
210 | /* End PBXProject section */
211 |
212 | /* Begin PBXResourcesBuildPhase section */
213 | 79A340DC22A3EF3800124FD2 /* Resources */ = {
214 | isa = PBXResourcesBuildPhase;
215 | buildActionMask = 2147483647;
216 | files = (
217 | );
218 | runOnlyForDeploymentPostprocessing = 0;
219 | };
220 | 79A340E522A3EF3800124FD2 /* Resources */ = {
221 | isa = PBXResourcesBuildPhase;
222 | buildActionMask = 2147483647;
223 | files = (
224 | );
225 | runOnlyForDeploymentPostprocessing = 0;
226 | };
227 | /* End PBXResourcesBuildPhase section */
228 |
229 | /* Begin PBXShellScriptBuildPhase section */
230 | 0A0E8A2999FE0D31E71A07DA /* [CP] Embed Pods Frameworks */ = {
231 | isa = PBXShellScriptBuildPhase;
232 | buildActionMask = 2147483647;
233 | files = (
234 | );
235 | inputFileListPaths = (
236 | );
237 | inputPaths = (
238 | "${PODS_ROOT}/Target Support Files/Pods-WRUserSettingsTests/Pods-WRUserSettingsTests-frameworks.sh",
239 | "${BUILT_PRODUCTS_DIR}/Nimble/Nimble.framework",
240 | "${BUILT_PRODUCTS_DIR}/Quick/Quick.framework",
241 | );
242 | name = "[CP] Embed Pods Frameworks";
243 | outputFileListPaths = (
244 | );
245 | outputPaths = (
246 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Nimble.framework",
247 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Quick.framework",
248 | );
249 | runOnlyForDeploymentPostprocessing = 0;
250 | shellPath = /bin/sh;
251 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-WRUserSettingsTests/Pods-WRUserSettingsTests-frameworks.sh\"\n";
252 | showEnvVarsInLog = 0;
253 | };
254 | 39283981C18E5C8831371D67 /* [CP] Check Pods Manifest.lock */ = {
255 | isa = PBXShellScriptBuildPhase;
256 | buildActionMask = 2147483647;
257 | files = (
258 | );
259 | inputFileListPaths = (
260 | );
261 | inputPaths = (
262 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
263 | "${PODS_ROOT}/Manifest.lock",
264 | );
265 | name = "[CP] Check Pods Manifest.lock";
266 | outputFileListPaths = (
267 | );
268 | outputPaths = (
269 | "$(DERIVED_FILE_DIR)/Pods-WRUserSettingsTests-checkManifestLockResult.txt",
270 | );
271 | runOnlyForDeploymentPostprocessing = 0;
272 | shellPath = /bin/sh;
273 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
274 | showEnvVarsInLog = 0;
275 | };
276 | /* End PBXShellScriptBuildPhase section */
277 |
278 | /* Begin PBXSourcesBuildPhase section */
279 | 79A340DA22A3EF3800124FD2 /* Sources */ = {
280 | isa = PBXSourcesBuildPhase;
281 | buildActionMask = 2147483647;
282 | files = (
283 | 79A340F922A3EF5500124FD2 /* WRUserSettings.swift in Sources */,
284 | );
285 | runOnlyForDeploymentPostprocessing = 0;
286 | };
287 | 79A340E322A3EF3800124FD2 /* Sources */ = {
288 | isa = PBXSourcesBuildPhase;
289 | buildActionMask = 2147483647;
290 | files = (
291 | 79A340FC22A3EF9600124FD2 /* WRUserSettings.swift in Sources */,
292 | 79CACB5F22A467C60032E619 /* UserDefaults+Clear.swift in Sources */,
293 | 79A340ED22A3EF3800124FD2 /* WRUserSettingsSpec.swift in Sources */,
294 | 79A340FB22A3EF7100124FD2 /* MyUserSettings.swift in Sources */,
295 | );
296 | runOnlyForDeploymentPostprocessing = 0;
297 | };
298 | /* End PBXSourcesBuildPhase section */
299 |
300 | /* Begin PBXTargetDependency section */
301 | 79A340EA22A3EF3800124FD2 /* PBXTargetDependency */ = {
302 | isa = PBXTargetDependency;
303 | target = 79A340DD22A3EF3800124FD2 /* WRUserSettings */;
304 | targetProxy = 79A340E922A3EF3800124FD2 /* PBXContainerItemProxy */;
305 | };
306 | /* End PBXTargetDependency section */
307 |
308 | /* Begin XCBuildConfiguration section */
309 | 79A340F022A3EF3800124FD2 /* Debug */ = {
310 | isa = XCBuildConfiguration;
311 | buildSettings = {
312 | ALWAYS_SEARCH_USER_PATHS = NO;
313 | CLANG_ANALYZER_NONNULL = YES;
314 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
315 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
316 | CLANG_CXX_LIBRARY = "libc++";
317 | CLANG_ENABLE_MODULES = YES;
318 | CLANG_ENABLE_OBJC_ARC = YES;
319 | CLANG_ENABLE_OBJC_WEAK = YES;
320 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
321 | CLANG_WARN_BOOL_CONVERSION = YES;
322 | CLANG_WARN_COMMA = YES;
323 | CLANG_WARN_CONSTANT_CONVERSION = YES;
324 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
325 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
326 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
327 | CLANG_WARN_EMPTY_BODY = YES;
328 | CLANG_WARN_ENUM_CONVERSION = YES;
329 | CLANG_WARN_INFINITE_RECURSION = YES;
330 | CLANG_WARN_INT_CONVERSION = YES;
331 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
332 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
333 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
334 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
335 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
336 | CLANG_WARN_STRICT_PROTOTYPES = YES;
337 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
338 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
339 | CLANG_WARN_UNREACHABLE_CODE = YES;
340 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
341 | CODE_SIGN_IDENTITY = "iPhone Developer";
342 | COPY_PHASE_STRIP = NO;
343 | CURRENT_PROJECT_VERSION = 1;
344 | DEBUG_INFORMATION_FORMAT = dwarf;
345 | ENABLE_STRICT_OBJC_MSGSEND = YES;
346 | ENABLE_TESTABILITY = YES;
347 | GCC_C_LANGUAGE_STANDARD = gnu11;
348 | GCC_DYNAMIC_NO_PIC = NO;
349 | GCC_NO_COMMON_BLOCKS = YES;
350 | GCC_OPTIMIZATION_LEVEL = 0;
351 | GCC_PREPROCESSOR_DEFINITIONS = (
352 | "DEBUG=1",
353 | "$(inherited)",
354 | );
355 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
356 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
357 | GCC_WARN_UNDECLARED_SELECTOR = YES;
358 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
359 | GCC_WARN_UNUSED_FUNCTION = YES;
360 | GCC_WARN_UNUSED_VARIABLE = YES;
361 | IPHONEOS_DEPLOYMENT_TARGET = 12.2;
362 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
363 | MTL_FAST_MATH = YES;
364 | ONLY_ACTIVE_ARCH = YES;
365 | SDKROOT = iphoneos;
366 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
367 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
368 | VERSIONING_SYSTEM = "apple-generic";
369 | VERSION_INFO_PREFIX = "";
370 | };
371 | name = Debug;
372 | };
373 | 79A340F122A3EF3800124FD2 /* Release */ = {
374 | isa = XCBuildConfiguration;
375 | buildSettings = {
376 | ALWAYS_SEARCH_USER_PATHS = NO;
377 | CLANG_ANALYZER_NONNULL = YES;
378 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
379 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
380 | CLANG_CXX_LIBRARY = "libc++";
381 | CLANG_ENABLE_MODULES = YES;
382 | CLANG_ENABLE_OBJC_ARC = YES;
383 | CLANG_ENABLE_OBJC_WEAK = YES;
384 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
385 | CLANG_WARN_BOOL_CONVERSION = YES;
386 | CLANG_WARN_COMMA = YES;
387 | CLANG_WARN_CONSTANT_CONVERSION = YES;
388 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
389 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
390 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
391 | CLANG_WARN_EMPTY_BODY = YES;
392 | CLANG_WARN_ENUM_CONVERSION = YES;
393 | CLANG_WARN_INFINITE_RECURSION = YES;
394 | CLANG_WARN_INT_CONVERSION = YES;
395 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
396 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
397 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
398 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
399 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
400 | CLANG_WARN_STRICT_PROTOTYPES = YES;
401 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
402 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
403 | CLANG_WARN_UNREACHABLE_CODE = YES;
404 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
405 | CODE_SIGN_IDENTITY = "iPhone Developer";
406 | COPY_PHASE_STRIP = NO;
407 | CURRENT_PROJECT_VERSION = 1;
408 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
409 | ENABLE_NS_ASSERTIONS = NO;
410 | ENABLE_STRICT_OBJC_MSGSEND = YES;
411 | GCC_C_LANGUAGE_STANDARD = gnu11;
412 | GCC_NO_COMMON_BLOCKS = YES;
413 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
414 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
415 | GCC_WARN_UNDECLARED_SELECTOR = YES;
416 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
417 | GCC_WARN_UNUSED_FUNCTION = YES;
418 | GCC_WARN_UNUSED_VARIABLE = YES;
419 | IPHONEOS_DEPLOYMENT_TARGET = 12.2;
420 | MTL_ENABLE_DEBUG_INFO = NO;
421 | MTL_FAST_MATH = YES;
422 | SDKROOT = iphoneos;
423 | SWIFT_COMPILATION_MODE = wholemodule;
424 | SWIFT_OPTIMIZATION_LEVEL = "-O";
425 | VALIDATE_PRODUCT = YES;
426 | VERSIONING_SYSTEM = "apple-generic";
427 | VERSION_INFO_PREFIX = "";
428 | };
429 | name = Release;
430 | };
431 | 79A340F322A3EF3800124FD2 /* Debug */ = {
432 | isa = XCBuildConfiguration;
433 | buildSettings = {
434 | CLANG_ENABLE_MODULES = YES;
435 | CODE_SIGN_IDENTITY = "";
436 | CODE_SIGN_STYLE = Automatic;
437 | DEFINES_MODULE = YES;
438 | DYLIB_COMPATIBILITY_VERSION = 1;
439 | DYLIB_CURRENT_VERSION = 1;
440 | DYLIB_INSTALL_NAME_BASE = "@rpath";
441 | INFOPLIST_FILE = WRUserSettings/Info.plist;
442 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
443 | LD_RUNPATH_SEARCH_PATHS = (
444 | "$(inherited)",
445 | "@executable_path/Frameworks",
446 | "@loader_path/Frameworks",
447 | );
448 | PRODUCT_BUNDLE_IDENTIFIER = me.rwojcik.WRUserSettings;
449 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
450 | SKIP_INSTALL = YES;
451 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
452 | SWIFT_VERSION = 5.0;
453 | TARGETED_DEVICE_FAMILY = "1,2";
454 | };
455 | name = Debug;
456 | };
457 | 79A340F422A3EF3800124FD2 /* Release */ = {
458 | isa = XCBuildConfiguration;
459 | buildSettings = {
460 | CLANG_ENABLE_MODULES = YES;
461 | CODE_SIGN_IDENTITY = "";
462 | CODE_SIGN_STYLE = Automatic;
463 | DEFINES_MODULE = YES;
464 | DYLIB_COMPATIBILITY_VERSION = 1;
465 | DYLIB_CURRENT_VERSION = 1;
466 | DYLIB_INSTALL_NAME_BASE = "@rpath";
467 | INFOPLIST_FILE = WRUserSettings/Info.plist;
468 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
469 | LD_RUNPATH_SEARCH_PATHS = (
470 | "$(inherited)",
471 | "@executable_path/Frameworks",
472 | "@loader_path/Frameworks",
473 | );
474 | PRODUCT_BUNDLE_IDENTIFIER = me.rwojcik.WRUserSettings;
475 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
476 | SKIP_INSTALL = YES;
477 | SWIFT_VERSION = 5.0;
478 | TARGETED_DEVICE_FAMILY = "1,2";
479 | };
480 | name = Release;
481 | };
482 | 79A340F622A3EF3800124FD2 /* Debug */ = {
483 | isa = XCBuildConfiguration;
484 | baseConfigurationReference = E261517AE41BCA8A479EB688 /* Pods-WRUserSettingsTests.debug.xcconfig */;
485 | buildSettings = {
486 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
487 | CODE_SIGN_STYLE = Automatic;
488 | INFOPLIST_FILE = WRUserSettingsTests/Info.plist;
489 | LD_RUNPATH_SEARCH_PATHS = (
490 | "$(inherited)",
491 | "@executable_path/Frameworks",
492 | "@loader_path/Frameworks",
493 | );
494 | PRODUCT_BUNDLE_IDENTIFIER = me.rwojcik.WRUserSettingsTests;
495 | PRODUCT_NAME = "$(TARGET_NAME)";
496 | SWIFT_VERSION = 5.0;
497 | TARGETED_DEVICE_FAMILY = "1,2";
498 | };
499 | name = Debug;
500 | };
501 | 79A340F722A3EF3800124FD2 /* Release */ = {
502 | isa = XCBuildConfiguration;
503 | baseConfigurationReference = A0773EFA01DDF055F8EAB70D /* Pods-WRUserSettingsTests.release.xcconfig */;
504 | buildSettings = {
505 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
506 | CODE_SIGN_STYLE = Automatic;
507 | INFOPLIST_FILE = WRUserSettingsTests/Info.plist;
508 | LD_RUNPATH_SEARCH_PATHS = (
509 | "$(inherited)",
510 | "@executable_path/Frameworks",
511 | "@loader_path/Frameworks",
512 | );
513 | PRODUCT_BUNDLE_IDENTIFIER = me.rwojcik.WRUserSettingsTests;
514 | PRODUCT_NAME = "$(TARGET_NAME)";
515 | SWIFT_VERSION = 5.0;
516 | TARGETED_DEVICE_FAMILY = "1,2";
517 | };
518 | name = Release;
519 | };
520 | /* End XCBuildConfiguration section */
521 |
522 | /* Begin XCConfigurationList section */
523 | 79A340D822A3EF3800124FD2 /* Build configuration list for PBXProject "WRUserSettings" */ = {
524 | isa = XCConfigurationList;
525 | buildConfigurations = (
526 | 79A340F022A3EF3800124FD2 /* Debug */,
527 | 79A340F122A3EF3800124FD2 /* Release */,
528 | );
529 | defaultConfigurationIsVisible = 0;
530 | defaultConfigurationName = Release;
531 | };
532 | 79A340F222A3EF3800124FD2 /* Build configuration list for PBXNativeTarget "WRUserSettings" */ = {
533 | isa = XCConfigurationList;
534 | buildConfigurations = (
535 | 79A340F322A3EF3800124FD2 /* Debug */,
536 | 79A340F422A3EF3800124FD2 /* Release */,
537 | );
538 | defaultConfigurationIsVisible = 0;
539 | defaultConfigurationName = Release;
540 | };
541 | 79A340F522A3EF3800124FD2 /* Build configuration list for PBXNativeTarget "WRUserSettingsTests" */ = {
542 | isa = XCConfigurationList;
543 | buildConfigurations = (
544 | 79A340F622A3EF3800124FD2 /* Debug */,
545 | 79A340F722A3EF3800124FD2 /* Release */,
546 | );
547 | defaultConfigurationIsVisible = 0;
548 | defaultConfigurationName = Release;
549 | };
550 | /* End XCConfigurationList section */
551 | };
552 | rootObject = 79A340D522A3EF3800124FD2 /* Project object */;
553 | }
554 |
--------------------------------------------------------------------------------