User Integration - GluedIn
Array ( [0] => [1] => developer [2] => user-integration [3] => )
Steps to Quick Launch App using the GluedIn Android SDK
Please follow the below steps to Integrate GluedIn SDK in your Android Application using latest Android Studio (Android Studio Bumblebee | 2021.1.1)
  • After downloading the sample App from, extract the zip file into folder
  • Start/Open Android Studio and close any open Android Studio projects
  • From the Android Studio menu click File > Open OR alternatively, from the Welcome screen, click Open and Browse through the downloaded Sample App
  • Select the GluedinQuickLaunchSampleApp project folder with the AndroidManifest.xml file and click Ok button.
  • Now Android Studio Opens the Sample App
  • Once the app has been imported into Android Studio, project will be synced automatically, but if does not, you can manually sync the application by hitting highlighted button in below screenshot:
  • You can change the app name by changing name into strings.xml file. Refer below:
  • Now rename the project package name as per your preference. Please follow the steps below to rename the package.
    • Change to “Android” From “Project”
    • Now click on the setting gear icon and deselect Compact Middle Packages.
    • Now the packages folder is broken into parts as shown in the below image.
    • Now right-click on the first package name (com) and Refactor > Rename. A warning message will be displayed but go ahead and click on the Rename current button.
    • Rename the directory name as your requirement and click on the Refactor button.
    • Now a new directory name will be shown in place of “com”.
    • Do the same for the domain extension and App folder name according to your requirement.
    • Now you can see the package name has been changed from “com.gluedin.sample” to “yourdomain.directory.appname
    • Now go to the build.gradle (Module: app) in Gradle Scripts. Here change the applicationId to your “yourdomain.directory.appname” and click on the Sync Now button. And you are successfully renamed your package name.
  • Now Change the Splash Screen as per your preferences, make sure to use the same name (gluedin_splash_bg) but you can use webp or png any format.
  • Replace the app_icon with your app icons. But the name must be the same as existing.
  • You can set multiple log levels for ADB and Http logs.
    Log Levels are:
    • Verbose: Show all log messages
    • Debug: Show debug log messages that are useful during development only, as well as the message levels lower in this list.
    • Info: Show expected log messages for regular usage, as well as the message levels lower in this list.
    • Warn: Show possible issues that are not yet errors, as well as the message levels lower in this list.
    • Error: Show issues that have caused errors, as well as the message level lower in this list.
    • Assert: Show issues that the developer expects should never happen.
    Http Log Levels are:
    • 1 for NONE - No Logs
    • 2 for BASIC - Logs request and response lines
    • 3 for BODY - Logs request and response lines and their respective headers
    • 4 for HEADERS - Logs request and response lines and their respective headers and bodies (if present)
  • Now put your API and Secret Key (copied from onboarding steps) into the MainActivity.kt file, like below.
  • You have to also add your domain name into DeepLinkAuthority as depicted below: Note: Don’t add http or https
  • Now open the app/build.gradle file and change the URL scheme to your domain to reflect the same when someone shares any content from the app. Note: Don’t add http or https
  • Now clean the project and build again.
    • Clean Project
    • Rebuild Project
      Note: You might face Manifest merge issue due to “allowBackup” tags. Please use below to fix this problem.
        
          tools:replace="android:allowBackup
        
      
