├── .github
└── FUNDING.yml
├── .gitignore
├── .swiftpm
└── xcode
│ └── xcuserdata
│ └── ming.xcuserdatad
│ └── xcschemes
│ └── xcschememanagement.plist
├── Demo
├── Demo.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcuserdata
│ │ │ └── ming.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ │ └── ming.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
├── Demo
│ ├── Assets.xcassets
│ │ ├── AT
│ │ │ ├── Apple TV 1.imageset
│ │ │ │ ├── Apple TV 1.jpeg
│ │ │ │ └── Contents.json
│ │ │ ├── Apple TV 2.imageset
│ │ │ │ ├── Apple TV 2.jpeg
│ │ │ │ └── Contents.json
│ │ │ ├── Apple TV 3.imageset
│ │ │ │ ├── Apple TV 3.jpeg
│ │ │ │ └── Contents.json
│ │ │ ├── Apple TV 4.imageset
│ │ │ │ ├── Apple TV 4.jpeg
│ │ │ │ └── Contents.json
│ │ │ ├── Apple TV 5.imageset
│ │ │ │ ├── Apple TV 5.jpeg
│ │ │ │ └── Contents.json
│ │ │ ├── Apple TV 6.imageset
│ │ │ │ ├── Apple TV 6.jpeg
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── FCPC
│ │ │ ├── Contents.json
│ │ │ ├── Final Cut Camera (1).imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Final Cut Camera (1).jpeg
│ │ │ ├── Final Cut Camera (2).imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Final Cut Camera (2).jpeg
│ │ │ ├── Final Cut Camera (3).imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Final Cut Camera (3).jpeg
│ │ │ ├── Final Cut Camera (4).imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Final Cut Camera (4).jpeg
│ │ │ ├── Final Cut Camera (5).imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Final Cut Camera (5).jpeg
│ │ │ ├── Final Cut Camera (6).imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Final Cut Camera (6).jpeg
│ │ │ ├── Final Cut Camera (7).imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Final Cut Camera (7).jpeg
│ │ │ └── Final Cut Camera.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Final Cut Camera.jpeg
│ │ ├── FMA
│ │ │ ├── Contents.json
│ │ │ ├── Find My App (1).imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Find My App (1).jpeg
│ │ │ ├── Find My App (2).imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Find My App (2).jpeg
│ │ │ ├── Find My App (3).imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Find My App (3).jpeg
│ │ │ ├── Find My App (4).imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Find My App Store Image (1).jpeg
│ │ │ ├── Find My App (5).imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Find My App Store Image.jpeg
│ │ │ └── Find My App.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Find My App.jpeg
│ │ └── J
│ │ │ ├── Contents.json
│ │ │ ├── Journal App Image (1).imageset
│ │ │ ├── Contents.json
│ │ │ └── Journal App Image (1).jpeg
│ │ │ ├── Journal App Image (2).imageset
│ │ │ ├── Contents.json
│ │ │ └── Journal App Image (2).jpeg
│ │ │ ├── Journal App Image (3).imageset
│ │ │ ├── Contents.json
│ │ │ └── Journal App Image (3).jpeg
│ │ │ ├── Journal App Image (4).imageset
│ │ │ ├── Contents.json
│ │ │ └── Journal App Image (4).jpeg
│ │ │ ├── Journal App Image (5).imageset
│ │ │ ├── Contents.json
│ │ │ └── Journal App Image (5).jpeg
│ │ │ ├── Journal App Image (6).imageset
│ │ │ ├── Contents.json
│ │ │ └── Journal.jpeg
│ │ │ └── Journal App Image.imageset
│ │ │ ├── Contents.json
│ │ │ └── Journal App Image.jpeg
│ ├── ContentView.swift
│ ├── DemoApp.swift
│ └── Preview Content
│ │ └── Preview Assets.xcassets
│ │ └── Contents.json
├── DemoTests
│ └── DemoTests.swift
└── DemoUITests
│ ├── DemoUITests.swift
│ └── DemoUITestsLaunchTests.swift
├── LICENSE
├── Package.swift
├── README.md
├── Sources
└── SplashScreenKit
│ ├── Extension
│ ├── Photo.swift
│ └── Text.swift
│ └── SplashScreenKit.swift
└── Tests
└── SplashScreenKitTests
└── SplashScreenKitTests.swift
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: 1998code
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 |
--------------------------------------------------------------------------------
/.swiftpm/xcode/xcuserdata/ming.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | SplashScreenKit.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 1
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/Demo/Demo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 77;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 3A7F9F0E2D5A205C00A71529 /* SplashScreenKit in Frameworks */ = {isa = PBXBuildFile; productRef = 3A7F9F0D2D5A205C00A71529 /* SplashScreenKit */; };
11 | 3A7F9F812D5A320E00A71529 /* SplashScreenKit in Frameworks */ = {isa = PBXBuildFile; productRef = 3A7F9F802D5A320E00A71529 /* SplashScreenKit */; };
12 | 3A90AD072D5B1D810046688F /* SplashScreenKit in Frameworks */ = {isa = PBXBuildFile; productRef = 3A90AD062D5B1D810046688F /* SplashScreenKit */; };
13 | /* End PBXBuildFile section */
14 |
15 | /* Begin PBXContainerItemProxy section */
16 | 3A7F9EF02D5A1FA300A71529 /* PBXContainerItemProxy */ = {
17 | isa = PBXContainerItemProxy;
18 | containerPortal = 3A7F9ED72D5A1FA200A71529 /* Project object */;
19 | proxyType = 1;
20 | remoteGlobalIDString = 3A7F9EDE2D5A1FA200A71529;
21 | remoteInfo = Demo;
22 | };
23 | 3A7F9EFA2D5A1FA300A71529 /* PBXContainerItemProxy */ = {
24 | isa = PBXContainerItemProxy;
25 | containerPortal = 3A7F9ED72D5A1FA200A71529 /* Project object */;
26 | proxyType = 1;
27 | remoteGlobalIDString = 3A7F9EDE2D5A1FA200A71529;
28 | remoteInfo = Demo;
29 | };
30 | /* End PBXContainerItemProxy section */
31 |
32 | /* Begin PBXFileReference section */
33 | 3A7F9EDF2D5A1FA200A71529 /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; };
34 | 3A7F9EEF2D5A1FA300A71529 /* DemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
35 | 3A7F9EF92D5A1FA300A71529 /* DemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DemoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
36 | /* End PBXFileReference section */
37 |
38 | /* Begin PBXFileSystemSynchronizedRootGroup section */
39 | 3A7F9EE12D5A1FA200A71529 /* Demo */ = {
40 | isa = PBXFileSystemSynchronizedRootGroup;
41 | path = Demo;
42 | sourceTree = "";
43 | };
44 | 3A7F9EF22D5A1FA300A71529 /* DemoTests */ = {
45 | isa = PBXFileSystemSynchronizedRootGroup;
46 | path = DemoTests;
47 | sourceTree = "";
48 | };
49 | 3A7F9EFC2D5A1FA300A71529 /* DemoUITests */ = {
50 | isa = PBXFileSystemSynchronizedRootGroup;
51 | path = DemoUITests;
52 | sourceTree = "";
53 | };
54 | /* End PBXFileSystemSynchronizedRootGroup section */
55 |
56 | /* Begin PBXFrameworksBuildPhase section */
57 | 3A7F9EDC2D5A1FA200A71529 /* Frameworks */ = {
58 | isa = PBXFrameworksBuildPhase;
59 | buildActionMask = 2147483647;
60 | files = (
61 | 3A7F9F812D5A320E00A71529 /* SplashScreenKit in Frameworks */,
62 | 3A90AD072D5B1D810046688F /* SplashScreenKit in Frameworks */,
63 | 3A7F9F0E2D5A205C00A71529 /* SplashScreenKit in Frameworks */,
64 | );
65 | runOnlyForDeploymentPostprocessing = 0;
66 | };
67 | 3A7F9EEC2D5A1FA300A71529 /* Frameworks */ = {
68 | isa = PBXFrameworksBuildPhase;
69 | buildActionMask = 2147483647;
70 | files = (
71 | );
72 | runOnlyForDeploymentPostprocessing = 0;
73 | };
74 | 3A7F9EF62D5A1FA300A71529 /* Frameworks */ = {
75 | isa = PBXFrameworksBuildPhase;
76 | buildActionMask = 2147483647;
77 | files = (
78 | );
79 | runOnlyForDeploymentPostprocessing = 0;
80 | };
81 | /* End PBXFrameworksBuildPhase section */
82 |
83 | /* Begin PBXGroup section */
84 | 3A7F9ED62D5A1FA200A71529 = {
85 | isa = PBXGroup;
86 | children = (
87 | 3A7F9EE12D5A1FA200A71529 /* Demo */,
88 | 3A7F9EF22D5A1FA300A71529 /* DemoTests */,
89 | 3A7F9EFC2D5A1FA300A71529 /* DemoUITests */,
90 | 3A7F9EE02D5A1FA200A71529 /* Products */,
91 | );
92 | sourceTree = "";
93 | };
94 | 3A7F9EE02D5A1FA200A71529 /* Products */ = {
95 | isa = PBXGroup;
96 | children = (
97 | 3A7F9EDF2D5A1FA200A71529 /* Demo.app */,
98 | 3A7F9EEF2D5A1FA300A71529 /* DemoTests.xctest */,
99 | 3A7F9EF92D5A1FA300A71529 /* DemoUITests.xctest */,
100 | );
101 | name = Products;
102 | sourceTree = "";
103 | };
104 | /* End PBXGroup section */
105 |
106 | /* Begin PBXNativeTarget section */
107 | 3A7F9EDE2D5A1FA200A71529 /* Demo */ = {
108 | isa = PBXNativeTarget;
109 | buildConfigurationList = 3A7F9F032D5A1FA300A71529 /* Build configuration list for PBXNativeTarget "Demo" */;
110 | buildPhases = (
111 | 3A7F9EDB2D5A1FA200A71529 /* Sources */,
112 | 3A7F9EDC2D5A1FA200A71529 /* Frameworks */,
113 | 3A7F9EDD2D5A1FA200A71529 /* Resources */,
114 | );
115 | buildRules = (
116 | );
117 | dependencies = (
118 | );
119 | fileSystemSynchronizedGroups = (
120 | 3A7F9EE12D5A1FA200A71529 /* Demo */,
121 | );
122 | name = Demo;
123 | packageProductDependencies = (
124 | 3A7F9F0D2D5A205C00A71529 /* SplashScreenKit */,
125 | 3A7F9F802D5A320E00A71529 /* SplashScreenKit */,
126 | 3A90AD062D5B1D810046688F /* SplashScreenKit */,
127 | );
128 | productName = Demo;
129 | productReference = 3A7F9EDF2D5A1FA200A71529 /* Demo.app */;
130 | productType = "com.apple.product-type.application";
131 | };
132 | 3A7F9EEE2D5A1FA300A71529 /* DemoTests */ = {
133 | isa = PBXNativeTarget;
134 | buildConfigurationList = 3A7F9F062D5A1FA300A71529 /* Build configuration list for PBXNativeTarget "DemoTests" */;
135 | buildPhases = (
136 | 3A7F9EEB2D5A1FA300A71529 /* Sources */,
137 | 3A7F9EEC2D5A1FA300A71529 /* Frameworks */,
138 | 3A7F9EED2D5A1FA300A71529 /* Resources */,
139 | );
140 | buildRules = (
141 | );
142 | dependencies = (
143 | 3A7F9EF12D5A1FA300A71529 /* PBXTargetDependency */,
144 | );
145 | fileSystemSynchronizedGroups = (
146 | 3A7F9EF22D5A1FA300A71529 /* DemoTests */,
147 | );
148 | name = DemoTests;
149 | packageProductDependencies = (
150 | );
151 | productName = DemoTests;
152 | productReference = 3A7F9EEF2D5A1FA300A71529 /* DemoTests.xctest */;
153 | productType = "com.apple.product-type.bundle.unit-test";
154 | };
155 | 3A7F9EF82D5A1FA300A71529 /* DemoUITests */ = {
156 | isa = PBXNativeTarget;
157 | buildConfigurationList = 3A7F9F092D5A1FA300A71529 /* Build configuration list for PBXNativeTarget "DemoUITests" */;
158 | buildPhases = (
159 | 3A7F9EF52D5A1FA300A71529 /* Sources */,
160 | 3A7F9EF62D5A1FA300A71529 /* Frameworks */,
161 | 3A7F9EF72D5A1FA300A71529 /* Resources */,
162 | );
163 | buildRules = (
164 | );
165 | dependencies = (
166 | 3A7F9EFB2D5A1FA300A71529 /* PBXTargetDependency */,
167 | );
168 | fileSystemSynchronizedGroups = (
169 | 3A7F9EFC2D5A1FA300A71529 /* DemoUITests */,
170 | );
171 | name = DemoUITests;
172 | packageProductDependencies = (
173 | );
174 | productName = DemoUITests;
175 | productReference = 3A7F9EF92D5A1FA300A71529 /* DemoUITests.xctest */;
176 | productType = "com.apple.product-type.bundle.ui-testing";
177 | };
178 | /* End PBXNativeTarget section */
179 |
180 | /* Begin PBXProject section */
181 | 3A7F9ED72D5A1FA200A71529 /* Project object */ = {
182 | isa = PBXProject;
183 | attributes = {
184 | BuildIndependentTargetsInParallel = 1;
185 | LastSwiftUpdateCheck = 1620;
186 | LastUpgradeCheck = 1620;
187 | TargetAttributes = {
188 | 3A7F9EDE2D5A1FA200A71529 = {
189 | CreatedOnToolsVersion = 16.2;
190 | };
191 | 3A7F9EEE2D5A1FA300A71529 = {
192 | CreatedOnToolsVersion = 16.2;
193 | TestTargetID = 3A7F9EDE2D5A1FA200A71529;
194 | };
195 | 3A7F9EF82D5A1FA300A71529 = {
196 | CreatedOnToolsVersion = 16.2;
197 | TestTargetID = 3A7F9EDE2D5A1FA200A71529;
198 | };
199 | };
200 | };
201 | buildConfigurationList = 3A7F9EDA2D5A1FA200A71529 /* Build configuration list for PBXProject "Demo" */;
202 | developmentRegion = en;
203 | hasScannedForEncodings = 0;
204 | knownRegions = (
205 | en,
206 | Base,
207 | );
208 | mainGroup = 3A7F9ED62D5A1FA200A71529;
209 | minimizedProjectReferenceProxies = 1;
210 | packageReferences = (
211 | 3A90AD052D5B1D810046688F /* XCLocalSwiftPackageReference "../../19-Splash-Screen-for-SwiftUI" */,
212 | );
213 | preferredProjectObjectVersion = 77;
214 | productRefGroup = 3A7F9EE02D5A1FA200A71529 /* Products */;
215 | projectDirPath = "";
216 | projectRoot = "";
217 | targets = (
218 | 3A7F9EDE2D5A1FA200A71529 /* Demo */,
219 | 3A7F9EEE2D5A1FA300A71529 /* DemoTests */,
220 | 3A7F9EF82D5A1FA300A71529 /* DemoUITests */,
221 | );
222 | };
223 | /* End PBXProject section */
224 |
225 | /* Begin PBXResourcesBuildPhase section */
226 | 3A7F9EDD2D5A1FA200A71529 /* Resources */ = {
227 | isa = PBXResourcesBuildPhase;
228 | buildActionMask = 2147483647;
229 | files = (
230 | );
231 | runOnlyForDeploymentPostprocessing = 0;
232 | };
233 | 3A7F9EED2D5A1FA300A71529 /* Resources */ = {
234 | isa = PBXResourcesBuildPhase;
235 | buildActionMask = 2147483647;
236 | files = (
237 | );
238 | runOnlyForDeploymentPostprocessing = 0;
239 | };
240 | 3A7F9EF72D5A1FA300A71529 /* Resources */ = {
241 | isa = PBXResourcesBuildPhase;
242 | buildActionMask = 2147483647;
243 | files = (
244 | );
245 | runOnlyForDeploymentPostprocessing = 0;
246 | };
247 | /* End PBXResourcesBuildPhase section */
248 |
249 | /* Begin PBXSourcesBuildPhase section */
250 | 3A7F9EDB2D5A1FA200A71529 /* Sources */ = {
251 | isa = PBXSourcesBuildPhase;
252 | buildActionMask = 2147483647;
253 | files = (
254 | );
255 | runOnlyForDeploymentPostprocessing = 0;
256 | };
257 | 3A7F9EEB2D5A1FA300A71529 /* Sources */ = {
258 | isa = PBXSourcesBuildPhase;
259 | buildActionMask = 2147483647;
260 | files = (
261 | );
262 | runOnlyForDeploymentPostprocessing = 0;
263 | };
264 | 3A7F9EF52D5A1FA300A71529 /* Sources */ = {
265 | isa = PBXSourcesBuildPhase;
266 | buildActionMask = 2147483647;
267 | files = (
268 | );
269 | runOnlyForDeploymentPostprocessing = 0;
270 | };
271 | /* End PBXSourcesBuildPhase section */
272 |
273 | /* Begin PBXTargetDependency section */
274 | 3A7F9EF12D5A1FA300A71529 /* PBXTargetDependency */ = {
275 | isa = PBXTargetDependency;
276 | target = 3A7F9EDE2D5A1FA200A71529 /* Demo */;
277 | targetProxy = 3A7F9EF02D5A1FA300A71529 /* PBXContainerItemProxy */;
278 | };
279 | 3A7F9EFB2D5A1FA300A71529 /* PBXTargetDependency */ = {
280 | isa = PBXTargetDependency;
281 | target = 3A7F9EDE2D5A1FA200A71529 /* Demo */;
282 | targetProxy = 3A7F9EFA2D5A1FA300A71529 /* PBXContainerItemProxy */;
283 | };
284 | /* End PBXTargetDependency section */
285 |
286 | /* Begin XCBuildConfiguration section */
287 | 3A7F9F012D5A1FA300A71529 /* Debug */ = {
288 | isa = XCBuildConfiguration;
289 | buildSettings = {
290 | ALWAYS_SEARCH_USER_PATHS = NO;
291 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
292 | CLANG_ANALYZER_NONNULL = YES;
293 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
294 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
295 | CLANG_ENABLE_MODULES = YES;
296 | CLANG_ENABLE_OBJC_ARC = YES;
297 | CLANG_ENABLE_OBJC_WEAK = YES;
298 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
299 | CLANG_WARN_BOOL_CONVERSION = YES;
300 | CLANG_WARN_COMMA = YES;
301 | CLANG_WARN_CONSTANT_CONVERSION = YES;
302 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
303 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
304 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
305 | CLANG_WARN_EMPTY_BODY = YES;
306 | CLANG_WARN_ENUM_CONVERSION = YES;
307 | CLANG_WARN_INFINITE_RECURSION = YES;
308 | CLANG_WARN_INT_CONVERSION = YES;
309 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
310 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
311 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
312 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
313 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
314 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
315 | CLANG_WARN_STRICT_PROTOTYPES = YES;
316 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
317 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
318 | CLANG_WARN_UNREACHABLE_CODE = YES;
319 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
320 | COPY_PHASE_STRIP = NO;
321 | DEBUG_INFORMATION_FORMAT = dwarf;
322 | ENABLE_STRICT_OBJC_MSGSEND = YES;
323 | ENABLE_TESTABILITY = YES;
324 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
325 | GCC_C_LANGUAGE_STANDARD = gnu17;
326 | GCC_DYNAMIC_NO_PIC = NO;
327 | GCC_NO_COMMON_BLOCKS = YES;
328 | GCC_OPTIMIZATION_LEVEL = 0;
329 | GCC_PREPROCESSOR_DEFINITIONS = (
330 | "DEBUG=1",
331 | "$(inherited)",
332 | );
333 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
334 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
335 | GCC_WARN_UNDECLARED_SELECTOR = YES;
336 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
337 | GCC_WARN_UNUSED_FUNCTION = YES;
338 | GCC_WARN_UNUSED_VARIABLE = YES;
339 | IPHONEOS_DEPLOYMENT_TARGET = 18.2;
340 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
341 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
342 | MTL_FAST_MATH = YES;
343 | ONLY_ACTIVE_ARCH = YES;
344 | SDKROOT = iphoneos;
345 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
346 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
347 | };
348 | name = Debug;
349 | };
350 | 3A7F9F022D5A1FA300A71529 /* Release */ = {
351 | isa = XCBuildConfiguration;
352 | buildSettings = {
353 | ALWAYS_SEARCH_USER_PATHS = NO;
354 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
355 | CLANG_ANALYZER_NONNULL = YES;
356 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
357 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
358 | CLANG_ENABLE_MODULES = YES;
359 | CLANG_ENABLE_OBJC_ARC = YES;
360 | CLANG_ENABLE_OBJC_WEAK = YES;
361 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
362 | CLANG_WARN_BOOL_CONVERSION = YES;
363 | CLANG_WARN_COMMA = YES;
364 | CLANG_WARN_CONSTANT_CONVERSION = YES;
365 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
366 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
367 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
368 | CLANG_WARN_EMPTY_BODY = YES;
369 | CLANG_WARN_ENUM_CONVERSION = YES;
370 | CLANG_WARN_INFINITE_RECURSION = YES;
371 | CLANG_WARN_INT_CONVERSION = YES;
372 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
373 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
374 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
375 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
376 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
377 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
378 | CLANG_WARN_STRICT_PROTOTYPES = YES;
379 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
380 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
381 | CLANG_WARN_UNREACHABLE_CODE = YES;
382 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
383 | COPY_PHASE_STRIP = NO;
384 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
385 | ENABLE_NS_ASSERTIONS = NO;
386 | ENABLE_STRICT_OBJC_MSGSEND = YES;
387 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
388 | GCC_C_LANGUAGE_STANDARD = gnu17;
389 | GCC_NO_COMMON_BLOCKS = YES;
390 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
391 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
392 | GCC_WARN_UNDECLARED_SELECTOR = YES;
393 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
394 | GCC_WARN_UNUSED_FUNCTION = YES;
395 | GCC_WARN_UNUSED_VARIABLE = YES;
396 | IPHONEOS_DEPLOYMENT_TARGET = 18.2;
397 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
398 | MTL_ENABLE_DEBUG_INFO = NO;
399 | MTL_FAST_MATH = YES;
400 | SDKROOT = iphoneos;
401 | SWIFT_COMPILATION_MODE = wholemodule;
402 | VALIDATE_PRODUCT = YES;
403 | };
404 | name = Release;
405 | };
406 | 3A7F9F042D5A1FA300A71529 /* Debug */ = {
407 | isa = XCBuildConfiguration;
408 | buildSettings = {
409 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
410 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
411 | CODE_SIGN_STYLE = Automatic;
412 | CURRENT_PROJECT_VERSION = 1;
413 | DEVELOPMENT_ASSET_PATHS = "\"Demo/Preview Content\"";
414 | DEVELOPMENT_TEAM = "";
415 | ENABLE_PREVIEWS = YES;
416 | GENERATE_INFOPLIST_FILE = YES;
417 | INFOPLIST_KEY_CFBundleDisplayName = Splash;
418 | INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools";
419 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
420 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
421 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
422 | INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
423 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
424 | IPHONEOS_DEPLOYMENT_TARGET = 18.0;
425 | LD_RUNPATH_SEARCH_PATHS = (
426 | "$(inherited)",
427 | "@executable_path/Frameworks",
428 | );
429 | MARKETING_VERSION = 1.1;
430 | PRODUCT_BUNDLE_IDENTIFIER = SplashScreen.Demo;
431 | PRODUCT_NAME = "$(TARGET_NAME)";
432 | SWIFT_EMIT_LOC_STRINGS = YES;
433 | SWIFT_VERSION = 5.0;
434 | TARGETED_DEVICE_FAMILY = "1,2";
435 | };
436 | name = Debug;
437 | };
438 | 3A7F9F052D5A1FA300A71529 /* Release */ = {
439 | isa = XCBuildConfiguration;
440 | buildSettings = {
441 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
442 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
443 | CODE_SIGN_STYLE = Automatic;
444 | CURRENT_PROJECT_VERSION = 1;
445 | DEVELOPMENT_ASSET_PATHS = "\"Demo/Preview Content\"";
446 | DEVELOPMENT_TEAM = "";
447 | ENABLE_PREVIEWS = YES;
448 | GENERATE_INFOPLIST_FILE = YES;
449 | INFOPLIST_KEY_CFBundleDisplayName = Splash;
450 | INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools";
451 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
452 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
453 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
454 | INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
455 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
456 | IPHONEOS_DEPLOYMENT_TARGET = 18.0;
457 | LD_RUNPATH_SEARCH_PATHS = (
458 | "$(inherited)",
459 | "@executable_path/Frameworks",
460 | );
461 | MARKETING_VERSION = 1.1;
462 | PRODUCT_BUNDLE_IDENTIFIER = SplashScreen.Demo;
463 | PRODUCT_NAME = "$(TARGET_NAME)";
464 | SWIFT_EMIT_LOC_STRINGS = YES;
465 | SWIFT_VERSION = 5.0;
466 | TARGETED_DEVICE_FAMILY = "1,2";
467 | };
468 | name = Release;
469 | };
470 | 3A7F9F072D5A1FA300A71529 /* Debug */ = {
471 | isa = XCBuildConfiguration;
472 | buildSettings = {
473 | BUNDLE_LOADER = "$(TEST_HOST)";
474 | CODE_SIGN_STYLE = Automatic;
475 | CURRENT_PROJECT_VERSION = 1;
476 | DEVELOPMENT_TEAM = 9PAHLTG8AD;
477 | GENERATE_INFOPLIST_FILE = YES;
478 | IPHONEOS_DEPLOYMENT_TARGET = 18.2;
479 | MARKETING_VERSION = 1.0;
480 | PRODUCT_BUNDLE_IDENTIFIER = SplashScreen.DemoTests;
481 | PRODUCT_NAME = "$(TARGET_NAME)";
482 | SWIFT_EMIT_LOC_STRINGS = NO;
483 | SWIFT_VERSION = 5.0;
484 | TARGETED_DEVICE_FAMILY = "1,2";
485 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Demo.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Demo";
486 | };
487 | name = Debug;
488 | };
489 | 3A7F9F082D5A1FA300A71529 /* Release */ = {
490 | isa = XCBuildConfiguration;
491 | buildSettings = {
492 | BUNDLE_LOADER = "$(TEST_HOST)";
493 | CODE_SIGN_STYLE = Automatic;
494 | CURRENT_PROJECT_VERSION = 1;
495 | DEVELOPMENT_TEAM = 9PAHLTG8AD;
496 | GENERATE_INFOPLIST_FILE = YES;
497 | IPHONEOS_DEPLOYMENT_TARGET = 18.2;
498 | MARKETING_VERSION = 1.0;
499 | PRODUCT_BUNDLE_IDENTIFIER = SplashScreen.DemoTests;
500 | PRODUCT_NAME = "$(TARGET_NAME)";
501 | SWIFT_EMIT_LOC_STRINGS = NO;
502 | SWIFT_VERSION = 5.0;
503 | TARGETED_DEVICE_FAMILY = "1,2";
504 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Demo.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Demo";
505 | };
506 | name = Release;
507 | };
508 | 3A7F9F0A2D5A1FA300A71529 /* Debug */ = {
509 | isa = XCBuildConfiguration;
510 | buildSettings = {
511 | CODE_SIGN_STYLE = Automatic;
512 | CURRENT_PROJECT_VERSION = 1;
513 | DEVELOPMENT_TEAM = 9PAHLTG8AD;
514 | GENERATE_INFOPLIST_FILE = YES;
515 | MARKETING_VERSION = 1.0;
516 | PRODUCT_BUNDLE_IDENTIFIER = SplashScreen.DemoUITests;
517 | PRODUCT_NAME = "$(TARGET_NAME)";
518 | SWIFT_EMIT_LOC_STRINGS = NO;
519 | SWIFT_VERSION = 5.0;
520 | TARGETED_DEVICE_FAMILY = "1,2";
521 | TEST_TARGET_NAME = Demo;
522 | };
523 | name = Debug;
524 | };
525 | 3A7F9F0B2D5A1FA300A71529 /* Release */ = {
526 | isa = XCBuildConfiguration;
527 | buildSettings = {
528 | CODE_SIGN_STYLE = Automatic;
529 | CURRENT_PROJECT_VERSION = 1;
530 | DEVELOPMENT_TEAM = 9PAHLTG8AD;
531 | GENERATE_INFOPLIST_FILE = YES;
532 | MARKETING_VERSION = 1.0;
533 | PRODUCT_BUNDLE_IDENTIFIER = SplashScreen.DemoUITests;
534 | PRODUCT_NAME = "$(TARGET_NAME)";
535 | SWIFT_EMIT_LOC_STRINGS = NO;
536 | SWIFT_VERSION = 5.0;
537 | TARGETED_DEVICE_FAMILY = "1,2";
538 | TEST_TARGET_NAME = Demo;
539 | };
540 | name = Release;
541 | };
542 | /* End XCBuildConfiguration section */
543 |
544 | /* Begin XCConfigurationList section */
545 | 3A7F9EDA2D5A1FA200A71529 /* Build configuration list for PBXProject "Demo" */ = {
546 | isa = XCConfigurationList;
547 | buildConfigurations = (
548 | 3A7F9F012D5A1FA300A71529 /* Debug */,
549 | 3A7F9F022D5A1FA300A71529 /* Release */,
550 | );
551 | defaultConfigurationIsVisible = 0;
552 | defaultConfigurationName = Release;
553 | };
554 | 3A7F9F032D5A1FA300A71529 /* Build configuration list for PBXNativeTarget "Demo" */ = {
555 | isa = XCConfigurationList;
556 | buildConfigurations = (
557 | 3A7F9F042D5A1FA300A71529 /* Debug */,
558 | 3A7F9F052D5A1FA300A71529 /* Release */,
559 | );
560 | defaultConfigurationIsVisible = 0;
561 | defaultConfigurationName = Release;
562 | };
563 | 3A7F9F062D5A1FA300A71529 /* Build configuration list for PBXNativeTarget "DemoTests" */ = {
564 | isa = XCConfigurationList;
565 | buildConfigurations = (
566 | 3A7F9F072D5A1FA300A71529 /* Debug */,
567 | 3A7F9F082D5A1FA300A71529 /* Release */,
568 | );
569 | defaultConfigurationIsVisible = 0;
570 | defaultConfigurationName = Release;
571 | };
572 | 3A7F9F092D5A1FA300A71529 /* Build configuration list for PBXNativeTarget "DemoUITests" */ = {
573 | isa = XCConfigurationList;
574 | buildConfigurations = (
575 | 3A7F9F0A2D5A1FA300A71529 /* Debug */,
576 | 3A7F9F0B2D5A1FA300A71529 /* Release */,
577 | );
578 | defaultConfigurationIsVisible = 0;
579 | defaultConfigurationName = Release;
580 | };
581 | /* End XCConfigurationList section */
582 |
583 | /* Begin XCLocalSwiftPackageReference section */
584 | 3A90AD052D5B1D810046688F /* XCLocalSwiftPackageReference "../../19-Splash-Screen-for-SwiftUI" */ = {
585 | isa = XCLocalSwiftPackageReference;
586 | relativePath = "../../19-Splash-Screen-for-SwiftUI";
587 | };
588 | /* End XCLocalSwiftPackageReference section */
589 |
590 | /* Begin XCSwiftPackageProductDependency section */
591 | 3A7F9F0D2D5A205C00A71529 /* SplashScreenKit */ = {
592 | isa = XCSwiftPackageProductDependency;
593 | productName = SplashScreenKit;
594 | };
595 | 3A7F9F802D5A320E00A71529 /* SplashScreenKit */ = {
596 | isa = XCSwiftPackageProductDependency;
597 | productName = SplashScreenKit;
598 | };
599 | 3A90AD062D5B1D810046688F /* SplashScreenKit */ = {
600 | isa = XCSwiftPackageProductDependency;
601 | productName = SplashScreenKit;
602 | };
603 | /* End XCSwiftPackageProductDependency section */
604 | };
605 | rootObject = 3A7F9ED72D5A1FA200A71529 /* Project object */;
606 | }
607 |
--------------------------------------------------------------------------------
/Demo/Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Demo/Demo.xcodeproj/project.xcworkspace/xcuserdata/ming.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo.xcodeproj/project.xcworkspace/xcuserdata/ming.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/Demo/Demo.xcodeproj/xcuserdata/ming.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Demo.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/AT/Apple TV 1.imageset/Apple TV 1.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/AT/Apple TV 1.imageset/Apple TV 1.jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/AT/Apple TV 1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Apple TV 1.jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/AT/Apple TV 2.imageset/Apple TV 2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/AT/Apple TV 2.imageset/Apple TV 2.jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/AT/Apple TV 2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Apple TV 2.jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/AT/Apple TV 3.imageset/Apple TV 3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/AT/Apple TV 3.imageset/Apple TV 3.jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/AT/Apple TV 3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Apple TV 3.jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/AT/Apple TV 4.imageset/Apple TV 4.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/AT/Apple TV 4.imageset/Apple TV 4.jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/AT/Apple TV 4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Apple TV 4.jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/AT/Apple TV 5.imageset/Apple TV 5.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/AT/Apple TV 5.imageset/Apple TV 5.jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/AT/Apple TV 5.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Apple TV 5.jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/AT/Apple TV 6.imageset/Apple TV 6.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/AT/Apple TV 6.imageset/Apple TV 6.jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/AT/Apple TV 6.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Apple TV 6.jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/AT/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "display-p3",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "1.000",
9 | "green" : "1.000",
10 | "red" : "1.000"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Demo/Demo/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 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (1).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Final Cut Camera (1).jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (1).imageset/Final Cut Camera (1).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (1).imageset/Final Cut Camera (1).jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (2).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Final Cut Camera (2).jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (2).imageset/Final Cut Camera (2).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (2).imageset/Final Cut Camera (2).jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (3).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Final Cut Camera (3).jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (3).imageset/Final Cut Camera (3).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (3).imageset/Final Cut Camera (3).jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (4).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Final Cut Camera (4).jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (4).imageset/Final Cut Camera (4).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (4).imageset/Final Cut Camera (4).jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (5).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Final Cut Camera (5).jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (5).imageset/Final Cut Camera (5).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (5).imageset/Final Cut Camera (5).jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (6).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Final Cut Camera (6).jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (6).imageset/Final Cut Camera (6).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (6).imageset/Final Cut Camera (6).jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (7).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Final Cut Camera (7).jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (7).imageset/Final Cut Camera (7).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera (7).imageset/Final Cut Camera (7).jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Final Cut Camera.jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera.imageset/Final Cut Camera.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/FCPC/Final Cut Camera.imageset/Final Cut Camera.jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FMA/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FMA/Find My App (1).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Find My App (1).jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FMA/Find My App (1).imageset/Find My App (1).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/FMA/Find My App (1).imageset/Find My App (1).jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FMA/Find My App (2).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Find My App (2).jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FMA/Find My App (2).imageset/Find My App (2).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/FMA/Find My App (2).imageset/Find My App (2).jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FMA/Find My App (3).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Find My App (3).jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FMA/Find My App (3).imageset/Find My App (3).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/FMA/Find My App (3).imageset/Find My App (3).jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FMA/Find My App (4).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Find My App Store Image (1).jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FMA/Find My App (4).imageset/Find My App Store Image (1).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/FMA/Find My App (4).imageset/Find My App Store Image (1).jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FMA/Find My App (5).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Find My App Store Image.jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FMA/Find My App (5).imageset/Find My App Store Image.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/FMA/Find My App (5).imageset/Find My App Store Image.jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FMA/Find My App.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Find My App.jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/FMA/Find My App.imageset/Find My App.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/FMA/Find My App.imageset/Find My App.jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/J/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/J/Journal App Image (1).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Journal App Image (1).jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/J/Journal App Image (1).imageset/Journal App Image (1).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/J/Journal App Image (1).imageset/Journal App Image (1).jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/J/Journal App Image (2).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Journal App Image (2).jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/J/Journal App Image (2).imageset/Journal App Image (2).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/J/Journal App Image (2).imageset/Journal App Image (2).jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/J/Journal App Image (3).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Journal App Image (3).jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/J/Journal App Image (3).imageset/Journal App Image (3).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/J/Journal App Image (3).imageset/Journal App Image (3).jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/J/Journal App Image (4).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Journal App Image (4).jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/J/Journal App Image (4).imageset/Journal App Image (4).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/J/Journal App Image (4).imageset/Journal App Image (4).jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/J/Journal App Image (5).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Journal App Image (5).jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/J/Journal App Image (5).imageset/Journal App Image (5).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/J/Journal App Image (5).imageset/Journal App Image (5).jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/J/Journal App Image (6).imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Journal.jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/J/Journal App Image (6).imageset/Journal.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/J/Journal App Image (6).imageset/Journal.jpeg
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/J/Journal App Image.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Journal App Image.jpeg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Demo/Demo/Assets.xcassets/J/Journal App Image.imageset/Journal App Image.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1998code/19-Splash-Screen-for-SwiftUI/b481abe3a5d80f0ab476b6b83f24df118b94968f/Demo/Demo/Assets.xcassets/J/Journal App Image.imageset/Journal App Image.jpeg
--------------------------------------------------------------------------------
/Demo/Demo/ContentView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ContentView.swift
3 | // Demo
4 | //
5 | // Created by Ming on 10/2/2025.
6 | //
7 |
8 | import SwiftUI
9 | import SplashScreenKit
10 |
11 | struct ContentView: View {
12 | var body: some View {
13 | SplashScreen(
14 | images: [],
15 | title: "STRING",
16 | product: "STRING",
17 | caption: "STRING",
18 | cta: "STRING"
19 | ) {
20 | // Button Action
21 | }
22 | }
23 | }
24 |
25 | #Preview("Apple TV") {
26 | SplashScreen(
27 | images: [
28 | Photo("Apple TV 1"),
29 | Photo("Apple TV 2"),
30 | Photo("Apple TV 3"),
31 | Photo("Apple TV 4"),
32 | Photo("Apple TV 5"),
33 | Photo("Apple TV 6")
34 | ],
35 | title: "Welcome to",
36 | product: "Apple TV",
37 | caption: "Browse all movies, TV shows, and more from Apple TV+. Watch all Apple Originals here.",
38 | cta: "Watch Now"
39 | ) {
40 | // Button Action
41 | print("Hello, Apple TV!")
42 | }
43 | }
44 |
45 | #Preview("Final Cut Camera") {
46 | SplashScreen(
47 | images: [
48 | Photo("Final Cut Camera"),
49 | Photo("Final Cut Camera (1)"),
50 | Photo("Final Cut Camera (2)"),
51 | Photo("Final Cut Camera (3)"),
52 | Photo("Final Cut Camera (4)"),
53 | Photo("Final Cut Camera (5)"),
54 | Photo("Final Cut Camera (6)"),
55 | Photo("Final Cut Camera (7)")
56 | ],
57 | title: "Welcome to",
58 | product: "Final Cut Camera",
59 | caption: "Final Cut Camera puts you in the director’s chair with intuitive pro controls for your entire video production. Seamlessly start a Live Multicam session.",
60 | cta: "Create a Project"
61 | ) {
62 | // Button Action
63 | print("Hello, Final Cut Camera!")
64 | }
65 | }
66 |
67 | #Preview("Find My") {
68 | SplashScreen(
69 | images: [
70 | Photo("Find My App"),
71 | Photo("Find My App (1)"),
72 | Photo("Find My App (2)"),
73 | Photo("Find My App (3)"),
74 | Photo("Find My App (4)"),
75 | Photo("Find My App (5)")
76 | ],
77 | title: "Welcome to",
78 | product: "Find My",
79 | caption: "Easy to keep track of your Apple devices — even if they’re offline. You can also locate items using AirTag or Find My technology.",
80 | cta: "Connect"
81 | ) {
82 | // Button Action
83 | print("Hello, Find My!")
84 | }
85 | }
86 |
87 | #Preview("Journal") {
88 | SplashScreen(
89 | images: [
90 | Photo("Journal App Image"),
91 | Photo("Journal App Image (1)"),
92 | Photo("Journal App Image (2)"),
93 | Photo("Journal App Image (3)"),
94 | Photo("Journal App Image (4)"),
95 | Photo("Journal App Image (5)")
96 | ],
97 | title: "Welcome to",
98 | product: "Journal",
99 | caption: "Take a moment to reflect on your day. Capture and write about the details of everyday moments and special events.",
100 | cta: "Start Writing"
101 | ) {
102 | // Button Action
103 | print("Hello, Journal!")
104 | }
105 | }
106 |
--------------------------------------------------------------------------------
/Demo/Demo/DemoApp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DemoApp.swift
3 | // Demo
4 | //
5 | // Created by Ming on 10/2/2025.
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 |
--------------------------------------------------------------------------------
/Demo/Demo/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Demo/DemoTests/DemoTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DemoTests.swift
3 | // DemoTests
4 | //
5 | // Created by Ming on 10/2/2025.
6 | //
7 |
8 | import Testing
9 | @testable import Demo
10 |
11 | struct DemoTests {
12 |
13 | @Test func example() async throws {
14 | // Write your test here and use APIs like `#expect(...)` to check expected conditions.
15 | }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/Demo/DemoUITests/DemoUITests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DemoUITests.swift
3 | // DemoUITests
4 | //
5 | // Created by Ming on 10/2/2025.
6 | //
7 |
8 | import XCTest
9 |
10 | final class DemoUITests: XCTestCase {
11 |
12 | override func setUpWithError() throws {
13 | // Put setup code here. This method is called before the invocation of each test method in the class.
14 |
15 | // In UI tests it is usually best to stop immediately when a failure occurs.
16 | continueAfterFailure = false
17 |
18 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
19 | }
20 |
21 | override func tearDownWithError() throws {
22 | // Put teardown code here. This method is called after the invocation of each test method in the class.
23 | }
24 |
25 | @MainActor
26 | func testExample() throws {
27 | // UI tests must launch the application that they test.
28 | let app = XCUIApplication()
29 | app.launch()
30 |
31 | // Use XCTAssert and related functions to verify your tests produce the correct results.
32 | }
33 |
34 | @MainActor
35 | func testLaunchPerformance() throws {
36 | if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) {
37 | // This measures how long it takes to launch your application.
38 | measure(metrics: [XCTApplicationLaunchMetric()]) {
39 | XCUIApplication().launch()
40 | }
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/Demo/DemoUITests/DemoUITestsLaunchTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DemoUITestsLaunchTests.swift
3 | // DemoUITests
4 | //
5 | // Created by Ming on 10/2/2025.
6 | //
7 |
8 | import XCTest
9 |
10 | final class DemoUITestsLaunchTests: XCTestCase {
11 |
12 | override class var runsForEachTargetApplicationUIConfiguration: Bool {
13 | true
14 | }
15 |
16 | override func setUpWithError() throws {
17 | continueAfterFailure = false
18 | }
19 |
20 | @MainActor
21 | func testLaunch() throws {
22 | let app = XCUIApplication()
23 | app.launch()
24 |
25 | // Insert steps here to perform after app launch but before taking a screenshot,
26 | // such as logging into a test account or navigating somewhere in the app
27 |
28 | let attachment = XCTAttachment(screenshot: app.screenshot())
29 | attachment.name = "Launch Screen"
30 | attachment.lifetime = .keepAlways
31 | add(attachment)
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 MING
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 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version: 6.0
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: "SplashScreenKit",
8 | defaultLocalization: "en",
9 | platforms: [
10 | .iOS(.v18)
11 | ],
12 | products: [
13 | // Products define the executables and libraries a package produces, making them visible to other packages.
14 | .library(
15 | name: "SplashScreenKit",
16 | targets: ["SplashScreenKit"]),
17 | ],
18 | targets: [
19 | // Targets are the basic building blocks of a package, defining a module or a test suite.
20 | // Targets can depend on other targets in this package and products from dependencies.
21 | .target(
22 | name: "SplashScreenKit"),
23 | .testTarget(
24 | name: "SplashScreenKitTests",
25 | dependencies: ["SplashScreenKit"]
26 | ),
27 | ]
28 | )
29 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SplashScreenKit
2 | ### A New Splash Screen for SwiftUI
3 |
4 |
5 |
6 | ## Version
7 | **1.0.0 (Early Preview)**
8 | *⚠️ Various issues existed, not suitable for the production environment!*
9 |
10 | ## Features
11 | - Drop Transition
12 | - Auto Rotation with paging
13 | - Text Effect
14 | - Text Transition
15 | - Fade-in/out Transition/Animation
16 |
17 | ## Beautiful Previews
18 | |  |  |  |  |
19 | | --- | --- | --- | --- |
20 | | Apple TV | Final Cut Camera | Find My | Journal |
21 |
22 | ## Environment / Tested on
23 | - 📲 iOS18+ required
24 | - Swift 6.0
25 | - iPhone 16 Pro / Pro Max
26 | - Xcode 16.2 (16C5032a)
27 |
28 | ## How to use
29 | 0. Open Xcode and (create) a project
30 | 1. In **Package Dependencies**, add ```https://github.com/1998code/19-Splash-Screen-for-SwiftUI```
31 | 2. Then ```import SplashScreenKit``` on top
32 | 3. Sample Code:
33 | ```swift
34 | struct ContentView: View {
35 | var body: some View {
36 | SplashScreen(
37 | images: [],
38 | title: "STRING",
39 | product: "STRING",
40 | caption: "STRING",
41 | cta: "STRING"
42 | ) {
43 | // Button Action
44 | }
45 | }
46 | }
47 | ```
48 |
49 | ## Project Demo
50 | Path: [Demo/Demo.xcodeproj](https://github.com/1998code/19-Splash-Screen-for-SwiftUI/tree/main/Demo)
51 |
52 | ## Known Issues
53 | **Major**
54 | - Gesture is **disabled** due to multiple bugs
55 | - Dragging (from left to right) is not working due to offset; and
56 | - Dragging (from right to left) works but fails the ```currentIndex```
57 | - Only compatible with iOS18+, like Apple Invites app
58 | - Only tested on iPhone 16 Pro/Pro Max (Resize problem on small devices)
59 | - Possible memory leakage when inserting too many items into the array
60 |
61 | **Minor**
62 | - The auto-rotation+paging feels like a "Conveyor belt sushi 🍣", not so smooth.
63 |
64 | ## Copyright
65 | App Store Screenshots © 2025 Apple Inc.
66 |
67 | ## Reference
68 | [Creating visual effects with SwiftUI - Apple Developer](https://developer.apple.com/documentation/swiftui/creating-visual-effects-with-swiftui)
69 |
70 | ## Related Posts on X
71 | https://x.com/1998design/status/1888641485303878110
72 | https://x.com/1998design/status/1888945523845140677
73 |
74 | ## Combinations
75 | Use [SwiftNEWKit](https://github.com/1998code/SwiftNEWKit) together, 2X effective!
76 |
77 |
78 |
79 | ## License
80 | MIT
81 |
82 | ## Supported By
83 |
84 |
85 |
86 |
--------------------------------------------------------------------------------
/Sources/SplashScreenKit/Extension/Photo.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Photo.swift
3 | // SplashScreenKit
4 | // Copyright © 2024 Apple Inc. (https://developer.apple.com/documentation/swiftui/creating-visual-effects-with-swiftui)
5 | // Modified by Ming on 10/2/2025.
6 | //
7 |
8 | import SwiftUI
9 |
10 | public struct Photo: Identifiable {
11 | public var title: String
12 |
13 | public var id: Int = .random(in: 0 ... 100)
14 |
15 | public init(_ title: String) {
16 | self.title = title
17 | }
18 | }
19 |
20 | public struct ItemPhoto: View {
21 | public var photo: Photo
22 |
23 | public init(_ photo: Photo) {
24 | self.photo = photo
25 | }
26 |
27 | public var body: some View {
28 | Image(photo.title)
29 | .resizable()
30 | .scaledToFill()
31 | .frame(width: 219, height: 475)
32 | .clipShape(RoundedRectangle(cornerRadius: 36))
33 | .shadow(radius: 5)
34 | }
35 | }
36 |
37 | public struct ItemLabel: View {
38 | public var photo: Photo
39 |
40 | public init(_ photo: Photo) {
41 | self.photo = photo
42 | }
43 |
44 | public var body: some View {
45 | Text(photo.title)
46 | .font(.title)
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/Sources/SplashScreenKit/Extension/Text.swift:
--------------------------------------------------------------------------------
1 | //
2 | // EmphasisAttribute.swift
3 | // SplashScreenKit
4 | // Copyright © 2024 Apple Inc. (https://developer.apple.com/documentation/swiftui/creating-visual-effects-with-swiftui)
5 | // Modified by Ming on 10/2/2025.
6 | //
7 |
8 | import SwiftUI
9 |
10 | public struct EmphasisAttribute: TextAttribute {}
11 |
12 | /// A text renderer that animates its content.
13 | public struct AppearanceEffectRenderer: TextRenderer, Animatable {
14 | /// The amount of time that passes from the start of the animation.
15 | /// Animatable.
16 | public var elapsedTime: TimeInterval
17 |
18 | /// The amount of time the app spends animating an individual element.
19 | public var elementDuration: TimeInterval
20 |
21 | /// The amount of time the entire animation takes.
22 | public var totalDuration: TimeInterval
23 |
24 | public var spring: Spring {
25 | .snappy(duration: elementDuration - 0.05, extraBounce: 0.4)
26 | }
27 |
28 | public var animatableData: Double {
29 | get { elapsedTime }
30 | set { elapsedTime = newValue }
31 | }
32 |
33 | public init(elapsedTime: TimeInterval, elementDuration: Double = 0.4, totalDuration: TimeInterval) {
34 | self.elapsedTime = min(elapsedTime, totalDuration)
35 | self.elementDuration = min(elementDuration, totalDuration)
36 | self.totalDuration = totalDuration
37 | }
38 |
39 | public func draw(layout: Text.Layout, in context: inout GraphicsContext) {
40 | for run in layout.flattenedRuns {
41 | if run[EmphasisAttribute.self] != nil {
42 | let delay = elementDelay(count: run.count)
43 |
44 | for (index, slice) in run.enumerated() {
45 | // The time that the current element starts animating,
46 | // relative to the start of the animation.
47 | let timeOffset = TimeInterval(index) * delay
48 |
49 | // The amount of time that passes for the current element.
50 | let elementTime = max(0, min(elapsedTime - timeOffset, elementDuration))
51 |
52 | // Make a copy of the context so that individual slices
53 | // don't affect each other.
54 | var copy = context
55 | draw(slice, at: elementTime, in: ©)
56 | }
57 | } else {
58 | // Make a copy of the context so that individual slices
59 | // don't affect each other.
60 | var copy = context
61 | // Runs that don't have a tag of `EmphasisAttribute` quickly
62 | // fade in.
63 | copy.opacity = UnitCurve.easeIn.value(at: elapsedTime / 0.2)
64 | copy.draw(run)
65 | }
66 | }
67 | }
68 |
69 | public func draw(_ slice: Text.Layout.RunSlice, at time: TimeInterval, in context: inout GraphicsContext) {
70 | // Calculate a progress value in unit space for blur and
71 | // opacity, which derive from `UnitCurve`.
72 | let progress = time / elementDuration
73 |
74 | let opacity = UnitCurve.easeIn.value(at: 1.4 * progress)
75 |
76 | let blurRadius =
77 | slice.typographicBounds.rect.height / 16 *
78 | UnitCurve.easeIn.value(at: 1 - progress)
79 |
80 | // The y-translation derives from a spring, which requires a
81 | // time in seconds.
82 | let translationY = spring.value(
83 | fromValue: slice.typographicBounds.descent, // Using -fromValue, the text translate in opposite way
84 | toValue: 0,
85 | initialVelocity: 0,
86 | time: time)
87 |
88 | context.translateBy(x: 0, y: translationY)
89 | context.addFilter(.blur(radius: blurRadius))
90 | context.opacity = opacity
91 | context.draw(slice, options: .disablesSubpixelQuantization)
92 | }
93 |
94 | /// Calculates how much time passes between the start of two consecutive
95 | /// element animations.
96 | ///
97 | /// For example, if there's a total duration of 1 s and an element
98 | /// duration of 0.5 s, the delay for two elements is 0.5 s.
99 | /// The first element starts at 0 s, and the second element starts at 0.5 s
100 | /// and finishes at 1 s.
101 | ///
102 | /// However, to animate three elements in the same duration,
103 | /// the delay is 0.25 s, with the elements starting at 0.0 s, 0.25 s,
104 | /// and 0.5 s, respectively.
105 | public func elementDelay(count: Int) -> TimeInterval {
106 | let count = TimeInterval(count)
107 | let remainingTime = totalDuration - count * elementDuration
108 |
109 | return max(remainingTime / (count + 1), (totalDuration - elementDuration) / count)
110 | }
111 | }
112 |
113 | public extension Text.Layout {
114 | /// A helper function for easier access to all runs in a layout.
115 | var flattenedRuns: some RandomAccessCollection {
116 | self.flatMap { line in
117 | line
118 | }
119 | }
120 |
121 | /// A helper function for easier access to all run slices in a layout.
122 | var flattenedRunSlices: some RandomAccessCollection {
123 | flattenedRuns.flatMap(\.self)
124 | }
125 | }
126 |
127 | public struct TextTransition: Transition {
128 | public static var properties: TransitionProperties {
129 | TransitionProperties(hasMotion: true)
130 | }
131 |
132 | public func body(content: Content, phase: TransitionPhase) -> some View {
133 | let duration = 0.9
134 | let elapsedTime = phase.isIdentity ? duration : 0
135 | let renderer = AppearanceEffectRenderer(
136 | elapsedTime: elapsedTime,
137 | totalDuration: duration
138 | )
139 |
140 | content.transaction { transaction in
141 | // Force the animation of `elapsedTime` to pace linearly and
142 | // drive per-glyph springs based on its value.
143 | if !transaction.disablesAnimations {
144 | transaction.animation = .linear(duration: duration)
145 | }
146 | } body: { view in
147 | view.textRenderer(renderer)
148 | }
149 | }
150 | }
151 |
--------------------------------------------------------------------------------
/Sources/SplashScreenKit/SplashScreenKit.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Created by Ming on 10/2/2025. Inspired by 'Creating visual effects with SwiftUI' & Apple Invites app 2025.
3 | //
4 |
5 | import SwiftUI
6 |
7 | @available(iOS 18.0, *)
8 | public struct SplashScreen: View {
9 | @State var prVisible: Bool = false
10 | @State var ctaVisible: Bool = false
11 | @State var scrollOffset: CGFloat = 0
12 | @State var timer: Timer?
13 | @State var photos: [Photo]
14 |
15 | var title: String
16 | var product: String
17 | var caption: String
18 | var ctaText: String
19 | var ctaAction: () -> Void
20 |
21 | public init(images: [Photo], title: String, product: String, caption: String, cta: String, action: @escaping () -> Void) {
22 | self._photos = State(initialValue: images) // Initialize @State variable
23 | self.title = title
24 | self.product = product
25 | self.caption = caption
26 | self.ctaText = cta
27 | self.ctaAction = action
28 | }
29 |
30 | public var body: some View {
31 | ZStack {
32 | Image("\(photos[currentIndex].title)")
33 | .resizable()
34 | .ignoresSafeArea(.all)
35 | .blur(radius: 10)
36 | VStack {
37 | pagingRotation
38 | .offset(y: prVisible ? 0 : -500)
39 | .transition(.move(edge: .top))
40 | .animation(.easeInOut(duration: 1))
41 | cta
42 | Spacer()
43 | }
44 | .background(.black.opacity(0.8))
45 | .background(.ultraThinMaterial)
46 | }
47 | }
48 |
49 | public var pagingRotation: some View {
50 | GeometryReader { geometry in
51 | ScrollView(.horizontal, showsIndicators: false) {
52 | LazyHStack(spacing: 30) {
53 | ForEach(Array(photos).enumerated().map { $0 }, id: \.offset) { index, photo in
54 | ItemPhoto(photo)
55 | .scrollTransition(axis: .horizontal) { content, phase in
56 | content
57 | .rotationEffect(.degrees(phase.value * 2.5))
58 | // Experiental
59 | .scaleEffect(1 - abs(phase.value) * 0.025)
60 | .opacity(1 - abs(phase.value) * 0.8)
61 | }
62 | }
63 | }
64 | .offset(x: scrollOffset)
65 | .onAppear {
66 | startAutoScroll(geometry.size.width)
67 | }
68 | .onDisappear {
69 | timer?.invalidate()
70 | prVisible = false
71 | ctaVisible = false
72 | }
73 | .onChange(of: currentIndex) { index in
74 | withAnimation(nil) {
75 | if index >= photos.count - 3 {
76 | photos.append(contentsOf: photos)
77 | }
78 | }
79 | }
80 | }.disabled(true)
81 | .contentMargins(24)
82 | .frame(height:475)
83 | }.frame(height:475)
84 | .padding(.vertical, 25)
85 | }
86 |
87 | public func startAutoScroll(_ viewWidth: CGFloat) {
88 | timer = Timer.scheduledTimer(withTimeInterval: 0.02, repeats: true) { _ in
89 | Task { @MainActor in
90 | withAnimation {
91 | scrollOffset -= 1
92 | if scrollOffset <= -viewWidth * CGFloat(photos.count - 1) {
93 | scrollOffset = 0
94 | }
95 | }
96 | }
97 | }
98 | }
99 | public var currentIndex: Int {
100 | let imageWidth: CGFloat = 219 + 30 // Image width + spacing
101 | return Int((-scrollOffset + imageWidth / 2) / imageWidth)
102 | }
103 |
104 | public var cta: some View {
105 | VStack {
106 | if ctaVisible {
107 | Text(title)
108 | .font(.system(size: 20, weight: .bold, design: .default))
109 | .foregroundStyle(.secondary)
110 | .transition(TextTransition())
111 | Text(product)
112 | .font(.system(size: 50, weight: .bold, design: .default))
113 | .customAttribute(EmphasisAttribute())
114 | .transition(TextTransition())
115 | .padding(.bottom,5)
116 | Text(caption)
117 | .foregroundStyle(.secondary)
118 | .multilineTextAlignment(.center)
119 | .transition(TextTransition())
120 | Button(action: ctaAction) {
121 | Text(ctaText)
122 | .font(.system(size: 15, weight: .bold, design: .default))
123 | .padding(.vertical, 10)
124 | .padding(.horizontal, 10)
125 | }.buttonStyle(.borderedProminent)
126 | .buttonBorderShape(.capsule)
127 | .tint(.white)
128 | .foregroundStyle(.black)
129 | .padding(25)
130 | }
131 | }.foregroundStyle(.white)
132 | .padding()
133 | .onAppear {
134 | prVisible = true
135 | DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
136 | ctaVisible = true
137 | }
138 | }
139 | .animation(.easeInOut(duration: 2))
140 | }
141 | }
142 |
--------------------------------------------------------------------------------
/Tests/SplashScreenKitTests/SplashScreenKitTests.swift:
--------------------------------------------------------------------------------
1 | import Testing
2 | @testable import SplashScreenKit
3 |
4 | @Test func example() async throws {
5 | // Write your test here and use APIs like `#expect(...)` to check expected conditions.
6 | }
7 |
--------------------------------------------------------------------------------