├── Demo
├── Demo
│ ├── Assets.xcassets
│ │ ├── Contents.json
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── DemoApp.swift
│ └── ContentView.swift
└── Demo.xcodeproj
│ ├── xcshareddata
│ └── xcschemes
│ │ └── Demo.xcscheme
│ └── project.pbxproj
├── .gitignore
├── Spiderversify.xcworkspace
├── contents.xcworkspacedata
└── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── .swiftpm
└── xcode
│ └── package.xcworkspace
│ └── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── Package.swift
├── LICENSE
├── Sources
├── Effects
│ ├── Dots.swift
│ ├── Stripes.swift
│ └── Portals.swift
└── Spiderversify.swift
└── README.md
/Demo/Demo/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | /*.xcodeproj
5 | xcuserdata/
6 | DerivedData/
7 | .swiftpm/config/registries.json
8 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
9 | .netrc
10 |
--------------------------------------------------------------------------------
/Demo/Demo/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 |
--------------------------------------------------------------------------------
/Demo/Demo/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 |
--------------------------------------------------------------------------------
/Demo/Demo/DemoApp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DemoApp.swift
3 | // Demo
4 | //
5 | // Created by 유재호 on 2023/07/17.
6 | //
7 |
8 | import SwiftUI
9 |
10 | @main
11 | struct DemoApp: App {
12 | var body: some Scene {
13 | WindowGroup {
14 | ContentView()
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Spiderversify.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Spiderversify.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Demo/Demo/ContentView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ContentView.swift
3 | // Demo
4 | //
5 | // Created by 유재호 on 2023/07/17.
6 | //
7 |
8 | import SwiftUI
9 | import Spiderversify
10 |
11 | struct ContentView: View {
12 |
13 | @State private var glitching = false
14 |
15 | var body: some View {
16 | Text("Spiderversify")
17 | .spiderversify($glitching, duration: 2, glitchInterval: 0.12)
18 | .font(.title)
19 | .onTapGesture {
20 | glitching = true
21 | }
22 | }
23 | }
24 |
25 | struct ContentView_Previews: PreviewProvider {
26 | static var previews: some View {
27 | ContentView()
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version: 5.8
2 | // The swift-tools-version declares the minimum version of Swift required to build this package.
3 |
4 | import PackageDescription
5 |
6 | let package = Package(
7 | name: "Spiderversify",
8 | platforms: [
9 | .iOS(.v15),
10 | .macOS(.v12),
11 | .tvOS(.v15),
12 | .watchOS(.v8)
13 | ],
14 | products: [
15 | // Products define the executables and libraries a package produces, and make them visible to other packages.
16 | .library(
17 | name: "Spiderversify",
18 | targets: ["Spiderversify"]),
19 | ],
20 | dependencies: [
21 | // Dependencies declare other packages that this package depends on.
22 | // .package(url: /* package url */, from: "1.0.0"),
23 | ],
24 | targets: [
25 | // Targets are the basic building blocks of a package. A target can define a module or a test suite.
26 | // Targets can depend on other targets in this package, and on products in packages this package depends on.
27 | .target(
28 | name: "Spiderversify",
29 | dependencies: [],
30 | path: "Sources"
31 | ),
32 | ]
33 | )
34 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Jaeho Yoo
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 |
--------------------------------------------------------------------------------
/Sources/Effects/Dots.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | struct Dots: View {
4 |
5 | private let color: Color = [.orange, .blue, .red].randomElement()!
6 | private let hueDegree = Double.random(in: 0...360)
7 | private let rotationDegree = Double.random(in: 0...360)
8 | private let circleSize = Double.random(in: 6...20)
9 |
10 | var body: some View {
11 | Ellipse()
12 | .fill(color)
13 | .scaleEffect(Double.random(in: 4...6))
14 | .rotationEffect(Angle(degrees: rotationDegree))
15 | .hueRotation(Angle(degrees: hueDegree))
16 | .mask {
17 | dots
18 | }
19 | }
20 |
21 | private var dots: some View {
22 | VStack(spacing: Double.random(in: 2...8)) {
23 | ForEach(0..<20, id: \.self) { _ in
24 | HStack(spacing: 10) {
25 | ForEach(0..<20, id: \.self) { _ in
26 | Circle()
27 | .frame(width: circleSize, height: circleSize)
28 | Spacer()
29 | }
30 | }
31 | Spacer()
32 | }
33 | }
34 | }
35 | }
36 |
37 | struct Dots_Previews: PreviewProvider {
38 |
39 | static var previews: some View {
40 | Text("Spiderversify")
41 | .font(.title)
42 | .background {
43 | Dots()
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/Sources/Effects/Stripes.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | struct Stripes: View {
4 |
5 | private let color: Color = [.cyan, .green, .pink].randomElement()!
6 | private let hueDegree = Double.random(in: 0...360)
7 | private let rotationDegree: Double = {
8 | let ranges = [-60.0...(-20.0), 20.0...60.0]
9 | let range = ranges.randomElement()!
10 | return Double.random(in: range)
11 | }()
12 | private let lineWidth = Double.random(in: 6...16)
13 | private let lineHeight = Double.random(in: 250...500)
14 |
15 | var body: some View {
16 | Rectangle()
17 | .fill(color)
18 | .scaleEffect(8)
19 | .rotationEffect(Angle(degrees: rotationDegree))
20 | .mask {
21 | HStack(spacing: 32) {
22 | ForEach(1..<20, id: \.self) { _ in
23 | Rectangle()
24 | .opacity(0.6)
25 | .frame(width: lineWidth, height: lineHeight)
26 | .rotationEffect(Angle(degrees: rotationDegree))
27 | }
28 | }
29 | }
30 | .hueRotation(Angle(degrees: hueDegree))
31 | }
32 | }
33 |
34 | struct Stripes_Previews: PreviewProvider {
35 |
36 | static var previews: some View {
37 | Text("Spiderversify")
38 | .font(.title)
39 | .background {
40 | Stripes()
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/Sources/Effects/Portals.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | struct Portals: View {
4 |
5 | private let color: Color = [.orange, .purple, .yellow].randomElement()!
6 | private let hueDegree = Double.random(in: 0...360)
7 | private let strokeWidth = Double.random(in: 1.5...3)
8 | private let size = Double.random(in: 200...300)
9 | private let points = Int.random(in: 6...8)
10 |
11 | var body: some View {
12 | ZStack {
13 | Portal(numberOfPoints: points)
14 | .fill(color.opacity(0.3))
15 | .overlay(
16 | Portal(numberOfPoints: points)
17 | .stroke(color, lineWidth: strokeWidth)
18 | .colorInvert()
19 | )
20 |
21 | Portal(numberOfPoints: points)
22 | .stroke(color, style: .init(lineWidth: strokeWidth/2, dash: [10, 5]))
23 | .colorInvert()
24 | .scaleEffect(0.8)
25 |
26 | Portal(numberOfPoints: points)
27 | .stroke(color, style: .init(lineWidth: strokeWidth/3, dash: [5, 10]))
28 | .colorInvert()
29 | .scaleEffect(0.5)
30 | }
31 | .hueRotation(Angle(degrees: hueDegree))
32 | .frame(width: size, height: size)
33 | }
34 | }
35 |
36 | struct Portal: Shape {
37 |
38 | let numberOfPoints: Int
39 |
40 | func path(in rect: CGRect) -> Path {
41 | let center = CGPoint(x: rect.width / 2, y: rect.height / 2)
42 | var path = Path()
43 | let adjustment = CGFloat.pi / 2
44 |
45 | for i in 0.. `Spiderversify` brings a Spider-Verse like glitching effect to your SwiftUI views.
5 |
6 | ### ✨ More charming glitching effects are planned for release. Stay tuned!
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | The Spiderversify library requires `iOS 15.0`, macOS 12.0, watchOS 8.0, or tvOS 15.0 and higher.
17 |
Enjoy bringing a bit of the Spider-Verse into your apps!
18 |
19 |
20 |
21 | ## - How to use Spiderversify
22 |
23 | To apply `Spiderversify` to your SwiftUI views, you simply add the `.spiderversify` view modifier.
24 |
Here is an example:
25 |
26 |
27 |
28 | ```swift
29 | import SwiftUI
30 | import Spiderversify
31 |
32 | struct ContentView: View {
33 |
34 | @State private var glitching = false
35 |
36 | var body: some View {
37 | Text("Spiderversify")
38 | .spiderversify($glitching, duration: 2, glitchInterval: 0.12) // ⬅️ 🕸️
39 | .font(.title)
40 | .onTapGesture {
41 | glitching = true
42 | }
43 | }
44 | }
45 | ```
46 |
47 |
48 |
49 | ## - Parameter Details
50 |
51 | - `on`: A Binding that controls whether the glitch effect is active.
52 | - `duration`: The duration of the glitch effect animation.
53 | - `glitchInterval`: The interval at which the glitch effect changes. (default value: 0.12 sec)
54 |
55 | Please note that both duration and glitchInterval are specified in `seconds`.
56 |
57 |
58 |
59 | ## - Installation
60 |
61 | Spiderversify supports [Swift Package Manager](https://www.swift.org/package-manager/).
62 |
63 | - Navigate to `File` menu at the top of Xcode -> Select `Add Packages...`.
64 | - Enter `https://github.com/Jager-yoo/Spiderversify.git` in the Package URL field to install it.
65 |
66 |
67 |
68 | ## - License
69 |
70 | This library is released under the MIT license. See [LICENSE](https://github.com/Jager-yoo/Spiderversify/blob/main/LICENSE) for details.
71 |
--------------------------------------------------------------------------------
/Sources/Spiderversify.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 | import Combine
3 |
4 | @available(iOS 15.0, macOS 12.0, watchOS 8.0, tvOS 15.0, *)
5 | public struct Spiderversify: ViewModifier {
6 |
7 | @Binding var on: Bool
8 |
9 | @State private var offset = CGSize(width: 0, height: 0)
10 | @State private var effectType: EffectType = .glitch
11 |
12 | private let colors: [Color] = [.red, .green, .blue, .pink, .yellow, .cyan, .indigo, .mint, .orange, .purple]
13 | private let fonts: [Font.Design] = [.default, .serif, .monospaced, .rounded]
14 | private let weights: [Font.Weight] = [.black, .bold, .heavy, .light, .medium, .regular, .semibold, .thin, .ultraLight]
15 | private let maxGlitchOffset: CGFloat = 6
16 | private let glitchIntervalTimer: Publishers.Autoconnect
17 | private let durationTimer: Publishers.Autoconnect
18 |
19 | init(_ on: Binding, duration: TimeInterval, glitchInterval: TimeInterval) {
20 | self._on = on
21 | glitchIntervalTimer = Timer.publish(every: glitchInterval, on: .main, in: .common).autoconnect()
22 | durationTimer = Timer.publish(every: duration, on: .main, in: .common).autoconnect()
23 | }
24 |
25 | enum EffectType: CaseIterable {
26 | case glitch
27 | case portal
28 | }
29 |
30 | public func body(content: Content) -> some View {
31 | Group {
32 | if on {
33 | ZStack {
34 | content
35 | .font(.system(size: Double.random(in: 20...36), weight: weights.randomElement()!, design: fonts.randomElement()!))
36 | .foregroundColor(colors.randomElement()!)
37 | .offset(self.offset)
38 | .rotationEffect(.degrees(Double.random(in: -5...5)))
39 | }
40 | .background(
41 | backgroundEffect
42 | )
43 | .onReceive(glitchIntervalTimer) { _ in
44 | self.offset = CGSize(width: Double.random(in: -maxGlitchOffset...maxGlitchOffset), height: Double.random(in: -maxGlitchOffset...maxGlitchOffset))
45 | }
46 | .onReceive(durationTimer) { _ in
47 | on = false
48 | }
49 | } else {
50 | content
51 | }
52 | }
53 | .onChange(of: on) { newValue in
54 | if newValue {
55 | effectType = Bool.random() ? .glitch : .portal
56 | }
57 | }
58 | }
59 |
60 | private var backgroundEffect: AnyView {
61 | switch effectType {
62 | case .glitch:
63 | return [AnyView(Dots()), AnyView(Stripes())].randomElement()!
64 | case .portal:
65 | return AnyView(Portals())
66 | }
67 | }
68 | }
69 |
70 | extension View {
71 |
72 | public func spiderversify(_ on: Binding, duration: TimeInterval, glitchInterval: TimeInterval = 0.12) -> some View {
73 | self.modifier(Spiderversify(on, duration: duration, glitchInterval: glitchInterval))
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/Demo/Demo.xcodeproj/xcshareddata/xcschemes/Demo.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
42 |
44 |
50 |
51 |
52 |
53 |
59 |
61 |
67 |
68 |
69 |
70 |
72 |
73 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/Demo/Demo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 56;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | C10A42422A65413F00DA28DB /* DemoApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = C10A42412A65413F00DA28DB /* DemoApp.swift */; };
11 | C10A42442A65413F00DA28DB /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C10A42432A65413F00DA28DB /* ContentView.swift */; };
12 | C10A42462A65414000DA28DB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C10A42452A65414000DA28DB /* Assets.xcassets */; };
13 | C168571A2A6544A300FF37FC /* Spiderversify in Frameworks */ = {isa = PBXBuildFile; productRef = C16857192A6544A300FF37FC /* Spiderversify */; };
14 | /* End PBXBuildFile section */
15 |
16 | /* Begin PBXFileReference section */
17 | C10A423E2A65413F00DA28DB /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; };
18 | C10A42412A65413F00DA28DB /* DemoApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoApp.swift; sourceTree = ""; };
19 | C10A42432A65413F00DA28DB /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
20 | C10A42452A65414000DA28DB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
21 | /* End PBXFileReference section */
22 |
23 | /* Begin PBXFrameworksBuildPhase section */
24 | C10A423B2A65413F00DA28DB /* Frameworks */ = {
25 | isa = PBXFrameworksBuildPhase;
26 | buildActionMask = 2147483647;
27 | files = (
28 | C168571A2A6544A300FF37FC /* Spiderversify in Frameworks */,
29 | );
30 | runOnlyForDeploymentPostprocessing = 0;
31 | };
32 | /* End PBXFrameworksBuildPhase section */
33 |
34 | /* Begin PBXGroup section */
35 | C10A42352A65413F00DA28DB = {
36 | isa = PBXGroup;
37 | children = (
38 | C10A42402A65413F00DA28DB /* Demo */,
39 | C10A423F2A65413F00DA28DB /* Products */,
40 | );
41 | sourceTree = "";
42 | };
43 | C10A423F2A65413F00DA28DB /* Products */ = {
44 | isa = PBXGroup;
45 | children = (
46 | C10A423E2A65413F00DA28DB /* Demo.app */,
47 | );
48 | name = Products;
49 | sourceTree = "";
50 | };
51 | C10A42402A65413F00DA28DB /* Demo */ = {
52 | isa = PBXGroup;
53 | children = (
54 | C10A42412A65413F00DA28DB /* DemoApp.swift */,
55 | C10A42432A65413F00DA28DB /* ContentView.swift */,
56 | C10A42452A65414000DA28DB /* Assets.xcassets */,
57 | );
58 | path = Demo;
59 | sourceTree = "";
60 | };
61 | /* End PBXGroup section */
62 |
63 | /* Begin PBXNativeTarget section */
64 | C10A423D2A65413F00DA28DB /* Demo */ = {
65 | isa = PBXNativeTarget;
66 | buildConfigurationList = C10A424C2A65414000DA28DB /* Build configuration list for PBXNativeTarget "Demo" */;
67 | buildPhases = (
68 | C10A423A2A65413F00DA28DB /* Sources */,
69 | C10A423B2A65413F00DA28DB /* Frameworks */,
70 | C10A423C2A65413F00DA28DB /* Resources */,
71 | );
72 | buildRules = (
73 | );
74 | dependencies = (
75 | );
76 | name = Demo;
77 | packageProductDependencies = (
78 | C16857192A6544A300FF37FC /* Spiderversify */,
79 | );
80 | productName = Demo;
81 | productReference = C10A423E2A65413F00DA28DB /* Demo.app */;
82 | productType = "com.apple.product-type.application";
83 | };
84 | /* End PBXNativeTarget section */
85 |
86 | /* Begin PBXProject section */
87 | C10A42362A65413F00DA28DB /* Project object */ = {
88 | isa = PBXProject;
89 | attributes = {
90 | BuildIndependentTargetsInParallel = 1;
91 | LastSwiftUpdateCheck = 1430;
92 | LastUpgradeCheck = 1430;
93 | TargetAttributes = {
94 | C10A423D2A65413F00DA28DB = {
95 | CreatedOnToolsVersion = 14.3.1;
96 | };
97 | };
98 | };
99 | buildConfigurationList = C10A42392A65413F00DA28DB /* Build configuration list for PBXProject "Demo" */;
100 | compatibilityVersion = "Xcode 14.0";
101 | developmentRegion = en;
102 | hasScannedForEncodings = 0;
103 | knownRegions = (
104 | en,
105 | Base,
106 | );
107 | mainGroup = C10A42352A65413F00DA28DB;
108 | packageReferences = (
109 | C16857182A6544A300FF37FC /* XCRemoteSwiftPackageReference "Spiderversify" */,
110 | );
111 | productRefGroup = C10A423F2A65413F00DA28DB /* Products */;
112 | projectDirPath = "";
113 | projectRoot = "";
114 | targets = (
115 | C10A423D2A65413F00DA28DB /* Demo */,
116 | );
117 | };
118 | /* End PBXProject section */
119 |
120 | /* Begin PBXResourcesBuildPhase section */
121 | C10A423C2A65413F00DA28DB /* Resources */ = {
122 | isa = PBXResourcesBuildPhase;
123 | buildActionMask = 2147483647;
124 | files = (
125 | C10A42462A65414000DA28DB /* Assets.xcassets in Resources */,
126 | );
127 | runOnlyForDeploymentPostprocessing = 0;
128 | };
129 | /* End PBXResourcesBuildPhase section */
130 |
131 | /* Begin PBXSourcesBuildPhase section */
132 | C10A423A2A65413F00DA28DB /* Sources */ = {
133 | isa = PBXSourcesBuildPhase;
134 | buildActionMask = 2147483647;
135 | files = (
136 | C10A42442A65413F00DA28DB /* ContentView.swift in Sources */,
137 | C10A42422A65413F00DA28DB /* DemoApp.swift in Sources */,
138 | );
139 | runOnlyForDeploymentPostprocessing = 0;
140 | };
141 | /* End PBXSourcesBuildPhase section */
142 |
143 | /* Begin XCBuildConfiguration section */
144 | C10A424A2A65414000DA28DB /* Debug */ = {
145 | isa = XCBuildConfiguration;
146 | buildSettings = {
147 | ALWAYS_SEARCH_USER_PATHS = NO;
148 | CLANG_ANALYZER_NONNULL = YES;
149 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
150 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
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 | DEBUG_INFORMATION_FORMAT = dwarf;
178 | ENABLE_STRICT_OBJC_MSGSEND = YES;
179 | ENABLE_TESTABILITY = YES;
180 | GCC_C_LANGUAGE_STANDARD = gnu11;
181 | GCC_DYNAMIC_NO_PIC = NO;
182 | GCC_NO_COMMON_BLOCKS = YES;
183 | GCC_OPTIMIZATION_LEVEL = 0;
184 | GCC_PREPROCESSOR_DEFINITIONS = (
185 | "DEBUG=1",
186 | "$(inherited)",
187 | );
188 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
189 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
190 | GCC_WARN_UNDECLARED_SELECTOR = YES;
191 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
192 | GCC_WARN_UNUSED_FUNCTION = YES;
193 | GCC_WARN_UNUSED_VARIABLE = YES;
194 | IPHONEOS_DEPLOYMENT_TARGET = 15.0;
195 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
196 | MTL_FAST_MATH = YES;
197 | ONLY_ACTIVE_ARCH = YES;
198 | SDKROOT = iphoneos;
199 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
200 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
201 | };
202 | name = Debug;
203 | };
204 | C10A424B2A65414000DA28DB /* Release */ = {
205 | isa = XCBuildConfiguration;
206 | buildSettings = {
207 | ALWAYS_SEARCH_USER_PATHS = NO;
208 | CLANG_ANALYZER_NONNULL = YES;
209 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
210 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
211 | CLANG_ENABLE_MODULES = YES;
212 | CLANG_ENABLE_OBJC_ARC = YES;
213 | CLANG_ENABLE_OBJC_WEAK = YES;
214 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
215 | CLANG_WARN_BOOL_CONVERSION = YES;
216 | CLANG_WARN_COMMA = YES;
217 | CLANG_WARN_CONSTANT_CONVERSION = YES;
218 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
219 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
220 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
221 | CLANG_WARN_EMPTY_BODY = YES;
222 | CLANG_WARN_ENUM_CONVERSION = YES;
223 | CLANG_WARN_INFINITE_RECURSION = YES;
224 | CLANG_WARN_INT_CONVERSION = YES;
225 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
226 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
227 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
228 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
229 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
230 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
231 | CLANG_WARN_STRICT_PROTOTYPES = YES;
232 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
233 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
234 | CLANG_WARN_UNREACHABLE_CODE = YES;
235 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
236 | COPY_PHASE_STRIP = NO;
237 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
238 | ENABLE_NS_ASSERTIONS = NO;
239 | ENABLE_STRICT_OBJC_MSGSEND = YES;
240 | GCC_C_LANGUAGE_STANDARD = gnu11;
241 | GCC_NO_COMMON_BLOCKS = YES;
242 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
243 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
244 | GCC_WARN_UNDECLARED_SELECTOR = YES;
245 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
246 | GCC_WARN_UNUSED_FUNCTION = YES;
247 | GCC_WARN_UNUSED_VARIABLE = YES;
248 | IPHONEOS_DEPLOYMENT_TARGET = 15.0;
249 | MTL_ENABLE_DEBUG_INFO = NO;
250 | MTL_FAST_MATH = YES;
251 | SDKROOT = iphoneos;
252 | SWIFT_COMPILATION_MODE = wholemodule;
253 | SWIFT_OPTIMIZATION_LEVEL = "-O";
254 | VALIDATE_PRODUCT = YES;
255 | };
256 | name = Release;
257 | };
258 | C10A424D2A65414000DA28DB /* Debug */ = {
259 | isa = XCBuildConfiguration;
260 | buildSettings = {
261 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
262 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
263 | CODE_SIGN_STYLE = Automatic;
264 | CURRENT_PROJECT_VERSION = 1;
265 | DEVELOPMENT_ASSET_PATHS = "";
266 | ENABLE_PREVIEWS = YES;
267 | GENERATE_INFOPLIST_FILE = YES;
268 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
269 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
270 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
271 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
272 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
273 | IPHONEOS_DEPLOYMENT_TARGET = 15.0;
274 | LD_RUNPATH_SEARCH_PATHS = (
275 | "$(inherited)",
276 | "@executable_path/Frameworks",
277 | );
278 | MARKETING_VERSION = 1.0;
279 | PRODUCT_BUNDLE_IDENTIFIER = "com.github.Jager-yoo.Demo";
280 | PRODUCT_NAME = "$(TARGET_NAME)";
281 | SWIFT_EMIT_LOC_STRINGS = YES;
282 | SWIFT_VERSION = 5.0;
283 | TARGETED_DEVICE_FAMILY = "1,2";
284 | };
285 | name = Debug;
286 | };
287 | C10A424E2A65414000DA28DB /* Release */ = {
288 | isa = XCBuildConfiguration;
289 | buildSettings = {
290 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
291 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
292 | CODE_SIGN_STYLE = Automatic;
293 | CURRENT_PROJECT_VERSION = 1;
294 | DEVELOPMENT_ASSET_PATHS = "";
295 | ENABLE_PREVIEWS = YES;
296 | GENERATE_INFOPLIST_FILE = YES;
297 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
298 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
299 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
300 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
301 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
302 | IPHONEOS_DEPLOYMENT_TARGET = 15.0;
303 | LD_RUNPATH_SEARCH_PATHS = (
304 | "$(inherited)",
305 | "@executable_path/Frameworks",
306 | );
307 | MARKETING_VERSION = 1.0;
308 | PRODUCT_BUNDLE_IDENTIFIER = "com.github.Jager-yoo.Demo";
309 | PRODUCT_NAME = "$(TARGET_NAME)";
310 | SWIFT_EMIT_LOC_STRINGS = YES;
311 | SWIFT_VERSION = 5.0;
312 | TARGETED_DEVICE_FAMILY = "1,2";
313 | };
314 | name = Release;
315 | };
316 | /* End XCBuildConfiguration section */
317 |
318 | /* Begin XCConfigurationList section */
319 | C10A42392A65413F00DA28DB /* Build configuration list for PBXProject "Demo" */ = {
320 | isa = XCConfigurationList;
321 | buildConfigurations = (
322 | C10A424A2A65414000DA28DB /* Debug */,
323 | C10A424B2A65414000DA28DB /* Release */,
324 | );
325 | defaultConfigurationIsVisible = 0;
326 | defaultConfigurationName = Release;
327 | };
328 | C10A424C2A65414000DA28DB /* Build configuration list for PBXNativeTarget "Demo" */ = {
329 | isa = XCConfigurationList;
330 | buildConfigurations = (
331 | C10A424D2A65414000DA28DB /* Debug */,
332 | C10A424E2A65414000DA28DB /* Release */,
333 | );
334 | defaultConfigurationIsVisible = 0;
335 | defaultConfigurationName = Release;
336 | };
337 | /* End XCConfigurationList section */
338 |
339 | /* Begin XCRemoteSwiftPackageReference section */
340 | C16857182A6544A300FF37FC /* XCRemoteSwiftPackageReference "Spiderversify" */ = {
341 | isa = XCRemoteSwiftPackageReference;
342 | repositoryURL = "https://github.com/Jager-yoo/Spiderversify";
343 | requirement = {
344 | branch = main;
345 | kind = branch;
346 | };
347 | };
348 | /* End XCRemoteSwiftPackageReference section */
349 |
350 | /* Begin XCSwiftPackageProductDependency section */
351 | C16857192A6544A300FF37FC /* Spiderversify */ = {
352 | isa = XCSwiftPackageProductDependency;
353 | package = C16857182A6544A300FF37FC /* XCRemoteSwiftPackageReference "Spiderversify" */;
354 | productName = Spiderversify;
355 | };
356 | /* End XCSwiftPackageProductDependency section */
357 | };
358 | rootObject = C10A42362A65413F00DA28DB /* Project object */;
359 | }
360 |
--------------------------------------------------------------------------------