Steps to Integrate Gluedin Android SDK into existing application
Please follow the below steps to Integrate Gluedin SDK in your existing Android Application using latest Android Studio (Android Studio Bumblebee | 2021.1.1)
Note: Android Studio Artic Fox & Below versions might have different steps to integrate.
  • For Android Studio Bumblebee, Open settings.gradle file in project root folder and add below line of code within “dependencyResolutionManagement” tag. If tag is not added, please add the same using below code.
    Sample API call in Kotlin Class
      
    dependencyResolutionManagement {
    
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    
    repositories {
    
    google()
    
    mavenCentral()
    
    maven { url 'https://jitpack.io ' }
    
    maven {
    
      url "https://plugins.gradle.org/m2/"
    
                    }
    
    maven {
    
    name = "GitHubPackages"
    
    url = uri("https://maven.pkg.github.com/plussaw/GluedIn")
    
    credentials {
    
    username = "plussaw"
    
      password = "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"
    
      }
    
       }
    
      }
    
    }
      
    
  • For Android Studio Artic Fox and Below, Add below code into project build.gradle file
      
    
    
    repositories {
    
    google()
    
    mavenCentral()
    
    maven { url 'https://jitpack.io ' }
    
    maven {
    
    url "https://plugins.gradle.org/m2/"
    
      }
    
    maven {
    
    name = "GitHubPackages"
    
    url = uri("https://maven.pkg.github.com/plussaw/GluedIn")
    
    credentials {
    
    username = "plussaw"
    
    password = "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"
    
      }
    
      }
    
      }
      
    
  • Now add below code into the app/build.gradle file.
      
    android {
    
        ……
    
        …...
    
        buildFeatures {
    
            viewBinding true
    
            dataBinding true
    
        }
    
    }
     
    
  • Open gradle.properties and add below line if not present,
      
    android.enableJetifier=true
    
    
  • Add Facebook id in app/build.gradle. Refer to step 6 for details. Note: Since it’s just for resolving dependency at runtime. You can keep the gluedin_sdk_facebook_app_id key as empty/null.
  • Now open the app/build.gradle file and change the URL scheme to your domain to reflect the same when someone shares any content from the app. Note:Don’t add http or https
  • Now open the “Application” class of the project if it’s already in your project, else follow below steps to add “Application” class in the project. a. Right click on folder then goto “New” -> “Kotlin Class/File”
    b .Now enter class name as “Application” and select “Class” option from list and press Enter key.
    c. Once the application class will be created, Now extend the application class with android.app.Application class and onCreate() method like below and add below code in onCreate() method of “Application” class:
     
    override fun onCreate() {
    
           super.onCreate()
    
           GluedInInitializer.initSdk(this)
    
        }
    
    
    d. Now add the “Application” class reference in the AndroidManifest.xml file. As below
  • 8.Add below code into your MainActivity of the app OR on a place from where you want to launch the GluedIn SDK.
     
    val callback: GluedInSDKCallBack= object : GluedInSDKCallBack{
    
                override fun onSdkInitSuccess(
    
                    isSuccess: Boolean,
    
                   gluedInSdkException: GluedInSdkException?
    
                ) {
    
                    if (isSuccess) {
    
                        finish()
    
                    } else {
    
                        Toast.makeText(
    
                            this@MainActivity,
    
                            "GluedInSDK Launched Failed",
    
                            Toast.LENGTH_SHORT
    
                        ).show()
    
                    }
    
                }
    
     
    
                override fun onAppAuthSuccess(
    
                    isSuccess: Boolean,
    
                   gluedInSdkException: GluedInSdkException?
    
                ) = Unit
    
            }
    
     
    
     val gluedInConfigurations = GluedInInitializer.Configurations.Builder()
                .setSdkCallback(callback)
                .setApiKey("put_your_api_key_here")
                .setSecretKey("put_your_secret_key_here")
                .setDeeplinkAuthority("www.sample.com")
                .setFeedType(GluedInInitializer.Configurations.FeedType.SQUARE)
    //            .setLogEnabled(true, Log.DEBUG) // Optional
    
    //            .setHttpLogEnabled(true, 3) // Optional
    
    //            .setFCMToken("") // Optional
    
    //            .enableFacebookLoginAndShare(true) // Optional
    
    //            .enableGoogleLogin(false) // Optional
    
    //            .setGoogleWebClientId("") //Optional put your google web client id here for google signin                 .create()
    
    gluedInConfigurations.validateAndLaunchGluedInSDK(  this, GluedInConstants.LaunchType.APP,ntent)
    
    
    
    
  • 9. Now put your API and Secret Key (copied from onboarding steps) into the MainActivity.kt file, like below.
  • 10. You have to also add your domain name into DeepLinkAuthority as depicted below: Note:Don’t add http or https Ex: http://www.gluedin.io OR http://www.google.com
  • 11. Now open the app/build.gradle file and change the URL scheme to your domain to reflect the same when someone shares any content from the app. Note:Don’t add http or https Ex: http://www.gluedin.io OR http://www.google.com
  • Now clean the project and build again.
    • Clean Project
    • Rebuild Project
      Note: You might face Manifest merge issue due to “allowBackup” tags. Please use below to fix this problem.
        
          tools:replace="android:allowBackup
        
      
