├── ActivityIndicatorViewExample
├── ActivityIndicatorViewExample
│ ├── Assets.xcassets
│ │ ├── Contents.json
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── Preview Content
│ │ └── Preview Assets.xcassets
│ │ │ └── Contents.json
│ ├── ActivityIndicatorViewExampleApp.swift
│ └── ContentView.swift
└── ActivityIndicatorViewExample.xcodeproj
│ └── project.pbxproj
├── .swiftpm
└── xcode
│ └── package.xcworkspace
│ └── contents.xcworkspacedata
├── Package.swift
├── Sources
└── ActivityIndicatorView
│ ├── ActivityIndicatorView.h
│ ├── Info.plist
│ ├── Indicators
│ ├── GrowingCircleIndicatorView.swift
│ ├── GradientIndicatorView.swift
│ ├── EqualizerIndicatorView.swift
│ ├── ScalingDotsIndicatorView.swift
│ ├── RotatingDotsIndicatorView.swift
│ ├── OpacityDotsIndicatorView.swift
│ ├── DefaultIndicatorView.swift
│ ├── FlickeringDotsIndicatorView.swift
│ ├── ArcsIndicatorView.swift
│ └── GrowingArcIndicatorView.swift
│ └── ActivityIndicatorView.swift
├── LICENSE
├── .gitignore
└── README.md
/ActivityIndicatorViewExample/ActivityIndicatorViewExample/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ActivityIndicatorViewExample/ActivityIndicatorViewExample/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ActivityIndicatorViewExample/ActivityIndicatorViewExample/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 |
--------------------------------------------------------------------------------
/ActivityIndicatorViewExample/ActivityIndicatorViewExample/ActivityIndicatorViewExampleApp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ActivityIndicatorViewExampleApp.swift
3 | // ActivityIndicatorViewExample
4 | //
5 | // Created by Alisa Mylnikova on 25.03.2025.
6 | //
7 |
8 | import SwiftUI
9 |
10 | @main
11 | struct ActivityIndicatorViewExampleApp: App {
12 | var body: some Scene {
13 | WindowGroup {
14 | ContentView()
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version: 5.9
2 |
3 | import PackageDescription
4 |
5 | let package = Package(
6 | name: "ActivityIndicatorView",
7 | platforms: [
8 | .macOS(.v10_15),
9 | .iOS(.v13),
10 | .watchOS(.v6),
11 | .tvOS(.v13)
12 | ],
13 | products: [
14 | .library(
15 | name: "ActivityIndicatorView",
16 | targets: ["ActivityIndicatorView"]
17 | )
18 | ],
19 | targets: [
20 | .target(
21 | name: "ActivityIndicatorView",
22 | swiftSettings: [
23 | .enableExperimentalFeature("StrictConcurrency")
24 | ]
25 | )
26 | ]
27 | )
28 |
--------------------------------------------------------------------------------
/Sources/ActivityIndicatorView/ActivityIndicatorView.h:
--------------------------------------------------------------------------------
1 | //
2 | // ActivityIndicatorView.h
3 | // ActivityIndicatorView
4 | //
5 | // Created by Alisa Mylnikova on 20/03/2020.
6 | // Copyright © 2020 Exyte. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for ActivityIndicatorView.
12 | FOUNDATION_EXPORT double ActivityIndicatorViewVersionNumber;
13 |
14 | //! Project version string for ActivityIndicatorView.
15 | FOUNDATION_EXPORT const unsigned char ActivityIndicatorViewVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/ActivityIndicatorViewExample/ActivityIndicatorViewExample/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "platform" : "ios",
6 | "size" : "1024x1024"
7 | },
8 | {
9 | "appearances" : [
10 | {
11 | "appearance" : "luminosity",
12 | "value" : "dark"
13 | }
14 | ],
15 | "idiom" : "universal",
16 | "platform" : "ios",
17 | "size" : "1024x1024"
18 | },
19 | {
20 | "appearances" : [
21 | {
22 | "appearance" : "luminosity",
23 | "value" : "tinted"
24 | }
25 | ],
26 | "idiom" : "universal",
27 | "platform" : "ios",
28 | "size" : "1024x1024"
29 | }
30 | ],
31 | "info" : {
32 | "author" : "xcode",
33 | "version" : 1
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Sources/ActivityIndicatorView/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Sources/ActivityIndicatorView/Indicators/GrowingCircleIndicatorView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GrowingCircleIndicatorView.swift
3 | // ActivityIndicatorView
4 | //
5 | // Created by Daniil Manin on 10/7/20.
6 | // Copyright © 2020 Exyte. All rights reserved.
7 | //
8 |
9 | import SwiftUI
10 |
11 | struct GrowingCircleIndicatorView: View {
12 |
13 | @State private var scale: CGFloat = 0
14 | @State private var opacity: Double = 0
15 |
16 | var body: some View {
17 | let animation = Animation
18 | .easeIn(duration: 1.1)
19 | .repeatForever(autoreverses: false)
20 |
21 | return Circle()
22 | .scaleEffect(scale)
23 | .opacity(opacity)
24 | .onAppear {
25 | scale = 0
26 | opacity = 1
27 | DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) {
28 | withAnimation(animation) {
29 | scale = 1
30 | opacity = 0
31 | }
32 | }
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 exyte
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Sources/ActivityIndicatorView/Indicators/GradientIndicatorView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GradientIndicatorView.swift
3 | // ActivityIndicatorView
4 | //
5 | // Created by Daniil Manin on 10/7/20.
6 | // Copyright © 2020 Exyte. All rights reserved.
7 | //
8 |
9 | import SwiftUI
10 |
11 | struct GradientIndicatorView: View {
12 |
13 | let colors: [Color]
14 | let lineCap: CGLineCap
15 | let lineWidth: CGFloat
16 |
17 | @State private var rotation: Double = 0
18 |
19 | var body: some View {
20 | let gradientColors = Gradient(colors: colors)
21 | let conic = AngularGradient(gradient: gradientColors, center: .center, startAngle: .zero, endAngle: .degrees(360))
22 |
23 | let animation = Animation
24 | .linear(duration: 1.5)
25 | .repeatForever(autoreverses: false)
26 |
27 | return ZStack {
28 | Circle()
29 | .stroke(colors.first ?? .white, lineWidth: lineWidth)
30 |
31 | Circle()
32 | .trim(from: lineWidth / 500, to: 1 - lineWidth / 100)
33 | .stroke(conic, style: StrokeStyle(lineWidth: lineWidth, lineCap: lineCap))
34 | .rotationEffect(.degrees(rotation))
35 | .onAppear {
36 | rotation = 0
37 | DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) {
38 | withAnimation(animation) {
39 | rotation = 360
40 | }
41 | }
42 | }
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/Sources/ActivityIndicatorView/Indicators/EqualizerIndicatorView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // EqualizerIndicatorView.swift
3 | // ActivityIndicatorView
4 | //
5 | // Created by Daniil Manin on 10/7/20.
6 | // Copyright © 2020 Exyte. All rights reserved.
7 | //
8 |
9 | import SwiftUI
10 |
11 | struct EqualizerIndicatorView: View {
12 |
13 | let count: Int
14 |
15 | var body: some View {
16 | GeometryReader { geometry in
17 | ForEach(0.. Path in
41 | var p = Path()
42 | p.addArc(center: CGPoint(x: size.width / 2, y: size.height / 2),
43 | radius: size.width / 2 - CGFloat(index) * CGFloat(count),
44 | startAngle: .degrees(0),
45 | endAngle: .degrees(Double(Int.random(in: 120...300))),
46 | clockwise: true)
47 | return p.strokedPath(.init(lineWidth: lineWidth))
48 | }
49 | .frame(width: size.width, height: size.height)
50 | .rotationEffect(.degrees(rotation))
51 | .onAppear {
52 | rotation = 0
53 | DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) {
54 | withAnimation(animation) {
55 | rotation = 360
56 | }
57 | }
58 | }
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/Sources/ActivityIndicatorView/Indicators/GrowingArcIndicatorView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GrowingArcIndicatorView.swift
3 | // ActivityIndicatorView
4 | //
5 | // Created by Daniil Manin on 10/7/20.
6 | // Copyright © 2020 Exyte. All rights reserved.
7 | //
8 |
9 | import SwiftUI
10 |
11 | struct GrowingArcIndicatorView: View {
12 |
13 | let color: Color
14 | let lineWidth: CGFloat
15 |
16 | @State private var animatableParameter: Double = 0
17 |
18 | public var body: some View {
19 | let animation = Animation
20 | .easeIn(duration: 2)
21 | .repeatForever(autoreverses: false)
22 |
23 | return GrowingArc(p: animatableParameter)
24 | .stroke(color, lineWidth: lineWidth)
25 | .onAppear {
26 | animatableParameter = 0
27 | DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) {
28 | withAnimation(animation) {
29 | animatableParameter = 1
30 | }
31 | }
32 | }
33 | }
34 | }
35 |
36 | struct GrowingArc: Shape {
37 |
38 | var maxLength = 2 * Double.pi - 0.7
39 | var lag = 0.35
40 | var p: Double
41 |
42 | var animatableData: Double {
43 | get { return p }
44 | set { p = newValue }
45 | }
46 |
47 | func path(in rect: CGRect) -> Path {
48 |
49 | let h = p * 2
50 | var length = h * maxLength
51 | if h > 1 && h < lag + 1 {
52 | length = maxLength
53 | }
54 | if h > lag + 1 {
55 | let coeff = 1 / (1 - lag)
56 | let n = h - 1 - lag
57 | length = (1 - n * coeff) * maxLength
58 | }
59 |
60 | let first = Double.pi / 2
61 | let second = 4 * Double.pi - first
62 |
63 | var end = h * first
64 | if h > 1 {
65 | end = first + (h - 1) * second
66 | }
67 |
68 | let start = end + length
69 |
70 | var p = Path()
71 | p.addArc(center: CGPoint(x: rect.size.width/2, y: rect.size.width/2),
72 | radius: rect.size.width/2,
73 | startAngle: Angle(radians: start),
74 | endAngle: Angle(radians: end),
75 | clockwise: true)
76 | return p
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/Sources/ActivityIndicatorView/ActivityIndicatorView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ActivityIndicatorView.swift
3 | // ActivityIndicatorView
4 | //
5 | // Created by Alisa Mylnikova on 20/03/2020.
6 | // Copyright © 2020 Exyte. All rights reserved.
7 | //
8 |
9 | import SwiftUI
10 |
11 | public struct ActivityIndicatorView: View {
12 |
13 | public enum IndicatorType {
14 | case `default`(count: Int = 8)
15 | case arcs(count: Int = 3, lineWidth: CGFloat = 2)
16 | case rotatingDots(count: Int = 5)
17 | case flickeringDots(count: Int = 8)
18 | case scalingDots(count: Int = 3, inset: Int = 2)
19 | case opacityDots(count: Int = 3, inset: Int = 4)
20 | case equalizer(count: Int = 5)
21 | case growingArc(Color = .black, lineWidth: CGFloat = 4)
22 | case growingCircle
23 | case gradient(_ colors: [Color], CGLineCap = .butt, lineWidth: CGFloat = 4)
24 | }
25 |
26 | @Binding var isVisible: Bool
27 | var type: IndicatorType
28 |
29 | public init(isVisible: Binding, type: IndicatorType) {
30 | _isVisible = isVisible
31 | self.type = type
32 | }
33 |
34 | public var body: some View {
35 | if isVisible {
36 | indicator
37 | } else {
38 | EmptyView()
39 | }
40 | }
41 |
42 | // MARK: - Private
43 |
44 | private var indicator: some View {
45 | ZStack {
46 | switch type {
47 | case .default(let count):
48 | DefaultIndicatorView(count: count)
49 | case .arcs(let count, let lineWidth):
50 | ArcsIndicatorView(count: count, lineWidth: lineWidth)
51 | case .rotatingDots(let count):
52 | RotatingDotsIndicatorView(count: count)
53 | case .flickeringDots(let count):
54 | FlickeringDotsIndicatorView(count: count)
55 | case .scalingDots(let count, let inset):
56 | ScalingDotsIndicatorView(count: count, inset: inset)
57 | case .opacityDots(let count, let inset):
58 | OpacityDotsIndicatorView(count: count, inset: inset)
59 | case .equalizer(let count):
60 | EqualizerIndicatorView(count: count)
61 | case .growingArc(let color, let lineWidth):
62 | GrowingArcIndicatorView(color: color, lineWidth: lineWidth)
63 | case .growingCircle:
64 | GrowingCircleIndicatorView()
65 | case .gradient(let colors, let lineCap, let lineWidth):
66 | GradientIndicatorView(colors: colors, lineCap: lineCap, lineWidth: lineWidth)
67 | }
68 | }
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/ActivityIndicatorViewExample/ActivityIndicatorViewExample/ContentView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ContentView.swift
3 | // Example
4 | //
5 | // Created by Alisa Mylnikova on 20/03/2020.
6 | // Copyright © 2020 Exyte. All rights reserved.
7 | //
8 |
9 | import SwiftUI
10 | import ActivityIndicatorView
11 |
12 | struct ContentView: View {
13 |
14 | @State private var showLoadingIndicator: Bool = true
15 |
16 | var body: some View {
17 | GeometryReader { geometry in
18 | let size = geometry.size.width / 5
19 | let spacing: CGFloat = 40.0
20 |
21 | VStack {
22 | HStack {
23 | Spacer()
24 | VStack(spacing: spacing) {
25 | Spacer()
26 | ActivityIndicatorView(isVisible: $showLoadingIndicator, type: .default())
27 | .frame(width: size, height: size)
28 | .foregroundColor(.red)
29 | ActivityIndicatorView(isVisible: $showLoadingIndicator, type: .arcs())
30 | .frame(width: size, height: size)
31 | .foregroundColor(.red)
32 | ActivityIndicatorView(isVisible: $showLoadingIndicator, type: .rotatingDots())
33 | .frame(width: size, height: size)
34 | .foregroundColor(.red)
35 | ActivityIndicatorView(isVisible: $showLoadingIndicator, type: .equalizer())
36 | .frame(width: size, height: size)
37 | .foregroundColor(.red)
38 | ActivityIndicatorView(isVisible: $showLoadingIndicator, type: .growingArc(.red))
39 | .frame(width: size, height: size)
40 | .foregroundColor(.red)
41 | Spacer()
42 | }
43 |
44 | Spacer()
45 |
46 | VStack(spacing: spacing) {
47 | Spacer()
48 | ActivityIndicatorView(isVisible: $showLoadingIndicator, type: .opacityDots())
49 | .frame(width: size, height: size)
50 | .foregroundColor(.red)
51 | ActivityIndicatorView(isVisible: $showLoadingIndicator, type: .scalingDots())
52 | .frame(width: size, height: size)
53 | .foregroundColor(.red)
54 | ActivityIndicatorView(isVisible: $showLoadingIndicator, type: .gradient([Color.white, Color.red]))
55 | .frame(width: size, height: size)
56 | ActivityIndicatorView(isVisible: $showLoadingIndicator, type: .growingCircle)
57 | .frame(width: size, height: size)
58 | .foregroundColor(.red)
59 | ActivityIndicatorView(isVisible: $showLoadingIndicator, type: .flickeringDots())
60 | .frame(width: size, height: size)
61 | .foregroundColor(.red)
62 | Spacer()
63 | }
64 | Spacer()
65 | }
66 | }
67 | }
68 | }
69 | }
70 |
71 | struct ContentView_Previews: PreviewProvider {
72 | static var previews: some View {
73 | ContentView()
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.gitignore.io/api/swift,macos,carthage,cocoapods
3 | # Edit at https://www.gitignore.io/?templates=swift,macos,carthage,cocoapods
4 |
5 | ### Carthage ###
6 | # Carthage
7 | #
8 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
9 | # Carthage/Checkouts
10 |
11 | Carthage/Build
12 |
13 | ### CocoaPods ###
14 | ## CocoaPods GitIgnore Template
15 |
16 | # CocoaPods - Only use to conserve bandwidth / Save time on Pushing
17 | # - Also handy if you have a large number of dependant pods
18 | # - AS PER https://guides.cocoapods.org/using/using-cocoapods.html NEVER IGNORE THE LOCK FILE
19 | Pods/
20 |
21 | ### macOS ###
22 | # General
23 | .DS_Store
24 | .AppleDouble
25 | .LSOverride
26 |
27 | # Icon must end with two \r
28 | Icon
29 |
30 | # Thumbnails
31 | ._*
32 |
33 | # Files that might appear in the root of a volume
34 | .DocumentRevisions-V100
35 | .fseventsd
36 | .Spotlight-V100
37 | .TemporaryItems
38 | .Trashes
39 | .VolumeIcon.icns
40 | .com.apple.timemachine.donotpresent
41 |
42 | # Directories potentially created on remote AFP share
43 | .AppleDB
44 | .AppleDesktop
45 | Network Trash Folder
46 | Temporary Items
47 | .apdisk
48 |
49 | ### Swift ###
50 | # Xcode
51 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
52 |
53 | ## Build generated
54 | build/
55 | DerivedData/
56 |
57 | ## Various settings
58 | *.pbxuser
59 | !default.pbxuser
60 | *.mode1v3
61 | !default.mode1v3
62 | *.mode2v3
63 | !default.mode2v3
64 | *.perspectivev3
65 | !default.perspectivev3
66 | xcuserdata/
67 |
68 | ## Other
69 | *.moved-aside
70 | *.xccheckout
71 | *.xcscmblueprint
72 |
73 | ## Obj-C/Swift specific
74 | *.hmap
75 | *.ipa
76 | *.dSYM.zip
77 | *.dSYM
78 |
79 | ## Playgrounds
80 | timeline.xctimeline
81 | playground.xcworkspace
82 |
83 | # Swift Package Manager
84 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
85 | # Packages/
86 | # Package.pins
87 | # Package.resolved
88 | .build/
89 | # Add this line if you want to avoid checking in Xcode SPM integration.
90 | # .swiftpm/xcode
91 |
92 | # CocoaPods
93 | # We recommend against adding the Pods directory to your .gitignore. However
94 | # you should judge for yourself, the pros and cons are mentioned at:
95 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
96 | # Pods/
97 | # Add this line if you want to avoid checking in source code from the Xcode workspace
98 | # *.xcworkspace
99 |
100 | # Carthage
101 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
102 | # Carthage/Checkouts
103 |
104 |
105 | # Accio dependency management
106 | Dependencies/
107 | .accio/
108 |
109 | # fastlane
110 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
111 | # screenshots whenever they are needed.
112 | # For more information about the recommended setup visit:
113 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
114 |
115 | fastlane/report.xml
116 | fastlane/Preview.html
117 | fastlane/screenshots/**/*.png
118 | fastlane/test_output
119 |
120 | # Code Injection
121 | # After new code Injection tools there's a generated folder /iOSInjectionProject
122 | # https://github.com/johnno1962/injectionforxcode
123 |
124 | iOSInjectionProject/
125 |
126 | # End of https://www.gitignore.io/api/swift,macos,carthage,cocoapods
127 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | ActivityIndicatorView
9 |
10 | A number of preset loading indicators created with SwiftUI
11 |
12 | 
13 | [](https://swiftpackageindex.com/exyte/ActivityIndicatorView)
14 | [](https://swiftpackageindex.com/exyte/ActivityIndicatorView)
15 | [](https://swiftpackageindex.com/exyte/ActivityIndicatorView)
16 | [](https://cocoapods.org/pods/ActivityIndicatorView)
17 | [](https://opensource.org/licenses/MIT)
18 |
19 | # Usage
20 |
21 | Create an indicator like this:
22 | ```swift
23 | ActivityIndicatorView(isVisible: $showLoadingIndicator, type: .default)
24 | ```
25 | where
26 | `showLoadingIndicator` - bool value you may change to display or hide the indicator
27 | `type` - value from `ActivityIndicatorView.IndicatorType` enum
28 |
29 | You may alter it with standard SwiftUI means like this:
30 | ```swift
31 | ActivityIndicatorView(isVisible: $showLoadingIndicator, type: .default)
32 | .frame(width: 50.0, height: 50.0)
33 | .foregroundColor(.red)
34 | ```
35 | Or specify another indicator type:
36 |
37 | ```swift
38 | ActivityIndicatorView(isVisible: $showLoadingIndicator, type: .growingArc(.red, lineWidth: 4))
39 | .frame(width: 50.0, height: 50.0)
40 | ```
41 |
42 | ### Indicator types
43 | Each indicator type has a number of parameters that have reasonable defaults. You can change them as you see fit, but it is advised to not set them too high or too low.
44 |
45 | `default` - iOS UIActivityIndicator style
46 | ```swift
47 | .default(count: 8)
48 | ```
49 | `arcs`
50 | ```swift
51 | .arcs(count: 3, lineWidth: 2)
52 | ```
53 | `rotatingDots`
54 | ```swift
55 | .rotatingDots(count: 5)
56 | ```
57 | `flickeringDots`
58 | ```swift
59 | .flickeringDots(count: 8)
60 | ```
61 | `scalingDots`
62 | ```swift
63 | .scalingDots(count: 3, inset: 2)
64 | ```
65 | `opacityDots`
66 | ```swift
67 | .opacityDots(count: 3, inset: 4)
68 | ```
69 | `equalizer`
70 | ```swift
71 | .equalizer(count: 5)
72 | ```
73 | `growingArc` - add custom color for growing Arc, the default value is `Color.black`
74 | ```swift
75 | .growingArc(.red, lineWidth: 4)
76 | ```
77 | `growingCircle` - no parameters
78 | `gradient` - circle with angular gradient border stroke, pass colors like this:
79 | ```swift
80 | .gradient([.white, .red], lineWidth: 4)
81 | ```
82 |
83 | ## Examples
84 |
85 | To try ActivityIndicatorView examples:
86 | - Clone the repo `https://github.com/exyte/ActivityIndicatorView.git`
87 | - Open `ActivityIndicatorViewExample.xcodeproj`
88 | - Try it!
89 |
90 | ## Installation
91 |
92 | ### [Swift Package Manager](https://swift.org/package-manager/)
93 |
94 | ```swift
95 | dependencies: [
96 | .package(url: "https://github.com/exyte/ActivityIndicatorView.git")
97 | ]
98 | ```
99 |
100 | ## Requirements
101 |
102 | * iOS 13+ / watchOS 6+ / tvOS 13+ / macOS 10.15+
103 | * Xcode 11+
104 |
105 | ## Our other open source SwiftUI libraries
106 | [PopupView](https://github.com/exyte/PopupView) - Toasts and popups library
107 | [AnchoredPopup](https://github.com/exyte/AnchoredPopup) - Anchored Popup grows "out" of a trigger view (similar to Hero animation)
108 | [Grid](https://github.com/exyte/Grid) - The most powerful Grid container
109 | [ScalingHeaderScrollView](https://github.com/exyte/ScalingHeaderScrollView) - A scroll view with a sticky header which shrinks as you scroll
110 | [AnimatedTabBar](https://github.com/exyte/AnimatedTabBar) - A tabbar with a number of preset animations
111 | [MediaPicker](https://github.com/exyte/mediapicker) - Customizable media picker
112 | [Chat](https://github.com/exyte/chat) - Chat UI framework with fully customizable message cells, input view, and a built-in media picker
113 | [OpenAI](https://github.com/exyte/OpenAI) Wrapper lib for [OpenAI REST API](https://platform.openai.com/docs/api-reference/introduction)
114 | [AnimatedGradient](https://github.com/exyte/AnimatedGradient) - Animated linear gradient
115 | [ConcentricOnboarding](https://github.com/exyte/ConcentricOnboarding) - Animated onboarding flow
116 | [FloatingButton](https://github.com/exyte/FloatingButton) - Floating button menu
117 | [ProgressIndicatorView](https://github.com/exyte/ProgressIndicatorView) - A number of animated progress indicators
118 | [FlagAndCountryCode](https://github.com/exyte/FlagAndCountryCode) - Phone codes and flags for every country
119 | [SVGView](https://github.com/exyte/SVGView) - SVG parser
120 | [LiquidSwipe](https://github.com/exyte/LiquidSwipe) - Liquid navigation animation
121 |
122 |
--------------------------------------------------------------------------------
/ActivityIndicatorViewExample/ActivityIndicatorViewExample.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 77;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 5B4D04F52D92F93B005262A1 /* ActivityIndicatorView in Frameworks */ = {isa = PBXBuildFile; productRef = 5B4D04F42D92F93B005262A1 /* ActivityIndicatorView */; };
11 | 5B4DBAC42D92EC070067A006 /* ActivityIndicatorView in Frameworks */ = {isa = PBXBuildFile; productRef = 5B4DBAC32D92EC070067A006 /* ActivityIndicatorView */; };
12 | /* End PBXBuildFile section */
13 |
14 | /* Begin PBXFileReference section */
15 | 5B4DBAB02D92EB130067A006 /* ActivityIndicatorViewExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ActivityIndicatorViewExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
16 | /* End PBXFileReference section */
17 |
18 | /* Begin PBXFileSystemSynchronizedRootGroup section */
19 | 5B4DBAB22D92EB130067A006 /* ActivityIndicatorViewExample */ = {
20 | isa = PBXFileSystemSynchronizedRootGroup;
21 | path = ActivityIndicatorViewExample;
22 | sourceTree = "";
23 | };
24 | /* End PBXFileSystemSynchronizedRootGroup section */
25 |
26 | /* Begin PBXFrameworksBuildPhase section */
27 | 5B4DBAAD2D92EB130067A006 /* Frameworks */ = {
28 | isa = PBXFrameworksBuildPhase;
29 | buildActionMask = 2147483647;
30 | files = (
31 | 5B4D04F52D92F93B005262A1 /* ActivityIndicatorView in Frameworks */,
32 | 5B4DBAC42D92EC070067A006 /* ActivityIndicatorView in Frameworks */,
33 | );
34 | runOnlyForDeploymentPostprocessing = 0;
35 | };
36 | /* End PBXFrameworksBuildPhase section */
37 |
38 | /* Begin PBXGroup section */
39 | 5B4DBAA72D92EB130067A006 = {
40 | isa = PBXGroup;
41 | children = (
42 | 5B4DBAB22D92EB130067A006 /* ActivityIndicatorViewExample */,
43 | 5B4DBAC22D92EC070067A006 /* Frameworks */,
44 | 5B4DBAB12D92EB130067A006 /* Products */,
45 | );
46 | sourceTree = "";
47 | };
48 | 5B4DBAB12D92EB130067A006 /* Products */ = {
49 | isa = PBXGroup;
50 | children = (
51 | 5B4DBAB02D92EB130067A006 /* ActivityIndicatorViewExample.app */,
52 | );
53 | name = Products;
54 | sourceTree = "";
55 | };
56 | 5B4DBAC22D92EC070067A006 /* Frameworks */ = {
57 | isa = PBXGroup;
58 | children = (
59 | );
60 | name = Frameworks;
61 | sourceTree = "";
62 | };
63 | /* End PBXGroup section */
64 |
65 | /* Begin PBXNativeTarget section */
66 | 5B4DBAAF2D92EB130067A006 /* ActivityIndicatorViewExample */ = {
67 | isa = PBXNativeTarget;
68 | buildConfigurationList = 5B4DBABE2D92EB140067A006 /* Build configuration list for PBXNativeTarget "ActivityIndicatorViewExample" */;
69 | buildPhases = (
70 | 5B4DBAAC2D92EB130067A006 /* Sources */,
71 | 5B4DBAAD2D92EB130067A006 /* Frameworks */,
72 | 5B4DBAAE2D92EB130067A006 /* Resources */,
73 | );
74 | buildRules = (
75 | );
76 | dependencies = (
77 | );
78 | fileSystemSynchronizedGroups = (
79 | 5B4DBAB22D92EB130067A006 /* ActivityIndicatorViewExample */,
80 | );
81 | name = ActivityIndicatorViewExample;
82 | packageProductDependencies = (
83 | 5B4DBAC32D92EC070067A006 /* ActivityIndicatorView */,
84 | 5B4D04F42D92F93B005262A1 /* ActivityIndicatorView */,
85 | );
86 | productName = ActivityIndicatorViewExample;
87 | productReference = 5B4DBAB02D92EB130067A006 /* ActivityIndicatorViewExample.app */;
88 | productType = "com.apple.product-type.application";
89 | };
90 | /* End PBXNativeTarget section */
91 |
92 | /* Begin PBXProject section */
93 | 5B4DBAA82D92EB130067A006 /* Project object */ = {
94 | isa = PBXProject;
95 | attributes = {
96 | BuildIndependentTargetsInParallel = 1;
97 | LastSwiftUpdateCheck = 1620;
98 | LastUpgradeCheck = 1620;
99 | TargetAttributes = {
100 | 5B4DBAAF2D92EB130067A006 = {
101 | CreatedOnToolsVersion = 16.2;
102 | };
103 | };
104 | };
105 | buildConfigurationList = 5B4DBAAB2D92EB130067A006 /* Build configuration list for PBXProject "ActivityIndicatorViewExample" */;
106 | developmentRegion = en;
107 | hasScannedForEncodings = 0;
108 | knownRegions = (
109 | en,
110 | Base,
111 | );
112 | mainGroup = 5B4DBAA72D92EB130067A006;
113 | minimizedProjectReferenceProxies = 1;
114 | packageReferences = (
115 | 5B4D04F32D92F93B005262A1 /* XCLocalSwiftPackageReference "../../ActivityIndicatorView" */,
116 | );
117 | preferredProjectObjectVersion = 77;
118 | productRefGroup = 5B4DBAB12D92EB130067A006 /* Products */;
119 | projectDirPath = "";
120 | projectRoot = "";
121 | targets = (
122 | 5B4DBAAF2D92EB130067A006 /* ActivityIndicatorViewExample */,
123 | );
124 | };
125 | /* End PBXProject section */
126 |
127 | /* Begin PBXResourcesBuildPhase section */
128 | 5B4DBAAE2D92EB130067A006 /* Resources */ = {
129 | isa = PBXResourcesBuildPhase;
130 | buildActionMask = 2147483647;
131 | files = (
132 | );
133 | runOnlyForDeploymentPostprocessing = 0;
134 | };
135 | /* End PBXResourcesBuildPhase section */
136 |
137 | /* Begin PBXSourcesBuildPhase section */
138 | 5B4DBAAC2D92EB130067A006 /* Sources */ = {
139 | isa = PBXSourcesBuildPhase;
140 | buildActionMask = 2147483647;
141 | files = (
142 | );
143 | runOnlyForDeploymentPostprocessing = 0;
144 | };
145 | /* End PBXSourcesBuildPhase section */
146 |
147 | /* Begin XCBuildConfiguration section */
148 | 5B4DBABC2D92EB140067A006 /* Debug */ = {
149 | isa = XCBuildConfiguration;
150 | buildSettings = {
151 | ALWAYS_SEARCH_USER_PATHS = NO;
152 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
153 | CLANG_ANALYZER_NONNULL = YES;
154 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
155 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
156 | CLANG_ENABLE_MODULES = YES;
157 | CLANG_ENABLE_OBJC_ARC = YES;
158 | CLANG_ENABLE_OBJC_WEAK = YES;
159 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
160 | CLANG_WARN_BOOL_CONVERSION = YES;
161 | CLANG_WARN_COMMA = YES;
162 | CLANG_WARN_CONSTANT_CONVERSION = YES;
163 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
164 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
165 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
166 | CLANG_WARN_EMPTY_BODY = YES;
167 | CLANG_WARN_ENUM_CONVERSION = YES;
168 | CLANG_WARN_INFINITE_RECURSION = YES;
169 | CLANG_WARN_INT_CONVERSION = YES;
170 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
171 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
172 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
173 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
174 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
175 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
176 | CLANG_WARN_STRICT_PROTOTYPES = YES;
177 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
178 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
179 | CLANG_WARN_UNREACHABLE_CODE = YES;
180 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
181 | COPY_PHASE_STRIP = NO;
182 | DEBUG_INFORMATION_FORMAT = dwarf;
183 | ENABLE_STRICT_OBJC_MSGSEND = YES;
184 | ENABLE_TESTABILITY = YES;
185 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
186 | GCC_C_LANGUAGE_STANDARD = gnu17;
187 | GCC_DYNAMIC_NO_PIC = NO;
188 | GCC_NO_COMMON_BLOCKS = YES;
189 | GCC_OPTIMIZATION_LEVEL = 0;
190 | GCC_PREPROCESSOR_DEFINITIONS = (
191 | "DEBUG=1",
192 | "$(inherited)",
193 | );
194 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
195 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
196 | GCC_WARN_UNDECLARED_SELECTOR = YES;
197 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
198 | GCC_WARN_UNUSED_FUNCTION = YES;
199 | GCC_WARN_UNUSED_VARIABLE = YES;
200 | IPHONEOS_DEPLOYMENT_TARGET = 18.2;
201 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
202 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
203 | MTL_FAST_MATH = YES;
204 | ONLY_ACTIVE_ARCH = YES;
205 | SDKROOT = iphoneos;
206 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
207 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
208 | SWIFT_VERSION = 6.0;
209 | };
210 | name = Debug;
211 | };
212 | 5B4DBABD2D92EB140067A006 /* Release */ = {
213 | isa = XCBuildConfiguration;
214 | buildSettings = {
215 | ALWAYS_SEARCH_USER_PATHS = NO;
216 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
217 | CLANG_ANALYZER_NONNULL = YES;
218 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
219 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
220 | CLANG_ENABLE_MODULES = YES;
221 | CLANG_ENABLE_OBJC_ARC = YES;
222 | CLANG_ENABLE_OBJC_WEAK = YES;
223 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
224 | CLANG_WARN_BOOL_CONVERSION = YES;
225 | CLANG_WARN_COMMA = YES;
226 | CLANG_WARN_CONSTANT_CONVERSION = YES;
227 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
228 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
229 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
230 | CLANG_WARN_EMPTY_BODY = YES;
231 | CLANG_WARN_ENUM_CONVERSION = YES;
232 | CLANG_WARN_INFINITE_RECURSION = YES;
233 | CLANG_WARN_INT_CONVERSION = YES;
234 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
235 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
236 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
237 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
238 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
239 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
240 | CLANG_WARN_STRICT_PROTOTYPES = YES;
241 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
242 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
243 | CLANG_WARN_UNREACHABLE_CODE = YES;
244 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
245 | COPY_PHASE_STRIP = NO;
246 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
247 | ENABLE_NS_ASSERTIONS = NO;
248 | ENABLE_STRICT_OBJC_MSGSEND = YES;
249 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
250 | GCC_C_LANGUAGE_STANDARD = gnu17;
251 | GCC_NO_COMMON_BLOCKS = YES;
252 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
253 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
254 | GCC_WARN_UNDECLARED_SELECTOR = YES;
255 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
256 | GCC_WARN_UNUSED_FUNCTION = YES;
257 | GCC_WARN_UNUSED_VARIABLE = YES;
258 | IPHONEOS_DEPLOYMENT_TARGET = 18.2;
259 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
260 | MTL_ENABLE_DEBUG_INFO = NO;
261 | MTL_FAST_MATH = YES;
262 | SDKROOT = iphoneos;
263 | SWIFT_COMPILATION_MODE = wholemodule;
264 | SWIFT_VERSION = 6.0;
265 | VALIDATE_PRODUCT = YES;
266 | };
267 | name = Release;
268 | };
269 | 5B4DBABF2D92EB140067A006 /* Debug */ = {
270 | isa = XCBuildConfiguration;
271 | buildSettings = {
272 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
273 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
274 | CODE_SIGN_STYLE = Automatic;
275 | CURRENT_PROJECT_VERSION = 1;
276 | DEVELOPMENT_ASSET_PATHS = "\"ActivityIndicatorViewExample/Preview Content\"";
277 | DEVELOPMENT_TEAM = FZXCM5CJ7P;
278 | ENABLE_PREVIEWS = YES;
279 | GENERATE_INFOPLIST_FILE = YES;
280 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
281 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
282 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
283 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
284 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
285 | LD_RUNPATH_SEARCH_PATHS = (
286 | "$(inherited)",
287 | "@executable_path/Frameworks",
288 | );
289 | MARKETING_VERSION = 1.0;
290 | PRODUCT_BUNDLE_IDENTIFIER = com.exyte.ActivityIndicatorViewExample;
291 | PRODUCT_NAME = "$(TARGET_NAME)";
292 | SWIFT_EMIT_LOC_STRINGS = YES;
293 | SWIFT_VERSION = 6.0;
294 | TARGETED_DEVICE_FAMILY = "1,2";
295 | };
296 | name = Debug;
297 | };
298 | 5B4DBAC02D92EB140067A006 /* Release */ = {
299 | isa = XCBuildConfiguration;
300 | buildSettings = {
301 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
302 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
303 | CODE_SIGN_STYLE = Automatic;
304 | CURRENT_PROJECT_VERSION = 1;
305 | DEVELOPMENT_ASSET_PATHS = "\"ActivityIndicatorViewExample/Preview Content\"";
306 | DEVELOPMENT_TEAM = FZXCM5CJ7P;
307 | ENABLE_PREVIEWS = YES;
308 | GENERATE_INFOPLIST_FILE = YES;
309 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
310 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
311 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
312 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
313 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
314 | LD_RUNPATH_SEARCH_PATHS = (
315 | "$(inherited)",
316 | "@executable_path/Frameworks",
317 | );
318 | MARKETING_VERSION = 1.0;
319 | PRODUCT_BUNDLE_IDENTIFIER = com.exyte.ActivityIndicatorViewExample;
320 | PRODUCT_NAME = "$(TARGET_NAME)";
321 | SWIFT_EMIT_LOC_STRINGS = YES;
322 | SWIFT_VERSION = 6.0;
323 | TARGETED_DEVICE_FAMILY = "1,2";
324 | };
325 | name = Release;
326 | };
327 | /* End XCBuildConfiguration section */
328 |
329 | /* Begin XCConfigurationList section */
330 | 5B4DBAAB2D92EB130067A006 /* Build configuration list for PBXProject "ActivityIndicatorViewExample" */ = {
331 | isa = XCConfigurationList;
332 | buildConfigurations = (
333 | 5B4DBABC2D92EB140067A006 /* Debug */,
334 | 5B4DBABD2D92EB140067A006 /* Release */,
335 | );
336 | defaultConfigurationIsVisible = 0;
337 | defaultConfigurationName = Release;
338 | };
339 | 5B4DBABE2D92EB140067A006 /* Build configuration list for PBXNativeTarget "ActivityIndicatorViewExample" */ = {
340 | isa = XCConfigurationList;
341 | buildConfigurations = (
342 | 5B4DBABF2D92EB140067A006 /* Debug */,
343 | 5B4DBAC02D92EB140067A006 /* Release */,
344 | );
345 | defaultConfigurationIsVisible = 0;
346 | defaultConfigurationName = Release;
347 | };
348 | /* End XCConfigurationList section */
349 |
350 | /* Begin XCLocalSwiftPackageReference section */
351 | 5B4D04F32D92F93B005262A1 /* XCLocalSwiftPackageReference "../../ActivityIndicatorView" */ = {
352 | isa = XCLocalSwiftPackageReference;
353 | relativePath = ../../ActivityIndicatorView;
354 | };
355 | /* End XCLocalSwiftPackageReference section */
356 |
357 | /* Begin XCSwiftPackageProductDependency section */
358 | 5B4D04F42D92F93B005262A1 /* ActivityIndicatorView */ = {
359 | isa = XCSwiftPackageProductDependency;
360 | productName = ActivityIndicatorView;
361 | };
362 | 5B4DBAC32D92EC070067A006 /* ActivityIndicatorView */ = {
363 | isa = XCSwiftPackageProductDependency;
364 | productName = ActivityIndicatorView;
365 | };
366 | /* End XCSwiftPackageProductDependency section */
367 | };
368 | rootObject = 5B4DBAA82D92EB130067A006 /* Project object */;
369 | }
370 |
--------------------------------------------------------------------------------