├── .DS_Store
├── Screenshots
└── circularprogress.gif
├── CircularSlider.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── project.pbxproj
├── CircularSlider
├── CircularSlider.h
└── CircularSlider.swift
├── CircularSlider.podspec
├── LICENSE
├── .gitignore
└── README.md
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mindinventory/CircularSlider/HEAD/.DS_Store
--------------------------------------------------------------------------------
/Screenshots/circularprogress.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mindinventory/CircularSlider/HEAD/Screenshots/circularprogress.gif
--------------------------------------------------------------------------------
/CircularSlider.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/CircularSlider.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/CircularSlider/CircularSlider.h:
--------------------------------------------------------------------------------
1 | //
2 | // CircularSlider.h
3 | // CircularSlider
4 | //
5 | // Created by mac-00017 on 18/02/22.
6 | //
7 |
8 | #import
9 |
10 | //! Project version number for CircularSlider.
11 | FOUNDATION_EXPORT double CircularSliderVersionNumber;
12 |
13 | //! Project version string for CircularSlider.
14 | FOUNDATION_EXPORT const unsigned char CircularSliderVersionString[];
15 |
16 | // In this header, you should import all the public headers of your framework using statements like #import
17 |
18 |
19 |
--------------------------------------------------------------------------------
/CircularSlider.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = 'CircularSlider'
3 | s.version = '1.0.1'
4 | s.summary = 'Create a Complex App UI With Circular Slider'
5 |
6 | s.swift_version = "5.0"
7 |
8 | s.description = <<-DESC
9 | In this Vide i’m going to show how to create a Complex App UI With Circular Slider - Complex Smooth Curves And Shapes - Using SwiftUI
10 |
11 | DESC
12 |
13 | s.homepage = 'https://github.com/PiyushSelarka'
14 | s.license = { :type => 'MIT', :file => 'https://github.com/PiyushSelarka/CircularSlider/blob/main/LICENSE' }
15 | s.author = { 'Piyush' => 'piyushselarka.mi@gmail.com' }
16 | s.source = { :git => 'https://github.com/PiyushSelarka/CircularSlider.git', :tag => '1.0.1' }
17 |
18 | s.ios.deployment_target = '13.0'
19 | s.source_files = 'CircularSlider/*.{h,swift}'
20 |
21 | end
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Piyush Selarka
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## User settings
6 | xcuserdata/
7 |
8 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
9 | *.xcscmblueprint
10 | *.xccheckout
11 |
12 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
13 | build/
14 | DerivedData/
15 | *.moved-aside
16 | *.pbxuser
17 | !default.pbxuser
18 | *.mode1v3
19 | !default.mode1v3
20 | *.mode2v3
21 | !default.mode2v3
22 | *.perspectivev3
23 | !default.perspectivev3
24 |
25 | ## Obj-C/Swift specific
26 | *.hmap
27 |
28 | ## App packaging
29 | *.ipa
30 | *.dSYM.zip
31 | *.dSYM
32 |
33 | ## Playgrounds
34 | timeline.xctimeline
35 | playground.xcworkspace
36 |
37 | # Swift Package Manager
38 | #
39 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
40 | # Packages/
41 | # Package.pins
42 | # Package.resolved
43 | # *.xcodeproj
44 | #
45 | # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
46 | # hence it is not needed unless you have added a package configuration file to your project
47 | # .swiftpm
48 |
49 | .build/
50 |
51 | # CocoaPods
52 | #
53 | # We recommend against adding the Pods directory to your .gitignore. However
54 | # you should judge for yourself, the pros and cons are mentioned at:
55 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
56 | #
57 | # Pods/
58 | #
59 | # Add this line if you want to avoid checking in source code from the Xcode workspace
60 | # *.xcworkspace
61 |
62 | # Carthage
63 | #
64 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
65 | # Carthage/Checkouts
66 |
67 | Carthage/Build/
68 |
69 | # Accio dependency management
70 | Dependencies/
71 | .accio/
72 |
73 | # fastlane
74 | #
75 | # It is recommended to not store the screenshots in the git repo.
76 | # Instead, use fastlane to re-generate the screenshots whenever they are needed.
77 | # For more information about the recommended setup visit:
78 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
79 |
80 | fastlane/report.xml
81 | fastlane/Preview.html
82 | fastlane/screenshots/**/*.png
83 | fastlane/test_output
84 |
85 | # Code Injection
86 | #
87 | # After new code Injection tools there's a generated folder /iOSInjectionProject
88 | # https://github.com/johnno1962/injectionforxcode
89 |
90 | iOSInjectionProject/
91 |
--------------------------------------------------------------------------------
/CircularSlider/CircularSlider.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CircularSlider.swift
3 | // CircularSlider
4 | //
5 | // Created by mac-00017 on 18/02/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | public struct Config {
11 | let minimumValue: CGFloat
12 | let maximumValue: CGFloat
13 | let totalValue: CGFloat
14 | let knobRadius: CGFloat
15 | let radius: CGFloat
16 | let outercircleColor : Color
17 | let innercircleColor : RadialGradient
18 | let lineColor : Color
19 | let lineWidth : CGFloat
20 | let tickColor : Color
21 | let tickhighlightedColor : Color
22 | let sliderColor : LinearGradient
23 | let startPointCircleColor : RadialGradient
24 | let pointCircleColor : RadialGradient
25 | let titleText : String
26 | let totalProgressView : CGFloat
27 |
28 | public init(minimumValue:CGFloat,maximumValue:CGFloat,totalValue: CGFloat,knobRadius: CGFloat,radius: CGFloat,TotalProgressView : CGFloat,outercircleColor : Color,innercircleColor : RadialGradient,lineColor : Color,lineWidth : CGFloat,tickColor : Color,tickhighlightedColor : Color,sliderColor : LinearGradient,startPointCircleColor : RadialGradient,pointCircleColor : RadialGradient,titleText : String) {
29 |
30 | self.minimumValue = minimumValue
31 | self.maximumValue = maximumValue
32 | self.totalValue = totalValue
33 | self.knobRadius = knobRadius
34 | self.radius = radius
35 | self.outercircleColor = outercircleColor
36 | self.innercircleColor = innercircleColor
37 | self.lineColor = lineColor
38 | self.lineWidth = lineWidth
39 | self.tickColor = tickColor
40 | self.tickhighlightedColor = tickhighlightedColor
41 | self.sliderColor = sliderColor
42 | self.startPointCircleColor = startPointCircleColor
43 | self.pointCircleColor = pointCircleColor
44 | self.titleText = titleText
45 | self.totalProgressView = TotalProgressView
46 |
47 | }
48 | }
49 |
50 | public struct CircularSlider: View {
51 |
52 | @State var tempValue: CGFloat = 0.0
53 | @State var angleValue: CGFloat = 0.0
54 | public let config : Config
55 | public let completion: ((CGFloat) -> Void)
56 |
57 | public init(config: Config, completion: @escaping ((CGFloat) -> Void)) {
58 | self.config = config
59 | tempValue = self.config.totalProgressView
60 | self.completion = completion
61 | }
62 |
63 | public var body: some View {
64 | ZStack {
65 | Circle()
66 | .fill(config.outercircleColor)
67 | .frame(width: (config.radius * 1.75) , height: (config.radius * 1.75))
68 |
69 | Circle()
70 | .fill(config.innercircleColor)
71 | .frame(width: config.radius * 1.3, height: config.radius * 1.3)
72 | .padding(-(config.radius / 20))
73 | .overlay(
74 | Circle().stroke(config.lineColor, lineWidth: config.lineWidth)
75 | )
76 |
77 | ForEach(0..<20) { tick in
78 | self.tick(at: tick)
79 | .frame(width: (config.radius * 2.15), height: (config.radius * 2.15))
80 | }
81 |
82 | Circle()
83 | .trim(from: 0.0, to: tempValue/config.totalValue)
84 | .stroke(config.sliderColor, lineWidth: 8)
85 | .frame(width: config.radius * 2, height: config.radius * 2)
86 | .rotationEffect(.degrees(-90))
87 |
88 | Circle()
89 | .fill(config.startPointCircleColor)
90 | .frame(width: config.knobRadius * 2, height: config.knobRadius * 2)
91 | .padding(10)
92 | .offset(y: -config.radius)
93 |
94 | Circle()
95 | .fill(config.pointCircleColor)
96 | .frame(width: config.knobRadius * 2, height: config.knobRadius * 2)
97 | .padding(10)
98 | .offset(y: -config.radius)
99 | .rotationEffect(Angle.degrees(Double(angleValue)))
100 | .shadow(color: .blue, radius: 10)
101 | .gesture(DragGesture(minimumDistance: 0.0)
102 | .onChanged({ value in
103 | change(location: value.location)
104 |
105 | })
106 | )
107 |
108 | VStack {
109 | Text("\(config.titleText)")
110 | .font(.system(size: (config.radius / 7)))
111 | .italic()
112 |
113 | Text("\(String.init(format: "%.0f", tempValue))%")
114 | .font(.system(size: (config.radius / 3)))
115 | .italic()
116 | }
117 | }
118 | }
119 | func tick(at tick: Int) -> some View {
120 | VStack {
121 | Rectangle()
122 | .fill(tick % 5 == 0 ? config.tickhighlightedColor : config.tickColor)
123 | .opacity(tick % 5 == 0 ? 1 : 0.5)
124 | .frame(width: 2, height: 10)
125 | Spacer()
126 | }.rotationEffect(Angle.degrees(Double(tick)/(20) * 360))
127 |
128 | }
129 |
130 | private func change(location: CGPoint) {
131 | // creating vector from location point
132 | let vector = CGVector(dx: location.x, dy: location.y)
133 |
134 | // geting angle in radian need to subtract the knob radius and padding from the dy and dx
135 | let angle = atan2(vector.dy - (config.knobRadius + 10), vector.dx - (config.knobRadius + 10)) + .pi/2.0
136 |
137 | // convert angle range from (-pi to pi) to (0 to 2pi)
138 | let fixedAngle = angle < 0.0 ? angle + 2.0 * .pi : angle
139 | // convert angle value to temp value
140 | let value = fixedAngle / (2.0 * .pi) * config.totalValue
141 |
142 | if value >= config.minimumValue && value <= config.maximumValue {
143 |
144 | withAnimation(.linear(duration: 0.15)) {
145 | tempValue = value
146 | angleValue = fixedAngle * 180 / .pi // converting to degree
147 | }
148 | completion(tempValue.rounded())
149 | }
150 | }
151 | }
152 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Annular ProgressView
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | ## Preview
16 |
17 | Keeping a regular check on the progress of project completion is a bit difficult, but not anymore, We have created our own custom progress view to measure the progress of the individual project on an individual day based on the task completion. That helps us to generate daily reports with specific numbers.
18 |
19 | Using Annular progress view now it's no longer difficult to measure the bang on results!
20 |
21 | 
22 |
23 | A powerful Circular Slider which has been written in SwiftUI
24 |
25 | To run the example project, clone the repo, and run `pod install` from the Example directory.
26 |
27 | ## Requirements
28 | - iOS 13.0+
29 | - Xcode 12.5+
30 |
31 | ## Installation
32 | Circular Slider is available through [CocoaPods](https://cocoapods.org/). To install it, simply add the following line to your Podfile:
33 |
34 | To install it, simply add the following line to your Podfile:
35 |
36 | ```ruby
37 | pod 'CircularSlider', git: 'https://github.com/PiyushSelarka/CircularSlider.git', branch: 'main'
38 | ```
39 | ## Usage
40 | Added import CircularSlider
41 | ```swift
42 | import CircularSlider
43 | ```
44 |
45 | ## Config
46 | Configration for Circular Slider with completion
47 | ```swift
48 | CircularSlider(config: Config(minimumValue: 0.0,
49 | maximumValue: 100,
50 | totalValue: 100,
51 | knobRadius: 10,
52 | radius: 125,TotalProgressView: 20.0,
53 | outercircleColor: Color.init(red: 64/255, green: 66/255, blue: 131/255),
54 | innercircleColor: RadialGradient(gradient: Gradient(colors: [.white, .gray]), center: .center, startRadius: 50, endRadius: 100),
55 | lineColor: Color(UIColor.lightGray),
56 | lineWidth: 1.0,
57 | tickColor: Color.gray,
58 | tickhighlightedColor: Color.white,
59 | sliderColor: LinearGradient(gradient: Gradient(colors: [.blue, .white]),startPoint: .topLeading, endPoint: .bottomLeading),
60 | startPointCircleColor: RadialGradient(gradient: Gradient(colors: [.white, .blue,]), center: .center, startRadius: 0, endRadius: 7),
61 | pointCircleColor: RadialGradient(gradient: Gradient(colors: [.blue, .white]), center: .center, startRadius: 0, endRadius: 7),
62 | titleText: "Monday"
63 | ),
64 | completion: { (value) in
65 | print(value) // Getting slider value
66 | }
67 | )
68 | ```
69 |
70 | ##### minimumValue
71 | Minimum Value of the slider or you can say start value for the slider. It will set in CGFloat.init
72 |
73 | ##### maximumValue
74 | Maximum value for the slider which is set in CGFloat.init
75 |
76 | ##### totalValue
77 | TotalValue will help to measure progress of the circle while moving which should be equal to maximum value
78 |
79 | ##### knobRadius
80 | The Radius of the know that how large you want to show
81 |
82 | ##### radius
83 | Size or area of Progress view which can be define by radius
84 |
85 | ##### outercircleColor
86 | The color of back circle set in Color.init
87 |
88 | ##### innercircleColor
89 | The color of inner side circle set in RadialGradient.init
90 |
91 | ##### lineColor
92 | The color of line in inner circle set in Color.init
93 |
94 | ##### lineWidth
95 | The width of line in inner circle set in CGFloat.init
96 |
97 | ##### tickColor
98 | The color of tick in 360 degree circle set in Color.init
99 |
100 | ##### tickhighlightedColor
101 | The color of tick highlighted in 360 degree circle set in Color.init
102 |
103 | ##### sliderColor
104 | The color of slider set in LinearGradient.init
105 |
106 | ##### startPointCircleColor
107 | The slider start circle color set in RadialGradient.init
108 |
109 | ##### pointCircleColor
110 | The slider drag circle color set in RadialGradient.init
111 |
112 | ##### titleText
113 | set Title text in circle
114 |
115 | ##### TotalProgressView
116 | When you want to put a static number to show the progress only then you can pass the number in this property which will help you to show the circular bar based on the value you pass
117 |
118 | #### CallBack
119 |
120 | ```swift
121 | completion: { (value) in
122 | print(value) // Getting slider value
123 | }
124 | ```
125 |
126 |
127 | ## 📱 Check out other lists of our Mobile UI libraries
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 | ## 💻 Check out other lists of Web libraries
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 | ## Check out our Work
160 |
161 |
162 |
163 |
164 | ## 📄 License
165 | MI-Circular Slider is [MIT-licensed](/LICENSE).
166 |
167 |
168 | If you use our open-source libraries in your project, please make sure to credit us and Give a star to www.mindinventory.com
169 |
170 |
171 |
172 |
173 |
--------------------------------------------------------------------------------
/CircularSlider.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 55;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 5CFC02F127BF60380064377E /* CircularSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CFC02F027BF60380064377E /* CircularSlider.h */; settings = {ATTRIBUTES = (Public, ); }; };
11 | 5CFC02F827BF604C0064377E /* CircularSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CFC02F727BF604C0064377E /* CircularSlider.swift */; };
12 | /* End PBXBuildFile section */
13 |
14 | /* Begin PBXFileReference section */
15 | 5CFC02ED27BF60380064377E /* CircularSlider.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CircularSlider.framework; sourceTree = BUILT_PRODUCTS_DIR; };
16 | 5CFC02F027BF60380064377E /* CircularSlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CircularSlider.h; sourceTree = ""; };
17 | 5CFC02F727BF604C0064377E /* CircularSlider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircularSlider.swift; sourceTree = ""; };
18 | /* End PBXFileReference section */
19 |
20 | /* Begin PBXFrameworksBuildPhase section */
21 | 5CFC02EA27BF60380064377E /* Frameworks */ = {
22 | isa = PBXFrameworksBuildPhase;
23 | buildActionMask = 2147483647;
24 | files = (
25 | );
26 | runOnlyForDeploymentPostprocessing = 0;
27 | };
28 | /* End PBXFrameworksBuildPhase section */
29 |
30 | /* Begin PBXGroup section */
31 | 5CFC02E327BF60380064377E = {
32 | isa = PBXGroup;
33 | children = (
34 | 5CFC02EF27BF60380064377E /* CircularSlider */,
35 | 5CFC02EE27BF60380064377E /* Products */,
36 | );
37 | sourceTree = "";
38 | };
39 | 5CFC02EE27BF60380064377E /* Products */ = {
40 | isa = PBXGroup;
41 | children = (
42 | 5CFC02ED27BF60380064377E /* CircularSlider.framework */,
43 | );
44 | name = Products;
45 | sourceTree = "";
46 | };
47 | 5CFC02EF27BF60380064377E /* CircularSlider */ = {
48 | isa = PBXGroup;
49 | children = (
50 | 5CFC02F027BF60380064377E /* CircularSlider.h */,
51 | 5CFC02F727BF604C0064377E /* CircularSlider.swift */,
52 | );
53 | path = CircularSlider;
54 | sourceTree = "";
55 | };
56 | /* End PBXGroup section */
57 |
58 | /* Begin PBXHeadersBuildPhase section */
59 | 5CFC02E827BF60380064377E /* Headers */ = {
60 | isa = PBXHeadersBuildPhase;
61 | buildActionMask = 2147483647;
62 | files = (
63 | 5CFC02F127BF60380064377E /* CircularSlider.h in Headers */,
64 | );
65 | runOnlyForDeploymentPostprocessing = 0;
66 | };
67 | /* End PBXHeadersBuildPhase section */
68 |
69 | /* Begin PBXNativeTarget section */
70 | 5CFC02EC27BF60380064377E /* CircularSlider */ = {
71 | isa = PBXNativeTarget;
72 | buildConfigurationList = 5CFC02F427BF60380064377E /* Build configuration list for PBXNativeTarget "CircularSlider" */;
73 | buildPhases = (
74 | 5CFC02E827BF60380064377E /* Headers */,
75 | 5CFC02E927BF60380064377E /* Sources */,
76 | 5CFC02EA27BF60380064377E /* Frameworks */,
77 | 5CFC02EB27BF60380064377E /* Resources */,
78 | );
79 | buildRules = (
80 | );
81 | dependencies = (
82 | );
83 | name = CircularSlider;
84 | productName = CircularSlider;
85 | productReference = 5CFC02ED27BF60380064377E /* CircularSlider.framework */;
86 | productType = "com.apple.product-type.framework";
87 | };
88 | /* End PBXNativeTarget section */
89 |
90 | /* Begin PBXProject section */
91 | 5CFC02E427BF60380064377E /* Project object */ = {
92 | isa = PBXProject;
93 | attributes = {
94 | BuildIndependentTargetsInParallel = 1;
95 | LastUpgradeCheck = 1310;
96 | TargetAttributes = {
97 | 5CFC02EC27BF60380064377E = {
98 | CreatedOnToolsVersion = 13.1;
99 | LastSwiftMigration = 1310;
100 | };
101 | };
102 | };
103 | buildConfigurationList = 5CFC02E727BF60380064377E /* Build configuration list for PBXProject "CircularSlider" */;
104 | compatibilityVersion = "Xcode 13.0";
105 | developmentRegion = en;
106 | hasScannedForEncodings = 0;
107 | knownRegions = (
108 | en,
109 | Base,
110 | );
111 | mainGroup = 5CFC02E327BF60380064377E;
112 | productRefGroup = 5CFC02EE27BF60380064377E /* Products */;
113 | projectDirPath = "";
114 | projectRoot = "";
115 | targets = (
116 | 5CFC02EC27BF60380064377E /* CircularSlider */,
117 | );
118 | };
119 | /* End PBXProject section */
120 |
121 | /* Begin PBXResourcesBuildPhase section */
122 | 5CFC02EB27BF60380064377E /* Resources */ = {
123 | isa = PBXResourcesBuildPhase;
124 | buildActionMask = 2147483647;
125 | files = (
126 | );
127 | runOnlyForDeploymentPostprocessing = 0;
128 | };
129 | /* End PBXResourcesBuildPhase section */
130 |
131 | /* Begin PBXSourcesBuildPhase section */
132 | 5CFC02E927BF60380064377E /* Sources */ = {
133 | isa = PBXSourcesBuildPhase;
134 | buildActionMask = 2147483647;
135 | files = (
136 | 5CFC02F827BF604C0064377E /* CircularSlider.swift in Sources */,
137 | );
138 | runOnlyForDeploymentPostprocessing = 0;
139 | };
140 | /* End PBXSourcesBuildPhase section */
141 |
142 | /* Begin XCBuildConfiguration section */
143 | 5CFC02F227BF60380064377E /* Debug */ = {
144 | isa = XCBuildConfiguration;
145 | buildSettings = {
146 | ALWAYS_SEARCH_USER_PATHS = NO;
147 | CLANG_ANALYZER_NONNULL = YES;
148 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
149 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
150 | CLANG_CXX_LIBRARY = "libc++";
151 | CLANG_ENABLE_MODULES = YES;
152 | CLANG_ENABLE_OBJC_ARC = YES;
153 | CLANG_ENABLE_OBJC_WEAK = YES;
154 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
155 | CLANG_WARN_BOOL_CONVERSION = YES;
156 | CLANG_WARN_COMMA = YES;
157 | CLANG_WARN_CONSTANT_CONVERSION = YES;
158 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
159 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
160 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
161 | CLANG_WARN_EMPTY_BODY = YES;
162 | CLANG_WARN_ENUM_CONVERSION = YES;
163 | CLANG_WARN_INFINITE_RECURSION = YES;
164 | CLANG_WARN_INT_CONVERSION = YES;
165 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
166 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
167 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
168 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
169 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
170 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
171 | CLANG_WARN_STRICT_PROTOTYPES = YES;
172 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
173 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
174 | CLANG_WARN_UNREACHABLE_CODE = YES;
175 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
176 | COPY_PHASE_STRIP = NO;
177 | CURRENT_PROJECT_VERSION = 1;
178 | DEBUG_INFORMATION_FORMAT = dwarf;
179 | ENABLE_STRICT_OBJC_MSGSEND = YES;
180 | ENABLE_TESTABILITY = YES;
181 | GCC_C_LANGUAGE_STANDARD = gnu11;
182 | GCC_DYNAMIC_NO_PIC = NO;
183 | GCC_NO_COMMON_BLOCKS = YES;
184 | GCC_OPTIMIZATION_LEVEL = 0;
185 | GCC_PREPROCESSOR_DEFINITIONS = (
186 | "DEBUG=1",
187 | "$(inherited)",
188 | );
189 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
190 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
191 | GCC_WARN_UNDECLARED_SELECTOR = YES;
192 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
193 | GCC_WARN_UNUSED_FUNCTION = YES;
194 | GCC_WARN_UNUSED_VARIABLE = YES;
195 | IPHONEOS_DEPLOYMENT_TARGET = 15.0;
196 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
197 | MTL_FAST_MATH = YES;
198 | ONLY_ACTIVE_ARCH = YES;
199 | SDKROOT = iphoneos;
200 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
201 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
202 | VERSIONING_SYSTEM = "apple-generic";
203 | VERSION_INFO_PREFIX = "";
204 | };
205 | name = Debug;
206 | };
207 | 5CFC02F327BF60380064377E /* Release */ = {
208 | isa = XCBuildConfiguration;
209 | buildSettings = {
210 | ALWAYS_SEARCH_USER_PATHS = NO;
211 | CLANG_ANALYZER_NONNULL = YES;
212 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
213 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
214 | CLANG_CXX_LIBRARY = "libc++";
215 | CLANG_ENABLE_MODULES = YES;
216 | CLANG_ENABLE_OBJC_ARC = YES;
217 | CLANG_ENABLE_OBJC_WEAK = YES;
218 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
219 | CLANG_WARN_BOOL_CONVERSION = YES;
220 | CLANG_WARN_COMMA = YES;
221 | CLANG_WARN_CONSTANT_CONVERSION = YES;
222 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
223 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
224 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
225 | CLANG_WARN_EMPTY_BODY = YES;
226 | CLANG_WARN_ENUM_CONVERSION = YES;
227 | CLANG_WARN_INFINITE_RECURSION = YES;
228 | CLANG_WARN_INT_CONVERSION = YES;
229 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
230 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
231 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
232 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
233 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
234 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
235 | CLANG_WARN_STRICT_PROTOTYPES = YES;
236 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
237 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
238 | CLANG_WARN_UNREACHABLE_CODE = YES;
239 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
240 | COPY_PHASE_STRIP = NO;
241 | CURRENT_PROJECT_VERSION = 1;
242 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
243 | ENABLE_NS_ASSERTIONS = NO;
244 | ENABLE_STRICT_OBJC_MSGSEND = YES;
245 | GCC_C_LANGUAGE_STANDARD = gnu11;
246 | GCC_NO_COMMON_BLOCKS = YES;
247 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
248 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
249 | GCC_WARN_UNDECLARED_SELECTOR = YES;
250 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
251 | GCC_WARN_UNUSED_FUNCTION = YES;
252 | GCC_WARN_UNUSED_VARIABLE = YES;
253 | IPHONEOS_DEPLOYMENT_TARGET = 15.0;
254 | MTL_ENABLE_DEBUG_INFO = NO;
255 | MTL_FAST_MATH = YES;
256 | SDKROOT = iphoneos;
257 | SWIFT_COMPILATION_MODE = wholemodule;
258 | SWIFT_OPTIMIZATION_LEVEL = "-O";
259 | VALIDATE_PRODUCT = YES;
260 | VERSIONING_SYSTEM = "apple-generic";
261 | VERSION_INFO_PREFIX = "";
262 | };
263 | name = Release;
264 | };
265 | 5CFC02F527BF60380064377E /* Debug */ = {
266 | isa = XCBuildConfiguration;
267 | buildSettings = {
268 | CLANG_ENABLE_MODULES = YES;
269 | CODE_SIGN_STYLE = Automatic;
270 | CURRENT_PROJECT_VERSION = 1;
271 | DEFINES_MODULE = YES;
272 | DEVELOPMENT_TEAM = 7224G6JACN;
273 | DYLIB_COMPATIBILITY_VERSION = 1;
274 | DYLIB_CURRENT_VERSION = 1;
275 | DYLIB_INSTALL_NAME_BASE = "@rpath";
276 | GENERATE_INFOPLIST_FILE = YES;
277 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
278 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
279 | IPHONEOS_DEPLOYMENT_TARGET = 13.0;
280 | LD_RUNPATH_SEARCH_PATHS = (
281 | "$(inherited)",
282 | "@executable_path/Frameworks",
283 | "@loader_path/Frameworks",
284 | );
285 | MARKETING_VERSION = 1.0;
286 | PRODUCT_BUNDLE_IDENTIFIER = com.mi.all.CircularSlider;
287 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
288 | SKIP_INSTALL = YES;
289 | SWIFT_EMIT_LOC_STRINGS = YES;
290 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
291 | SWIFT_VERSION = 5.0;
292 | TARGETED_DEVICE_FAMILY = "1,2";
293 | };
294 | name = Debug;
295 | };
296 | 5CFC02F627BF60380064377E /* Release */ = {
297 | isa = XCBuildConfiguration;
298 | buildSettings = {
299 | CLANG_ENABLE_MODULES = YES;
300 | CODE_SIGN_STYLE = Automatic;
301 | CURRENT_PROJECT_VERSION = 1;
302 | DEFINES_MODULE = YES;
303 | DEVELOPMENT_TEAM = 7224G6JACN;
304 | DYLIB_COMPATIBILITY_VERSION = 1;
305 | DYLIB_CURRENT_VERSION = 1;
306 | DYLIB_INSTALL_NAME_BASE = "@rpath";
307 | GENERATE_INFOPLIST_FILE = YES;
308 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
309 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
310 | IPHONEOS_DEPLOYMENT_TARGET = 13.0;
311 | LD_RUNPATH_SEARCH_PATHS = (
312 | "$(inherited)",
313 | "@executable_path/Frameworks",
314 | "@loader_path/Frameworks",
315 | );
316 | MARKETING_VERSION = 1.0;
317 | PRODUCT_BUNDLE_IDENTIFIER = com.mi.all.CircularSlider;
318 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
319 | SKIP_INSTALL = YES;
320 | SWIFT_EMIT_LOC_STRINGS = YES;
321 | SWIFT_VERSION = 5.0;
322 | TARGETED_DEVICE_FAMILY = "1,2";
323 | };
324 | name = Release;
325 | };
326 | /* End XCBuildConfiguration section */
327 |
328 | /* Begin XCConfigurationList section */
329 | 5CFC02E727BF60380064377E /* Build configuration list for PBXProject "CircularSlider" */ = {
330 | isa = XCConfigurationList;
331 | buildConfigurations = (
332 | 5CFC02F227BF60380064377E /* Debug */,
333 | 5CFC02F327BF60380064377E /* Release */,
334 | );
335 | defaultConfigurationIsVisible = 0;
336 | defaultConfigurationName = Release;
337 | };
338 | 5CFC02F427BF60380064377E /* Build configuration list for PBXNativeTarget "CircularSlider" */ = {
339 | isa = XCConfigurationList;
340 | buildConfigurations = (
341 | 5CFC02F527BF60380064377E /* Debug */,
342 | 5CFC02F627BF60380064377E /* Release */,
343 | );
344 | defaultConfigurationIsVisible = 0;
345 | defaultConfigurationName = Release;
346 | };
347 | /* End XCConfigurationList section */
348 | };
349 | rootObject = 5CFC02E427BF60380064377E /* Project object */;
350 | }
351 |
--------------------------------------------------------------------------------