Optional Steps for customization into SDK
  • You can change the App theme by using below steps:
    a. Add the “gluedin_configurations.json” file into assets/gluedinfolder, and add the color codes into respective keys, like below screenshot.
    b. You can also add custom fonts and put the name into respective keys, like below screenshot.
    c. You can change the app theme color by changing into colors.xml.
    Note:This step is only applicable for quick launch only. Not for integration into existing applications.
  • To integrate Facebook & Google Sign-in into GluedIn SDK, Refer Step 6.
  • To integrate Firebase Crashlytics, Firebase Deeplink and Firebase Analytics, please create an app on Firebase console and follow the instructions mentioned in their website. Download the google-services.json file after setting up all and replace the file into the project.
  • Firebase Crashlytics Setup
    Firebase Dynamic Link Setup
    Google Analytics Setup
  • Note: To you google services, please make sure to add below:
    a. Open project/build.gradle file and below line in “dependencies” tag.
  • classpath 'com.google.gms:google-services:4.3.10' Also add below line in app/build.gradle file under “plugins” tag. id 'com.google.gms.google-services' b. If crashlytics is enabled in your app then add below line in project/build.gradle file under “dependencies” tag classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' Also add below line in app/build.gradle file under “plugins” tag id 'com.google.firebase.crashlytics'
  • If You want to enable/disable the Facebook and Google Sign-in features, you can enable/disable like below:
  • If you want to change the base url of SDK API’s, you can change by using below method, but we encourage not to change it since it’s most preferred for developers: Note: Available from SDK version “0.0.9” . It’s a optional property and by default it’s pointing to Gluedin production server
  • You can select the feed type of the SDK based on your preference. Note: Available from SDK version “0.0.9”. Default feed type is “Vertical” Possible values are:
             
    For Vertical Feed - GluedInInitializer.Configurations.FeedType.VERTICAL
    For Square Feed - GluedInInitializer.Configurations.FeedType.SQUARE
            
    
Social Login Integration into SDK
  • Steps to integrate Facebook into GluedIn SDK a. Create the app on Facebook's official website and get the application id. b. Now paste the application id into facebook_app_id tag into app/build.gradle file.
      
    manifestPlaceholders["gluedin_sdk_facebook_app_id"] = ""
    
    resValue "string", "gluedin_sdk_facebook_app_id", ""
    
    
    Note:Add your created Facebook app id in place of empty value c. If you don’t want to use the Facebook feature, keep the key value empty. Note: Don’t delete the keys or lines in app/build.gradle, it may lead to compile time issues.
  • Steps to integrate Google Sign-in into Gluedin SDK
    Follow the steps mentioned on google developer link.
    Download the google-services.json file after setting up all and replace the file into the project.
Enable Ad’s into Feed
  • Open AndroidManifest.xml file of the Application
  • Paste add below meta data tag in tag and put your ad application id there.
      
    manifestPlaceholders["gluedin_sdk_facebook_app_id"] = ""
    
    resValue "string", "gluedin_sdk_facebook_app_id", ""
    
    
  • Now add Banner, Interstitial and Native Ad id’s on the Console.
Hide the Creator Icon from Bottom bar
  • Creator icon can be hidden from the bottom bar if the Invite Only feature is enabled from the console.
  • Please use below method in the GluedIn SDK configuration before launching the no code SDK.
  • enableCreator(enable: Boolean) // to hide the + icon if Invite Only feature is enabled from console
Show the back icon/arrow on the Feed Screen
  • You can enable/disable the back icon on the feed screen to exit from the app, although user can use the device back button to exit from the app but this back icon can also be used for same purpose.
  • Note: Default it’s hidden, so you have to enable it via SDK configuration if it needs to be visible.
  • Please use below method in the GluedIn SDK configuration before launching the no code SDK.
  • enableBackButton(enable: Boolean) // to enable or disable back button on feed screen
