@@ -14,7 +14,6 @@ import Network
1414 static internal var surveyManager : SurveyManager ?
1515 static internal var apiQueue : OperationQueue ? = OperationQueue ( )
1616 static internal var logger : Logger ?
17- static internal var service = FormbricksService ( )
1817
1918 // make this class not instantiatable outside of the SDK
2019 internal override init ( ) {
@@ -57,7 +56,17 @@ import Network
5756 self . environmentId = config. environmentId
5857 self . logger? . logLevel = config. logLevel
5958
59+ let svc : FormbricksServiceProtocol = config. customService
60+ ?? {
61+ guard URL ( string: config. appUrl) != nil else {
62+ fatalError ( " Invalid appUrl " )
63+ }
64+
65+ return FormbricksService ( )
66+ } ( )
67+
6068 userManager = UserManager ( )
69+ userManager? . service = svc
6170 if let userId = config. userId {
6271 userManager? . set ( userId: userId)
6372 }
@@ -70,7 +79,7 @@ import Network
7079 }
7180
7281 presentSurveyManager = PresentSurveyManager ( )
73- surveyManager = SurveyManager . create ( userManager: userManager!, presentSurveyManager: presentSurveyManager!)
82+ surveyManager = SurveyManager . create ( userManager: userManager!, presentSurveyManager: presentSurveyManager!, service : svc )
7483 userManager? . surveyManager = surveyManager
7584
7685 surveyManager? . refreshEnvironmentIfNeeded ( force: force)
@@ -143,26 +152,25 @@ import Network
143152
144153 /**
145154 Sets the language for the current user with the given `String`.
146- The SDK must be initialized before calling this method .
155+ This method can be called before or after SDK initialization .
147156
148157 Example:
149158 ```swift
150159 Formbricks.setLanguage("de")
151160 ```
152161 */
153162 @objc public static func setLanguage( _ language: String ) {
154- guard Formbricks . isInitialized else {
155- let error = FormbricksSDKError ( type: . sdkIsNotInitialized)
156- Formbricks . logger? . error ( error. message)
157- return
158- }
159-
163+ // Set the language property regardless of initialization status
160164 if ( Formbricks . language == language) {
161165 return
162166 }
163167
164168 Formbricks . language = language
165- userManager? . set ( language: language)
169+
170+ // Only update the user manager if SDK is initialized
171+ if Formbricks . isInitialized {
172+ userManager? . set ( language: language)
173+ }
166174 }
167175
168176 /**
@@ -174,7 +182,7 @@ import Network
174182 Formbricks.track("button_clicked")
175183 ```
176184 */
177- @objc public static func track( _ action: String ) {
185+ @objc public static func track( _ action: String , completion : ( ( ) -> Void ) ? = nil ) {
178186 guard Formbricks . isInitialized else {
179187 let error = FormbricksSDKError ( type: . sdkIsNotInitialized)
180188 Formbricks . logger? . error ( error. message)
@@ -183,7 +191,7 @@ import Network
183191
184192 Formbricks . isInternetAvailabile { available in
185193 if available {
186- surveyManager? . track ( action)
194+ surveyManager? . track ( action, completion : completion )
187195 } else {
188196 Formbricks . logger? . warning ( FormbricksSDKError . init ( type: . networkError) . message)
189197 }
0 commit comments