├── 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 | --------------------------------------------------------------------------------