Steps to use GluedInSDK as a Separate app
  • Download the Quick start sample app, Downloaded app will have sample API key and Secret Key which can be replaced with your project keys.
    • After downloading the Zip folder, extract the project in your development directory.
    • Open pod file into textedit as shown below:
  • Add/Replace below listed pods code inside your pod file, as shown below.
    • pod 'GluedInSDK', '~> 3.0.0'
    • pod 'Alamofire'(If required, and if you got a console error like – Frameworks/Alamofire.framework/Alamofire Symbol not found: _$s9Alamofire21URLRequestConvertibleP02asB010Foundation0B0VyKFTq)
  • Open terminal and add your unzip project folder (GluedInMarketerSample folder → GluedInMarketerSample →) in terminal directory
  • Execute the “pod install” command. All the necessary dependencies along with GludeIn GludeIn SDK will install in targeted projects.
  • Now go to GluedInQuickLaunchSample folder → GluedInQuickLaunchSample → GluedInQuickLaunchSample.xcworkspace
  • Open GluedInMarketerSample.xcworkspace into XCode as shown below:
Configurations

Mandatory

  • Change the App name: Click on targets → General . Double click on the display name editable text field and enter the application name which you wanted to display on the app store or client iPhone device.
  • Change the provisioning profile and bundle identifier of the app: After creating provisioning profile (Create Provisioning Profile | Apple Developer Forums ) use them in the below marked section.
  • Changes Social credentials: changes facebook app id and google id from the application info.plist file.
  • Change API_KEY and SECRET_KEY: Replace API Key and Secret key in info.plist file with your API Key and Secret Key generated through GluedIn console.
  • Change Applogo file in application asstes: Replace Application logo file at Assets/Applogo.
Note: App Key and Secret token can be obtained from GluedIn Console.

Optionals

  • (Optional) Add icon images, which is located at ..\Example\Assets.xcassets\AppIcon.appiconset\ Suggested sizes for app icon
    20 * 20 29 * 29 40 * 40 80 * 80
    120 * 120 58 * 58 60 * 60 76 * 76
    87 * 87 152 * 152 167 * 167 180 * 180
    1024 * 1024
  • Apply custom color theme for your app:Open and edit theme file JSON file. The file is located at GluedInQuickLaunchSampleApp you can change any theme color combination according to your product color theme. In case if you unable to find AppTheme.json file inside your downloaded sample application then you can download it from here and Drag & drop it inside ..\ GluedInQuickLaunchSampleApp\Json\AppTheme.json. As Shown in shinipet below, you can change button active, outline action color etc. In case if you leave blank then the application will run with the default Blue color theme.
        
      themeConfig": {
        "appColor": {
          "buttonActiveColor": "",
          "outlineButtonColor": "",
          "iconColor": "",
          "appPrimaryColor": "",
          "appSecondaryColor": "",
          "textColorBlack": "",
          "actionColorDefault": "",
          "dividerOutlineColor": "",
          "inActiveButtonColor": "",
          "inActiveButtonTitleColor": "",
          "selectedCellColor": "",
          "textfieldBorderColor": "",
          "secondaryButtonColor": "",
          "unreadNotification": ""
        },
      
    
  • Deeplink changes: follow the below steps,
    • Register with firebase and create an app for iOS app (Add Firebase to your Apple project | Firebase for Apple platforms ).
    • Add an associated domain, received from firebase console, under the associated domain in the "singing and capabilities" section. Refer below image as highlighted in red.
Steps to configure SDK in existing app

Setup your development environment

  • Open terminal and add your project folder in terminal directory.
  • Run the “Pod init” command on the terminal incase there is no podfile in your project root folder.
  • Open Podfile in textedit, as shown in below image.
  • Add below listed pods code inside your pod file, as shown below.pod ‘GluedInSDK’pod ‘Alamofire’ (If required, and if you got a console error like – Frameworks/Alamofire.framework/Alamofire Symbol not found: _$s9Alamofire21URLRequestConvertibleP02asB010Foundation0B0VyKFTq)>
  • Open the terminal again and execute the “pod install” command. All the necessary dependencies along with Gluedin SDK will install in targeted projects.
Configuration

