@@ -11,80 +11,136 @@ import Foundation
11
11
class PrefsWrapper {
12
12
var welcomeScreenItem1SymbolName : String
13
13
var pendingApplicationState : String
14
+
14
15
init ( ) {
15
16
welcomeScreenItem1SymbolName = userExperienceJSON? . welcomeScreenItem1SymbolName ?? " gear.circle "
16
17
pendingApplicationState = " circle.dashed.inset.filled "
17
-
18
18
}
19
19
}
20
20
21
+ // Define default values as constants or a struct for easier maintenance
22
+ struct DefaultValues {
23
+ static let exitScreenItem1ButtonText = " LAUNCH "
24
+ static let exitScreenItem1DescriptionText = " Easily install apps and tools provided by your IT department. "
25
+ static let exitScreenItem1ImagePath = " file:///Applications/Safari.app/Contents/Resources/AppIcon.icns "
26
+ static let exitScreenItem1LaunchURL = " file:///Applications/Safari.app "
27
+ static let exitScreenItem1Title = " Self Service "
28
+ static let exitScreenItem2ButtonText = " OPEN "
29
+ static let exitScreenItem2DescriptionText = " Everything you need to know to start using your new Mac. "
30
+ static let exitScreenItem2ImagePath = " file:///System/Library/CoreServices/Finder.app/Contents/Resources/Finder.icns "
31
+ static let exitScreenItem2LaunchURL = " https://support.apple.com/guide/mac-help/welcome/mac "
32
+ static let exitScreenItem2Title = " macOS User Guide "
33
+ static let exitScreenItem3ButtonText = " UPDATE "
34
+ static let exitScreenItem3DescriptionText = " Updates may be available for your Mac. It is encouraged to install them. "
35
+ static let exitScreenItem3ImagePath = " file:///System/Library/CoreServices/ControlCenter.app/Contents/Resources/AppIcon.icns "
36
+ static let exitScreenItem3LaunchURL = " file:///System/Library/PreferencePanes/SoftwareUpdate.prefPane "
37
+ static let exitScreenItem3Title = " Software Updates "
38
+
39
+ static let welcomeScreenItem1DescriptionText = " Multiple settings are being configured, tailored to make your first day exceptional. "
40
+ static let welcomeScreenItem1SymbolName = " gear.circle "
41
+ static let welcomeScreenItem1Title = " Configurations "
42
+ static let welcomeScreenItem2DescriptionText = " While Apple has world class applications built in to macOS, we know that some of your favorite business applications still need to be added. Some are installing now, but checkout our self service application for even more. "
43
+ static let welcomeScreenItem2SymbolName = " slider.horizontal.below.rectangle "
44
+ static let welcomeScreenItem2Title = " Applications "
45
+ static let welcomeScreenItem3DescriptionText = " By applying security policies, we ensure that your device is fully up to date with the latest updates, all while still valuing your privacy. "
46
+ static let welcomeScreenItem3SymbolName = " mappin.circle "
47
+ static let welcomeScreenItem3Title = " Secure "
48
+
49
+ static let companyLogoPath = " " // Add default company logo path if available
50
+ static let companyLogoPath2 = " " // Add default secondary company logo path if available
51
+
52
+ static let aboutURL = " https://github.com/erikng/hello " // Default value for aboutURL
53
+ static let provisioningHeaderText = " Setting up your Mac... " // Default value for provisioningHeaderText
54
+ static let provisioningBodyText = " Your Mac is being automatically configured by your organization. This process may take some time to complete. Please don't attempt to restart or shut down the computer unless you are prompted to do so. " // Default value for provisioningBodyText
55
+ static let welcomeSubHeaderText = " hello " // Default value for welcomeSubHeaderText
56
+ static let exitText = " Setup complete " // Default value for exitText
57
+ static let quitButtonText = " Quit " // Default value for quitButtonText
58
+ static let restartButtonText = " Restart " // Default value for restartButtonText
59
+
60
+ static let disableExitScreen = false // Default value for disableExitScreen
61
+ static let restartStyle = " default " // Default value for restartStyle
62
+ static let disableWelcomeScreen = false // Default value for disableWelcomeScreen
63
+ static let enableWelcomeScreenTimer = true // Default value for enableWelcomeScreenTimer
64
+ static let welcomeButtonText = " Start " // Default value for welcomeButtonText
65
+ static let welcomeHeaderText = " Welcome " // Default value for welcomeHeaderText
66
+
67
+ static let exitScreenBodyText = " Your exit process is complete. Please follow any additional instructions if provided. " // Default value for exitScreenBodyText
68
+ }
69
+
70
+ // Define a function to fetch values with defaults
71
+ func getUserExperienceValue< T> ( _ keyPath: KeyPath < UserExperience , T ? > , defaultValue: T ) -> T {
72
+ return userExperienceJSON ? [ keyPath: keyPath] ?? defaultValue
73
+ }
74
+
75
+ // Setup UserExperience JSON and DeviceStage JSON
21
76
let helloDefaults = UserDefaults . standard
22
- let dynamicOSPreferences = PrefsWrapper . init ( )
77
+ let dynamicOSPreferences = PrefsWrapper ( )
23
78
let helloJSONPreferences = Utils ( ) . getHelloJSONPreferences ( )
24
- let helloRefreshCycleTimer = Timer . publish ( every: Double ( 2.0 ) , on: . main, in: . common) . autoconnect ( )
79
+ let helloRefreshCycleTimer = Timer . publish ( every: 2.0 , on: . main, in: . common) . autoconnect ( )
25
80
let deviceStagesJSON = getDeviceStagesJSON ( )
26
81
let userExperienceJSON = getUserExperienceJSON ( )
27
82
28
- // userExperience
29
- let aboutURL = userExperienceJSON? . aboutURL ?? " https://github.com/erikng/hello "
30
- let companyLogoPath = userExperienceJSON? . companyLogoPath ?? " "
31
- let companyLogoPath2 = userExperienceJSON? . companyLogoPath2 ?? " "
32
- let exitScreenBodyText = userExperienceJSON? . exitScreenBodyText ?? " Your Mac has been successfully configured. Below are a few resources to help you get started. "
33
- let exitText = userExperienceJSON? . exitText ?? " Setup complete "
34
- let disableWelcomeScreen = userExperienceJSON? . disableWelcomeScreen ?? false
35
- let disableExitScreen = userExperienceJSON? . disableExitScreen ?? false
36
- let enableWelcomeScreenTimer = userExperienceJSON? . enableWelcomeScreenTimer ?? false
37
- let exitScreenItem1ButtonText = userExperienceJSON? . exitScreenItem1ButtonText ?? " LAUNCH "
38
- let exitScreenItem1DescriptionText = userExperienceJSON? . exitScreenItem1DescriptionText ?? " Easily install apps and tools provided by your IT department. "
39
- let exitScreenItem1ImagePath = userExperienceJSON? . exitScreenItem1ImagePath ?? " file:///Applications/Safari.app/Contents/Resources/AppIcon.icns "
40
- let exitScreenItem1LaunchURL = userExperienceJSON? . exitScreenItem1LaunchURL ?? " file:///Applications/Safari.app "
41
- let exitScreenItem1Title = userExperienceJSON? . exitScreenItem1Title ?? " Self Service "
42
- let exitScreenItem2ButtonText = userExperienceJSON? . exitScreenItem2ButtonText ?? " OPEN "
43
- let exitScreenItem2DescriptionText = userExperienceJSON? . exitScreenItem2DescriptionText ?? " Everything you need to know to start using your new Mac. "
44
- let exitScreenItem2ImagePath = userExperienceJSON? . exitScreenItem2ImagePath ?? " file:///System/Library/CoreServices/Finder.app/Contents/Resources/Finder.icns "
45
- let exitScreenItem2LaunchURL = userExperienceJSON? . exitScreenItem2LaunchURL ?? " https://support.apple.com/guide/mac-help/welcome/mac "
46
- let exitScreenItem2Title = userExperienceJSON? . exitScreenItem2Title ?? " macOS User Guide "
47
- let exitScreenItem3ButtonText = userExperienceJSON? . exitScreenItem3ButtonText ?? " UPDATE "
48
- let exitScreenItem3DescriptionText = userExperienceJSON? . exitScreenItem3DescriptionText ?? " Updates may be available for your Mac. It is encouraged to install them. "
49
- let exitScreenItem3ImagePath = userExperienceJSON? . exitScreenItem3ImagePath ?? " file:///System/Library/CoreServices/ControlCenter.app/Contents/Resources/AppIcon.icns "
50
- let exitScreenItem3LaunchURL = userExperienceJSON? . exitScreenItem3LaunchURL ?? " file:///System/Library/PreferencePanes/SoftwareUpdate.prefPane "
51
- let exitScreenItem3Title = userExperienceJSON? . exitScreenItem3Title ?? " Software Updates "
52
- let provisioningBodyText = userExperienceJSON? . provisioningBodyText ?? " Your Mac is being automatically configured by your organization. This process may take some time to complete. Please don't attempt to restart or shut down the computer unless you are prompted to do so. "
53
- let provisioningHeaderText = userExperienceJSON? . provisioningHeaderText ?? " Setting up your Mac... "
54
- let quitButtonText = userExperienceJSON? . quitButtonText ?? " Quit "
55
- let restartButtonText = userExperienceJSON? . restartButtonText ?? " Restart "
56
- let restartStyle = userExperienceJSON? . restartStyle ?? " None "
57
- let welcomeButtonText = userExperienceJSON? . welcomeButtonText ?? " Continue "
58
- let welcomeHeaderText = userExperienceJSON? . welcomeHeaderText ?? " Welcome to "
59
- let welcomeSubHeaderText = userExperienceJSON? . welcomeSubHeaderText ?? " hello "
60
- let welcomeScreenItem1DescriptionText = userExperienceJSON? . welcomeScreenItem1DescriptionText ?? " Multiple settings are being configured, tailored to make your first day exceptional. "
83
+ // Fetch values using the function
84
+ let exitScreenItem1ButtonText = getUserExperienceValue ( \. exitScreenItem1ButtonText, defaultValue: DefaultValues . exitScreenItem1ButtonText)
85
+ let exitScreenItem1DescriptionText = getUserExperienceValue ( \. exitScreenItem1DescriptionText, defaultValue: DefaultValues . exitScreenItem1DescriptionText)
86
+ let exitScreenItem1ImagePath = getUserExperienceValue ( \. exitScreenItem1ImagePath, defaultValue: DefaultValues . exitScreenItem1ImagePath)
87
+ let exitScreenItem1LaunchURL = getUserExperienceValue ( \. exitScreenItem1LaunchURL, defaultValue: DefaultValues . exitScreenItem1LaunchURL)
88
+ let exitScreenItem1Title = getUserExperienceValue ( \. exitScreenItem1Title, defaultValue: DefaultValues . exitScreenItem1Title)
89
+
90
+ let exitScreenItem2ButtonText = getUserExperienceValue ( \. exitScreenItem2ButtonText, defaultValue: DefaultValues . exitScreenItem2ButtonText)
91
+ let exitScreenItem2DescriptionText = getUserExperienceValue ( \. exitScreenItem2DescriptionText, defaultValue: DefaultValues . exitScreenItem2DescriptionText)
92
+ let exitScreenItem2ImagePath = getUserExperienceValue ( \. exitScreenItem2ImagePath, defaultValue: DefaultValues . exitScreenItem2ImagePath)
93
+ let exitScreenItem2LaunchURL = getUserExperienceValue ( \. exitScreenItem2LaunchURL, defaultValue: DefaultValues . exitScreenItem2LaunchURL)
94
+ let exitScreenItem2Title = getUserExperienceValue ( \. exitScreenItem2Title, defaultValue: DefaultValues . exitScreenItem2Title)
95
+
96
+ let exitScreenItem3ButtonText = getUserExperienceValue ( \. exitScreenItem3ButtonText, defaultValue: DefaultValues . exitScreenItem3ButtonText)
97
+ let exitScreenItem3DescriptionText = getUserExperienceValue ( \. exitScreenItem3DescriptionText, defaultValue: DefaultValues . exitScreenItem3DescriptionText)
98
+ let exitScreenItem3ImagePath = getUserExperienceValue ( \. exitScreenItem3ImagePath, defaultValue: DefaultValues . exitScreenItem3ImagePath)
99
+ let exitScreenItem3LaunchURL = getUserExperienceValue ( \. exitScreenItem3LaunchURL, defaultValue: DefaultValues . exitScreenItem3LaunchURL)
100
+ let exitScreenItem3Title = getUserExperienceValue ( \. exitScreenItem3Title, defaultValue: DefaultValues . exitScreenItem3Title)
101
+
102
+ let welcomeScreenItem1DescriptionText = getUserExperienceValue ( \. welcomeScreenItem1DescriptionText, defaultValue: DefaultValues . welcomeScreenItem1DescriptionText)
61
103
let welcomeScreenItem1SymbolName = dynamicOSPreferences. welcomeScreenItem1SymbolName
104
+ let welcomeScreenItem1Title = getUserExperienceValue ( \. welcomeScreenItem1Title, defaultValue: DefaultValues . welcomeScreenItem1Title)
62
105
63
- let welcomeScreenItem1Title = userExperienceJSON? . welcomeScreenItem1Title ?? " Configurations "
64
- let welcomeScreenItem2DescriptionText = userExperienceJSON? . welcomeScreenItem2DescriptionText ?? " While Apple has world class applications built in to macOS, we know that some of your favorite business applications still need to be added. Some are installing now, but checkout our self service application for even more. "
65
- let welcomeScreenItem2SymbolName = userExperienceJSON? . welcomeScreenItem2SymbolName ?? " slider.horizontal.below.rectangle "
66
- let welcomeScreenItem2Title = userExperienceJSON? . welcomeScreenItem2Title ?? " Applications "
67
- let welcomeScreenItem3DescriptionText = userExperienceJSON? . welcomeScreenItem3DescriptionText ?? " By applying security policies, we ensure that your device is fully up to date with the latest updates, all while still valuing your privacy. "
68
- let welcomeScreenItem3SymbolName = userExperienceJSON? . welcomeScreenItem3SymbolName ?? " mappin.circle "
69
- let welcomeScreenItem3Title = userExperienceJSON? . welcomeScreenItem3Title ?? " Secure "
70
- let welcomeTimer = userExperienceJSON? . welcomeTimer ?? 60
106
+ let welcomeScreenItem2DescriptionText = getUserExperienceValue ( \. welcomeScreenItem2DescriptionText, defaultValue: DefaultValues . welcomeScreenItem2DescriptionText)
107
+ let welcomeScreenItem2SymbolName = getUserExperienceValue ( \. welcomeScreenItem2SymbolName, defaultValue: DefaultValues . welcomeScreenItem2SymbolName)
108
+ let welcomeScreenItem2Title = getUserExperienceValue ( \. welcomeScreenItem2Title, defaultValue: DefaultValues . welcomeScreenItem2Title)
71
109
72
- // deviceStages
110
+ let welcomeScreenItem3DescriptionText = getUserExperienceValue ( \. welcomeScreenItem3DescriptionText, defaultValue: DefaultValues . welcomeScreenItem3DescriptionText)
111
+ let welcomeScreenItem3SymbolName = getUserExperienceValue ( \. welcomeScreenItem3SymbolName, defaultValue: DefaultValues . welcomeScreenItem3SymbolName)
112
+ let welcomeScreenItem3Title = getUserExperienceValue ( \. welcomeScreenItem3Title, defaultValue: DefaultValues . welcomeScreenItem3Title)
113
+
114
+ let welcomeTimer = getUserExperienceValue ( \. welcomeTimer, defaultValue: 60 )
115
+
116
+ // Company logos
117
+ let companyLogoPath = getUserExperienceValue ( \. companyLogoPath, defaultValue: DefaultValues . companyLogoPath)
118
+ let companyLogoPath2 = getUserExperienceValue ( \. companyLogoPath2, defaultValue: DefaultValues . companyLogoPath2)
119
+
120
+ // Additional values
121
+ let aboutURL = getUserExperienceValue ( \. aboutURL, defaultValue: DefaultValues . aboutURL)
122
+ let provisioningHeaderText = getUserExperienceValue ( \. provisioningHeaderText, defaultValue: DefaultValues . provisioningHeaderText)
123
+ let provisioningBodyText = getUserExperienceValue ( \. provisioningBodyText, defaultValue: DefaultValues . provisioningBodyText)
124
+ let welcomeSubHeaderText = getUserExperienceValue ( \. welcomeSubHeaderText, defaultValue: DefaultValues . welcomeSubHeaderText)
125
+ let exitText = getUserExperienceValue ( \. exitText, defaultValue: DefaultValues . exitText)
126
+ let quitButtonText = getUserExperienceValue ( \. quitButtonText, defaultValue: DefaultValues . quitButtonText)
127
+ let restartButtonText = getUserExperienceValue ( \. restartButtonText, defaultValue: DefaultValues . restartButtonText)
128
+ let disableExitScreen = getUserExperienceValue ( \. disableExitScreen, defaultValue: DefaultValues . disableExitScreen)
129
+ let restartStyle = getUserExperienceValue ( \. restartStyle, defaultValue: DefaultValues . restartStyle)
130
+ let disableWelcomeScreen = getUserExperienceValue ( \. disableWelcomeScreen, defaultValue: DefaultValues . disableWelcomeScreen)
131
+ let enableWelcomeScreenTimer = getUserExperienceValue ( \. enableWelcomeScreenTimer, defaultValue: DefaultValues . enableWelcomeScreenTimer)
132
+ let welcomeButtonText = getUserExperienceValue ( \. welcomeButtonText, defaultValue: DefaultValues . welcomeButtonText)
133
+ let welcomeHeaderText = getUserExperienceValue ( \. welcomeHeaderText, defaultValue: DefaultValues . welcomeHeaderText)
134
+ let exitScreenBodyText = getUserExperienceValue ( \. exitScreenBodyText, defaultValue: DefaultValues . exitScreenBodyText)
135
+
136
+ // Device Stages
73
137
let deviceStages = deviceStagesJSON ?? [ ]
74
138
139
+ // Functions to retrieve JSON
75
140
func getUserExperienceJSON( ) -> UserExperience ? {
76
- if let userExperience = helloJSONPreferences? . userExperience {
77
- return userExperience
78
- } else {
79
- return nil
80
- }
141
+ return helloJSONPreferences? . userExperience
81
142
}
82
143
83
144
func getDeviceStagesJSON( ) -> [ DeviceStage ] ? {
84
- if let deviceStages = helloJSONPreferences? . deviceStages {
85
- return deviceStages
86
- } else {
87
- return nil
88
- }
145
+ return helloJSONPreferences? . deviceStages
89
146
}
90
-
0 commit comments