├── AMSlider-Demo
├── Resources
│ ├── Assets
│ │ └── Assets.xcassets
│ │ │ ├── Contents.json
│ │ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── Supporting Files
│ │ └── Info.plist
│ └── Storyboards
│ │ └── Base.lproj
│ │ └── LaunchScreen.storyboard
├── View Controllers
│ └── ViewController
│ │ └── ViewController.swift
├── Base
│ ├── AppDelegate
│ │ └── AppDelegate.swift
│ └── SceneDelegate
│ │ └── SceneDelegate.swift
└── Views
│ └── AMSlider
│ └── AMSlider.swift
├── AMSlider-Demo.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── xcuserdata
│ └── sebvidal.xcuserdatad
│ │ ├── xcdebugger
│ │ └── Breakpoints_v2.xcbkptlist
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── project.pbxproj
├── AMSlider-DemoUITests
├── AMSlider_DemoUITestsLaunchTests.swift
└── AMSlider_DemoUITests.swift
└── AMSlider-DemoTests
└── AMSlider_DemoTests.swift
/AMSlider-Demo/Resources/Assets/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/AMSlider-Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/AMSlider-Demo.xcodeproj/xcuserdata/sebvidal.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/AMSlider-Demo/Resources/Assets/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/AMSlider-Demo/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "platform" : "ios",
6 | "size" : "1024x1024"
7 | }
8 | ],
9 | "info" : {
10 | "author" : "xcode",
11 | "version" : 1
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/AMSlider-Demo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/AMSlider-Demo.xcodeproj/xcuserdata/sebvidal.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | AMSlider-Demo.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/AMSlider-Demo/Resources/Supporting Files/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | UIApplicationSceneManifest
6 |
7 | UIApplicationSupportsMultipleScenes
8 |
9 | UISceneConfigurations
10 |
11 | UIWindowSceneSessionRoleApplication
12 |
13 |
14 | UISceneConfigurationName
15 | Default Configuration
16 | UISceneDelegateClassName
17 | $(PRODUCT_MODULE_NAME).SceneDelegate
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/AMSlider-DemoUITests/AMSlider_DemoUITestsLaunchTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AMSlider_DemoUITestsLaunchTests.swift
3 | // AMSlider-DemoUITests
4 | //
5 | // Created by Seb Vidal on 13/02/2024.
6 | //
7 |
8 | import XCTest
9 |
10 | final class AMSlider_DemoUITestsLaunchTests: XCTestCase {
11 |
12 | override class var runsForEachTargetApplicationUIConfiguration: Bool {
13 | true
14 | }
15 |
16 | override func setUpWithError() throws {
17 | continueAfterFailure = false
18 | }
19 |
20 | func testLaunch() throws {
21 | let app = XCUIApplication()
22 | app.launch()
23 |
24 | // Insert steps here to perform after app launch but before taking a screenshot,
25 | // such as logging into a test account or navigating somewhere in the app
26 |
27 | let attachment = XCTAttachment(screenshot: app.screenshot())
28 | attachment.name = "Launch Screen"
29 | attachment.lifetime = .keepAlways
30 | add(attachment)
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/AMSlider-Demo/View Controllers/ViewController/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // AMSlider-Demo
4 | //
5 | // Created by Seb Vidal on 13/02/2024.
6 | //
7 |
8 | import UIKit
9 |
10 | class ViewController: UIViewController {
11 |
12 | override func viewDidLoad() {
13 | super.viewDidLoad()
14 |
15 | let slider = AMSlider()
16 | slider.tintColor = .label
17 | slider.trackingMode = .absolute
18 | slider.translatesAutoresizingMaskIntoConstraints = false
19 | slider.addTarget(self, action: #selector(sliderValueChanged), for: .valueChanged)
20 |
21 | view.addSubview(slider)
22 |
23 | NSLayoutConstraint.activate([
24 | slider.centerXAnchor.constraint(equalTo: view.centerXAnchor),
25 | slider.centerYAnchor.constraint(equalTo: view.centerYAnchor)
26 | ])
27 | }
28 |
29 | @objc private func sliderValueChanged(_ sender: AMSlider) {
30 | print(sender.progress)
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/AMSlider-DemoTests/AMSlider_DemoTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AMSlider_DemoTests.swift
3 | // AMSlider-DemoTests
4 | //
5 | // Created by Seb Vidal on 13/02/2024.
6 | //
7 |
8 | import XCTest
9 | @testable import AMSlider_Demo
10 |
11 | final class AMSlider_DemoTests: XCTestCase {
12 |
13 | override func setUpWithError() throws {
14 | // Put setup code here. This method is called before the invocation of each test method in the class.
15 | }
16 |
17 | override func tearDownWithError() throws {
18 | // Put teardown code here. This method is called after the invocation of each test method in the class.
19 | }
20 |
21 | func testExample() throws {
22 | // This is an example of a functional test case.
23 | // Use XCTAssert and related functions to verify your tests produce the correct results.
24 | // Any test you write for XCTest can be annotated as throws and async.
25 | // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
26 | // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
27 | }
28 |
29 | func testPerformanceExample() throws {
30 | // This is an example of a performance test case.
31 | self.measure {
32 | // Put the code you want to measure the time of here.
33 | }
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/AMSlider-Demo/Base/AppDelegate/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // AMSlider-Demo
4 | //
5 | // Created by Seb Vidal on 13/02/2024.
6 | //
7 |
8 | import UIKit
9 |
10 | @main
11 | class AppDelegate: UIResponder, UIApplicationDelegate {
12 |
13 |
14 |
15 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
16 | // Override point for customization after application launch.
17 | return true
18 | }
19 |
20 | // MARK: UISceneSession Lifecycle
21 |
22 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
23 | // Called when a new scene session is being created.
24 | // Use this method to select a configuration to create the new scene with.
25 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
26 | }
27 |
28 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) {
29 | // Called when the user discards a scene session.
30 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
31 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
32 | }
33 |
34 |
35 | }
36 |
37 |
--------------------------------------------------------------------------------
/AMSlider-DemoUITests/AMSlider_DemoUITests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AMSlider_DemoUITests.swift
3 | // AMSlider-DemoUITests
4 | //
5 | // Created by Seb Vidal on 13/02/2024.
6 | //
7 |
8 | import XCTest
9 |
10 | final class AMSlider_DemoUITests: XCTestCase {
11 |
12 | override func setUpWithError() throws {
13 | // Put setup code here. This method is called before the invocation of each test method in the class.
14 |
15 | // In UI tests it is usually best to stop immediately when a failure occurs.
16 | continueAfterFailure = false
17 |
18 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
19 | }
20 |
21 | override func tearDownWithError() throws {
22 | // Put teardown code here. This method is called after the invocation of each test method in the class.
23 | }
24 |
25 | func testExample() throws {
26 | // UI tests must launch the application that they test.
27 | let app = XCUIApplication()
28 | app.launch()
29 |
30 | // Use XCTAssert and related functions to verify your tests produce the correct results.
31 | }
32 |
33 | func testLaunchPerformance() throws {
34 | if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) {
35 | // This measures how long it takes to launch your application.
36 | measure(metrics: [XCTApplicationLaunchMetric()]) {
37 | XCUIApplication().launch()
38 | }
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/AMSlider-Demo/Resources/Storyboards/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 |
--------------------------------------------------------------------------------
/AMSlider-Demo/Base/SceneDelegate/SceneDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SceneDelegate.swift
3 | // AMSlider-Demo
4 | //
5 | // Created by Seb Vidal on 13/02/2024.
6 | //
7 |
8 | import UIKit
9 |
10 | class SceneDelegate: UIResponder, UIWindowSceneDelegate {
11 |
12 | var window: UIWindow?
13 |
14 |
15 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
16 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
17 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
18 | // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
19 | guard let windowScene = (scene as? UIWindowScene) else { return }
20 | let window = UIWindow(windowScene: windowScene)
21 | window.rootViewController = ViewController()
22 | window.makeKeyAndVisible()
23 | self.window = window
24 | }
25 |
26 | func sceneDidDisconnect(_ scene: UIScene) {
27 | // Called as the scene is being released by the system.
28 | // This occurs shortly after the scene enters the background, or when its session is discarded.
29 | // Release any resources associated with this scene that can be re-created the next time the scene connects.
30 | // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
31 | }
32 |
33 | func sceneDidBecomeActive(_ scene: UIScene) {
34 | // Called when the scene has moved from an inactive state to an active state.
35 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
36 | }
37 |
38 | func sceneWillResignActive(_ scene: UIScene) {
39 | // Called when the scene will move from an active state to an inactive state.
40 | // This may occur due to temporary interruptions (ex. an incoming phone call).
41 | }
42 |
43 | func sceneWillEnterForeground(_ scene: UIScene) {
44 | // Called as the scene transitions from the background to the foreground.
45 | // Use this method to undo the changes made on entering the background.
46 | }
47 |
48 | func sceneDidEnterBackground(_ scene: UIScene) {
49 | // Called as the scene transitions from the foreground to the background.
50 | // Use this method to save data, release shared resources, and store enough scene-specific state information
51 | // to restore the scene back to its current state.
52 | }
53 |
54 |
55 | }
56 |
57 |
--------------------------------------------------------------------------------
/AMSlider-Demo/Views/AMSlider/AMSlider.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AMSlider.swift
3 | // AMSlider-Demo
4 | //
5 | // Created by Seb Vidal on 14/02/2024.
6 | //
7 |
8 | import UIKit
9 |
10 | class AMSlider: UIControl, UIGestureRecognizerDelegate {
11 | // MARK: - Private Properties
12 | private var backgroundView: UIView!
13 | private var progressView: UIView!
14 |
15 | private var _progress: Double = 0.5
16 | private var initialGestureOffset: CGFloat = 0
17 |
18 | private var isExpanded: Bool = false {
19 | didSet { updateUI(for: isExpanded) }
20 | }
21 |
22 | // MARK: - Public Properties
23 | override var intrinsicContentSize: CGSize {
24 | return CGSize(width: 330, height: 12)
25 | }
26 |
27 | var progress: Double {
28 | get {
29 | return _progress
30 | } set {
31 | _progress = newValue
32 | }
33 | }
34 |
35 | override var tintColor: UIColor! {
36 | get {
37 | return progressView.backgroundColor
38 | } set {
39 | progressView.backgroundColor = newValue
40 | }
41 | }
42 |
43 | override var backgroundColor: UIColor? {
44 | get {
45 | return backgroundView.backgroundColor
46 | } set {
47 | backgroundView.backgroundColor = newValue
48 | }
49 | }
50 |
51 | var trackingMode: TrackingMode = .offset
52 |
53 | var expansionMode: ExpansionMode = .onTouch
54 |
55 | // MARK: - init(frame:)
56 | override init(frame: CGRect) {
57 | super.init(frame: frame)
58 | setupBackgroundView()
59 | setupProgressView()
60 | setupGestureRecognizers()
61 | }
62 |
63 | // MARK: - init(coder:)
64 | required init?(coder: NSCoder) {
65 | fatalError("init(coder:) has not been implemented")
66 | }
67 |
68 | // MARK: - Private Methods
69 | private func setupBackgroundView() {
70 | backgroundView = UIView()
71 | backgroundView.clipsToBounds = true
72 | backgroundView.layer.cornerRadius = 3.5
73 | backgroundView.layer.cornerCurve = .continuous
74 | backgroundView.backgroundColor = .tertiarySystemFill
75 |
76 | addSubview(backgroundView)
77 | }
78 |
79 | private func setupProgressView() {
80 | progressView = UIView()
81 | progressView.alpha = 0.5
82 | progressView.backgroundColor = tintColor
83 |
84 | backgroundView.addSubview(progressView)
85 | }
86 |
87 | private func setupGestureRecognizers() {
88 | let panGestureRecognizer = UIPanGestureRecognizer()
89 | panGestureRecognizer.delegate = self
90 | panGestureRecognizer.addTarget(self, action: #selector(panGestureRecognized))
91 |
92 | let longPressGestureRecognizer = UILongPressGestureRecognizer()
93 | longPressGestureRecognizer.delegate = self
94 | longPressGestureRecognizer.minimumPressDuration = 0
95 | longPressGestureRecognizer.addTarget(self, action: #selector(longPressGestureRecognized))
96 |
97 | addGestureRecognizer(panGestureRecognizer)
98 | addGestureRecognizer(longPressGestureRecognizer)
99 | }
100 |
101 | @objc private func panGestureRecognized(_ sender: UIPanGestureRecognizer) {
102 | switch sender.state {
103 | case .began:
104 | let location = sender.location(in: self).x
105 | initialGestureOffset = location - progressView.frame.maxX
106 | case .possible, .changed:
107 | setIsExpanded(true, animated: true)
108 | default:
109 | setIsExpanded(false, animated: true)
110 | }
111 |
112 | let location = sender.location(in: self).x
113 | let offset = trackingMode == .offset ? initialGestureOffset : 0
114 | let width = location - offset
115 | progressView.frame = CGRect(x: 0, y: 0, width: width, height: frame.height)
116 |
117 | _progress = min(max(width / frame.width, 0), 1)
118 | sendActions(for: .valueChanged)
119 | }
120 |
121 | @objc private func longPressGestureRecognized(_ sender: UITapGestureRecognizer) {
122 | if expansionMode == .onTouch {
123 | switch sender.state {
124 | case .began:
125 | setIsExpanded(true, animated: true)
126 | case .ended:
127 | setIsExpanded(false, animated: true)
128 | default:
129 | return
130 | }
131 | }
132 | }
133 |
134 | private func updateUI(for isExpanded: Bool) {
135 | progressView.alpha = isExpanded ? 1 : 0.5
136 | layoutBackgroundView()
137 | }
138 |
139 | private func layoutBackgroundView() {
140 | let x: CGFloat = 0
141 | let width = frame.width
142 | let height: CGFloat = isExpanded ? 12 : 7
143 | let y = (frame.height / 2) - (height / 2)
144 | backgroundView.frame = CGRect(x: x, y: y, width: width, height: height)
145 | backgroundView.layer.cornerRadius = height / 2
146 | }
147 |
148 | private func layoutProgressViewIfNeeded() {
149 | if progressView.frame.height != frame.height {
150 | let width = (frame.width * progress) - initialGestureOffset
151 | let height = backgroundView.frame.height
152 | progressView.frame = CGRect(x: 0, y: 0, width: width, height: height)
153 | }
154 | }
155 |
156 | private func setIsExpanded(_ isExpanded: Bool, animated: Bool) {
157 | let duration = animated ? 0.15 : 0
158 |
159 | UIView.animate(withDuration: duration, delay: 0, options: .curveEaseInOut) {
160 | self.isExpanded = isExpanded
161 | }
162 | }
163 |
164 | // MARK: - layoutSubviews()
165 | override func layoutSubviews() {
166 | super.layoutSubviews()
167 | layoutBackgroundView()
168 | layoutProgressViewIfNeeded()
169 | }
170 |
171 | // MARK: - UIGestureRecognizerDelegate
172 | func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
173 | return true
174 | }
175 | }
176 |
177 | extension AMSlider {
178 | enum TrackingMode {
179 | case offset
180 | case absolute
181 | }
182 | }
183 |
184 | extension AMSlider {
185 | enum ExpansionMode {
186 | case onTouch
187 | case onDrag
188 | }
189 | }
190 |
--------------------------------------------------------------------------------
/AMSlider-Demo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 56;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | C28FE1AD2B7C043C00D64F84 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28FE1AC2B7C043C00D64F84 /* AppDelegate.swift */; };
11 | C28FE1AF2B7C043C00D64F84 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28FE1AE2B7C043C00D64F84 /* SceneDelegate.swift */; };
12 | C28FE1B12B7C043C00D64F84 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28FE1B02B7C043C00D64F84 /* ViewController.swift */; };
13 | C28FE1B62B7C043C00D64F84 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C28FE1B52B7C043C00D64F84 /* Assets.xcassets */; };
14 | C28FE1B92B7C043C00D64F84 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C28FE1B72B7C043C00D64F84 /* LaunchScreen.storyboard */; };
15 | C28FE1C42B7C043C00D64F84 /* AMSlider_DemoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28FE1C32B7C043C00D64F84 /* AMSlider_DemoTests.swift */; };
16 | C28FE1CE2B7C043C00D64F84 /* AMSlider_DemoUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28FE1CD2B7C043C00D64F84 /* AMSlider_DemoUITests.swift */; };
17 | C28FE1D02B7C043C00D64F84 /* AMSlider_DemoUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28FE1CF2B7C043C00D64F84 /* AMSlider_DemoUITestsLaunchTests.swift */; };
18 | C2C139C82B7CEEA100F230B2 /* AMSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2C139C72B7CEEA100F230B2 /* AMSlider.swift */; };
19 | /* End PBXBuildFile section */
20 |
21 | /* Begin PBXContainerItemProxy section */
22 | C28FE1C02B7C043C00D64F84 /* PBXContainerItemProxy */ = {
23 | isa = PBXContainerItemProxy;
24 | containerPortal = C28FE1A12B7C043B00D64F84 /* Project object */;
25 | proxyType = 1;
26 | remoteGlobalIDString = C28FE1A82B7C043C00D64F84;
27 | remoteInfo = "AMSlider-Demo";
28 | };
29 | C28FE1CA2B7C043C00D64F84 /* PBXContainerItemProxy */ = {
30 | isa = PBXContainerItemProxy;
31 | containerPortal = C28FE1A12B7C043B00D64F84 /* Project object */;
32 | proxyType = 1;
33 | remoteGlobalIDString = C28FE1A82B7C043C00D64F84;
34 | remoteInfo = "AMSlider-Demo";
35 | };
36 | /* End PBXContainerItemProxy section */
37 |
38 | /* Begin PBXFileReference section */
39 | C28FE1A92B7C043C00D64F84 /* AMSlider-Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "AMSlider-Demo.app"; sourceTree = BUILT_PRODUCTS_DIR; };
40 | C28FE1AC2B7C043C00D64F84 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
41 | C28FE1AE2B7C043C00D64F84 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; };
42 | C28FE1B02B7C043C00D64F84 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
43 | C28FE1B52B7C043C00D64F84 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
44 | C28FE1B82B7C043C00D64F84 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
45 | C28FE1BA2B7C043C00D64F84 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
46 | C28FE1BF2B7C043C00D64F84 /* AMSlider-DemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "AMSlider-DemoTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
47 | C28FE1C32B7C043C00D64F84 /* AMSlider_DemoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AMSlider_DemoTests.swift; sourceTree = ""; };
48 | C28FE1C92B7C043C00D64F84 /* AMSlider-DemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "AMSlider-DemoUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
49 | C28FE1CD2B7C043C00D64F84 /* AMSlider_DemoUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AMSlider_DemoUITests.swift; sourceTree = ""; };
50 | C28FE1CF2B7C043C00D64F84 /* AMSlider_DemoUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AMSlider_DemoUITestsLaunchTests.swift; sourceTree = ""; };
51 | C2C139C72B7CEEA100F230B2 /* AMSlider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AMSlider.swift; sourceTree = ""; };
52 | /* End PBXFileReference section */
53 |
54 | /* Begin PBXFrameworksBuildPhase section */
55 | C28FE1A62B7C043C00D64F84 /* Frameworks */ = {
56 | isa = PBXFrameworksBuildPhase;
57 | buildActionMask = 2147483647;
58 | files = (
59 | );
60 | runOnlyForDeploymentPostprocessing = 0;
61 | };
62 | C28FE1BC2B7C043C00D64F84 /* Frameworks */ = {
63 | isa = PBXFrameworksBuildPhase;
64 | buildActionMask = 2147483647;
65 | files = (
66 | );
67 | runOnlyForDeploymentPostprocessing = 0;
68 | };
69 | C28FE1C62B7C043C00D64F84 /* Frameworks */ = {
70 | isa = PBXFrameworksBuildPhase;
71 | buildActionMask = 2147483647;
72 | files = (
73 | );
74 | runOnlyForDeploymentPostprocessing = 0;
75 | };
76 | /* End PBXFrameworksBuildPhase section */
77 |
78 | /* Begin PBXGroup section */
79 | C28FE1A02B7C043B00D64F84 = {
80 | isa = PBXGroup;
81 | children = (
82 | C28FE1AB2B7C043C00D64F84 /* AMSlider-Demo */,
83 | C28FE1C22B7C043C00D64F84 /* AMSlider-DemoTests */,
84 | C28FE1CC2B7C043C00D64F84 /* AMSlider-DemoUITests */,
85 | C28FE1AA2B7C043C00D64F84 /* Products */,
86 | );
87 | sourceTree = "";
88 | };
89 | C28FE1AA2B7C043C00D64F84 /* Products */ = {
90 | isa = PBXGroup;
91 | children = (
92 | C28FE1A92B7C043C00D64F84 /* AMSlider-Demo.app */,
93 | C28FE1BF2B7C043C00D64F84 /* AMSlider-DemoTests.xctest */,
94 | C28FE1C92B7C043C00D64F84 /* AMSlider-DemoUITests.xctest */,
95 | );
96 | name = Products;
97 | sourceTree = "";
98 | };
99 | C28FE1AB2B7C043C00D64F84 /* AMSlider-Demo */ = {
100 | isa = PBXGroup;
101 | children = (
102 | C2C139BE2B7CEE5400F230B2 /* Base */,
103 | C2C139CA2B7CEEB700F230B2 /* Views */,
104 | C2C139C52B7CEE8900F230B2 /* View Controllers */,
105 | C2C139C12B7CEE6A00F230B2 /* Resources */,
106 | );
107 | path = "AMSlider-Demo";
108 | sourceTree = "";
109 | };
110 | C28FE1C22B7C043C00D64F84 /* AMSlider-DemoTests */ = {
111 | isa = PBXGroup;
112 | children = (
113 | C28FE1C32B7C043C00D64F84 /* AMSlider_DemoTests.swift */,
114 | );
115 | path = "AMSlider-DemoTests";
116 | sourceTree = "";
117 | };
118 | C28FE1CC2B7C043C00D64F84 /* AMSlider-DemoUITests */ = {
119 | isa = PBXGroup;
120 | children = (
121 | C28FE1CD2B7C043C00D64F84 /* AMSlider_DemoUITests.swift */,
122 | C28FE1CF2B7C043C00D64F84 /* AMSlider_DemoUITestsLaunchTests.swift */,
123 | );
124 | path = "AMSlider-DemoUITests";
125 | sourceTree = "";
126 | };
127 | C2C139BE2B7CEE5400F230B2 /* Base */ = {
128 | isa = PBXGroup;
129 | children = (
130 | C2C139BF2B7CEE5A00F230B2 /* AppDelegate */,
131 | C2C139C02B7CEE5F00F230B2 /* SceneDelegate */,
132 | );
133 | path = Base;
134 | sourceTree = "";
135 | };
136 | C2C139BF2B7CEE5A00F230B2 /* AppDelegate */ = {
137 | isa = PBXGroup;
138 | children = (
139 | C28FE1AC2B7C043C00D64F84 /* AppDelegate.swift */,
140 | );
141 | path = AppDelegate;
142 | sourceTree = "";
143 | };
144 | C2C139C02B7CEE5F00F230B2 /* SceneDelegate */ = {
145 | isa = PBXGroup;
146 | children = (
147 | C28FE1AE2B7C043C00D64F84 /* SceneDelegate.swift */,
148 | );
149 | path = SceneDelegate;
150 | sourceTree = "";
151 | };
152 | C2C139C12B7CEE6A00F230B2 /* Resources */ = {
153 | isa = PBXGroup;
154 | children = (
155 | C2C139C22B7CEE6E00F230B2 /* Assets */,
156 | C2C139C32B7CEE7700F230B2 /* Storyboards */,
157 | C2C139C42B7CEE7E00F230B2 /* Supporting Files */,
158 | );
159 | path = Resources;
160 | sourceTree = "";
161 | };
162 | C2C139C22B7CEE6E00F230B2 /* Assets */ = {
163 | isa = PBXGroup;
164 | children = (
165 | C28FE1B52B7C043C00D64F84 /* Assets.xcassets */,
166 | );
167 | path = Assets;
168 | sourceTree = "";
169 | };
170 | C2C139C32B7CEE7700F230B2 /* Storyboards */ = {
171 | isa = PBXGroup;
172 | children = (
173 | C28FE1B72B7C043C00D64F84 /* LaunchScreen.storyboard */,
174 | );
175 | path = Storyboards;
176 | sourceTree = "";
177 | };
178 | C2C139C42B7CEE7E00F230B2 /* Supporting Files */ = {
179 | isa = PBXGroup;
180 | children = (
181 | C28FE1BA2B7C043C00D64F84 /* Info.plist */,
182 | );
183 | path = "Supporting Files";
184 | sourceTree = "";
185 | };
186 | C2C139C52B7CEE8900F230B2 /* View Controllers */ = {
187 | isa = PBXGroup;
188 | children = (
189 | C2C139C62B7CEE9800F230B2 /* ViewController */,
190 | );
191 | path = "View Controllers";
192 | sourceTree = "";
193 | };
194 | C2C139C62B7CEE9800F230B2 /* ViewController */ = {
195 | isa = PBXGroup;
196 | children = (
197 | C28FE1B02B7C043C00D64F84 /* ViewController.swift */,
198 | );
199 | path = ViewController;
200 | sourceTree = "";
201 | };
202 | C2C139C92B7CEEB100F230B2 /* AMSlider */ = {
203 | isa = PBXGroup;
204 | children = (
205 | C2C139C72B7CEEA100F230B2 /* AMSlider.swift */,
206 | );
207 | path = AMSlider;
208 | sourceTree = "";
209 | };
210 | C2C139CA2B7CEEB700F230B2 /* Views */ = {
211 | isa = PBXGroup;
212 | children = (
213 | C2C139C92B7CEEB100F230B2 /* AMSlider */,
214 | );
215 | path = Views;
216 | sourceTree = "";
217 | };
218 | /* End PBXGroup section */
219 |
220 | /* Begin PBXNativeTarget section */
221 | C28FE1A82B7C043C00D64F84 /* AMSlider-Demo */ = {
222 | isa = PBXNativeTarget;
223 | buildConfigurationList = C28FE1D32B7C043C00D64F84 /* Build configuration list for PBXNativeTarget "AMSlider-Demo" */;
224 | buildPhases = (
225 | C28FE1A52B7C043C00D64F84 /* Sources */,
226 | C28FE1A62B7C043C00D64F84 /* Frameworks */,
227 | C28FE1A72B7C043C00D64F84 /* Resources */,
228 | );
229 | buildRules = (
230 | );
231 | dependencies = (
232 | );
233 | name = "AMSlider-Demo";
234 | productName = "AMSlider-Demo";
235 | productReference = C28FE1A92B7C043C00D64F84 /* AMSlider-Demo.app */;
236 | productType = "com.apple.product-type.application";
237 | };
238 | C28FE1BE2B7C043C00D64F84 /* AMSlider-DemoTests */ = {
239 | isa = PBXNativeTarget;
240 | buildConfigurationList = C28FE1D62B7C043C00D64F84 /* Build configuration list for PBXNativeTarget "AMSlider-DemoTests" */;
241 | buildPhases = (
242 | C28FE1BB2B7C043C00D64F84 /* Sources */,
243 | C28FE1BC2B7C043C00D64F84 /* Frameworks */,
244 | C28FE1BD2B7C043C00D64F84 /* Resources */,
245 | );
246 | buildRules = (
247 | );
248 | dependencies = (
249 | C28FE1C12B7C043C00D64F84 /* PBXTargetDependency */,
250 | );
251 | name = "AMSlider-DemoTests";
252 | productName = "AMSlider-DemoTests";
253 | productReference = C28FE1BF2B7C043C00D64F84 /* AMSlider-DemoTests.xctest */;
254 | productType = "com.apple.product-type.bundle.unit-test";
255 | };
256 | C28FE1C82B7C043C00D64F84 /* AMSlider-DemoUITests */ = {
257 | isa = PBXNativeTarget;
258 | buildConfigurationList = C28FE1D92B7C043C00D64F84 /* Build configuration list for PBXNativeTarget "AMSlider-DemoUITests" */;
259 | buildPhases = (
260 | C28FE1C52B7C043C00D64F84 /* Sources */,
261 | C28FE1C62B7C043C00D64F84 /* Frameworks */,
262 | C28FE1C72B7C043C00D64F84 /* Resources */,
263 | );
264 | buildRules = (
265 | );
266 | dependencies = (
267 | C28FE1CB2B7C043C00D64F84 /* PBXTargetDependency */,
268 | );
269 | name = "AMSlider-DemoUITests";
270 | productName = "AMSlider-DemoUITests";
271 | productReference = C28FE1C92B7C043C00D64F84 /* AMSlider-DemoUITests.xctest */;
272 | productType = "com.apple.product-type.bundle.ui-testing";
273 | };
274 | /* End PBXNativeTarget section */
275 |
276 | /* Begin PBXProject section */
277 | C28FE1A12B7C043B00D64F84 /* Project object */ = {
278 | isa = PBXProject;
279 | attributes = {
280 | BuildIndependentTargetsInParallel = 1;
281 | LastSwiftUpdateCheck = 1500;
282 | LastUpgradeCheck = 1500;
283 | TargetAttributes = {
284 | C28FE1A82B7C043C00D64F84 = {
285 | CreatedOnToolsVersion = 15.0;
286 | };
287 | C28FE1BE2B7C043C00D64F84 = {
288 | CreatedOnToolsVersion = 15.0;
289 | TestTargetID = C28FE1A82B7C043C00D64F84;
290 | };
291 | C28FE1C82B7C043C00D64F84 = {
292 | CreatedOnToolsVersion = 15.0;
293 | TestTargetID = C28FE1A82B7C043C00D64F84;
294 | };
295 | };
296 | };
297 | buildConfigurationList = C28FE1A42B7C043B00D64F84 /* Build configuration list for PBXProject "AMSlider-Demo" */;
298 | compatibilityVersion = "Xcode 14.0";
299 | developmentRegion = en;
300 | hasScannedForEncodings = 0;
301 | knownRegions = (
302 | en,
303 | Base,
304 | );
305 | mainGroup = C28FE1A02B7C043B00D64F84;
306 | productRefGroup = C28FE1AA2B7C043C00D64F84 /* Products */;
307 | projectDirPath = "";
308 | projectRoot = "";
309 | targets = (
310 | C28FE1A82B7C043C00D64F84 /* AMSlider-Demo */,
311 | C28FE1BE2B7C043C00D64F84 /* AMSlider-DemoTests */,
312 | C28FE1C82B7C043C00D64F84 /* AMSlider-DemoUITests */,
313 | );
314 | };
315 | /* End PBXProject section */
316 |
317 | /* Begin PBXResourcesBuildPhase section */
318 | C28FE1A72B7C043C00D64F84 /* Resources */ = {
319 | isa = PBXResourcesBuildPhase;
320 | buildActionMask = 2147483647;
321 | files = (
322 | C28FE1B92B7C043C00D64F84 /* LaunchScreen.storyboard in Resources */,
323 | C28FE1B62B7C043C00D64F84 /* Assets.xcassets in Resources */,
324 | );
325 | runOnlyForDeploymentPostprocessing = 0;
326 | };
327 | C28FE1BD2B7C043C00D64F84 /* Resources */ = {
328 | isa = PBXResourcesBuildPhase;
329 | buildActionMask = 2147483647;
330 | files = (
331 | );
332 | runOnlyForDeploymentPostprocessing = 0;
333 | };
334 | C28FE1C72B7C043C00D64F84 /* Resources */ = {
335 | isa = PBXResourcesBuildPhase;
336 | buildActionMask = 2147483647;
337 | files = (
338 | );
339 | runOnlyForDeploymentPostprocessing = 0;
340 | };
341 | /* End PBXResourcesBuildPhase section */
342 |
343 | /* Begin PBXSourcesBuildPhase section */
344 | C28FE1A52B7C043C00D64F84 /* Sources */ = {
345 | isa = PBXSourcesBuildPhase;
346 | buildActionMask = 2147483647;
347 | files = (
348 | C28FE1B12B7C043C00D64F84 /* ViewController.swift in Sources */,
349 | C28FE1AD2B7C043C00D64F84 /* AppDelegate.swift in Sources */,
350 | C2C139C82B7CEEA100F230B2 /* AMSlider.swift in Sources */,
351 | C28FE1AF2B7C043C00D64F84 /* SceneDelegate.swift in Sources */,
352 | );
353 | runOnlyForDeploymentPostprocessing = 0;
354 | };
355 | C28FE1BB2B7C043C00D64F84 /* Sources */ = {
356 | isa = PBXSourcesBuildPhase;
357 | buildActionMask = 2147483647;
358 | files = (
359 | C28FE1C42B7C043C00D64F84 /* AMSlider_DemoTests.swift in Sources */,
360 | );
361 | runOnlyForDeploymentPostprocessing = 0;
362 | };
363 | C28FE1C52B7C043C00D64F84 /* Sources */ = {
364 | isa = PBXSourcesBuildPhase;
365 | buildActionMask = 2147483647;
366 | files = (
367 | C28FE1D02B7C043C00D64F84 /* AMSlider_DemoUITestsLaunchTests.swift in Sources */,
368 | C28FE1CE2B7C043C00D64F84 /* AMSlider_DemoUITests.swift in Sources */,
369 | );
370 | runOnlyForDeploymentPostprocessing = 0;
371 | };
372 | /* End PBXSourcesBuildPhase section */
373 |
374 | /* Begin PBXTargetDependency section */
375 | C28FE1C12B7C043C00D64F84 /* PBXTargetDependency */ = {
376 | isa = PBXTargetDependency;
377 | target = C28FE1A82B7C043C00D64F84 /* AMSlider-Demo */;
378 | targetProxy = C28FE1C02B7C043C00D64F84 /* PBXContainerItemProxy */;
379 | };
380 | C28FE1CB2B7C043C00D64F84 /* PBXTargetDependency */ = {
381 | isa = PBXTargetDependency;
382 | target = C28FE1A82B7C043C00D64F84 /* AMSlider-Demo */;
383 | targetProxy = C28FE1CA2B7C043C00D64F84 /* PBXContainerItemProxy */;
384 | };
385 | /* End PBXTargetDependency section */
386 |
387 | /* Begin PBXVariantGroup section */
388 | C28FE1B72B7C043C00D64F84 /* LaunchScreen.storyboard */ = {
389 | isa = PBXVariantGroup;
390 | children = (
391 | C28FE1B82B7C043C00D64F84 /* Base */,
392 | );
393 | name = LaunchScreen.storyboard;
394 | sourceTree = "";
395 | };
396 | /* End PBXVariantGroup section */
397 |
398 | /* Begin XCBuildConfiguration section */
399 | C28FE1D12B7C043C00D64F84 /* Debug */ = {
400 | isa = XCBuildConfiguration;
401 | buildSettings = {
402 | ALWAYS_SEARCH_USER_PATHS = NO;
403 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
404 | CLANG_ANALYZER_NONNULL = YES;
405 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
406 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
407 | CLANG_ENABLE_MODULES = YES;
408 | CLANG_ENABLE_OBJC_ARC = YES;
409 | CLANG_ENABLE_OBJC_WEAK = YES;
410 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
411 | CLANG_WARN_BOOL_CONVERSION = YES;
412 | CLANG_WARN_COMMA = YES;
413 | CLANG_WARN_CONSTANT_CONVERSION = YES;
414 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
415 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
416 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
417 | CLANG_WARN_EMPTY_BODY = YES;
418 | CLANG_WARN_ENUM_CONVERSION = YES;
419 | CLANG_WARN_INFINITE_RECURSION = YES;
420 | CLANG_WARN_INT_CONVERSION = YES;
421 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
422 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
423 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
424 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
425 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
426 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
427 | CLANG_WARN_STRICT_PROTOTYPES = YES;
428 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
429 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
430 | CLANG_WARN_UNREACHABLE_CODE = YES;
431 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
432 | COPY_PHASE_STRIP = NO;
433 | DEBUG_INFORMATION_FORMAT = dwarf;
434 | ENABLE_STRICT_OBJC_MSGSEND = YES;
435 | ENABLE_TESTABILITY = YES;
436 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
437 | GCC_C_LANGUAGE_STANDARD = gnu17;
438 | GCC_DYNAMIC_NO_PIC = NO;
439 | GCC_NO_COMMON_BLOCKS = YES;
440 | GCC_OPTIMIZATION_LEVEL = 0;
441 | GCC_PREPROCESSOR_DEFINITIONS = (
442 | "DEBUG=1",
443 | "$(inherited)",
444 | );
445 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
446 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
447 | GCC_WARN_UNDECLARED_SELECTOR = YES;
448 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
449 | GCC_WARN_UNUSED_FUNCTION = YES;
450 | GCC_WARN_UNUSED_VARIABLE = YES;
451 | IPHONEOS_DEPLOYMENT_TARGET = 17.0;
452 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
453 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
454 | MTL_FAST_MATH = YES;
455 | ONLY_ACTIVE_ARCH = YES;
456 | SDKROOT = iphoneos;
457 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
458 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
459 | };
460 | name = Debug;
461 | };
462 | C28FE1D22B7C043C00D64F84 /* Release */ = {
463 | isa = XCBuildConfiguration;
464 | buildSettings = {
465 | ALWAYS_SEARCH_USER_PATHS = NO;
466 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
467 | CLANG_ANALYZER_NONNULL = YES;
468 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
469 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
470 | CLANG_ENABLE_MODULES = YES;
471 | CLANG_ENABLE_OBJC_ARC = YES;
472 | CLANG_ENABLE_OBJC_WEAK = YES;
473 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
474 | CLANG_WARN_BOOL_CONVERSION = YES;
475 | CLANG_WARN_COMMA = YES;
476 | CLANG_WARN_CONSTANT_CONVERSION = YES;
477 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
478 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
479 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
480 | CLANG_WARN_EMPTY_BODY = YES;
481 | CLANG_WARN_ENUM_CONVERSION = YES;
482 | CLANG_WARN_INFINITE_RECURSION = YES;
483 | CLANG_WARN_INT_CONVERSION = YES;
484 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
485 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
486 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
487 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
488 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
489 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
490 | CLANG_WARN_STRICT_PROTOTYPES = YES;
491 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
492 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
493 | CLANG_WARN_UNREACHABLE_CODE = YES;
494 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
495 | COPY_PHASE_STRIP = NO;
496 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
497 | ENABLE_NS_ASSERTIONS = NO;
498 | ENABLE_STRICT_OBJC_MSGSEND = YES;
499 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
500 | GCC_C_LANGUAGE_STANDARD = gnu17;
501 | GCC_NO_COMMON_BLOCKS = YES;
502 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
503 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
504 | GCC_WARN_UNDECLARED_SELECTOR = YES;
505 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
506 | GCC_WARN_UNUSED_FUNCTION = YES;
507 | GCC_WARN_UNUSED_VARIABLE = YES;
508 | IPHONEOS_DEPLOYMENT_TARGET = 17.0;
509 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
510 | MTL_ENABLE_DEBUG_INFO = NO;
511 | MTL_FAST_MATH = YES;
512 | SDKROOT = iphoneos;
513 | SWIFT_COMPILATION_MODE = wholemodule;
514 | VALIDATE_PRODUCT = YES;
515 | };
516 | name = Release;
517 | };
518 | C28FE1D42B7C043C00D64F84 /* Debug */ = {
519 | isa = XCBuildConfiguration;
520 | buildSettings = {
521 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
522 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
523 | CODE_SIGN_STYLE = Automatic;
524 | CURRENT_PROJECT_VERSION = 1;
525 | DEVELOPMENT_TEAM = DY2GQFY855;
526 | GENERATE_INFOPLIST_FILE = YES;
527 | INFOPLIST_FILE = "AMSlider-Demo/Resources/Supporting Files/Info.plist";
528 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
529 | INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
530 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
531 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
532 | LD_RUNPATH_SEARCH_PATHS = (
533 | "$(inherited)",
534 | "@executable_path/Frameworks",
535 | );
536 | MARKETING_VERSION = 1.0;
537 | PRODUCT_BUNDLE_IDENTIFIER = "com.sebvidal.AMSlider-Demo";
538 | PRODUCT_NAME = "$(TARGET_NAME)";
539 | SWIFT_EMIT_LOC_STRINGS = YES;
540 | SWIFT_VERSION = 5.0;
541 | TARGETED_DEVICE_FAMILY = "1,2";
542 | };
543 | name = Debug;
544 | };
545 | C28FE1D52B7C043C00D64F84 /* Release */ = {
546 | isa = XCBuildConfiguration;
547 | buildSettings = {
548 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
549 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
550 | CODE_SIGN_STYLE = Automatic;
551 | CURRENT_PROJECT_VERSION = 1;
552 | DEVELOPMENT_TEAM = DY2GQFY855;
553 | GENERATE_INFOPLIST_FILE = YES;
554 | INFOPLIST_FILE = "AMSlider-Demo/Resources/Supporting Files/Info.plist";
555 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
556 | INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
557 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
558 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
559 | LD_RUNPATH_SEARCH_PATHS = (
560 | "$(inherited)",
561 | "@executable_path/Frameworks",
562 | );
563 | MARKETING_VERSION = 1.0;
564 | PRODUCT_BUNDLE_IDENTIFIER = "com.sebvidal.AMSlider-Demo";
565 | PRODUCT_NAME = "$(TARGET_NAME)";
566 | SWIFT_EMIT_LOC_STRINGS = YES;
567 | SWIFT_VERSION = 5.0;
568 | TARGETED_DEVICE_FAMILY = "1,2";
569 | };
570 | name = Release;
571 | };
572 | C28FE1D72B7C043C00D64F84 /* Debug */ = {
573 | isa = XCBuildConfiguration;
574 | buildSettings = {
575 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
576 | BUNDLE_LOADER = "$(TEST_HOST)";
577 | CODE_SIGN_STYLE = Automatic;
578 | CURRENT_PROJECT_VERSION = 1;
579 | DEVELOPMENT_TEAM = DY2GQFY855;
580 | GENERATE_INFOPLIST_FILE = YES;
581 | IPHONEOS_DEPLOYMENT_TARGET = 17.0;
582 | MARKETING_VERSION = 1.0;
583 | PRODUCT_BUNDLE_IDENTIFIER = "com.sebvidal.AMSlider-DemoTests";
584 | PRODUCT_NAME = "$(TARGET_NAME)";
585 | SWIFT_EMIT_LOC_STRINGS = NO;
586 | SWIFT_VERSION = 5.0;
587 | TARGETED_DEVICE_FAMILY = "1,2";
588 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AMSlider-Demo.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/AMSlider-Demo";
589 | };
590 | name = Debug;
591 | };
592 | C28FE1D82B7C043C00D64F84 /* Release */ = {
593 | isa = XCBuildConfiguration;
594 | buildSettings = {
595 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
596 | BUNDLE_LOADER = "$(TEST_HOST)";
597 | CODE_SIGN_STYLE = Automatic;
598 | CURRENT_PROJECT_VERSION = 1;
599 | DEVELOPMENT_TEAM = DY2GQFY855;
600 | GENERATE_INFOPLIST_FILE = YES;
601 | IPHONEOS_DEPLOYMENT_TARGET = 17.0;
602 | MARKETING_VERSION = 1.0;
603 | PRODUCT_BUNDLE_IDENTIFIER = "com.sebvidal.AMSlider-DemoTests";
604 | PRODUCT_NAME = "$(TARGET_NAME)";
605 | SWIFT_EMIT_LOC_STRINGS = NO;
606 | SWIFT_VERSION = 5.0;
607 | TARGETED_DEVICE_FAMILY = "1,2";
608 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AMSlider-Demo.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/AMSlider-Demo";
609 | };
610 | name = Release;
611 | };
612 | C28FE1DA2B7C043C00D64F84 /* Debug */ = {
613 | isa = XCBuildConfiguration;
614 | buildSettings = {
615 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
616 | CODE_SIGN_STYLE = Automatic;
617 | CURRENT_PROJECT_VERSION = 1;
618 | DEVELOPMENT_TEAM = DY2GQFY855;
619 | GENERATE_INFOPLIST_FILE = YES;
620 | MARKETING_VERSION = 1.0;
621 | PRODUCT_BUNDLE_IDENTIFIER = "com.sebvidal.AMSlider-DemoUITests";
622 | PRODUCT_NAME = "$(TARGET_NAME)";
623 | SWIFT_EMIT_LOC_STRINGS = NO;
624 | SWIFT_VERSION = 5.0;
625 | TARGETED_DEVICE_FAMILY = "1,2";
626 | TEST_TARGET_NAME = "AMSlider-Demo";
627 | };
628 | name = Debug;
629 | };
630 | C28FE1DB2B7C043C00D64F84 /* Release */ = {
631 | isa = XCBuildConfiguration;
632 | buildSettings = {
633 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
634 | CODE_SIGN_STYLE = Automatic;
635 | CURRENT_PROJECT_VERSION = 1;
636 | DEVELOPMENT_TEAM = DY2GQFY855;
637 | GENERATE_INFOPLIST_FILE = YES;
638 | MARKETING_VERSION = 1.0;
639 | PRODUCT_BUNDLE_IDENTIFIER = "com.sebvidal.AMSlider-DemoUITests";
640 | PRODUCT_NAME = "$(TARGET_NAME)";
641 | SWIFT_EMIT_LOC_STRINGS = NO;
642 | SWIFT_VERSION = 5.0;
643 | TARGETED_DEVICE_FAMILY = "1,2";
644 | TEST_TARGET_NAME = "AMSlider-Demo";
645 | };
646 | name = Release;
647 | };
648 | /* End XCBuildConfiguration section */
649 |
650 | /* Begin XCConfigurationList section */
651 | C28FE1A42B7C043B00D64F84 /* Build configuration list for PBXProject "AMSlider-Demo" */ = {
652 | isa = XCConfigurationList;
653 | buildConfigurations = (
654 | C28FE1D12B7C043C00D64F84 /* Debug */,
655 | C28FE1D22B7C043C00D64F84 /* Release */,
656 | );
657 | defaultConfigurationIsVisible = 0;
658 | defaultConfigurationName = Release;
659 | };
660 | C28FE1D32B7C043C00D64F84 /* Build configuration list for PBXNativeTarget "AMSlider-Demo" */ = {
661 | isa = XCConfigurationList;
662 | buildConfigurations = (
663 | C28FE1D42B7C043C00D64F84 /* Debug */,
664 | C28FE1D52B7C043C00D64F84 /* Release */,
665 | );
666 | defaultConfigurationIsVisible = 0;
667 | defaultConfigurationName = Release;
668 | };
669 | C28FE1D62B7C043C00D64F84 /* Build configuration list for PBXNativeTarget "AMSlider-DemoTests" */ = {
670 | isa = XCConfigurationList;
671 | buildConfigurations = (
672 | C28FE1D72B7C043C00D64F84 /* Debug */,
673 | C28FE1D82B7C043C00D64F84 /* Release */,
674 | );
675 | defaultConfigurationIsVisible = 0;
676 | defaultConfigurationName = Release;
677 | };
678 | C28FE1D92B7C043C00D64F84 /* Build configuration list for PBXNativeTarget "AMSlider-DemoUITests" */ = {
679 | isa = XCConfigurationList;
680 | buildConfigurations = (
681 | C28FE1DA2B7C043C00D64F84 /* Debug */,
682 | C28FE1DB2B7C043C00D64F84 /* Release */,
683 | );
684 | defaultConfigurationIsVisible = 0;
685 | defaultConfigurationName = Release;
686 | };
687 | /* End XCConfigurationList section */
688 | };
689 | rootObject = C28FE1A12B7C043B00D64F84 /* Project object */;
690 | }
691 |
--------------------------------------------------------------------------------