Mandatory

  • Right-click Info.plist, and choose Open As ▸ Source Code. Copy and paste the following XML snippet into the body of your file ( ...).
        <key>NSAppTransportSecurity</key>
      <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
      </dict>
      <!-- if you get custom server URL from +SAW Support team, then change this server URL key with the provided api endpoint base url -->
      <key>SERVER_URL</key>
      <string>${SERVER_URL}</string>
    
      <!-- Change API key in place of test which you have received from +SAW console console  -->
      <key>API_KEY</key>
      <string>Replace your App Key</string>
    
      <!-- Change Secret key in place of test which you have received from +SAW console console  -->
      <key>SECRET_KEY</key>
      <string>Replace your secret key</string>
    
      • Replace API_KEY and SECRET_KEY with your keys received from GluedIn console.
  • Add below permission in your info plist XML snippet into the body of your file ( ...).
        <key>NSCameraUsageDescription</key>
      <string>$(PRODUCT_NAME) app wants to access your video camera for record video and edit for that</string>
      <key>NSPhotoLibraryAddUsageDescription</key>
      <string>$(PRODUCT_NAME) app wants to save pictures and videos to your library and edit for that</string>
      <key>NSMicrophoneUsageDescription</key>
      <string>$(PRODUCT_NAME) app wants to access your microphone to record audio with video</string>
      <key>NSUserTrackingUsageDescription</key>
      <string>$(PRODUCT_NAME) will be used to deliver personalized ads to you.</string>
    
      <key>GADApplicationIdentifier</key>
      <string>ca-app-pub-3893727616817499~4911050982</string>
    
    
  • Add below facebook elements in your info plist XML snippet into the body of your file ( …). All facebook required keys can get from the facebook. developer portal console. Link:https://developers.facebook.com/apps/?show_reminder=true
    • LSApplicationQueriesSchemes: you can get values from facebook developer console.
    • FacebookAppID : Facebook App Id which you get from facebook developer console.
    • FacebookClientToken: Facebook Client token which you get from facebook developer console.
    • FacebookDisplayName: Facebook display name which you get from facebook developer console.
           <key>LSApplicationQueriesSchemes</key>
      <array>
        <string>fbapi</string>
        <string>fbapi20130214</string>
        <string>fbapi20130410</string>
        <string>fbapi20130702</string>
        <string>fbapi20131010</string>
        <string>fbapi20131219</string>
        <string>fbapi20140410</string>
        <string>fbapi20140116</string>
        <string>fbapi20150313</string>
        <string>fbapi20150629</string>
        <string>fbapi20160328</string>
        <string>fbauth</string>
        <string>fb-messenger-share-api</string>
        <string>fbauth2</string>
        <string>fbshareextension</string>
        <string>instagram</string>
        <string>fb</string>
      </array>
    <key>FacebookAppID</key>
    <string>248113447230045</string>
    <key>FacebookClientToken</key>
    <string>bbe9f698aecad7da2a10cae6d884ca08</string>
    <key>FacebookDisplayName</key>
    <string>GluedIn App</string>
    
    
    
  • Add below Bundle Url types elements in your info plist XML snippet into the body of your file ( ...).
         <key>CFBundleURLTypes</key>
      <array>
        <dict>
          <key>CFBundleTypeRole</key>
          <string>Editor</string>
          <key>CFBundleURLName</key>
          <string>Facebook SignIn</string>
          <key>CFBundleURLSchemes</key>
          <array>
            <string>fb248113447230045</string>
          </array>
        </dict>
        <dict>
          <key>CFBundleTypeRole</key>
          <string>Editor</string>
          <key>CFBundleURLName</key>
          <string>Google SignIn</string>
          <key>CFBundleURLSchemes</key>
          <array>
            <string>${REVERSED_CLIENT_ID}</string>
          </array>
        </dict>
      </array>
    
    
  • Add Apple sign in capability Add Apple Sign in Capability as shown in below image
  • Change GoogleService-Info plist files: Download GoogleService-Info file from google console and Drag and Drop GoogleService-Info plist file inside your project file, So it will look like the screen below.

Optional

  • Apply custom color theme for your app:Drag and Drop app theme file inside the project. Drag and drop AppTheme.json file inside your app project, app theme json file link can be found here for further change and use. As Shown in shinipet below, you can change button active, outline action color etc. In case if you leave blank then the application will run with the default Blue color theme.
      themeConfig": {
        "appColor": {
          "buttonActiveColor": "",
          "outlineButtonColor": "",
          "iconColor": "",
          "appPrimaryColor": "",
          "appSecondaryColor": "",
          "textColorBlack": "",
          "actionColorDefault": "",
          "dividerOutlineColor": "",
          "inActiveButtonColor": "",
          "inActiveButtonTitleColor": "",
          "selectedCellColor": "",
          "textfieldBorderColor": "",
          "secondaryButtonColor": "",
          "unreadNotification": ""
        },
      
    
