         return didOpenApp
             .map { _ in
                 let userDefaults = UserDefaults.standard
-                var count = userDefaults.integer(forKey: self.numDidOpenAppKey)
+                var count = userDefaults.integer(forKey: DefaultName.numDidOpenApp)
                 count = min(count + 1, Int.max - 1)
-                userDefaults.set(count, forKey: self.numDidOpenAppKey)
+                userDefaults.set(count, forKey: DefaultName.numDidOpenApp)
                 userDefaults.synchronize()
                 return count
-        }
+            }
+            .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
                }
        }
    }
    
    /**

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