Skip to content

Commit fc881f0

Browse files
authored
docs: refactor Examples project (#195)
* wip example project refactor * Add sign in with magic link * Improve loading and error states * Add SignInWithApple example * wip * Build Examples project in CI * skip macro validation
1 parent bb92866 commit fc881f0

28 files changed

+519
-166
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ jobs:
4141
- uses: actions/checkout@v3
4242
- name: Select Xcode 15.0.1
4343
run: sudo xcode-select -s /Applications/Xcode_15.0.1.app
44+
- name: Prepare Examples Project
45+
run: cp Examples/Examples/_Secrets.swift Examples/Examples/Secrets.swift
4446
- name: Build examples
4547
run: make build-examples
4648

.swiftpm/xcode/xcshareddata/xcschemes/Functions.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1500"
3+
LastUpgradeVersion = "1510"
44
version = "1.7">
55
<BuildAction
66
parallelizeBuildables = "YES"

.swiftpm/xcode/xcshareddata/xcschemes/PostgREST.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1500"
3+
LastUpgradeVersion = "1510"
44
version = "1.7">
55
<BuildAction
66
parallelizeBuildables = "YES"

.swiftpm/xcode/xcshareddata/xcschemes/Realtime.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1500"
3+
LastUpgradeVersion = "1510"
44
version = "1.7">
55
<BuildAction
66
parallelizeBuildables = "YES"

.swiftpm/xcode/xcshareddata/xcschemes/Storage.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1500"
3+
LastUpgradeVersion = "1510"
44
version = "1.7">
55
<BuildAction
66
parallelizeBuildables = "YES"

.swiftpm/xcode/xcshareddata/xcschemes/Supabase.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1500"
3+
LastUpgradeVersion = "1510"
44
version = "1.7">
55
<BuildAction
66
parallelizeBuildables = "YES"

Examples/Examples.xcodeproj/project.pbxproj

Lines changed: 49 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@
1616
793895CC2954ABFF0044F2B8 /* RootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 793895CB2954ABFF0044F2B8 /* RootView.swift */; };
1717
793895CE2954AC000044F2B8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 793895CD2954AC000044F2B8 /* Assets.xcassets */; };
1818
793895D22954AC000044F2B8 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 793895D12954AC000044F2B8 /* Preview Assets.xcassets */; };
19+
793E03092B2CED5D00AC7DED /* Contants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 793E03082B2CED5D00AC7DED /* Contants.swift */; };
20+
793E030B2B2CEDDA00AC7DED /* ActionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 793E030A2B2CEDDA00AC7DED /* ActionState.swift */; };
21+
793E030D2B2DAB5700AC7DED /* SignInWithApple.swift in Sources */ = {isa = PBXBuildFile; fileRef = 793E030C2B2DAB5700AC7DED /* SignInWithApple.swift */; };
1922
794EF1222955F26A008C9526 /* AddTodoListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794EF1212955F26A008C9526 /* AddTodoListView.swift */; };
2023
794EF1242955F3DE008C9526 /* TodoListRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794EF1232955F3DE008C9526 /* TodoListRow.swift */; };
2124
7956405E2954ADE00088A06F /* Secrets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7956405D2954ADE00088A06F /* Secrets.swift */; };
22-
795640602954AE140088A06F /* AuthView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7956405F2954AE140088A06F /* AuthView.swift */; };
25+
795640602954AE140088A06F /* AuthController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7956405F2954AE140088A06F /* AuthController.swift */; };
2326
795640622955AD2B0088A06F /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 795640612955AD2B0088A06F /* HomeView.swift */; };
2427
795640662955AE9C0088A06F /* TodoListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 795640652955AE9C0088A06F /* TodoListView.swift */; };
2528
795640682955AEB30088A06F /* Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = 795640672955AEB30088A06F /* Models.swift */; };
@@ -29,6 +32,10 @@
2932
796298992AEBBA77000AA957 /* MFAFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 796298982AEBBA77000AA957 /* MFAFlow.swift */; };
3033
7962989D2AEBC6F9000AA957 /* SVGView in Frameworks */ = {isa = PBXBuildFile; productRef = 7962989C2AEBC6F9000AA957 /* SVGView */; };
3134
79719ECE2ADF26C400737804 /* Supabase in Frameworks */ = {isa = PBXBuildFile; productRef = 79719ECD2ADF26C400737804 /* Supabase */; };
35+
79AF047F2B2CE207008761AD /* AuthWithEmailAndPassword.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79AF047E2B2CE207008761AD /* AuthWithEmailAndPassword.swift */; };
36+
79AF04812B2CE261008761AD /* AuthView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79AF04802B2CE261008761AD /* AuthView.swift */; };
37+
79AF04842B2CE408008761AD /* AuthWithMagicLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79AF04832B2CE408008761AD /* AuthWithMagicLink.swift */; };
38+
79AF04862B2CE586008761AD /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79AF04852B2CE586008761AD /* Debug.swift */; };
3239
79FEFFAF2B07873600D36347 /* UserManagementApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79FEFFAE2B07873600D36347 /* UserManagementApp.swift */; };
3340
79FEFFB12B07873600D36347 /* AppView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79FEFFB02B07873600D36347 /* AppView.swift */; };
3441
79FEFFB32B07873700D36347 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 79FEFFB22B07873700D36347 /* Assets.xcassets */; };
@@ -55,16 +62,23 @@
5562
793895CD2954AC000044F2B8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
5663
793895CF2954AC000044F2B8 /* Examples.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Examples.entitlements; sourceTree = "<group>"; };
5764
793895D12954AC000044F2B8 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
65+
793E03082B2CED5D00AC7DED /* Contants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Contants.swift; sourceTree = "<group>"; };
66+
793E030A2B2CEDDA00AC7DED /* ActionState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionState.swift; sourceTree = "<group>"; };
67+
793E030C2B2DAB5700AC7DED /* SignInWithApple.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInWithApple.swift; sourceTree = "<group>"; };
5868
794EF1212955F26A008C9526 /* AddTodoListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddTodoListView.swift; sourceTree = "<group>"; };
5969
794EF1232955F3DE008C9526 /* TodoListRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodoListRow.swift; sourceTree = "<group>"; };
6070
7956405D2954ADE00088A06F /* Secrets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Secrets.swift; sourceTree = "<group>"; };
61-
7956405F2954AE140088A06F /* AuthView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthView.swift; sourceTree = "<group>"; };
71+
7956405F2954AE140088A06F /* AuthController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthController.swift; sourceTree = "<group>"; };
6272
795640612955AD2B0088A06F /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = "<group>"; };
6373
795640652955AE9C0088A06F /* TodoListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodoListView.swift; sourceTree = "<group>"; };
6474
795640672955AEB30088A06F /* Models.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Models.swift; sourceTree = "<group>"; };
6575
795640692955AFBD0088A06F /* ErrorText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorText.swift; sourceTree = "<group>"; };
6676
796298982AEBBA77000AA957 /* MFAFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MFAFlow.swift; sourceTree = "<group>"; };
6777
7962989A2AEBBD9F000AA957 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
78+
79AF047E2B2CE207008761AD /* AuthWithEmailAndPassword.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthWithEmailAndPassword.swift; sourceTree = "<group>"; };
79+
79AF04802B2CE261008761AD /* AuthView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthView.swift; sourceTree = "<group>"; };
80+
79AF04832B2CE408008761AD /* AuthWithMagicLink.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthWithMagicLink.swift; sourceTree = "<group>"; };
81+
79AF04852B2CE586008761AD /* Debug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Debug.swift; sourceTree = "<group>"; };
6882
79FEFFAC2B07873600D36347 /* UserManagement.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = UserManagement.app; sourceTree = BUILT_PRODUCTS_DIR; };
6983
79FEFFAE2B07873600D36347 /* UserManagementApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserManagementApp.swift; sourceTree = "<group>"; };
7084
79FEFFB02B07873600D36347 /* AppView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppView.swift; sourceTree = "<group>"; };
@@ -155,9 +169,9 @@
155169
793895C82954ABFF0044F2B8 /* Examples */ = {
156170
isa = PBXGroup;
157171
children = (
172+
79AF04822B2CE3BD008761AD /* Auth */,
158173
7962989A2AEBBD9F000AA957 /* Info.plist */,
159174
793895CD2954AC000044F2B8 /* Assets.xcassets */,
160-
7956405F2954AE140088A06F /* AuthView.swift */,
161175
793895CF2954AC000044F2B8 /* Examples.entitlements */,
162176
793895C92954ABFF0044F2B8 /* ExamplesApp.swift */,
163177
793895D02954AC000044F2B8 /* Preview Content */,
@@ -170,6 +184,9 @@
170184
794EF1212955F26A008C9526 /* AddTodoListView.swift */,
171185
794EF1232955F3DE008C9526 /* TodoListRow.swift */,
172186
796298982AEBBA77000AA957 /* MFAFlow.swift */,
187+
79AF04852B2CE586008761AD /* Debug.swift */,
188+
793E03082B2CED5D00AC7DED /* Contants.swift */,
189+
793E030A2B2CEDDA00AC7DED /* ActionState.swift */,
173190
);
174191
path = Examples;
175192
sourceTree = "<group>";
@@ -189,6 +206,18 @@
189206
name = Frameworks;
190207
sourceTree = "<group>";
191208
};
209+
79AF04822B2CE3BD008761AD /* Auth */ = {
210+
isa = PBXGroup;
211+
children = (
212+
7956405F2954AE140088A06F /* AuthController.swift */,
213+
79AF04802B2CE261008761AD /* AuthView.swift */,
214+
79AF047E2B2CE207008761AD /* AuthWithEmailAndPassword.swift */,
215+
79AF04832B2CE408008761AD /* AuthWithMagicLink.swift */,
216+
793E030C2B2DAB5700AC7DED /* SignInWithApple.swift */,
217+
);
218+
path = Auth;
219+
sourceTree = "<group>";
220+
};
192221
79FEFFAD2B07873600D36347 /* UserManagement */ = {
193222
isa = PBXGroup;
194223
children = (
@@ -290,7 +319,7 @@
290319
attributes = {
291320
BuildIndependentTargetsInParallel = 1;
292321
LastSwiftUpdateCheck = 1500;
293-
LastUpgradeCheck = 1500;
322+
LastUpgradeCheck = 1510;
294323
TargetAttributes = {
295324
790308E52AEE7B4D003C4A98 = {
296325
CreatedOnToolsVersion = 15.0.1;
@@ -373,16 +402,23 @@
373402
buildActionMask = 2147483647;
374403
files = (
375404
796298992AEBBA77000AA957 /* MFAFlow.swift in Sources */,
405+
79AF04862B2CE586008761AD /* Debug.swift in Sources */,
406+
79AF04842B2CE408008761AD /* AuthWithMagicLink.swift in Sources */,
407+
793E03092B2CED5D00AC7DED /* Contants.swift in Sources */,
376408
793895CC2954ABFF0044F2B8 /* RootView.swift in Sources */,
377409
7956406A2955AFBD0088A06F /* ErrorText.swift in Sources */,
410+
79AF04812B2CE261008761AD /* AuthView.swift in Sources */,
378411
794EF1242955F3DE008C9526 /* TodoListRow.swift in Sources */,
379412
794EF1222955F26A008C9526 /* AddTodoListView.swift in Sources */,
380413
7956405E2954ADE00088A06F /* Secrets.swift in Sources */,
381414
795640682955AEB30088A06F /* Models.swift in Sources */,
382415
795640662955AE9C0088A06F /* TodoListView.swift in Sources */,
383-
795640602954AE140088A06F /* AuthView.swift in Sources */,
416+
795640602954AE140088A06F /* AuthController.swift in Sources */,
417+
79AF047F2B2CE207008761AD /* AuthWithEmailAndPassword.swift in Sources */,
384418
795640622955AD2B0088A06F /* HomeView.swift in Sources */,
385419
793895CA2954ABFF0044F2B8 /* ExamplesApp.swift in Sources */,
420+
793E030D2B2DAB5700AC7DED /* SignInWithApple.swift in Sources */,
421+
793E030B2B2CEDDA00AC7DED /* ActionState.swift in Sources */,
386422
);
387423
runOnlyForDeploymentPostprocessing = 0;
388424
};
@@ -425,7 +461,6 @@
425461
"@executable_path/../Frameworks",
426462
);
427463
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
428-
MACOSX_DEPLOYMENT_TARGET = 14.0;
429464
MARKETING_VERSION = 1.0;
430465
PRODUCT_BUNDLE_IDENTIFIER = dev.grds.RealtimeSample;
431466
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -460,7 +495,6 @@
460495
"@executable_path/../Frameworks",
461496
);
462497
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
463-
MACOSX_DEPLOYMENT_TARGET = 14.0;
464498
MARKETING_VERSION = 1.0;
465499
PRODUCT_BUNDLE_IDENTIFIER = dev.grds.RealtimeSample;
466500
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -477,6 +511,7 @@
477511
isa = XCBuildConfiguration;
478512
buildSettings = {
479513
ALWAYS_SEARCH_USER_PATHS = NO;
514+
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
480515
CLANG_ANALYZER_NONNULL = YES;
481516
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
482517
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
@@ -527,11 +562,12 @@
527562
GCC_WARN_UNUSED_FUNCTION = YES;
528563
GCC_WARN_UNUSED_VARIABLE = YES;
529564
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
530-
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
565+
IPHONEOS_DEPLOYMENT_TARGET = 17.0;
531566
LD_RUNPATH_SEARCH_PATHS = (
532567
"$(inherited)",
533568
"@executable_path/Frameworks",
534569
);
570+
MACOSX_DEPLOYMENT_TARGET = 14.0;
535571
MARKETING_VERSION = 1.0.0;
536572
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
537573
MTL_FAST_MATH = YES;
@@ -548,6 +584,7 @@
548584
isa = XCBuildConfiguration;
549585
buildSettings = {
550586
ALWAYS_SEARCH_USER_PATHS = NO;
587+
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
551588
CLANG_ANALYZER_NONNULL = YES;
552589
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
553590
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
@@ -592,11 +629,12 @@
592629
GCC_WARN_UNUSED_FUNCTION = YES;
593630
GCC_WARN_UNUSED_VARIABLE = YES;
594631
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
595-
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
632+
IPHONEOS_DEPLOYMENT_TARGET = 17.0;
596633
LD_RUNPATH_SEARCH_PATHS = (
597634
"$(inherited)",
598635
"@executable_path/Frameworks",
599636
);
637+
MACOSX_DEPLOYMENT_TARGET = 14.0;
600638
MARKETING_VERSION = 1.0.0;
601639
MTL_ENABLE_DEBUG_INFO = NO;
602640
MTL_FAST_MATH = YES;
@@ -622,7 +660,7 @@
622660
GENERATE_INFOPLIST_FILE = YES;
623661
INFOPLIST_FILE = Examples/Info.plist;
624662
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
625-
PRODUCT_BUNDLE_IDENTIFIER = com.supabase.Examples;
663+
PRODUCT_BUNDLE_IDENTIFIER = "com.supabase.swift-examples";
626664
PRODUCT_NAME = "$(TARGET_NAME)";
627665
SWIFT_EMIT_LOC_STRINGS = YES;
628666
};
@@ -642,7 +680,7 @@
642680
GENERATE_INFOPLIST_FILE = YES;
643681
INFOPLIST_FILE = Examples/Info.plist;
644682
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
645-
PRODUCT_BUNDLE_IDENTIFIER = com.supabase.Examples;
683+
PRODUCT_BUNDLE_IDENTIFIER = "com.supabase.swift-examples";
646684
PRODUCT_NAME = "$(TARGET_NAME)";
647685
SWIFT_EMIT_LOC_STRINGS = YES;
648686
};
@@ -677,7 +715,6 @@
677715
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
678716
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
679717
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
680-
MACOSX_DEPLOYMENT_TARGET = 14.0;
681718
MARKETING_VERSION = 1.0;
682719
PRODUCT_BUNDLE_IDENTIFIER = com.supabase.UserManagement;
683720
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -719,7 +756,6 @@
719756
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
720757
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
721758
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
722-
MACOSX_DEPLOYMENT_TARGET = 14.0;
723759
MARKETING_VERSION = 1.0;
724760
PRODUCT_BUNDLE_IDENTIFIER = com.supabase.UserManagement;
725761
PRODUCT_NAME = "$(TARGET_NAME)";

Examples/Examples.xcodeproj/xcshareddata/xcschemes/Examples.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1500"
3+
LastUpgradeVersion = "1510"
44
version = "1.7">
55
<BuildAction
66
parallelizeBuildables = "YES"

Examples/Examples/ActionState.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//
2+
// ActionState.swift
3+
// Examples
4+
//
5+
// Created by Guilherme Souza on 15/12/23.
6+
//
7+
8+
import CasePaths
9+
import Foundation
10+
11+
@CasePathable
12+
enum ActionState<Success, Failure: Error> {
13+
case idle
14+
case inFlight
15+
case result(Result<Success, Failure>)
16+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
//
2+
// AuthController.swift
3+
// Examples
4+
//
5+
// Created by Guilherme Souza on 22/12/22.
6+
//
7+
8+
import Auth
9+
import SwiftUI
10+
11+
@Observable
12+
@MainActor
13+
final class AuthController {
14+
var session: Session?
15+
16+
var currentUserID: UUID {
17+
guard let id = session?.user.id else {
18+
preconditionFailure("Required session.")
19+
}
20+
21+
return id
22+
}
23+
24+
@ObservationIgnored
25+
private var observeAuthStateChangesTask: Task<Void, Never>?
26+
27+
init() {
28+
observeAuthStateChangesTask = Task {
29+
for await (event, session) in await supabase.auth.authStateChanges {
30+
guard [.initialSession, .signedIn, .signedOut].contains(event) else { return }
31+
32+
self.session = session
33+
}
34+
}
35+
}
36+
37+
deinit {
38+
observeAuthStateChangesTask?.cancel()
39+
}
40+
}

0 commit comments

Comments
 (0)