Sign-in Sync section
This method will use if App has its own authentication in place, in that case they need to call “quickLaunch” method on @action entry point:
  • methods : quickLaunch.
  • Parameter:
  • Email (Mandatory field): “your logged in user email id”.
  • Password (Mandatory field): “your logged in user password”.
  • deviceId (Mandatory field): “device ID” .
  • deviceType (Mandatory): “iOS” .
  • fullName (Mandatory): “ logged in user full name” .
  • Sample to call:
      
      GluedinSDK.shared.quickLaunch(email: "amitch184@gmail.com",
              password: "123456789",
                                          firebaseToken: "",
                                          deviceId: "123456",
                                          deviceType: "ios",
                                          fullName: "Amit Choudhary",
                                          autoCreate: true) { vw in
                self.navigationController?.pushViewController(vw  ?? UIViewController(), animated: true)
            } failure: { error in
                print(error)
            }
    
    
    
Entrypoint Configurations
  • Go to scene delegate and import GluedIn SDK as show below.
  • Launch Gluedin Dashboard as a Guest user on Button click:


    call Gluedin Root tab view controller and initiate the navigation flow which is best fit for your application. We show sample code below:
      
      @IBAction func launchGluedinTabAsGuest(_ sender: Any) {
            GluedIn.shared.initSdk {
                let gluedinTab:UITabBarController = GluedIn.shared.rootTabController() ?? UITabBarController()
                self.navigationController?.pushViewController(gluedinTab, animated: true)
            } failure: { error, code in
                print(error)
            }
        }
    
    
  • Launch Gluedin SDK with Authentication Module:


    call Gluedin Signin screen method to init gluedin authentication module before going any other screen and process the navigation flow which fits to your application. We show the sample code below:
      
     @IBAction func launchGluedinAuthScreen(_ sender: Any) {
            GluedIn.shared.initSdk {
                let rootController =  GluedIn.shared.rootControllerWithSignIn()
                self.navigationController?.pushViewController(rootController ?? UIViewController(), animated: true)
            } failure: { error, code in
                print(error)
            }
        }
    
    
  • Register User and launch Gluedin Root controller as a authenticated user:


    call to register the user method with multiple parameter and call the root controller once you get the call back from register user method. We show the sample code below:
      
     @IBAction func registerUserAndlaunchGluedin(_ sender: Any) {
            GluedIn.shared.initSdk {
                GluedIn.shared.quickLaunch(email: "amitch184@gmail.com",
                                           password: "123456789",
                                           firebaseToken: "",
                                           deviceId: "1234",
                                           deviceType: "ios",
                                           fullName: "amit",
                                           autoCreate: true,
                                           termConditionAccepted: true) { [weak self] vw in
                    guard let weakSelf = self else { return }
                    weakSelf.navigationController?.pushViewController(vw ?? UIViewController(), animated: true)
                } failure: { err,arg  in
                    print(err)
                    print(arg)
                }
            } failure: { err,arg  in
                print(err)
                print(arg)
            }
        }
    
    
  • Initialised GluedInSDK and call entry point:call Signin controller at root view controller or any other entry point from where you wanted to get entered in GluedIn SDK (i.e. On Tabbar controller/ any button click). Please see below implementation for rootviewcontroller on scene delegate. Replace “willConnectTo” inside scene delegate class.
      
      func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
            guard let windowScene = scene as? UIWindowScene else { return }
            window = UIWindow(windowScene: windowScene)
            window?.rootViewController = UIStoryboard(name: "LaunchScreen", bundle: nil).instantiateInitialViewController()
            window?.makeKeyAndVisible()
            let controller: UIViewController = GluedinSDK.shared.rootControllerWithSignIn() ?? UIViewController()
                let navigationController = UINavigationController(rootViewController: controller ?? UIViewController())
                self.window?.rootViewController = navigationController
        }
    
    
  • Execute the project:
    • Run the project GluedIn