     public var isFirstLaunchOfNewVersion: Observable<Bool> {
         return didOpenApp
             .map { _ in
-                let (lastAppVersion, currentAppVersion) = self.appVersions
+                let userDefaults = UserDefaults.standard
+                let appVersions = type(of: self).appVersions
                 
-                if lastAppVersion.isEmpty || lastAppVersion != currentAppVersion {
-                    UserDefaults.standard.set(currentAppVersion, forKey: self.lastAppVersionKey)
-                    UserDefaults.standard.synchronize()
+                if appVersions.isLastEmpty || appVersions.isUpgraded {
+                    userDefaults.set(appVersions.current, forKey: DefaultName.lastAppVersion)
+                    userDefaults.synchronize()
                 }
                 
-                if !lastAppVersion.isEmpty && lastAppVersion != currentAppVersion {
-                    return true
-                } else {
-                    return false
-                }
-        }
+                return appVersions.isUpgraded
+            }
+            .shareReplay(1)
     }
     
     /**

        return didOpenApp
            .map { _ in
                let userDefaults = UserDefaults.standard
                let didLaunchBefore = userDefaults.bool(forKey: self.isFirstLaunchKey)
                
                if didLaunchBefore {
                    return false
                } else {
                    userDefaults.set(true, forKey: self.isFirstLaunchKey)
                    userDefaults.synchronize()
                    return true
                }
        }
    }
    
    /**

        return didOpenApp
            .map { _ in
                let userDefaults = UserDefaults.standard
                var count = userDefaults.integer(forKey: DefaultName.numDidOpenApp)
                count = min(count + 1, Int.max - 1)
                userDefaults.set(count, forKey: DefaultName.numDidOpenApp)
                userDefaults.synchronize()
                return count
            }
            .shareReplay(1)
    }
    
    /**
