Hey I just created an example it will help you:-
I just use userdefaults
to save loginState
Here is:-
1). TaskViewController
I just created a signOut button in it
import UIKit
class TaskViewController: UIViewController {
@IBOutlet weak var signOutButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func viewDidLayoutSubviews() {
signOutButton.layer.cornerRadius = signOutButton.layer.frame.height/2
}
@IBAction func signOutButtonTapped(_ sender: Any) {
UserDefaults.standard.set(false, forKey: "isUserLoggedIn") // here I remove the boolean value
UserDefaults.standard.synchronize()
let storyBoard = UIStoryboard(name: "Login", bundle: nil)
let loginVc = storyBoard.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
let rootVc = UINavigationController(rootViewController: loginVc)
UIApplication.shared.keyWindow?.rootViewController = rootVc
}
}
2). AttendanceViewController - I didn't created anything in it
import UIKit
class AttendanceViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
These both controllers are inside TabBarController
which is HomeController
import UIKit
class HomeController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
I created it in Main.storyboard
file:-

And LoginViewController created in login.storyboard
file

LoginViewController:- here saved the loginState
import UIKit
class LoginViewController: UIViewController {
@IBOutlet weak var loginButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func viewDidLayoutSubviews() {
loginButton.layer.cornerRadius = loginButton.layer.frame.height/2
}
@IBAction func loginButtonTapped(_ sender: Any) {
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeController") as! HomeController
UserDefaults.standard.set(true, forKey: "isUserLoggedIn")
UserDefaults.standard.synchronize()
UIApplication.shared.keyWindow?.rootViewController = viewController
}
}
And last in Appdelegate.swift
check the loginState in didFinishLaunchingWithOptions
like this:-
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let userLoginStatus = UserDefaults.standard.bool(forKey: "isUserLoggedIn")
print(userLoginStatus)
if(userLoginStatus)
{
let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)
let centerVC = mainStoryBoard.instantiateViewController(withIdentifier: "HomeController") as! HomeController
window!.rootViewController = centerVC
window!.makeKeyAndVisible()
} else {
let mainStoryBoard = UIStoryboard(name: "Login", bundle: nil)
let centerVC = mainStoryBoard.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
window!.rootViewController = centerVC
window!.makeKeyAndVisible()
}
return true
}
Here is the full project - https://www.dropbox.com/s/3d34raovyx6orda/saveLogin.zip?dl=0