diff --git a/Example/Example/AppDelegate.swift b/Example/Example/AppDelegate.swift index 82132f2c..35f2b715 100755 --- a/Example/Example/AppDelegate.swift +++ b/Example/Example/AppDelegate.swift @@ -17,15 +17,15 @@ class AppDelegate: UIResponder, UIApplicationDelegate { window?.makeKeyAndVisible() /// - Warning: - /// Siren should ONLY be placed in UIApplication.didFinishLaunchingWithOptionsand only after the `window?.makeKeyAndVisible()` call. + /// Siren should ONLY be placed in UIApplication.didFinishLaunchingWithOptions and only after the `window?.makeKeyAndVisible()` call. /// Siren initializes a listener on `didBecomeActiveNotification` to perform version checks. // defaultExample() - defaultExampleUsingCompletionHandler() +// defaultExampleUsingCompletionHandler() // minimalCustomizationPresentationExample() // forceLocalizationCustomizationPresentationExample() // customMessagingPresentationExample() -// annoyingRuleExample() + annoyingRuleExample() // hyperCriticalRulesExample() // updateSpecificRulesExample() // customAlertRulesExample() diff --git a/Siren.podspec b/Siren.podspec index f9c7322f..33811ad8 100755 --- a/Siren.podspec +++ b/Siren.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| # Version - s.version = "4.0.0" + s.version = "4.0.1" s.swift_version = '4.2' # Meta diff --git a/Sources/Managers/PresentationManager.swift b/Sources/Managers/PresentationManager.swift index 903f4ff3..4dcd9b42 100644 --- a/Sources/Managers/PresentationManager.swift +++ b/Sources/Managers/PresentationManager.swift @@ -35,7 +35,7 @@ public struct PresentationManager { let updateButtonTitle: String /// The instance of the `UIAlertController` used to present the update alert. - private var alertController: UIAlertController? + var alertController: UIAlertController? /// The `UIWindow` instance that presents the `SirenViewController`. private var updaterWindow: UIWindow { @@ -134,11 +134,12 @@ extension PresentationManager { handler?(.unknown) } - // If the alertType is .none, an alert will not be presneted. + // If the alertType is .none, an alert will not be presented. // If the `updaterWindow` is not hidden, than an alert is already presented. // The latter prevents `UIAlertControllers` from appearing on top of each other. if rules.alertType != .none && updaterWindow.isHidden { alertController?.show(window: updaterWindow) + } } @@ -156,7 +157,7 @@ extension PresentationManager { } let action = UIAlertAction(title: title, style: .default) { _ in - self.alertController?.hide(window: self.updaterWindow) + self.cleanUpAlertController() Siren.shared.launchAppStore() handler?(.appStore) @@ -180,7 +181,7 @@ extension PresentationManager { } let action = UIAlertAction(title: title, style: .default) { _ in - self.alertController?.hide(window: self.updaterWindow) + self.cleanUpAlertController() UserDefaults.shouldPerformVersionCheckOnSubsequentLaunch = true handler?(.nextTime) @@ -208,7 +209,7 @@ extension PresentationManager { UserDefaults.storedSkippedVersion = currentAppStoreVersion UserDefaults.standard.synchronize() - self.alertController?.hide(window: self.updaterWindow) + self.cleanUpAlertController() handler?(.skip) return @@ -216,4 +217,10 @@ extension PresentationManager { return action } + + /// Removes the `alertController` from memory. + private func cleanUpAlertController() { + alertController?.hide(window: self.updaterWindow) + alertController?.dismiss(animated: false, completion: nil) + } } diff --git a/Sources/Siren.swift b/Sources/Siren.swift index 84ec9b70..7d111d50 100644 --- a/Sources/Siren.swift +++ b/Sources/Siren.swift @@ -16,10 +16,6 @@ public final class Siren: NSObject { /// The Siren singleton. The main point of entry to the Siren library. public static let shared = Siren() - /// The debug flag, which is disabled by default. - /// When enabled, a stream of `print()` statements are logged to your console when a version check is performed. - public lazy var debugEnabled: Bool = false - /// The manager that controls the App Store API that is /// used to fetch the latest version of the app. /// @@ -47,6 +43,9 @@ public final class Siren: NSObject { /// The retained `NotificationCenter` observer that listens for `UIApplication.didBecomeActiveNotification` notifications. var didBecomeActiveObserver: NSObjectProtocol? + /// The retained `NotificationCenter` observer that listens for `UIApplication.didEnterBackgroundNotification` notifications. + var didEnterBackgroundObserver: NSObjectProtocol? + /// The last date that an alert was presented to the user. private var alertPresentationDate: Date? @@ -62,12 +61,12 @@ public final class Siren: NSObject { } } -// MARK: - Public Functionality +// MARK: - Public API Interface public extension Siren { + /// This method executes the Siren version checking and alert presentation flow. /// - /// - /// - Parameter handler: + /// - Parameter handler: Returns the metadata around a successful version check and interaction with the update modal or it returns nil. func wail(completion handler: ResultsHandler? = nil) { resultsHandler = handler addObservers() @@ -94,10 +93,10 @@ public extension Siren { } } -// MARK: - Private Functionality +// MARK: - Version Check and Alert Presentation Flow -extension Siren { - /// Initiates the uni-directional version checking flow. +private extension Siren { + /// Initiates the unidirectional version checking flow. func performVersionCheck() { alertPresentationDate = UserDefaults.alertPresentationDate apiManager.performVersionCheckRequest { [weak self] (lookupModel, error) in @@ -221,10 +220,19 @@ extension Siren { self.resultsHandler?(results, nil) } } +} - /// Add an observer that listens for app launching/relaunching - /// (e.g., calls to `UIApplication`'s `didBecomeActive` function). +// MARK: - Observers + +private extension Siren { + /// Add app state observers func addObservers() { + addForegroundObserver() + addBackgroundObserver() + } + + /// Adds an observer that listens for app launching/relaunching. + func addForegroundObserver() { guard didBecomeActiveObserver == nil else { return } didBecomeActiveObserver = NotificationCenter .default @@ -235,4 +243,17 @@ extension Siren { self.performVersionCheck() } } + + /// Adds an observer that listens for when the app is sent to the background. + func addBackgroundObserver() { + guard didEnterBackgroundObserver == nil else { return } + didEnterBackgroundObserver = NotificationCenter + .default + .addObserver(forName: UIApplication.didEnterBackgroundNotification, + object: nil, + queue: nil) { [weak self] _ in + guard let self = self else { return } + self.presentationManager.alertController?.dismiss(animated: true, completion: nil) + } + } } diff --git a/docs/Classes.html b/docs/Classes.html index 6dd105a4..005b8e5d 100644 --- a/docs/Classes.html +++ b/docs/Classes.html @@ -202,7 +202,7 @@

Declaration

diff --git a/docs/Classes/Siren.html b/docs/Classes/Siren.html index 8441ed14..eda91efb 100644 --- a/docs/Classes/Siren.html +++ b/docs/Classes/Siren.html @@ -197,34 +197,6 @@

Declaration

-
  • -
    - - - - debugEnabled - -
    -
    -
    -
    -
    -
    -

    The debug flag, which is disabled by default. -When enabled, a stream of print() statements are logged to your console when a version check is performed.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public lazy var debugEnabled: Bool { get set }
    - -
    -
    -
    -
    -
  • @@ -372,6 +344,33 @@

    Declaration

  • +
  • +
    + + + + didEnterBackgroundObserver + +
    +
    +
    +
    +
    +
    +

    The retained NotificationCenter observer that listens for UIApplication.didEnterBackgroundNotification notifications.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var didEnterBackgroundObserver: NSObjectProtocol?
    + +
    +
    +
    +
    +
  • @@ -484,10 +483,10 @@

    Declaration

      @@ -504,7 +503,8 @@

      Public Functionality

      - +

      This method executes the Siren version checking and alert presentation flow.

      +

      Declaration

      @@ -526,7 +526,7 @@

      Parameters

      -

      +

      Returns the metadata around a successful version check and interaction with the update modal or it returns nil.

      @@ -570,19 +570,19 @@

      Declaration

      +
      +
      + +
      • @@ -810,8 +821,7 @@

        Parameters

        -

        Add an observer that listens for app launching/relaunching -(e.g., calls to UIApplication‘s didBecomeActive function).

        +

        Add app state observers

        @@ -825,12 +835,66 @@

        Declaration

      • +
      • + +
        +
        +
        +
        +
        +

        Adds an observer that listens for app launching/relaunching.

        + +
        +
        +

        Declaration

        +
        +

        Swift

        +
        func addForegroundObserver()
        + +
        +
        +
        +
        +
      • +
      • + +
        +
        +
        +
        +
        +

        Adds an observer that listens for when the app is sent to the background.

        + +
        +
        +

        Declaration

        +
        +

        Swift

        +
        func addBackgroundObserver()
        + +
        +
        +
        +
        +
      diff --git a/docs/Classes/SirenViewController.html b/docs/Classes/SirenViewController.html index 543f954f..ef4b3e41 100644 --- a/docs/Classes/SirenViewController.html +++ b/docs/Classes/SirenViewController.html @@ -175,7 +175,7 @@

      Declaration

      diff --git a/docs/Enums.html b/docs/Enums.html index 5e6c536b..1e65e1a5 100644 --- a/docs/Enums.html +++ b/docs/Enums.html @@ -202,7 +202,7 @@

      Declaration

      diff --git a/docs/Enums/AlertAction.html b/docs/Enums/AlertAction.html index df23cf7a..d797744c 100644 --- a/docs/Enums/AlertAction.html +++ b/docs/Enums/AlertAction.html @@ -256,7 +256,7 @@

      Declaration

      diff --git a/docs/Enums/KnownError.html b/docs/Enums/KnownError.html index e60c3168..258bcf67 100644 --- a/docs/Enums/KnownError.html +++ b/docs/Enums/KnownError.html @@ -553,7 +553,7 @@

      Declaration

      diff --git a/docs/Extensions.html b/docs/Extensions.html index b3f816c0..d275025c 100644 --- a/docs/Extensions.html +++ b/docs/Extensions.html @@ -262,7 +262,7 @@

      Declaration

      diff --git a/docs/Extensions/Bundle.html b/docs/Extensions/Bundle.html index a200bd70..b3c9859a 100644 --- a/docs/Extensions/Bundle.html +++ b/docs/Extensions/Bundle.html @@ -423,7 +423,7 @@

      Return Value

      diff --git a/docs/Extensions/Bundle/Constants.html b/docs/Extensions/Bundle/Constants.html index 744910b9..3fb48b7b 100644 --- a/docs/Extensions/Bundle/Constants.html +++ b/docs/Extensions/Bundle/Constants.html @@ -310,7 +310,7 @@

      Declaration

      diff --git a/docs/Extensions/Date.html b/docs/Extensions/Date.html index c827524a..891d1a36 100644 --- a/docs/Extensions/Date.html +++ b/docs/Extensions/Date.html @@ -247,7 +247,7 @@

      Return Value

      diff --git a/docs/Extensions/UIAlertController.html b/docs/Extensions/UIAlertController.html index 41651dd0..b00094b3 100644 --- a/docs/Extensions/UIAlertController.html +++ b/docs/Extensions/UIAlertController.html @@ -239,7 +239,7 @@

      Parameters

      diff --git a/docs/Extensions/UserDefaults.html b/docs/Extensions/UserDefaults.html index 1c64d3cd..1b7f52bb 100644 --- a/docs/Extensions/UserDefaults.html +++ b/docs/Extensions/UserDefaults.html @@ -256,7 +256,7 @@

      Declaration

      diff --git a/docs/Extensions/UserDefaults/SirenKeys.html b/docs/Extensions/UserDefaults/SirenKeys.html index 6983054f..1718ec91 100644 --- a/docs/Extensions/UserDefaults/SirenKeys.html +++ b/docs/Extensions/UserDefaults/SirenKeys.html @@ -230,7 +230,7 @@

      Declaration

      diff --git a/docs/Structs.html b/docs/Structs.html index c0ef5159..149029f2 100644 --- a/docs/Structs.html +++ b/docs/Structs.html @@ -426,7 +426,7 @@

      Declaration

      diff --git a/docs/Structs/APIManager.html b/docs/Structs/APIManager.html index 57385729..1326dea9 100644 --- a/docs/Structs/APIManager.html +++ b/docs/Structs/APIManager.html @@ -301,7 +301,7 @@

      Parameters

      Declaration

      Swift

      -
      public static let `default`: APIManager
      +
      public static let `default`: APIManager
    @@ -484,7 +484,7 @@

    Return Value

    diff --git a/docs/Structs/APIManager/Constants.html b/docs/Structs/APIManager/Constants.html index 645afd45..028e1aa1 100644 --- a/docs/Structs/APIManager/Constants.html +++ b/docs/Structs/APIManager/Constants.html @@ -202,7 +202,7 @@

    Declaration

    diff --git a/docs/Structs/AlertConstants.html b/docs/Structs/AlertConstants.html index 2717d6dc..ac1884d0 100644 --- a/docs/Structs/AlertConstants.html +++ b/docs/Structs/AlertConstants.html @@ -283,7 +283,7 @@

    Declaration

    diff --git a/docs/Structs/DataParser.html b/docs/Structs/DataParser.html index 739b616c..88755da9 100644 --- a/docs/Structs/DataParser.html +++ b/docs/Structs/DataParser.html @@ -375,7 +375,7 @@

    Return Value

    diff --git a/docs/Structs/Localization.html b/docs/Structs/Localization.html index 78a6c884..465bf682 100644 --- a/docs/Structs/Localization.html +++ b/docs/Structs/Localization.html @@ -448,7 +448,7 @@

    Return Value

    diff --git a/docs/Structs/Localization/Language.html b/docs/Structs/Localization/Language.html index a1e50087..6ec9dce2 100644 --- a/docs/Structs/Localization/Language.html +++ b/docs/Structs/Localization/Language.html @@ -1285,7 +1285,7 @@

    Declaration

    diff --git a/docs/Structs/LookupModel.html b/docs/Structs/LookupModel.html index ad08f39d..7e6b8bae 100644 --- a/docs/Structs/LookupModel.html +++ b/docs/Structs/LookupModel.html @@ -231,7 +231,7 @@

    Declaration

    diff --git a/docs/Structs/LookupModel/CodingKeys.html b/docs/Structs/LookupModel/CodingKeys.html index 8bae8fe4..c2b26cf3 100644 --- a/docs/Structs/LookupModel/CodingKeys.html +++ b/docs/Structs/LookupModel/CodingKeys.html @@ -175,7 +175,7 @@

    Declaration

    diff --git a/docs/Structs/LookupModel/Results.html b/docs/Structs/LookupModel/Results.html index 6158798d..f102f8d1 100644 --- a/docs/Structs/LookupModel/Results.html +++ b/docs/Structs/LookupModel/Results.html @@ -311,7 +311,7 @@

    Declaration

    diff --git a/docs/Structs/LookupModel/Results/CodingKeys.html b/docs/Structs/LookupModel/Results/CodingKeys.html index 0560df9b..ebe3b079 100644 --- a/docs/Structs/LookupModel/Results/CodingKeys.html +++ b/docs/Structs/LookupModel/Results/CodingKeys.html @@ -283,7 +283,7 @@

    Declaration

    diff --git a/docs/Structs/PresentationManager.html b/docs/Structs/PresentationManager.html index 36ed26af..f3c4eed8 100644 --- a/docs/Structs/PresentationManager.html +++ b/docs/Structs/PresentationManager.html @@ -362,9 +362,9 @@

    Declaration

  • - + - alertController + alertController
    @@ -379,7 +379,7 @@

    Declaration

    Declaration

    Swift

    -
    private var alertController: UIAlertController?
    +
    var alertController: UIAlertController?
    @@ -578,7 +578,7 @@

    Parameters

    Declaration

    Swift

    -
    public static let `default`: PresentationManager
    +
    public static let `default`: PresentationManager
    @@ -823,12 +823,39 @@

    Return Value

  • +
  • +
    + + + + cleanUpAlertController() + +
    +
    +
    +
    +
    +
    +

    Removes the alertController from memory.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    private func cleanUpAlertController()
    + +
    +
    +
    +
    +
  • diff --git a/docs/Structs/Results.html b/docs/Structs/Results.html index b2deed5f..5c3387f9 100644 --- a/docs/Structs/Results.html +++ b/docs/Structs/Results.html @@ -257,7 +257,7 @@

    Declaration

    diff --git a/docs/Structs/Rules.html b/docs/Structs/Rules.html index 8d6d2ae2..c92b8f50 100644 --- a/docs/Structs/Rules.html +++ b/docs/Structs/Rules.html @@ -334,7 +334,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var `default`: Rules { get }
    +
    public static var `default`: Rules { get }
    @@ -462,7 +462,7 @@

    Declaration

    diff --git a/docs/Structs/Rules/AlertType.html b/docs/Structs/Rules/AlertType.html index a339ed4b..0ef9c2db 100644 --- a/docs/Structs/Rules/AlertType.html +++ b/docs/Structs/Rules/AlertType.html @@ -257,7 +257,7 @@

    Declaration

    diff --git a/docs/Structs/Rules/UpdatePromptFrequency.html b/docs/Structs/Rules/UpdatePromptFrequency.html index d04dfa75..a3f73236 100644 --- a/docs/Structs/Rules/UpdatePromptFrequency.html +++ b/docs/Structs/Rules/UpdatePromptFrequency.html @@ -230,7 +230,7 @@

    Declaration

    diff --git a/docs/Structs/RulesManager.html b/docs/Structs/RulesManager.html index b9b2be68..aea26ded 100644 --- a/docs/Structs/RulesManager.html +++ b/docs/Structs/RulesManager.html @@ -500,7 +500,7 @@

    Return Value

    Declaration

    Swift

    -
    public static let `default`: RulesManager
    +
    public static let `default`: RulesManager
    @@ -560,7 +560,7 @@

    Declaration

    diff --git a/docs/Structs/RulesManager/UpdateType.html b/docs/Structs/RulesManager/UpdateType.html index c061dcb7..f789afea 100644 --- a/docs/Structs/RulesManager/UpdateType.html +++ b/docs/Structs/RulesManager/UpdateType.html @@ -292,7 +292,7 @@

    Declaration

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes.html index 6dd105a4..005b8e5d 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes.html @@ -202,7 +202,7 @@

    Declaration

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes/Siren.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes/Siren.html index 8441ed14..eda91efb 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes/Siren.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes/Siren.html @@ -197,34 +197,6 @@

    Declaration

    -
  • -
    - - - - debugEnabled - -
    -
    -
    -
    -
    -
    -

    The debug flag, which is disabled by default. -When enabled, a stream of print() statements are logged to your console when a version check is performed.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public lazy var debugEnabled: Bool { get set }
    - -
    -
    -
    -
    -
  • @@ -372,6 +344,33 @@

    Declaration

  • +
  • +
    + + + + didEnterBackgroundObserver + +
    +
    +
    +
    +
    +
    +

    The retained NotificationCenter observer that listens for UIApplication.didEnterBackgroundNotification notifications.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var didEnterBackgroundObserver: NSObjectProtocol?
    + +
    +
    +
    +
    +
  • @@ -484,10 +483,10 @@

    Declaration

      @@ -504,7 +503,8 @@

      Public Functionality

      - +

      This method executes the Siren version checking and alert presentation flow.

      +

      Declaration

      @@ -526,7 +526,7 @@

      Parameters

      -

      +

      Returns the metadata around a successful version check and interaction with the update modal or it returns nil.

      @@ -570,19 +570,19 @@

      Declaration

      +
      +
      + +
      • @@ -810,8 +821,7 @@

        Parameters

        -

        Add an observer that listens for app launching/relaunching -(e.g., calls to UIApplication‘s didBecomeActive function).

        +

        Add app state observers

        @@ -825,12 +835,66 @@

        Declaration

      • +
      • + +
        +
        +
        +
        +
        +

        Adds an observer that listens for app launching/relaunching.

        + +
        +
        +

        Declaration

        +
        +

        Swift

        +
        func addForegroundObserver()
        + +
        +
        +
        +
        +
      • +
      • + +
        +
        +
        +
        +
        +

        Adds an observer that listens for when the app is sent to the background.

        + +
        +
        +

        Declaration

        +
        +

        Swift

        +
        func addBackgroundObserver()
        + +
        +
        +
        +
        +
      diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes/SirenViewController.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes/SirenViewController.html index 543f954f..ef4b3e41 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes/SirenViewController.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes/SirenViewController.html @@ -175,7 +175,7 @@

      Declaration

      diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums.html index 5e6c536b..1e65e1a5 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums.html @@ -202,7 +202,7 @@

      Declaration

      diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/AlertAction.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/AlertAction.html index df23cf7a..d797744c 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/AlertAction.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/AlertAction.html @@ -256,7 +256,7 @@

      Declaration

      diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/KnownError.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/KnownError.html index e60c3168..258bcf67 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/KnownError.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/KnownError.html @@ -553,7 +553,7 @@

      Declaration

      diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions.html index b3f816c0..d275025c 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions.html @@ -262,7 +262,7 @@

      Declaration

      diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Bundle.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Bundle.html index a200bd70..b3c9859a 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Bundle.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Bundle.html @@ -423,7 +423,7 @@

      Return Value

      diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Bundle/Constants.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Bundle/Constants.html index 744910b9..3fb48b7b 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Bundle/Constants.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Bundle/Constants.html @@ -310,7 +310,7 @@

      Declaration

      diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Date.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Date.html index c827524a..891d1a36 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Date.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Date.html @@ -247,7 +247,7 @@

      Return Value

      diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UIAlertController.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UIAlertController.html index 41651dd0..b00094b3 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UIAlertController.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UIAlertController.html @@ -239,7 +239,7 @@

      Parameters

      diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UserDefaults.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UserDefaults.html index 1c64d3cd..1b7f52bb 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UserDefaults.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UserDefaults.html @@ -256,7 +256,7 @@

      Declaration

      diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UserDefaults/SirenKeys.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UserDefaults/SirenKeys.html index 6983054f..1718ec91 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UserDefaults/SirenKeys.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UserDefaults/SirenKeys.html @@ -230,7 +230,7 @@

      Declaration

      diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs.html index c0ef5159..149029f2 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs.html @@ -426,7 +426,7 @@

      Declaration

      diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIManager.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIManager.html index 57385729..1326dea9 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIManager.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIManager.html @@ -301,7 +301,7 @@

      Parameters

      Declaration

      Swift

      -
      public static let `default`: APIManager
      +
      public static let `default`: APIManager
    @@ -484,7 +484,7 @@

    Return Value

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIManager/Constants.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIManager/Constants.html index 645afd45..028e1aa1 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIManager/Constants.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIManager/Constants.html @@ -202,7 +202,7 @@

    Declaration

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/AlertConstants.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/AlertConstants.html index 2717d6dc..ac1884d0 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/AlertConstants.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/AlertConstants.html @@ -283,7 +283,7 @@

    Declaration

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/DataParser.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/DataParser.html index 739b616c..88755da9 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/DataParser.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/DataParser.html @@ -375,7 +375,7 @@

    Return Value

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Localization.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Localization.html index 78a6c884..465bf682 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Localization.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Localization.html @@ -448,7 +448,7 @@

    Return Value

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Localization/Language.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Localization/Language.html index a1e50087..6ec9dce2 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Localization/Language.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Localization/Language.html @@ -1285,7 +1285,7 @@

    Declaration

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/LookupModel.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/LookupModel.html index ad08f39d..7e6b8bae 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/LookupModel.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/LookupModel.html @@ -231,7 +231,7 @@

    Declaration

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/LookupModel/CodingKeys.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/LookupModel/CodingKeys.html index 8bae8fe4..c2b26cf3 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/LookupModel/CodingKeys.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/LookupModel/CodingKeys.html @@ -175,7 +175,7 @@

    Declaration

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/LookupModel/Results.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/LookupModel/Results.html index 6158798d..f102f8d1 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/LookupModel/Results.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/LookupModel/Results.html @@ -311,7 +311,7 @@

    Declaration

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/LookupModel/Results/CodingKeys.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/LookupModel/Results/CodingKeys.html index 0560df9b..ebe3b079 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/LookupModel/Results/CodingKeys.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/LookupModel/Results/CodingKeys.html @@ -283,7 +283,7 @@

    Declaration

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/PresentationManager.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/PresentationManager.html index 36ed26af..f3c4eed8 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/PresentationManager.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/PresentationManager.html @@ -362,9 +362,9 @@

    Declaration

  • @@ -379,7 +379,7 @@

    Declaration

    Declaration

    Swift

    -
    private var alertController: UIAlertController?
    +
    var alertController: UIAlertController?
    @@ -578,7 +578,7 @@

    Parameters

    Declaration

    Swift

    -
    public static let `default`: PresentationManager
    +
    public static let `default`: PresentationManager
    @@ -823,12 +823,39 @@

    Return Value

  • +
  • + +
    +
    +
    +
    +
    +

    Removes the alertController from memory.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    private func cleanUpAlertController()
    + +
    +
    +
    +
    +
  • diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Results.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Results.html index b2deed5f..5c3387f9 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Results.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Results.html @@ -257,7 +257,7 @@

    Declaration

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules.html index 8d6d2ae2..c92b8f50 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules.html @@ -334,7 +334,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var `default`: Rules { get }
    +
    public static var `default`: Rules { get }
    @@ -462,7 +462,7 @@

    Declaration

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules/AlertType.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules/AlertType.html index a339ed4b..0ef9c2db 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules/AlertType.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules/AlertType.html @@ -257,7 +257,7 @@

    Declaration

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules/UpdatePromptFrequency.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules/UpdatePromptFrequency.html index d04dfa75..a3f73236 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules/UpdatePromptFrequency.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules/UpdatePromptFrequency.html @@ -230,7 +230,7 @@

    Declaration

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/RulesManager.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/RulesManager.html index b9b2be68..aea26ded 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/RulesManager.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/RulesManager.html @@ -500,7 +500,7 @@

    Return Value

    Declaration

    Swift

    -
    public static let `default`: RulesManager
    +
    public static let `default`: RulesManager
    @@ -560,7 +560,7 @@

    Declaration

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/RulesManager/UpdateType.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/RulesManager/UpdateType.html index c061dcb7..f789afea 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/RulesManager/UpdateType.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/RulesManager/UpdateType.html @@ -292,7 +292,7 @@

    Declaration

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/index.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/index.html index 8a84d714..dc63de83 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/index.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/index.html @@ -133,7 +133,7 @@

    Siren 🚨

    Notify users when a new version of your app is available and prompt them to upgrade.

    -

    Travis CI Status Swift Support Documentation CocoaPods Carthage Compatible SwiftPM Compatible

    +

    Travis CI Status Documentation Swift Support CocoaPods Carthage Compatible SwiftPM Compatible


    Table of Contents

    @@ -143,7 +143,7 @@

    Table of Contents

  • Features
  • Screenshots
  • Installation Instructions
  • -
  • Implementation Examples
  • +
  • Implementation Examples
  • Localization
  • Device Compatibility
  • Testing Siren
  • @@ -151,7 +151,7 @@

    Table of Contents

  • Phased Releases
  • Words of Caution
  • Ports
  • -
  • Shout-Out and Gratitude
  • +
  • Special Thanks
  • Attribution
  • @@ -160,32 +160,30 @@

    About

    Siren checks a user’s currently installed version of your iOS app against the version that is currently available in the App Store.

    -

    If a new version is available, an alert can be presented to the user informing them of the newer version, and giving them the option to update the application. Alternatively, Siren can notify your app programmatically, enabling you to inform the user through alternative means, such as a custom interface.

    +

    If a new version is available, a language localized alert can be presented to the user informing them of the newer version, and giving them the option to update the application. Alternatively, Siren can notify your app through alternative means, such as a custom user interface.

    -
      -
    • Siren is built to work with the Semantic Versioning system. +

      Siren is built to work with the Semantic Versioning system.

      • Canonical Semantic Versioning uses a three number versioning system (e.g., 1.0.0)
      • Siren also supports two-number versioning (e.g., 1.0) and four-number versioning (e.g., 1.0.0.0)
      • -

    Features

    Current Features

    Future Features

    • [ ] Present prompt only on WiFi if app is over the OTA limit.
    • -
    • [ ] Support for Third-/Homegrown Update Servers (not including TestFlight).
    • +
    • [ ] Support for Third-Party/Homegrown Update Servers (not including TestFlight).
    • [ ] Increase code coverage with more unit tests and UI tests.

    Screenshots

    @@ -252,7 +250,7 @@

    Swift Package Manager

    Implementation Examples

    -

    Implementing Siren is as easy as adding two line of code to your app.

    +

    Implementing Siren is as easy as adding two lines of code to your app:

    import Siren // Line 1
     import UIKit
     
    @@ -260,11 +258,10 @@ 

    Implementation Examples

    final class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - func application(_ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { window?.makeKeyAndVisible() - Siren.shared.wail() // Line 2 + Siren.shared.wail() // Line 2 return true } @@ -280,6 +277,8 @@

    Localization

    Arabic, Armenian, Basque, Chinese (Simplified and Traditional), Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hebrew, Hungarian, Indonesian, Italian, Japanese, Korean, Latvian, Lithuanian, Malay, Norwegian (Bokmål), Persian (Afghanistan, Iran, Persian), Polish, Portuguese (Brazil and Portugal), Russian, Serbian (Cyrillic and Latin), Slovenian, Spanish, Swedish, Thai, Turkish, Ukrainian, Urdu, Vietnamese

    +

    If your user’s device is set to one of the supported locales, an update message will appear in that language. If a locale is not supported, than the message will appear in English.

    +

    You may want the update dialog to always appear in a certain language, ignoring the user’s device-specific setting. You can enable it like so:

    // In this example, we force the `russian` language.
     Siren.shared.presentationManager = PresentationManager(forceLanguageLocalization: .russian)
    @@ -330,13 +329,13 @@ 

    Ports

  • The Siren Swift library inspired the React Native library.
  • -

    Shout-Out and Gratitude

    +

    Special Thanks

    A massive shout-out and thank you goes to the following folks:

    • Aaron Brager for motivating me and assisting me in building the initial proof-of-concept of Siren (based on Harpy) back in 2015. Without him, Siren may never have been built.
    • -
    • All of Harpy’s Consitrbutors for helping building the feature set from 2012-2015 that was used as the basis for the first version of Siren.
    • +
    • All of Harpy’s Contributors for helping building the feature set from 2012-2015 that was used as the basis for the first version of Siren.
    • All of Siren’s Contributors for helping make Siren as powerful and bug-free as it currently is today.

    Created and maintained by

    @@ -346,7 +345,7 @@

    Created and maintained by

    diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/search.json b/docs/docsets/Siren.docset/Contents/Resources/Documents/search.json index 140126da..1889d7b8 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/search.json +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/search.json @@ -1 +1 @@ -{"Structs/DataParser.html#/s:5Siren10DataParserV22isAppStoreVersionNewer09installedG003appfG0SbSSSg_AGtFZ":{"name":"isAppStoreVersionNewer(installedVersion:appStoreVersion:)","abstract":"

    Checks to see if the App Store version of the app is newer than the installed version.

    ","parent_name":"DataParser"},"Structs/DataParser.html#/s:5Siren10DataParserV30isUpdateCompatibleWithDeviceOS3forSbAA11LookupModelV_tFZ":{"name":"isUpdateCompatibleWithDeviceOS(for:)","abstract":"

    Validates that the latest version in the App Store is compatible with the device’s current version of iOS.

    ","parent_name":"DataParser"},"Structs/DataParser.html#/s:5Siren10DataParserV14parseForUpdate19forInstalledVersion011andAppStoreI0AA12RulesManagerV0F4TypeOSSSg_AKtFZ":{"name":"parseForUpdate(forInstalledVersion:andAppStoreVersion:)","abstract":"

    The type of update that is returned from the API in relation to the verison of the app that is installed.

    ","parent_name":"DataParser"},"Structs/DataParser.html#/s:5Siren10DataParserV5split33_35354280B893AD05C0C27D0AD925B30FLL7versionSaySiGSS_tFZ":{"name":"split(version:)","abstract":"

    Splits a version-formatted String into an[Int]`.

    ","parent_name":"DataParser"},"Structs/Rules/UpdatePromptFrequency.html#/s:5Siren5RulesV21UpdatePromptFrequencyO11immediatelyyA2EmF":{"name":"immediately","abstract":"

    Version check performed every time the app is launched.

    ","parent_name":"UpdatePromptFrequency"},"Structs/Rules/UpdatePromptFrequency.html#/s:5Siren5RulesV21UpdatePromptFrequencyO5dailyyA2EmF":{"name":"daily","abstract":"

    Version check performed once a day.

    ","parent_name":"UpdatePromptFrequency"},"Structs/Rules/UpdatePromptFrequency.html#/s:5Siren5RulesV21UpdatePromptFrequencyO6weeklyyA2EmF":{"name":"weekly","abstract":"

    Version check performed once a week.

    ","parent_name":"UpdatePromptFrequency"},"Structs/Rules/AlertType.html#/s:5Siren5RulesV9AlertTypeO5forceyA2EmF":{"name":"force","abstract":"

    Forces the user to update your app (1 button alert).

    ","parent_name":"AlertType"},"Structs/Rules/AlertType.html#/s:5Siren5RulesV9AlertTypeO6optionyA2EmF":{"name":"option","abstract":"

    Presents the user with option to update app now or at next launch (2 button alert).

    ","parent_name":"AlertType"},"Structs/Rules/AlertType.html#/s:5Siren5RulesV9AlertTypeO4skipyA2EmF":{"name":"skip","abstract":"

    Presents the user with option to update the app now, at next launch, or to skip this version all together (3 button alert).

    ","parent_name":"AlertType"},"Structs/Rules/AlertType.html#/s:5Siren5RulesV9AlertTypeO4noneyA2EmF":{"name":"none","abstract":"

    Doesn’t present the alert.","parent_name":"AlertType"},"Structs/Rules.html#/s:5Siren5RulesV9alertTypeAC05AlertD0Ovp":{"name":"alertType","abstract":"

    The type of alert that should be presented.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV9frequencyAC21UpdatePromptFrequencyOvp":{"name":"frequency","abstract":"

    The frequency in which a the user is prompted to update the app","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV15promptFrequency12forAlertTypeA2C012UpdatePromptD0O_AC0fG0Otcfc":{"name":"init(promptFrequency:forAlertType:)","abstract":"

    Initializes the alert presentation rules.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV8annoyingACvpZ":{"name":"annoying","abstract":"

    Performs a version check immediately, but allows the user to skip updating the app until the next time the app becomes active.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV8criticalACvpZ":{"name":"critical","abstract":"

    Performs a version check immediately and forces the user to update the app.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV7defaultACvpZ":{"name":"default","abstract":"

    Performs a version check once a day, but allows the user to skip updating the app until","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV10persistentACvpZ":{"name":"persistent","abstract":"

    Performs a version check daily, but allows the user to skip updating the app until the next time the app becomes active.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV7relaxedACvpZ":{"name":"relaxed","abstract":"

    Performs a version check weekly, but allows the user to skip updating the app until","parent_name":"Rules"},"Structs/Rules/AlertType.html":{"name":"AlertType","abstract":"

    Determines the type of alert to present after a successful version check has been performed.

    ","parent_name":"Rules"},"Structs/Rules/UpdatePromptFrequency.html":{"name":"UpdatePromptFrequency","abstract":"

    Determines the frequency in which the user is prompted to update the app","parent_name":"Rules"},"Structs/Results.html#/s:5Siren7ResultsV11alertActionAA05AlertD0Ovp":{"name":"alertAction","abstract":"

    The UIAlertAction the user chose upon being presented with the update alert.","parent_name":"Results"},"Structs/Results.html#/s:5Siren7ResultsV12localizationAA12LocalizationVvp":{"name":"localization","abstract":"

    The Siren-supported locale that was used for the string in the update alert.

    ","parent_name":"Results"},"Structs/Results.html#/s:5Siren7ResultsV11lookupModelAA06LookupD0Vvp":{"name":"lookupModel","abstract":"

    The Swift-mapped API model, if a successful version check was performed.

    ","parent_name":"Results"},"Structs/Results.html#/s:5Siren7ResultsV10updateTypeAA12RulesManagerV06UpdateD0Ovp":{"name":"updateType","abstract":"

    The type of update that was returned for the API.

    ","parent_name":"Results"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO5appIDyA2HmF":{"name":"appID","abstract":"

    The appID JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO25currentVersionReleaseDateyA2HmF":{"name":"currentVersionReleaseDate","abstract":"

    The current version release date JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO16minimumOSVersionyA2HmF":{"name":"minimumOSVersion","abstract":"

    The minimum device iOS version compatibility JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO12releaseNotesyA2HmF":{"name":"releaseNotes","abstract":"

    The release notes JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO7versionyA2HmF":{"name":"version","abstract":"

    The current App Store version JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html":{"name":"CodingKeys","abstract":"

    Codable Coding Keys for the Results array in the iTunes Lookup API JSON response.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV5appIDSivp":{"name":"appID","abstract":"

    The app’s App ID.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV25currentVersionReleaseDateSSvp":{"name":"currentVersionReleaseDate","abstract":"

    The release date for the latest verison of the app.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV16minimumOSVersionSSvp":{"name":"minimumOSVersion","abstract":"

    The minimum verison of iOS that the current verison of the app requires.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV12releaseNotesSSSgvp":{"name":"releaseNotes","abstract":"

    The releases notes from the latest version of the app.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV7versionSSvp":{"name":"version","abstract":"

    The latest version of the app.

    ","parent_name":"Results"},"Structs/LookupModel/CodingKeys.html#/s:5Siren11LookupModelV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO7resultsyA2FmF":{"name":"results","abstract":"

    The results JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/CodingKeys.html":{"name":"CodingKeys","abstract":"

    Codable Coding Keys for the Top-Level iTunes Lookup API JSON response.

    ","parent_name":"LookupModel"},"Structs/LookupModel.html#/s:5Siren11LookupModelV7resultsSayAC7ResultsVGvp":{"name":"results","abstract":"

    The array of results objects from the iTunes Lookup API.

    ","parent_name":"LookupModel"},"Structs/LookupModel/Results.html":{"name":"Results","abstract":"

    The Results object from the the iTunes Lookup API.

    ","parent_name":"LookupModel"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6arabicyA2EmF":{"name":"arabic","abstract":"

    Arabic Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO8armenianyA2EmF":{"name":"armenian","abstract":"

    Armenian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6basqueyA2EmF":{"name":"basque","abstract":"

    Basque Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO17chineseSimplifiedyA2EmF":{"name":"chineseSimplified","abstract":"

    Simplified Chinese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO18chineseTraditionalyA2EmF":{"name":"chineseTraditional","abstract":"

    Traditional Chinese Localization Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO8croatianyA2EmF":{"name":"croatian","abstract":"

    Croatian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO5czechyA2EmF":{"name":"czech","abstract":"

    Czech Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6danishyA2EmF":{"name":"danish","abstract":"

    Danish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO5dutchyA2EmF":{"name":"dutch","abstract":"

    Dutch Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7englishyA2EmF":{"name":"english","abstract":"

    English Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO8estonianyA2EmF":{"name":"estonian","abstract":"

    Estonian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7finnishyA2EmF":{"name":"finnish","abstract":"

    Finnish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6frenchyA2EmF":{"name":"french","abstract":"

    French Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6germanyA2EmF":{"name":"german","abstract":"

    German Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO5greekyA2EmF":{"name":"greek","abstract":"

    Greek Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6hebrewyA2EmF":{"name":"hebrew","abstract":"

    Hebrew Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO9hungarianyA2EmF":{"name":"hungarian","abstract":"

    Hungarian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO10indonesianyA2EmF":{"name":"indonesian","abstract":"

    Indonesian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7italianyA2EmF":{"name":"italian","abstract":"

    Italian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO8japaneseyA2EmF":{"name":"japanese","abstract":"

    Japanese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6koreanyA2EmF":{"name":"korean","abstract":"

    Korean Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7latvianyA2EmF":{"name":"latvian","abstract":"

    Latvian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO10lithuanianyA2EmF":{"name":"lithuanian","abstract":"

    Lithuanian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO5malayyA2EmF":{"name":"malay","abstract":"

    Malay Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO9norwegianyA2EmF":{"name":"norwegian","abstract":"

    Norwegian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7persianyA2EmF":{"name":"persian","abstract":"

    Persian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO18persianAfghanistanyA2EmF":{"name":"persianAfghanistan","abstract":"

    Persian (Afghanistan) Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO11persianIranyA2EmF":{"name":"persianIran","abstract":"

    Persian (Iran) Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6polishyA2EmF":{"name":"polish","abstract":"

    Polish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO16portugueseBrazilyA2EmF":{"name":"portugueseBrazil","abstract":"

    Brazilian Portuguese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO18portuguesePortugalyA2EmF":{"name":"portuguesePortugal","abstract":"

    Portugal’s Portuguese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7russianyA2EmF":{"name":"russian","abstract":"

    Russian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO15serbianCyrillicyA2EmF":{"name":"serbianCyrillic","abstract":"

    Serbian (Cyrillic) Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO12serbianLatinyA2EmF":{"name":"serbianLatin","abstract":"

    Serbian (Latin) Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO9slovenianyA2EmF":{"name":"slovenian","abstract":"

    Slovenian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7spanishyA2EmF":{"name":"spanish","abstract":"

    Spanish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7swedishyA2EmF":{"name":"swedish","abstract":"

    Swedish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO4thaiyA2EmF":{"name":"thai","abstract":"

    Thai Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7turkishyA2EmF":{"name":"turkish","abstract":"

    Turkish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO4urduyA2EmF":{"name":"urdu","abstract":"

    Urdu Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO9ukrainianyA2EmF":{"name":"ukrainian","abstract":"

    Ukranian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO10vietnameseyA2EmF":{"name":"vietnamese","abstract":"

    Vietnamese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html":{"name":"Language","abstract":"

    Determines the available languages in which the update message and alert button titles should appear.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV7appName33_2FDBEF65899237DA36B11FA5846AD0EALLSSvp":{"name":"appName","abstract":"

    The name of the app as defined by the Info.plist.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV13forceLanguage33_2FDBEF65899237DA36B11FA5846AD0EALLAC0D0OSgvp":{"name":"forceLanguage","abstract":"

    Overrides the default localization of a user’s device when presenting the update message and button titles in the alert.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV7appName016andForceLanguageB0ACSSSg_AC0G0OSgtcfc":{"name":"init(appName:andForceLanguageLocalization:)","abstract":"

    Initializes

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV12alertMessage25forCurrentAppStoreVersionS2S_tF":{"name":"alertMessage(forCurrentAppStoreVersion:)","abstract":"

    The localized string for the UIAlertController‘s message field. .

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV10alertTitleSSyF":{"name":"alertTitle()","abstract":"

    The localized string for the UIAlertController‘s title field. .

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV19nextTimeButtonTitleSSyF":{"name":"nextTimeButtonTitle()","abstract":"

    The localized string for the Next time UIAlertAction.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV15skipButtonTitleSSyF":{"name":"skipButtonTitle()","abstract":"

    The localized string for the Skip this version UIAlertAction.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV17updateButtonTitleSSyF":{"name":"updateButtonTitle()","abstract":"

    The localized string for the Update UIAlertAction.

    ","parent_name":"Localization"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV12alertMessageSSvpZ":{"name":"alertMessage","abstract":"

    The text that conveys the message that there is an app update available

    ","parent_name":"AlertConstants"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV10alertTitleSSvpZ":{"name":"alertTitle","abstract":"

    The alert title which defaults to Update Available.

    ","parent_name":"AlertConstants"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV19nextTimeButtonTitleSSvpZ":{"name":"nextTimeButtonTitle","abstract":"

    The button text that conveys the message that the user should be prompted to update next time the app launches.

    ","parent_name":"AlertConstants"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV15skipButtonTitleSSvpZ":{"name":"skipButtonTitle","abstract":"

    The text that conveys the message that the the user wants to skip this verison update.

    ","parent_name":"AlertConstants"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV17updateButtonTitleSSvpZ":{"name":"updateButtonTitle","abstract":"

    The button text that conveys the message that the user would like to update the app right away.

    ","parent_name":"AlertConstants"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO5majoryA2EmF":{"name":"major","abstract":"

    Major release available: A.b.c.d

    ","parent_name":"UpdateType"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO5minoryA2EmF":{"name":"minor","abstract":"

    Minor release available: a.B.c.d

    ","parent_name":"UpdateType"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO5patchyA2EmF":{"name":"patch","abstract":"

    Patch release available: a.b.C.d

    ","parent_name":"UpdateType"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO8revisionyA2EmF":{"name":"revision","abstract":"

    Revision release available: a.b.c.D

    ","parent_name":"UpdateType"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO7unknownyA2EmF":{"name":"unknown","abstract":"

    No information available about the update.

    ","parent_name":"UpdateType"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV15releasedForDaysSivp":{"name":"releasedForDays","abstract":"

    The alert will only show up if the current version has already been released for X days.

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV011majorUpdateB0AA0B0Vvp":{"name":"majorUpdateRules","abstract":"

    The Rules that should be used when the App Store version of the app signifies that it is a major version update (A.b.c.d).

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV011minorUpdateB0AA0B0Vvp":{"name":"minorUpdateRules","abstract":"

    The Rules that should be used when the App Store version of the app signifies that it is a minor version update (a.B.c.d).

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV011patchUpdateB0AA0B0Vvp":{"name":"patchUpdateRules","abstract":"

    The Rules that should be used when the App Store version of the app signifies that it is a patch version update (a.b.C.d).

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV014revisionUpdateB0AA0B0Vvp":{"name":"revisionUpdateRules","abstract":"

    The Rules that should be used when the App Store version of the app signifies that it is a revision version update (a.b.c.D).

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV011majorUpdateB005minoreB005patcheB008revisioneB050showAlertAfterCurrentVersionHasBeenReleasedForDaysAcA0B0V_A3JSitcfc":{"name":"init(majorUpdateRules:minorUpdateRules:patchUpdateRules:revisionUpdateRules:showAlertAfterCurrentVersionHasBeenReleasedForDays:)","abstract":"

    Initializer that sets update-specific Rules for all updates (e.g., major, minor, patch, revision).","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV06globalB050showAlertAfterCurrentVersionHasBeenReleasedForDaysAcA0B0V_Sitcfc":{"name":"init(globalRules:showAlertAfterCurrentVersionHasBeenReleasedForDays:)","abstract":"

    Initializer that sets the same update Rules for all types of updates (e.g., major, minor, patch, revision).","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV04loadB13ForUpdateTypeyAA0B0VAC0fG0OF":{"name":"loadRulesForUpdateType(_:)","abstract":"

    Returns the appropriate update rules based on the type of version that is returned from the API.

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV7defaultACvpZ":{"name":"default","abstract":"

    The default RulesManager.

    ","parent_name":"RulesManager"},"Structs/RulesManager/UpdateType.html":{"name":"UpdateType","abstract":"

    Informs Siren of the type of update that is available so that","parent_name":"RulesManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV17CompletionHandlera":{"name":"CompletionHandler","abstract":"

    Return results or errors obtained from performing a version check with Siren.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV12localizationAA12LocalizationVvp":{"name":"localization","abstract":"

    The localization data structure that will be used to construct localized strings for the update alert.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV9tintColorSo7UIColorCSgvp":{"name":"tintColor","abstract":"

    The tint color of the UIAlertController buttons.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV12alertMessageSSvp":{"name":"alertMessage","abstract":"

    The descriptive update message of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV10alertTitleSSvp":{"name":"alertTitle","abstract":"

    The main message of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV19nextTimeButtonTitleSSvp":{"name":"nextTimeButtonTitle","abstract":"

    The Next time button text of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV15skipButtonTitleSSvp":{"name":"skipButtonTitle","abstract":"

    The Skip this version button text of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV17updateButtonTitleSSvp":{"name":"updateButtonTitle","abstract":"

    The Update button text of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV15alertController33_CEF2109017F934DAB33AED8753BA096CLLSo07UIAlertE0CSgvp":{"name":"alertController","abstract":"

    The instance of the UIAlertController used to present the update alert.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV13updaterWindow33_CEF2109017F934DAB33AED8753BA096CLLSo8UIWindowCvp":{"name":"updaterWindow","abstract":"

    The UIWindow instance that presents the SirenViewController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV14alertTintColor7appName0D5Title0D7Message012updateButtonI008nextTimelI004skiplI025forceLanguageLocalizationACSo7UIColorCSg_SSSgS5SAA0R0V0Q0OSgtcfc":{"name":"init(alertTintColor:appName:alertTitle:alertMessage:updateButtonTitle:nextTimeButtonTitle:skipButtonTitle:forceLanguageLocalization:)","abstract":"

    PresentationManager‘s public initializer.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV7defaultACvpZ":{"name":"default","abstract":"

    The default PresentationManager.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV12presentAlert9withRules25forCurrentAppStoreVersion10completionyAA0G0V_SSyAA0E6ActionOcSgtF":{"name":"presentAlert(withRules:forCurrentAppStoreVersion:completion:)","abstract":"

    Constructs the localized update alert UIAlertController object.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV17updateAlertAction33_CEF2109017F934DAB33AED8753BA096CLL10completionSo07UIAlertF0CyAA0eF0OcSg_tF":{"name":"updateAlertAction(completion:)","abstract":"

    The UIAlertAction that is executed when the Update option is selected.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV19nextTimeAlertAction33_CEF2109017F934DAB33AED8753BA096CLL10completionSo07UIAlertG0CyAA0fG0OcSg_tF":{"name":"nextTimeAlertAction(completion:)","abstract":"

    The UIAlertAction that is executed when the Next time option is selected.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV15skipAlertAction33_CEF2109017F934DAB33AED8753BA096CLL25forCurrentAppStoreVersion10completionSo07UIAlertF0CSS_yAA0eF0OcSgtF":{"name":"skipAlertAction(forCurrentAppStoreVersion:completion:)","abstract":"

    The UIAlertAction that is executed when the Skip this version option is selected.

    ","parent_name":"PresentationManager"},"Structs/APIManager/Constants.html#/s:5Siren10APIManagerV9Constants33_8071139324B24E2065F4037045A8D960LLV8bundleIDSSvpZ":{"name":"bundleID","abstract":"

    Constant for the bundleId parameter in the iTunes Lookup API request.

    ","parent_name":"Constants"},"Structs/APIManager/Constants.html#/s:5Siren10APIManagerV9Constants33_8071139324B24E2065F4037045A8D960LLV7countrySSvpZ":{"name":"country","abstract":"

    Constant for the country parameter in the iTunes Lookup API request.

    ","parent_name":"Constants"},"Structs/APIManager/Constants.html":{"name":"Constants","abstract":"

    Constants used in the APIManager.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV17CompletionHandlera":{"name":"CompletionHandler","abstract":"

    Return results or errors obtained from performing a version check with Siren.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV11countryCodeSSSgvp":{"name":"countryCode","abstract":"

    The region or country of an App Store in which the app is available.","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV11countryCodeACSSSg_tcfc":{"name":"init(countryCode:)","abstract":"

    Initializes APIManager to the region or country of an App Store in which the app is available.","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV7defaultACvpZ":{"name":"default","abstract":"

    The default APIManager.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV26performVersionCheckRequest10completionyyAA11LookupModelVSg_AA10KnownErrorOSgtcSg_tF":{"name":"performVersionCheckRequest(completion:)","abstract":"

    Creates and performs a URLRequest against the iTunes Lookup API.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV26processVersionCheckResults33_8071139324B24E2065F4037045A8D960LL8withData8response5error10completiony10Foundation0M0VSg_So13NSURLResponseCSgs5Error_pSgyAA11LookupModelVSg_AA05KnownS0OSgtcSgtF":{"name":"processVersionCheckResults(withData:response:error:completion:)","abstract":"

    Parses and maps the the results from the iTunes Lookup API request.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV13makeITunesURL33_8071139324B24E2065F4037045A8D960LL10Foundation0E0VyKF":{"name":"makeITunesURL()","abstract":"

    Creates the URL that points to the iTunes Lookup API.

    ","parent_name":"APIManager"},"Structs/APIManager.html":{"name":"APIManager","abstract":"

    APIManager for Siren

    "},"Structs/PresentationManager.html":{"name":"PresentationManager","abstract":"

    PresentationManager for Siren

    "},"Structs/RulesManager.html":{"name":"RulesManager","abstract":"

    RulesManager for Siren

    "},"Structs/AlertConstants.html":{"name":"AlertConstants","abstract":"

    The default constants used for the update alert’s messaging.

    "},"Structs/Localization.html":{"name":"Localization","abstract":"

    Localization information and strings for Siren.

    "},"Structs/LookupModel.html":{"name":"LookupModel","abstract":"

    Model representing a selection of results from the iTunes Lookup API.

    "},"Structs/Results.html":{"name":"Results","abstract":"

    The relevant metadata returned from Siren upon completing a successful version check.

    "},"Structs/Rules.html":{"name":"Rules","abstract":"

    Alert Presentation Rules for Siren.

    "},"Structs/DataParser.html":{"name":"DataParser","abstract":"

    Version parsing functions for Siren.

    "},"Extensions/UserDefaults/SirenKeys.html#/s:So14NSUserDefaultsC5SirenE0C4Keys33_0884631E60E090AA276701A736B793BBLLO37PerformVersionCheckOnSubsequentLaunchyA2FmF":{"name":"PerformVersionCheckOnSubsequentLaunch","abstract":"

    Key that notifies Siren to perform a version check and present","parent_name":"SirenKeys"},"Extensions/UserDefaults/SirenKeys.html#/s:So14NSUserDefaultsC5SirenE0C4Keys33_0884631E60E090AA276701A736B793BBLLO22StoredVersionCheckDateyA2FmF":{"name":"StoredVersionCheckDate","abstract":"

    Key that stores the timestamp of the last version check.

    ","parent_name":"SirenKeys"},"Extensions/UserDefaults/SirenKeys.html#/s:So14NSUserDefaultsC5SirenE0C4Keys33_0884631E60E090AA276701A736B793BBLLO20StoredSkippedVersionyA2FmF":{"name":"StoredSkippedVersion","abstract":"

    Key that stores the version that a user decided to skip.

    ","parent_name":"SirenKeys"},"Extensions/UserDefaults/SirenKeys.html":{"name":"SirenKeys","abstract":"

    Siren-specific UserDefaults Keys

    ","parent_name":"UserDefaults"},"Extensions/UserDefaults.html#/s:So14NSUserDefaultsC5SirenE43shouldPerformVersionCheckOnSubsequentLaunchSbvpZ":{"name":"shouldPerformVersionCheckOnSubsequentLaunch","abstract":"

    Sets and Gets a UserDefault around performing a version check on a subsequent launch.

    ","parent_name":"UserDefaults"},"Extensions/UserDefaults.html#/s:So14NSUserDefaultsC5SirenE20storedSkippedVersionSSSgvpZ":{"name":"storedSkippedVersion","abstract":"

    Sets and Gets a UserDefault around storing a version that the user wants to skip updating.

    ","parent_name":"UserDefaults"},"Extensions/UserDefaults.html#/s:So14NSUserDefaultsC5SirenE21alertPresentationDate10Foundation0F0VSgvpZ":{"name":"alertPresentationDate","abstract":"

    Sets and Gets a UserDefault around the last time the user was presented a version update alert.

    ","parent_name":"UserDefaults"},"Extensions/UIAlertController.html#/s:So17UIAlertControllerC5SirenE4show6windowySo8UIWindowC_tF":{"name":"show(window:)","abstract":"

    Presents Siren’s UIAlertController in a new UIWindow.

    ","parent_name":"UIAlertController"},"Extensions/UIAlertController.html#/s:So17UIAlertControllerC5SirenE4hide6windowySo8UIWindowC_tF":{"name":"hide(window:)","abstract":"

    Hides Siren’s UIAlertController within a given window.

    ","parent_name":"UIAlertController"},"Extensions/Date.html#/s:10Foundation4DateV5SirenE4days5sinceSiAC_tFZ":{"name":"days(since:)","abstract":"

    The amount of days passed from a specific source date.

    ","parent_name":"Date"},"Extensions/Date.html#/s:10Foundation4DateV5SirenE4days5sinceSiSgSS_tFZ":{"name":"days(since:)","abstract":"

    The amount of days passed from a specific source date string.

    ","parent_name":"Date"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV15bundleExtensionSSvpZ":{"name":"bundleExtension","abstract":"

    Constant for the .bundle file extension.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV11displayNameSSvpZ":{"name":"displayName","abstract":"

    Constant for CFBundleDisplayName.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV19englishLocalizationSSvpZ":{"name":"englishLocalization","abstract":"

    Constant for the default US English localization.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV16projectExtensionSSvpZ":{"name":"projectExtension","abstract":"

    Constant for the project file extension.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV18shortVersionStringSSvpZ":{"name":"shortVersionString","abstract":"

    Constant for CFBundleShortVersionString.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV5tableSSvpZ":{"name":"table","abstract":"

    Constant for the localization table.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html":{"name":"Constants","abstract":"

    Constants used in the Bundle extension.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE7versionSSSgyFZ":{"name":"version()","abstract":"

    Fetches the current verison of the app.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE15localizedString6forKey20andForceLocalizationS2S_AC0I0V8LanguageOSgtFZ":{"name":"localizedString(forKey:andForceLocalization:)","abstract":"

    Returns the localized string for a given default string.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE19bestMatchingAppNameSSyFZ":{"name":"bestMatchingAppName()","abstract":"

    The appropriate name for the app to be displayed in the update alert.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE15sirenBundlePath33_9C775CF4CEC7A5F21E625F58C71BDF22LLSSSgyFZ":{"name":"sirenBundlePath()","abstract":"

    The path to Siren’s localization Bundle.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE21sirenForcedBundlePath33_9C775CF4CEC7A5F21E625F58C71BDF22LL25forceLanguageLocalizationSSSgAC0R0V0Q0O_tFZ":{"name":"sirenForcedBundlePath(forceLanguageLocalization:)","abstract":"

    The path for a particular language localizationin Siren’s localization Bundle.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE14deviceLanguage33_9C775CF4CEC7A5F21E625F58C71BDF22LLAC12LocalizationV0D0OSgyFZ":{"name":"deviceLanguage()","abstract":"

    The user’s preferred language based on their device’s localization.

    ","parent_name":"Bundle"},"Extensions/Bundle.html":{"name":"Bundle"},"Extensions/Date.html":{"name":"Date"},"Extensions/UIAlertController.html":{"name":"UIAlertController"},"Extensions/UserDefaults.html":{"name":"UserDefaults"},"Enums/KnownError.html#/s:5Siren10KnownErrorO20appStoreAppIDFailureyA2CmF":{"name":"appStoreAppIDFailure","abstract":"

    Error retrieving trackId as the JSON does not contain a ‘trackId’ key.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO33appStoreDataRetrievalEmptyResultsyA2CmF":{"name":"appStoreDataRetrievalEmptyResults","abstract":"

    Error retrieving App Store data as JSON results were empty. Is your app available in the US? If not, change the countryCode variable to fix this error.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO28appStoreDataRetrievalFailureyACs0C0_pSg_tcACmF":{"name":"appStoreDataRetrievalFailure(underlyingError:)","abstract":"

    Error retrieving App Store data as an error was returned.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO26appStoreJSONParsingFailureyACs0C0_p_tcACmF":{"name":"appStoreJSONParsingFailure(underlyingError:)","abstract":"

    Error parsing App Store JSON data.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO28appStoreOSVersionUnsupportedyA2CmF":{"name":"appStoreOSVersionUnsupported","abstract":"

    The version of iOS on the device is lower than that of the one required by the app verison update.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO27appStoreVersionArrayFailureyA2CmF":{"name":"appStoreVersionArrayFailure","abstract":"

    Error retrieving App Store verson number as the JSON does not contain a version key.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO25currentVersionReleaseDateyA2CmF":{"name":"currentVersionReleaseDate","abstract":"

    The currentVersionReleaseDate key is missing in the JSON payload. Please leave an issue on https://github.com/ArtSabintsev/Siren with as many details as possible.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO12malformedURLyA2CmF":{"name":"malformedURL","abstract":"

    One of the iTunes URLs used in Siren is malformed. Please leave an issue on https://github.com/ArtSabintsev/Siren with as many details as possible.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO15missingBundleIDyA2CmF":{"name":"missingBundleID","abstract":"

    Please make sure that you have set a Bundle Identifier in your project.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO17noUpdateAvailableyA2CmF":{"name":"noUpdateAvailable","abstract":"

    No new update available.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO16recentlyPromptedyA2CmF":{"name":"recentlyPrompted","abstract":"

    Siren will not present an update alert if it performed one too recently. If you would like to present an alert every time Siren is called, please consider setting the UpdatePromptFrequency.immediately rule in RulesManager

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO15releasedTooSoonyACSi_SitcACmF":{"name":"releasedTooSoon(daysSinceRelease:releasedForDays:)","abstract":"

    The app has been released for X days, but Siren cannot prompt the user until Y (where Y > X) days have passed.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO17skipVersionUpdateyACSS_SStcACmF":{"name":"skipVersionUpdate(installedVersion:appStoreVersion:)","abstract":"

    The user has opted to skip updating their current version of the app to the current App Store version.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO20localizedDescriptionSSvp":{"name":"localizedDescription","abstract":"

    The localized description for each error handled by Siren.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO05sirenC033_B3C911EAD28C83CC211C07566B0F499ALLSSvpZ":{"name":"sirenError","abstract":"

    An easily identifiable prefix for all errors thrown by Siren.

    ","parent_name":"KnownError"},"Enums/AlertAction.html#/s:5Siren11AlertActionO8appStoreyA2CmF":{"name":"appStore","abstract":"

    The user clicked on the Update option, which took them to the app’s App Store page.

    ","parent_name":"AlertAction"},"Enums/AlertAction.html#/s:5Siren11AlertActionO8nextTimeyA2CmF":{"name":"nextTime","abstract":"

    The user clicked on the Next Time option, which dismissed the alert.

    ","parent_name":"AlertAction"},"Enums/AlertAction.html#/s:5Siren11AlertActionO4skipyA2CmF":{"name":"skip","abstract":"

    The user clicked on the Skip this version option, which dismissed the alert.

    ","parent_name":"AlertAction"},"Enums/AlertAction.html#/s:5Siren11AlertActionO7unknownyA2CmF":{"name":"unknown","abstract":"

    (Default) The user never chose an option. This is returned when an error is thrown by Siren.

    ","parent_name":"AlertAction"},"Enums/AlertAction.html":{"name":"AlertAction","abstract":"

    The UIAlertController button that was pressed upon being presented an update alert.

    "},"Enums/KnownError.html":{"name":"KnownError","abstract":"

    Enumerates all potentials errors that Siren can handle.

    "},"Classes/SirenViewController.html#/c:@M@Siren@objc(cs)SirenViewController(py)preferredStatusBarStyle":{"name":"preferredStatusBarStyle","abstract":"

    UIStatusBarStyle override.

    ","parent_name":"SirenViewController"},"Classes/Siren.html#/s:5SirenAAC14ResultsHandlera":{"name":"ResultsHandler","abstract":"

    Return results or errors obtained from performing a version check with Siren.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC6sharedABvpZ":{"name":"shared","abstract":"

    The Siren singleton. The main point of entry to the Siren library.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC12debugEnabledSbvp":{"name":"debugEnabled","abstract":"

    The debug flag, which is disabled by default.","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC10apiManagerAA10APIManagerVvp":{"name":"apiManager","abstract":"

    The manager that controls the App Store API that is","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC19presentationManagerAA012PresentationC0Vvp":{"name":"presentationManager","abstract":"

    The manager that controls the update alert’s string localization and tint color.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC12rulesManagerAA05RulesC0Vvp":{"name":"rulesManager","abstract":"

    The manager that controls the type of alert that should be displayed","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC23currentInstalledVersionSSSgvp":{"name":"currentInstalledVersion","abstract":"

    The current installed version of your app.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC23didBecomeActiveObserverSo8NSObject_pSgvp":{"name":"didBecomeActiveObserver","abstract":"

    The retained NotificationCenter observer that listens for UIApplication.didBecomeActiveNotification notifications.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC21alertPresentationDate33_7DFB1BC200A6C64FBED860A3A8153B65LL10Foundation0D0VSgvp":{"name":"alertPresentationDate","abstract":"

    The last date that an alert was presented to the user.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC5appID33_7DFB1BC200A6C64FBED860A3A8153B65LLSiSgvp":{"name":"appID","abstract":"

    The App Store’s unique identifier for an app.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC14resultsHandler33_7DFB1BC200A6C64FBED860A3A8153B65LLyAA7ResultsVSg_AA10KnownErrorOSgtcSgvp":{"name":"resultsHandler","abstract":"

    The completion handler used to return the results or errors returned by Siren.

    ","parent_name":"Siren"},"Classes/Siren.html#/c:@M@Siren@objc(cs)Siren(im)init":{"name":"init()","abstract":"

    The initialization method.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC4wail10completionyyAA7ResultsVSg_AA10KnownErrorOSgtcSg_tF":{"name":"wail(completion:)","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC14launchAppStoreyyF":{"name":"launchAppStore()","abstract":"

    Launches the AppStore in two situations when the user clicked the Update button in the UIAlertController modal.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC19performVersionCheckyyF":{"name":"performVersionCheck()","abstract":"

    Initiates the uni-directional version checking flow.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC8validate5modelyAA11LookupModelV_tF":{"name":"validate(model:)","abstract":"

    Validates the parsed and mapped iTunes Lookup Model","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC45determineIfAlertPresentationRulesAreSatisfied25forCurrentAppStoreVersion14andLookupModelySS_AA0oP0VtF":{"name":"determineIfAlertPresentationRulesAreSatisfied(forCurrentAppStoreVersion:andLookupModel:)","abstract":"

    Determines if the update alert can be presented based on the","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC12presentAlert9withRules25forCurrentAppStoreVersion5model13andUpdateTypeyAA0E0V_SSAA11LookupModelVAA0E7ManagerV0mN0OtF":{"name":"presentAlert(withRules:forCurrentAppStoreVersion:model:andUpdateType:)","abstract":"

    Presents the update alert to the end user.","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC12addObserversyyF":{"name":"addObservers()","abstract":"

    Add an observer that listens for app launching/relaunching","parent_name":"Siren"},"Classes/Siren.html":{"name":"Siren","abstract":"

    The Siren Class.

    "},"Classes/SirenViewController.html":{"name":"SirenViewController","abstract":"

    UIViewController Extension for Siren

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Enums.html":{"name":"Enumerations","abstract":"

    The following enumerations are available globally.

    "},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file +{"Structs/DataParser.html#/s:5Siren10DataParserV22isAppStoreVersionNewer09installedG003appfG0SbSSSg_AGtFZ":{"name":"isAppStoreVersionNewer(installedVersion:appStoreVersion:)","abstract":"

    Checks to see if the App Store version of the app is newer than the installed version.

    ","parent_name":"DataParser"},"Structs/DataParser.html#/s:5Siren10DataParserV30isUpdateCompatibleWithDeviceOS3forSbAA11LookupModelV_tFZ":{"name":"isUpdateCompatibleWithDeviceOS(for:)","abstract":"

    Validates that the latest version in the App Store is compatible with the device’s current version of iOS.

    ","parent_name":"DataParser"},"Structs/DataParser.html#/s:5Siren10DataParserV14parseForUpdate19forInstalledVersion011andAppStoreI0AA12RulesManagerV0F4TypeOSSSg_AKtFZ":{"name":"parseForUpdate(forInstalledVersion:andAppStoreVersion:)","abstract":"

    The type of update that is returned from the API in relation to the verison of the app that is installed.

    ","parent_name":"DataParser"},"Structs/DataParser.html#/s:5Siren10DataParserV5split33_35354280B893AD05C0C27D0AD925B30FLL7versionSaySiGSS_tFZ":{"name":"split(version:)","abstract":"

    Splits a version-formatted String into an[Int]`.

    ","parent_name":"DataParser"},"Structs/Rules/UpdatePromptFrequency.html#/s:5Siren5RulesV21UpdatePromptFrequencyO11immediatelyyA2EmF":{"name":"immediately","abstract":"

    Version check performed every time the app is launched.

    ","parent_name":"UpdatePromptFrequency"},"Structs/Rules/UpdatePromptFrequency.html#/s:5Siren5RulesV21UpdatePromptFrequencyO5dailyyA2EmF":{"name":"daily","abstract":"

    Version check performed once a day.

    ","parent_name":"UpdatePromptFrequency"},"Structs/Rules/UpdatePromptFrequency.html#/s:5Siren5RulesV21UpdatePromptFrequencyO6weeklyyA2EmF":{"name":"weekly","abstract":"

    Version check performed once a week.

    ","parent_name":"UpdatePromptFrequency"},"Structs/Rules/AlertType.html#/s:5Siren5RulesV9AlertTypeO5forceyA2EmF":{"name":"force","abstract":"

    Forces the user to update your app (1 button alert).

    ","parent_name":"AlertType"},"Structs/Rules/AlertType.html#/s:5Siren5RulesV9AlertTypeO6optionyA2EmF":{"name":"option","abstract":"

    Presents the user with option to update app now or at next launch (2 button alert).

    ","parent_name":"AlertType"},"Structs/Rules/AlertType.html#/s:5Siren5RulesV9AlertTypeO4skipyA2EmF":{"name":"skip","abstract":"

    Presents the user with option to update the app now, at next launch, or to skip this version all together (3 button alert).

    ","parent_name":"AlertType"},"Structs/Rules/AlertType.html#/s:5Siren5RulesV9AlertTypeO4noneyA2EmF":{"name":"none","abstract":"

    Doesn’t present the alert.","parent_name":"AlertType"},"Structs/Rules.html#/s:5Siren5RulesV9alertTypeAC05AlertD0Ovp":{"name":"alertType","abstract":"

    The type of alert that should be presented.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV9frequencyAC21UpdatePromptFrequencyOvp":{"name":"frequency","abstract":"

    The frequency in which a the user is prompted to update the app","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV15promptFrequency12forAlertTypeA2C012UpdatePromptD0O_AC0fG0Otcfc":{"name":"init(promptFrequency:forAlertType:)","abstract":"

    Initializes the alert presentation rules.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV8annoyingACvpZ":{"name":"annoying","abstract":"

    Performs a version check immediately, but allows the user to skip updating the app until the next time the app becomes active.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV8criticalACvpZ":{"name":"critical","abstract":"

    Performs a version check immediately and forces the user to update the app.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV7defaultACvpZ":{"name":"default","abstract":"

    Performs a version check once a day, but allows the user to skip updating the app until","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV10persistentACvpZ":{"name":"persistent","abstract":"

    Performs a version check daily, but allows the user to skip updating the app until the next time the app becomes active.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV7relaxedACvpZ":{"name":"relaxed","abstract":"

    Performs a version check weekly, but allows the user to skip updating the app until","parent_name":"Rules"},"Structs/Rules/AlertType.html":{"name":"AlertType","abstract":"

    Determines the type of alert to present after a successful version check has been performed.

    ","parent_name":"Rules"},"Structs/Rules/UpdatePromptFrequency.html":{"name":"UpdatePromptFrequency","abstract":"

    Determines the frequency in which the user is prompted to update the app","parent_name":"Rules"},"Structs/Results.html#/s:5Siren7ResultsV11alertActionAA05AlertD0Ovp":{"name":"alertAction","abstract":"

    The UIAlertAction the user chose upon being presented with the update alert.","parent_name":"Results"},"Structs/Results.html#/s:5Siren7ResultsV12localizationAA12LocalizationVvp":{"name":"localization","abstract":"

    The Siren-supported locale that was used for the string in the update alert.

    ","parent_name":"Results"},"Structs/Results.html#/s:5Siren7ResultsV11lookupModelAA06LookupD0Vvp":{"name":"lookupModel","abstract":"

    The Swift-mapped API model, if a successful version check was performed.

    ","parent_name":"Results"},"Structs/Results.html#/s:5Siren7ResultsV10updateTypeAA12RulesManagerV06UpdateD0Ovp":{"name":"updateType","abstract":"

    The type of update that was returned for the API.

    ","parent_name":"Results"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO5appIDyA2HmF":{"name":"appID","abstract":"

    The appID JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO25currentVersionReleaseDateyA2HmF":{"name":"currentVersionReleaseDate","abstract":"

    The current version release date JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO16minimumOSVersionyA2HmF":{"name":"minimumOSVersion","abstract":"

    The minimum device iOS version compatibility JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO12releaseNotesyA2HmF":{"name":"releaseNotes","abstract":"

    The release notes JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO7versionyA2HmF":{"name":"version","abstract":"

    The current App Store version JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html":{"name":"CodingKeys","abstract":"

    Codable Coding Keys for the Results array in the iTunes Lookup API JSON response.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV5appIDSivp":{"name":"appID","abstract":"

    The app’s App ID.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV25currentVersionReleaseDateSSvp":{"name":"currentVersionReleaseDate","abstract":"

    The release date for the latest verison of the app.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV16minimumOSVersionSSvp":{"name":"minimumOSVersion","abstract":"

    The minimum verison of iOS that the current verison of the app requires.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV12releaseNotesSSSgvp":{"name":"releaseNotes","abstract":"

    The releases notes from the latest version of the app.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV7versionSSvp":{"name":"version","abstract":"

    The latest version of the app.

    ","parent_name":"Results"},"Structs/LookupModel/CodingKeys.html#/s:5Siren11LookupModelV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO7resultsyA2FmF":{"name":"results","abstract":"

    The results JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/CodingKeys.html":{"name":"CodingKeys","abstract":"

    Codable Coding Keys for the Top-Level iTunes Lookup API JSON response.

    ","parent_name":"LookupModel"},"Structs/LookupModel.html#/s:5Siren11LookupModelV7resultsSayAC7ResultsVGvp":{"name":"results","abstract":"

    The array of results objects from the iTunes Lookup API.

    ","parent_name":"LookupModel"},"Structs/LookupModel/Results.html":{"name":"Results","abstract":"

    The Results object from the the iTunes Lookup API.

    ","parent_name":"LookupModel"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6arabicyA2EmF":{"name":"arabic","abstract":"

    Arabic Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO8armenianyA2EmF":{"name":"armenian","abstract":"

    Armenian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6basqueyA2EmF":{"name":"basque","abstract":"

    Basque Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO17chineseSimplifiedyA2EmF":{"name":"chineseSimplified","abstract":"

    Simplified Chinese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO18chineseTraditionalyA2EmF":{"name":"chineseTraditional","abstract":"

    Traditional Chinese Localization Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO8croatianyA2EmF":{"name":"croatian","abstract":"

    Croatian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO5czechyA2EmF":{"name":"czech","abstract":"

    Czech Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6danishyA2EmF":{"name":"danish","abstract":"

    Danish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO5dutchyA2EmF":{"name":"dutch","abstract":"

    Dutch Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7englishyA2EmF":{"name":"english","abstract":"

    English Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO8estonianyA2EmF":{"name":"estonian","abstract":"

    Estonian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7finnishyA2EmF":{"name":"finnish","abstract":"

    Finnish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6frenchyA2EmF":{"name":"french","abstract":"

    French Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6germanyA2EmF":{"name":"german","abstract":"

    German Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO5greekyA2EmF":{"name":"greek","abstract":"

    Greek Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6hebrewyA2EmF":{"name":"hebrew","abstract":"

    Hebrew Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO9hungarianyA2EmF":{"name":"hungarian","abstract":"

    Hungarian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO10indonesianyA2EmF":{"name":"indonesian","abstract":"

    Indonesian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7italianyA2EmF":{"name":"italian","abstract":"

    Italian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO8japaneseyA2EmF":{"name":"japanese","abstract":"

    Japanese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6koreanyA2EmF":{"name":"korean","abstract":"

    Korean Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7latvianyA2EmF":{"name":"latvian","abstract":"

    Latvian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO10lithuanianyA2EmF":{"name":"lithuanian","abstract":"

    Lithuanian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO5malayyA2EmF":{"name":"malay","abstract":"

    Malay Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO9norwegianyA2EmF":{"name":"norwegian","abstract":"

    Norwegian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7persianyA2EmF":{"name":"persian","abstract":"

    Persian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO18persianAfghanistanyA2EmF":{"name":"persianAfghanistan","abstract":"

    Persian (Afghanistan) Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO11persianIranyA2EmF":{"name":"persianIran","abstract":"

    Persian (Iran) Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6polishyA2EmF":{"name":"polish","abstract":"

    Polish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO16portugueseBrazilyA2EmF":{"name":"portugueseBrazil","abstract":"

    Brazilian Portuguese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO18portuguesePortugalyA2EmF":{"name":"portuguesePortugal","abstract":"

    Portugal’s Portuguese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7russianyA2EmF":{"name":"russian","abstract":"

    Russian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO15serbianCyrillicyA2EmF":{"name":"serbianCyrillic","abstract":"

    Serbian (Cyrillic) Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO12serbianLatinyA2EmF":{"name":"serbianLatin","abstract":"

    Serbian (Latin) Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO9slovenianyA2EmF":{"name":"slovenian","abstract":"

    Slovenian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7spanishyA2EmF":{"name":"spanish","abstract":"

    Spanish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7swedishyA2EmF":{"name":"swedish","abstract":"

    Swedish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO4thaiyA2EmF":{"name":"thai","abstract":"

    Thai Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7turkishyA2EmF":{"name":"turkish","abstract":"

    Turkish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO4urduyA2EmF":{"name":"urdu","abstract":"

    Urdu Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO9ukrainianyA2EmF":{"name":"ukrainian","abstract":"

    Ukranian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO10vietnameseyA2EmF":{"name":"vietnamese","abstract":"

    Vietnamese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html":{"name":"Language","abstract":"

    Determines the available languages in which the update message and alert button titles should appear.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV7appName33_2FDBEF65899237DA36B11FA5846AD0EALLSSvp":{"name":"appName","abstract":"

    The name of the app as defined by the Info.plist.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV13forceLanguage33_2FDBEF65899237DA36B11FA5846AD0EALLAC0D0OSgvp":{"name":"forceLanguage","abstract":"

    Overrides the default localization of a user’s device when presenting the update message and button titles in the alert.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV7appName016andForceLanguageB0ACSSSg_AC0G0OSgtcfc":{"name":"init(appName:andForceLanguageLocalization:)","abstract":"

    Initializes

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV12alertMessage25forCurrentAppStoreVersionS2S_tF":{"name":"alertMessage(forCurrentAppStoreVersion:)","abstract":"

    The localized string for the UIAlertController‘s message field. .

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV10alertTitleSSyF":{"name":"alertTitle()","abstract":"

    The localized string for the UIAlertController‘s title field. .

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV19nextTimeButtonTitleSSyF":{"name":"nextTimeButtonTitle()","abstract":"

    The localized string for the Next time UIAlertAction.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV15skipButtonTitleSSyF":{"name":"skipButtonTitle()","abstract":"

    The localized string for the Skip this version UIAlertAction.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV17updateButtonTitleSSyF":{"name":"updateButtonTitle()","abstract":"

    The localized string for the Update UIAlertAction.

    ","parent_name":"Localization"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV12alertMessageSSvpZ":{"name":"alertMessage","abstract":"

    The text that conveys the message that there is an app update available

    ","parent_name":"AlertConstants"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV10alertTitleSSvpZ":{"name":"alertTitle","abstract":"

    The alert title which defaults to Update Available.

    ","parent_name":"AlertConstants"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV19nextTimeButtonTitleSSvpZ":{"name":"nextTimeButtonTitle","abstract":"

    The button text that conveys the message that the user should be prompted to update next time the app launches.

    ","parent_name":"AlertConstants"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV15skipButtonTitleSSvpZ":{"name":"skipButtonTitle","abstract":"

    The text that conveys the message that the the user wants to skip this verison update.

    ","parent_name":"AlertConstants"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV17updateButtonTitleSSvpZ":{"name":"updateButtonTitle","abstract":"

    The button text that conveys the message that the user would like to update the app right away.

    ","parent_name":"AlertConstants"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO5majoryA2EmF":{"name":"major","abstract":"

    Major release available: A.b.c.d

    ","parent_name":"UpdateType"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO5minoryA2EmF":{"name":"minor","abstract":"

    Minor release available: a.B.c.d

    ","parent_name":"UpdateType"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO5patchyA2EmF":{"name":"patch","abstract":"

    Patch release available: a.b.C.d

    ","parent_name":"UpdateType"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO8revisionyA2EmF":{"name":"revision","abstract":"

    Revision release available: a.b.c.D

    ","parent_name":"UpdateType"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO7unknownyA2EmF":{"name":"unknown","abstract":"

    No information available about the update.

    ","parent_name":"UpdateType"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV15releasedForDaysSivp":{"name":"releasedForDays","abstract":"

    The alert will only show up if the current version has already been released for X days.

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV011majorUpdateB0AA0B0Vvp":{"name":"majorUpdateRules","abstract":"

    The Rules that should be used when the App Store version of the app signifies that it is a major version update (A.b.c.d).

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV011minorUpdateB0AA0B0Vvp":{"name":"minorUpdateRules","abstract":"

    The Rules that should be used when the App Store version of the app signifies that it is a minor version update (a.B.c.d).

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV011patchUpdateB0AA0B0Vvp":{"name":"patchUpdateRules","abstract":"

    The Rules that should be used when the App Store version of the app signifies that it is a patch version update (a.b.C.d).

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV014revisionUpdateB0AA0B0Vvp":{"name":"revisionUpdateRules","abstract":"

    The Rules that should be used when the App Store version of the app signifies that it is a revision version update (a.b.c.D).

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV011majorUpdateB005minoreB005patcheB008revisioneB050showAlertAfterCurrentVersionHasBeenReleasedForDaysAcA0B0V_A3JSitcfc":{"name":"init(majorUpdateRules:minorUpdateRules:patchUpdateRules:revisionUpdateRules:showAlertAfterCurrentVersionHasBeenReleasedForDays:)","abstract":"

    Initializer that sets update-specific Rules for all updates (e.g., major, minor, patch, revision).","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV06globalB050showAlertAfterCurrentVersionHasBeenReleasedForDaysAcA0B0V_Sitcfc":{"name":"init(globalRules:showAlertAfterCurrentVersionHasBeenReleasedForDays:)","abstract":"

    Initializer that sets the same update Rules for all types of updates (e.g., major, minor, patch, revision).","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV04loadB13ForUpdateTypeyAA0B0VAC0fG0OF":{"name":"loadRulesForUpdateType(_:)","abstract":"

    Returns the appropriate update rules based on the type of version that is returned from the API.

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV7defaultACvpZ":{"name":"default","abstract":"

    The default RulesManager.

    ","parent_name":"RulesManager"},"Structs/RulesManager/UpdateType.html":{"name":"UpdateType","abstract":"

    Informs Siren of the type of update that is available so that","parent_name":"RulesManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV17CompletionHandlera":{"name":"CompletionHandler","abstract":"

    Return results or errors obtained from performing a version check with Siren.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV12localizationAA12LocalizationVvp":{"name":"localization","abstract":"

    The localization data structure that will be used to construct localized strings for the update alert.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV9tintColorSo7UIColorCSgvp":{"name":"tintColor","abstract":"

    The tint color of the UIAlertController buttons.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV12alertMessageSSvp":{"name":"alertMessage","abstract":"

    The descriptive update message of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV10alertTitleSSvp":{"name":"alertTitle","abstract":"

    The main message of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV19nextTimeButtonTitleSSvp":{"name":"nextTimeButtonTitle","abstract":"

    The Next time button text of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV15skipButtonTitleSSvp":{"name":"skipButtonTitle","abstract":"

    The Skip this version button text of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV17updateButtonTitleSSvp":{"name":"updateButtonTitle","abstract":"

    The Update button text of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV15alertControllerSo07UIAlertE0CSgvp":{"name":"alertController","abstract":"

    The instance of the UIAlertController used to present the update alert.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV13updaterWindow33_CEF2109017F934DAB33AED8753BA096CLLSo8UIWindowCvp":{"name":"updaterWindow","abstract":"

    The UIWindow instance that presents the SirenViewController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV14alertTintColor7appName0D5Title0D7Message012updateButtonI008nextTimelI004skiplI025forceLanguageLocalizationACSo7UIColorCSg_SSSgS5SAA0R0V0Q0OSgtcfc":{"name":"init(alertTintColor:appName:alertTitle:alertMessage:updateButtonTitle:nextTimeButtonTitle:skipButtonTitle:forceLanguageLocalization:)","abstract":"

    PresentationManager‘s public initializer.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV7defaultACvpZ":{"name":"default","abstract":"

    The default PresentationManager.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV12presentAlert9withRules25forCurrentAppStoreVersion10completionyAA0G0V_SSyAA0E6ActionOcSgtF":{"name":"presentAlert(withRules:forCurrentAppStoreVersion:completion:)","abstract":"

    Constructs the localized update alert UIAlertController object.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV17updateAlertAction33_CEF2109017F934DAB33AED8753BA096CLL10completionSo07UIAlertF0CyAA0eF0OcSg_tF":{"name":"updateAlertAction(completion:)","abstract":"

    The UIAlertAction that is executed when the Update option is selected.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV19nextTimeAlertAction33_CEF2109017F934DAB33AED8753BA096CLL10completionSo07UIAlertG0CyAA0fG0OcSg_tF":{"name":"nextTimeAlertAction(completion:)","abstract":"

    The UIAlertAction that is executed when the Next time option is selected.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV15skipAlertAction33_CEF2109017F934DAB33AED8753BA096CLL25forCurrentAppStoreVersion10completionSo07UIAlertF0CSS_yAA0eF0OcSgtF":{"name":"skipAlertAction(forCurrentAppStoreVersion:completion:)","abstract":"

    The UIAlertAction that is executed when the Skip this version option is selected.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV22cleanUpAlertController33_CEF2109017F934DAB33AED8753BA096CLLyyF":{"name":"cleanUpAlertController()","abstract":"

    Removes the alertController from memory.

    ","parent_name":"PresentationManager"},"Structs/APIManager/Constants.html#/s:5Siren10APIManagerV9Constants33_8071139324B24E2065F4037045A8D960LLV8bundleIDSSvpZ":{"name":"bundleID","abstract":"

    Constant for the bundleId parameter in the iTunes Lookup API request.

    ","parent_name":"Constants"},"Structs/APIManager/Constants.html#/s:5Siren10APIManagerV9Constants33_8071139324B24E2065F4037045A8D960LLV7countrySSvpZ":{"name":"country","abstract":"

    Constant for the country parameter in the iTunes Lookup API request.

    ","parent_name":"Constants"},"Structs/APIManager/Constants.html":{"name":"Constants","abstract":"

    Constants used in the APIManager.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV17CompletionHandlera":{"name":"CompletionHandler","abstract":"

    Return results or errors obtained from performing a version check with Siren.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV11countryCodeSSSgvp":{"name":"countryCode","abstract":"

    The region or country of an App Store in which the app is available.","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV11countryCodeACSSSg_tcfc":{"name":"init(countryCode:)","abstract":"

    Initializes APIManager to the region or country of an App Store in which the app is available.","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV7defaultACvpZ":{"name":"default","abstract":"

    The default APIManager.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV26performVersionCheckRequest10completionyyAA11LookupModelVSg_AA10KnownErrorOSgtcSg_tF":{"name":"performVersionCheckRequest(completion:)","abstract":"

    Creates and performs a URLRequest against the iTunes Lookup API.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV26processVersionCheckResults33_8071139324B24E2065F4037045A8D960LL8withData8response5error10completiony10Foundation0M0VSg_So13NSURLResponseCSgs5Error_pSgyAA11LookupModelVSg_AA05KnownS0OSgtcSgtF":{"name":"processVersionCheckResults(withData:response:error:completion:)","abstract":"

    Parses and maps the the results from the iTunes Lookup API request.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV13makeITunesURL33_8071139324B24E2065F4037045A8D960LL10Foundation0E0VyKF":{"name":"makeITunesURL()","abstract":"

    Creates the URL that points to the iTunes Lookup API.

    ","parent_name":"APIManager"},"Structs/APIManager.html":{"name":"APIManager","abstract":"

    APIManager for Siren

    "},"Structs/PresentationManager.html":{"name":"PresentationManager","abstract":"

    PresentationManager for Siren

    "},"Structs/RulesManager.html":{"name":"RulesManager","abstract":"

    RulesManager for Siren

    "},"Structs/AlertConstants.html":{"name":"AlertConstants","abstract":"

    The default constants used for the update alert’s messaging.

    "},"Structs/Localization.html":{"name":"Localization","abstract":"

    Localization information and strings for Siren.

    "},"Structs/LookupModel.html":{"name":"LookupModel","abstract":"

    Model representing a selection of results from the iTunes Lookup API.

    "},"Structs/Results.html":{"name":"Results","abstract":"

    The relevant metadata returned from Siren upon completing a successful version check.

    "},"Structs/Rules.html":{"name":"Rules","abstract":"

    Alert Presentation Rules for Siren.

    "},"Structs/DataParser.html":{"name":"DataParser","abstract":"

    Version parsing functions for Siren.

    "},"Extensions/UserDefaults/SirenKeys.html#/s:So14NSUserDefaultsC5SirenE0C4Keys33_0884631E60E090AA276701A736B793BBLLO37PerformVersionCheckOnSubsequentLaunchyA2FmF":{"name":"PerformVersionCheckOnSubsequentLaunch","abstract":"

    Key that notifies Siren to perform a version check and present","parent_name":"SirenKeys"},"Extensions/UserDefaults/SirenKeys.html#/s:So14NSUserDefaultsC5SirenE0C4Keys33_0884631E60E090AA276701A736B793BBLLO22StoredVersionCheckDateyA2FmF":{"name":"StoredVersionCheckDate","abstract":"

    Key that stores the timestamp of the last version check.

    ","parent_name":"SirenKeys"},"Extensions/UserDefaults/SirenKeys.html#/s:So14NSUserDefaultsC5SirenE0C4Keys33_0884631E60E090AA276701A736B793BBLLO20StoredSkippedVersionyA2FmF":{"name":"StoredSkippedVersion","abstract":"

    Key that stores the version that a user decided to skip.

    ","parent_name":"SirenKeys"},"Extensions/UserDefaults/SirenKeys.html":{"name":"SirenKeys","abstract":"

    Siren-specific UserDefaults Keys

    ","parent_name":"UserDefaults"},"Extensions/UserDefaults.html#/s:So14NSUserDefaultsC5SirenE43shouldPerformVersionCheckOnSubsequentLaunchSbvpZ":{"name":"shouldPerformVersionCheckOnSubsequentLaunch","abstract":"

    Sets and Gets a UserDefault around performing a version check on a subsequent launch.

    ","parent_name":"UserDefaults"},"Extensions/UserDefaults.html#/s:So14NSUserDefaultsC5SirenE20storedSkippedVersionSSSgvpZ":{"name":"storedSkippedVersion","abstract":"

    Sets and Gets a UserDefault around storing a version that the user wants to skip updating.

    ","parent_name":"UserDefaults"},"Extensions/UserDefaults.html#/s:So14NSUserDefaultsC5SirenE21alertPresentationDate10Foundation0F0VSgvpZ":{"name":"alertPresentationDate","abstract":"

    Sets and Gets a UserDefault around the last time the user was presented a version update alert.

    ","parent_name":"UserDefaults"},"Extensions/UIAlertController.html#/s:So17UIAlertControllerC5SirenE4show6windowySo8UIWindowC_tF":{"name":"show(window:)","abstract":"

    Presents Siren’s UIAlertController in a new UIWindow.

    ","parent_name":"UIAlertController"},"Extensions/UIAlertController.html#/s:So17UIAlertControllerC5SirenE4hide6windowySo8UIWindowC_tF":{"name":"hide(window:)","abstract":"

    Hides Siren’s UIAlertController within a given window.

    ","parent_name":"UIAlertController"},"Extensions/Date.html#/s:10Foundation4DateV5SirenE4days5sinceSiAC_tFZ":{"name":"days(since:)","abstract":"

    The amount of days passed from a specific source date.

    ","parent_name":"Date"},"Extensions/Date.html#/s:10Foundation4DateV5SirenE4days5sinceSiSgSS_tFZ":{"name":"days(since:)","abstract":"

    The amount of days passed from a specific source date string.

    ","parent_name":"Date"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV15bundleExtensionSSvpZ":{"name":"bundleExtension","abstract":"

    Constant for the .bundle file extension.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV11displayNameSSvpZ":{"name":"displayName","abstract":"

    Constant for CFBundleDisplayName.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV19englishLocalizationSSvpZ":{"name":"englishLocalization","abstract":"

    Constant for the default US English localization.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV16projectExtensionSSvpZ":{"name":"projectExtension","abstract":"

    Constant for the project file extension.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV18shortVersionStringSSvpZ":{"name":"shortVersionString","abstract":"

    Constant for CFBundleShortVersionString.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV5tableSSvpZ":{"name":"table","abstract":"

    Constant for the localization table.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html":{"name":"Constants","abstract":"

    Constants used in the Bundle extension.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE7versionSSSgyFZ":{"name":"version()","abstract":"

    Fetches the current verison of the app.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE15localizedString6forKey20andForceLocalizationS2S_AC0I0V8LanguageOSgtFZ":{"name":"localizedString(forKey:andForceLocalization:)","abstract":"

    Returns the localized string for a given default string.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE19bestMatchingAppNameSSyFZ":{"name":"bestMatchingAppName()","abstract":"

    The appropriate name for the app to be displayed in the update alert.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE15sirenBundlePath33_9C775CF4CEC7A5F21E625F58C71BDF22LLSSSgyFZ":{"name":"sirenBundlePath()","abstract":"

    The path to Siren’s localization Bundle.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE21sirenForcedBundlePath33_9C775CF4CEC7A5F21E625F58C71BDF22LL25forceLanguageLocalizationSSSgAC0R0V0Q0O_tFZ":{"name":"sirenForcedBundlePath(forceLanguageLocalization:)","abstract":"

    The path for a particular language localizationin Siren’s localization Bundle.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE14deviceLanguage33_9C775CF4CEC7A5F21E625F58C71BDF22LLAC12LocalizationV0D0OSgyFZ":{"name":"deviceLanguage()","abstract":"

    The user’s preferred language based on their device’s localization.

    ","parent_name":"Bundle"},"Extensions/Bundle.html":{"name":"Bundle"},"Extensions/Date.html":{"name":"Date"},"Extensions/UIAlertController.html":{"name":"UIAlertController"},"Extensions/UserDefaults.html":{"name":"UserDefaults"},"Enums/KnownError.html#/s:5Siren10KnownErrorO20appStoreAppIDFailureyA2CmF":{"name":"appStoreAppIDFailure","abstract":"

    Error retrieving trackId as the JSON does not contain a ‘trackId’ key.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO33appStoreDataRetrievalEmptyResultsyA2CmF":{"name":"appStoreDataRetrievalEmptyResults","abstract":"

    Error retrieving App Store data as JSON results were empty. Is your app available in the US? If not, change the countryCode variable to fix this error.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO28appStoreDataRetrievalFailureyACs0C0_pSg_tcACmF":{"name":"appStoreDataRetrievalFailure(underlyingError:)","abstract":"

    Error retrieving App Store data as an error was returned.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO26appStoreJSONParsingFailureyACs0C0_p_tcACmF":{"name":"appStoreJSONParsingFailure(underlyingError:)","abstract":"

    Error parsing App Store JSON data.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO28appStoreOSVersionUnsupportedyA2CmF":{"name":"appStoreOSVersionUnsupported","abstract":"

    The version of iOS on the device is lower than that of the one required by the app verison update.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO27appStoreVersionArrayFailureyA2CmF":{"name":"appStoreVersionArrayFailure","abstract":"

    Error retrieving App Store verson number as the JSON does not contain a version key.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO25currentVersionReleaseDateyA2CmF":{"name":"currentVersionReleaseDate","abstract":"

    The currentVersionReleaseDate key is missing in the JSON payload. Please leave an issue on https://github.com/ArtSabintsev/Siren with as many details as possible.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO12malformedURLyA2CmF":{"name":"malformedURL","abstract":"

    One of the iTunes URLs used in Siren is malformed. Please leave an issue on https://github.com/ArtSabintsev/Siren with as many details as possible.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO15missingBundleIDyA2CmF":{"name":"missingBundleID","abstract":"

    Please make sure that you have set a Bundle Identifier in your project.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO17noUpdateAvailableyA2CmF":{"name":"noUpdateAvailable","abstract":"

    No new update available.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO16recentlyPromptedyA2CmF":{"name":"recentlyPrompted","abstract":"

    Siren will not present an update alert if it performed one too recently. If you would like to present an alert every time Siren is called, please consider setting the UpdatePromptFrequency.immediately rule in RulesManager

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO15releasedTooSoonyACSi_SitcACmF":{"name":"releasedTooSoon(daysSinceRelease:releasedForDays:)","abstract":"

    The app has been released for X days, but Siren cannot prompt the user until Y (where Y > X) days have passed.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO17skipVersionUpdateyACSS_SStcACmF":{"name":"skipVersionUpdate(installedVersion:appStoreVersion:)","abstract":"

    The user has opted to skip updating their current version of the app to the current App Store version.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO20localizedDescriptionSSvp":{"name":"localizedDescription","abstract":"

    The localized description for each error handled by Siren.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO05sirenC033_B3C911EAD28C83CC211C07566B0F499ALLSSvpZ":{"name":"sirenError","abstract":"

    An easily identifiable prefix for all errors thrown by Siren.

    ","parent_name":"KnownError"},"Enums/AlertAction.html#/s:5Siren11AlertActionO8appStoreyA2CmF":{"name":"appStore","abstract":"

    The user clicked on the Update option, which took them to the app’s App Store page.

    ","parent_name":"AlertAction"},"Enums/AlertAction.html#/s:5Siren11AlertActionO8nextTimeyA2CmF":{"name":"nextTime","abstract":"

    The user clicked on the Next Time option, which dismissed the alert.

    ","parent_name":"AlertAction"},"Enums/AlertAction.html#/s:5Siren11AlertActionO4skipyA2CmF":{"name":"skip","abstract":"

    The user clicked on the Skip this version option, which dismissed the alert.

    ","parent_name":"AlertAction"},"Enums/AlertAction.html#/s:5Siren11AlertActionO7unknownyA2CmF":{"name":"unknown","abstract":"

    (Default) The user never chose an option. This is returned when an error is thrown by Siren.

    ","parent_name":"AlertAction"},"Enums/AlertAction.html":{"name":"AlertAction","abstract":"

    The UIAlertController button that was pressed upon being presented an update alert.

    "},"Enums/KnownError.html":{"name":"KnownError","abstract":"

    Enumerates all potentials errors that Siren can handle.

    "},"Classes/SirenViewController.html#/c:@M@Siren@objc(cs)SirenViewController(py)preferredStatusBarStyle":{"name":"preferredStatusBarStyle","abstract":"

    UIStatusBarStyle override.

    ","parent_name":"SirenViewController"},"Classes/Siren.html#/s:5SirenAAC14ResultsHandlera":{"name":"ResultsHandler","abstract":"

    Return results or errors obtained from performing a version check with Siren.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC6sharedABvpZ":{"name":"shared","abstract":"

    The Siren singleton. The main point of entry to the Siren library.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC10apiManagerAA10APIManagerVvp":{"name":"apiManager","abstract":"

    The manager that controls the App Store API that is","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC19presentationManagerAA012PresentationC0Vvp":{"name":"presentationManager","abstract":"

    The manager that controls the update alert’s string localization and tint color.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC12rulesManagerAA05RulesC0Vvp":{"name":"rulesManager","abstract":"

    The manager that controls the type of alert that should be displayed","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC23currentInstalledVersionSSSgvp":{"name":"currentInstalledVersion","abstract":"

    The current installed version of your app.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC23didBecomeActiveObserverSo8NSObject_pSgvp":{"name":"didBecomeActiveObserver","abstract":"

    The retained NotificationCenter observer that listens for UIApplication.didBecomeActiveNotification notifications.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC26didEnterBackgroundObserverSo8NSObject_pSgvp":{"name":"didEnterBackgroundObserver","abstract":"

    The retained NotificationCenter observer that listens for UIApplication.didEnterBackgroundNotification notifications.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC21alertPresentationDate33_7DFB1BC200A6C64FBED860A3A8153B65LL10Foundation0D0VSgvp":{"name":"alertPresentationDate","abstract":"

    The last date that an alert was presented to the user.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC5appID33_7DFB1BC200A6C64FBED860A3A8153B65LLSiSgvp":{"name":"appID","abstract":"

    The App Store’s unique identifier for an app.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC14resultsHandler33_7DFB1BC200A6C64FBED860A3A8153B65LLyAA7ResultsVSg_AA10KnownErrorOSgtcSgvp":{"name":"resultsHandler","abstract":"

    The completion handler used to return the results or errors returned by Siren.

    ","parent_name":"Siren"},"Classes/Siren.html#/c:@M@Siren@objc(cs)Siren(im)init":{"name":"init()","abstract":"

    The initialization method.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC4wail10completionyyAA7ResultsVSg_AA10KnownErrorOSgtcSg_tF":{"name":"wail(completion:)","abstract":"

    This method executes the Siren version checking and alert presentation flow.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC14launchAppStoreyyF":{"name":"launchAppStore()","abstract":"

    Launches the AppStore in two situations when the user clicked the Update button in the UIAlertController modal.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC19performVersionCheck33_7DFB1BC200A6C64FBED860A3A8153B65LLyyF":{"name":"performVersionCheck()","abstract":"

    Initiates the unidirectional version checking flow.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC8validate33_7DFB1BC200A6C64FBED860A3A8153B65LL5modelyAA11LookupModelV_tF":{"name":"validate(model:)","abstract":"

    Validates the parsed and mapped iTunes Lookup Model","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC45determineIfAlertPresentationRulesAreSatisfied33_7DFB1BC200A6C64FBED860A3A8153B65LL25forCurrentAppStoreVersion14andLookupModelySS_AA0wX0VtF":{"name":"determineIfAlertPresentationRulesAreSatisfied(forCurrentAppStoreVersion:andLookupModel:)","abstract":"

    Determines if the update alert can be presented based on the","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC12presentAlert33_7DFB1BC200A6C64FBED860A3A8153B65LL9withRules25forCurrentAppStoreVersion5model13andUpdateTypeyAA0M0V_SSAA11LookupModelVAA0M7ManagerV0uV0OtF":{"name":"presentAlert(withRules:forCurrentAppStoreVersion:model:andUpdateType:)","abstract":"

    Presents the update alert to the end user.","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC12addObservers33_7DFB1BC200A6C64FBED860A3A8153B65LLyyF":{"name":"addObservers()","abstract":"

    Add app state observers

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC21addForegroundObserver33_7DFB1BC200A6C64FBED860A3A8153B65LLyyF":{"name":"addForegroundObserver()","abstract":"

    Adds an observer that listens for app launching/relaunching.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC21addBackgroundObserver33_7DFB1BC200A6C64FBED860A3A8153B65LLyyF":{"name":"addBackgroundObserver()","abstract":"

    Adds an observer that listens for when the app is sent to the background.

    ","parent_name":"Siren"},"Classes/Siren.html":{"name":"Siren","abstract":"

    The Siren Class.

    "},"Classes/SirenViewController.html":{"name":"SirenViewController","abstract":"

    UIViewController Extension for Siren

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Enums.html":{"name":"Enumerations","abstract":"

    The following enumerations are available globally.

    "},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file diff --git a/docs/docsets/Siren.docset/Contents/Resources/docSet.dsidx b/docs/docsets/Siren.docset/Contents/Resources/docSet.dsidx index 0faea670..d5c82621 100644 Binary files a/docs/docsets/Siren.docset/Contents/Resources/docSet.dsidx and b/docs/docsets/Siren.docset/Contents/Resources/docSet.dsidx differ diff --git a/docs/docsets/Siren.tgz b/docs/docsets/Siren.tgz index 03d21a01..8d9cf778 100644 Binary files a/docs/docsets/Siren.tgz and b/docs/docsets/Siren.tgz differ diff --git a/docs/index.html b/docs/index.html index 8a84d714..dc63de83 100644 --- a/docs/index.html +++ b/docs/index.html @@ -133,7 +133,7 @@

    Siren 🚨

    Notify users when a new version of your app is available and prompt them to upgrade.

    -

    Travis CI Status Swift Support Documentation CocoaPods Carthage Compatible SwiftPM Compatible

    +

    Travis CI Status Documentation Swift Support CocoaPods Carthage Compatible SwiftPM Compatible


    Table of Contents

    @@ -143,7 +143,7 @@

    Table of Contents

  • Features
  • Screenshots
  • Installation Instructions
  • -
  • Implementation Examples
  • +
  • Implementation Examples
  • Localization
  • Device Compatibility
  • Testing Siren
  • @@ -151,7 +151,7 @@

    Table of Contents

  • Phased Releases
  • Words of Caution
  • Ports
  • -
  • Shout-Out and Gratitude
  • +
  • Special Thanks
  • Attribution
  • @@ -160,32 +160,30 @@

    About

    Siren checks a user’s currently installed version of your iOS app against the version that is currently available in the App Store.

    -

    If a new version is available, an alert can be presented to the user informing them of the newer version, and giving them the option to update the application. Alternatively, Siren can notify your app programmatically, enabling you to inform the user through alternative means, such as a custom interface.

    +

    If a new version is available, a language localized alert can be presented to the user informing them of the newer version, and giving them the option to update the application. Alternatively, Siren can notify your app through alternative means, such as a custom user interface.

    -
      -
    • Siren is built to work with the Semantic Versioning system. +

      Siren is built to work with the Semantic Versioning system.

      • Canonical Semantic Versioning uses a three number versioning system (e.g., 1.0.0)
      • Siren also supports two-number versioning (e.g., 1.0) and four-number versioning (e.g., 1.0.0.0)
      • -

    Features

    Current Features

    Future Features

    • [ ] Present prompt only on WiFi if app is over the OTA limit.
    • -
    • [ ] Support for Third-/Homegrown Update Servers (not including TestFlight).
    • +
    • [ ] Support for Third-Party/Homegrown Update Servers (not including TestFlight).
    • [ ] Increase code coverage with more unit tests and UI tests.

    Screenshots

    @@ -252,7 +250,7 @@

    Swift Package Manager

    Implementation Examples

    -

    Implementing Siren is as easy as adding two line of code to your app.

    +

    Implementing Siren is as easy as adding two lines of code to your app:

    import Siren // Line 1
     import UIKit
     
    @@ -260,11 +258,10 @@ 

    Implementation Examples

    final class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - func application(_ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { window?.makeKeyAndVisible() - Siren.shared.wail() // Line 2 + Siren.shared.wail() // Line 2 return true } @@ -280,6 +277,8 @@

    Localization

    Arabic, Armenian, Basque, Chinese (Simplified and Traditional), Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hebrew, Hungarian, Indonesian, Italian, Japanese, Korean, Latvian, Lithuanian, Malay, Norwegian (Bokmål), Persian (Afghanistan, Iran, Persian), Polish, Portuguese (Brazil and Portugal), Russian, Serbian (Cyrillic and Latin), Slovenian, Spanish, Swedish, Thai, Turkish, Ukrainian, Urdu, Vietnamese

    +

    If your user’s device is set to one of the supported locales, an update message will appear in that language. If a locale is not supported, than the message will appear in English.

    +

    You may want the update dialog to always appear in a certain language, ignoring the user’s device-specific setting. You can enable it like so:

    // In this example, we force the `russian` language.
     Siren.shared.presentationManager = PresentationManager(forceLanguageLocalization: .russian)
    @@ -330,13 +329,13 @@ 

    Ports

  • The Siren Swift library inspired the React Native library.
  • -

    Shout-Out and Gratitude

    +

    Special Thanks

    A massive shout-out and thank you goes to the following folks:

    • Aaron Brager for motivating me and assisting me in building the initial proof-of-concept of Siren (based on Harpy) back in 2015. Without him, Siren may never have been built.
    • -
    • All of Harpy’s Consitrbutors for helping building the feature set from 2012-2015 that was used as the basis for the first version of Siren.
    • +
    • All of Harpy’s Contributors for helping building the feature set from 2012-2015 that was used as the basis for the first version of Siren.
    • All of Siren’s Contributors for helping make Siren as powerful and bug-free as it currently is today.

    Created and maintained by

    @@ -346,7 +345,7 @@

    Created and maintained by

    diff --git a/docs/search.json b/docs/search.json index 140126da..1889d7b8 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -{"Structs/DataParser.html#/s:5Siren10DataParserV22isAppStoreVersionNewer09installedG003appfG0SbSSSg_AGtFZ":{"name":"isAppStoreVersionNewer(installedVersion:appStoreVersion:)","abstract":"

    Checks to see if the App Store version of the app is newer than the installed version.

    ","parent_name":"DataParser"},"Structs/DataParser.html#/s:5Siren10DataParserV30isUpdateCompatibleWithDeviceOS3forSbAA11LookupModelV_tFZ":{"name":"isUpdateCompatibleWithDeviceOS(for:)","abstract":"

    Validates that the latest version in the App Store is compatible with the device’s current version of iOS.

    ","parent_name":"DataParser"},"Structs/DataParser.html#/s:5Siren10DataParserV14parseForUpdate19forInstalledVersion011andAppStoreI0AA12RulesManagerV0F4TypeOSSSg_AKtFZ":{"name":"parseForUpdate(forInstalledVersion:andAppStoreVersion:)","abstract":"

    The type of update that is returned from the API in relation to the verison of the app that is installed.

    ","parent_name":"DataParser"},"Structs/DataParser.html#/s:5Siren10DataParserV5split33_35354280B893AD05C0C27D0AD925B30FLL7versionSaySiGSS_tFZ":{"name":"split(version:)","abstract":"

    Splits a version-formatted String into an[Int]`.

    ","parent_name":"DataParser"},"Structs/Rules/UpdatePromptFrequency.html#/s:5Siren5RulesV21UpdatePromptFrequencyO11immediatelyyA2EmF":{"name":"immediately","abstract":"

    Version check performed every time the app is launched.

    ","parent_name":"UpdatePromptFrequency"},"Structs/Rules/UpdatePromptFrequency.html#/s:5Siren5RulesV21UpdatePromptFrequencyO5dailyyA2EmF":{"name":"daily","abstract":"

    Version check performed once a day.

    ","parent_name":"UpdatePromptFrequency"},"Structs/Rules/UpdatePromptFrequency.html#/s:5Siren5RulesV21UpdatePromptFrequencyO6weeklyyA2EmF":{"name":"weekly","abstract":"

    Version check performed once a week.

    ","parent_name":"UpdatePromptFrequency"},"Structs/Rules/AlertType.html#/s:5Siren5RulesV9AlertTypeO5forceyA2EmF":{"name":"force","abstract":"

    Forces the user to update your app (1 button alert).

    ","parent_name":"AlertType"},"Structs/Rules/AlertType.html#/s:5Siren5RulesV9AlertTypeO6optionyA2EmF":{"name":"option","abstract":"

    Presents the user with option to update app now or at next launch (2 button alert).

    ","parent_name":"AlertType"},"Structs/Rules/AlertType.html#/s:5Siren5RulesV9AlertTypeO4skipyA2EmF":{"name":"skip","abstract":"

    Presents the user with option to update the app now, at next launch, or to skip this version all together (3 button alert).

    ","parent_name":"AlertType"},"Structs/Rules/AlertType.html#/s:5Siren5RulesV9AlertTypeO4noneyA2EmF":{"name":"none","abstract":"

    Doesn’t present the alert.","parent_name":"AlertType"},"Structs/Rules.html#/s:5Siren5RulesV9alertTypeAC05AlertD0Ovp":{"name":"alertType","abstract":"

    The type of alert that should be presented.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV9frequencyAC21UpdatePromptFrequencyOvp":{"name":"frequency","abstract":"

    The frequency in which a the user is prompted to update the app","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV15promptFrequency12forAlertTypeA2C012UpdatePromptD0O_AC0fG0Otcfc":{"name":"init(promptFrequency:forAlertType:)","abstract":"

    Initializes the alert presentation rules.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV8annoyingACvpZ":{"name":"annoying","abstract":"

    Performs a version check immediately, but allows the user to skip updating the app until the next time the app becomes active.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV8criticalACvpZ":{"name":"critical","abstract":"

    Performs a version check immediately and forces the user to update the app.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV7defaultACvpZ":{"name":"default","abstract":"

    Performs a version check once a day, but allows the user to skip updating the app until","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV10persistentACvpZ":{"name":"persistent","abstract":"

    Performs a version check daily, but allows the user to skip updating the app until the next time the app becomes active.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV7relaxedACvpZ":{"name":"relaxed","abstract":"

    Performs a version check weekly, but allows the user to skip updating the app until","parent_name":"Rules"},"Structs/Rules/AlertType.html":{"name":"AlertType","abstract":"

    Determines the type of alert to present after a successful version check has been performed.

    ","parent_name":"Rules"},"Structs/Rules/UpdatePromptFrequency.html":{"name":"UpdatePromptFrequency","abstract":"

    Determines the frequency in which the user is prompted to update the app","parent_name":"Rules"},"Structs/Results.html#/s:5Siren7ResultsV11alertActionAA05AlertD0Ovp":{"name":"alertAction","abstract":"

    The UIAlertAction the user chose upon being presented with the update alert.","parent_name":"Results"},"Structs/Results.html#/s:5Siren7ResultsV12localizationAA12LocalizationVvp":{"name":"localization","abstract":"

    The Siren-supported locale that was used for the string in the update alert.

    ","parent_name":"Results"},"Structs/Results.html#/s:5Siren7ResultsV11lookupModelAA06LookupD0Vvp":{"name":"lookupModel","abstract":"

    The Swift-mapped API model, if a successful version check was performed.

    ","parent_name":"Results"},"Structs/Results.html#/s:5Siren7ResultsV10updateTypeAA12RulesManagerV06UpdateD0Ovp":{"name":"updateType","abstract":"

    The type of update that was returned for the API.

    ","parent_name":"Results"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO5appIDyA2HmF":{"name":"appID","abstract":"

    The appID JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO25currentVersionReleaseDateyA2HmF":{"name":"currentVersionReleaseDate","abstract":"

    The current version release date JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO16minimumOSVersionyA2HmF":{"name":"minimumOSVersion","abstract":"

    The minimum device iOS version compatibility JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO12releaseNotesyA2HmF":{"name":"releaseNotes","abstract":"

    The release notes JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO7versionyA2HmF":{"name":"version","abstract":"

    The current App Store version JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html":{"name":"CodingKeys","abstract":"

    Codable Coding Keys for the Results array in the iTunes Lookup API JSON response.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV5appIDSivp":{"name":"appID","abstract":"

    The app’s App ID.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV25currentVersionReleaseDateSSvp":{"name":"currentVersionReleaseDate","abstract":"

    The release date for the latest verison of the app.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV16minimumOSVersionSSvp":{"name":"minimumOSVersion","abstract":"

    The minimum verison of iOS that the current verison of the app requires.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV12releaseNotesSSSgvp":{"name":"releaseNotes","abstract":"

    The releases notes from the latest version of the app.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV7versionSSvp":{"name":"version","abstract":"

    The latest version of the app.

    ","parent_name":"Results"},"Structs/LookupModel/CodingKeys.html#/s:5Siren11LookupModelV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO7resultsyA2FmF":{"name":"results","abstract":"

    The results JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/CodingKeys.html":{"name":"CodingKeys","abstract":"

    Codable Coding Keys for the Top-Level iTunes Lookup API JSON response.

    ","parent_name":"LookupModel"},"Structs/LookupModel.html#/s:5Siren11LookupModelV7resultsSayAC7ResultsVGvp":{"name":"results","abstract":"

    The array of results objects from the iTunes Lookup API.

    ","parent_name":"LookupModel"},"Structs/LookupModel/Results.html":{"name":"Results","abstract":"

    The Results object from the the iTunes Lookup API.

    ","parent_name":"LookupModel"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6arabicyA2EmF":{"name":"arabic","abstract":"

    Arabic Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO8armenianyA2EmF":{"name":"armenian","abstract":"

    Armenian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6basqueyA2EmF":{"name":"basque","abstract":"

    Basque Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO17chineseSimplifiedyA2EmF":{"name":"chineseSimplified","abstract":"

    Simplified Chinese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO18chineseTraditionalyA2EmF":{"name":"chineseTraditional","abstract":"

    Traditional Chinese Localization Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO8croatianyA2EmF":{"name":"croatian","abstract":"

    Croatian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO5czechyA2EmF":{"name":"czech","abstract":"

    Czech Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6danishyA2EmF":{"name":"danish","abstract":"

    Danish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO5dutchyA2EmF":{"name":"dutch","abstract":"

    Dutch Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7englishyA2EmF":{"name":"english","abstract":"

    English Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO8estonianyA2EmF":{"name":"estonian","abstract":"

    Estonian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7finnishyA2EmF":{"name":"finnish","abstract":"

    Finnish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6frenchyA2EmF":{"name":"french","abstract":"

    French Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6germanyA2EmF":{"name":"german","abstract":"

    German Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO5greekyA2EmF":{"name":"greek","abstract":"

    Greek Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6hebrewyA2EmF":{"name":"hebrew","abstract":"

    Hebrew Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO9hungarianyA2EmF":{"name":"hungarian","abstract":"

    Hungarian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO10indonesianyA2EmF":{"name":"indonesian","abstract":"

    Indonesian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7italianyA2EmF":{"name":"italian","abstract":"

    Italian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO8japaneseyA2EmF":{"name":"japanese","abstract":"

    Japanese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6koreanyA2EmF":{"name":"korean","abstract":"

    Korean Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7latvianyA2EmF":{"name":"latvian","abstract":"

    Latvian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO10lithuanianyA2EmF":{"name":"lithuanian","abstract":"

    Lithuanian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO5malayyA2EmF":{"name":"malay","abstract":"

    Malay Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO9norwegianyA2EmF":{"name":"norwegian","abstract":"

    Norwegian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7persianyA2EmF":{"name":"persian","abstract":"

    Persian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO18persianAfghanistanyA2EmF":{"name":"persianAfghanistan","abstract":"

    Persian (Afghanistan) Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO11persianIranyA2EmF":{"name":"persianIran","abstract":"

    Persian (Iran) Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6polishyA2EmF":{"name":"polish","abstract":"

    Polish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO16portugueseBrazilyA2EmF":{"name":"portugueseBrazil","abstract":"

    Brazilian Portuguese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO18portuguesePortugalyA2EmF":{"name":"portuguesePortugal","abstract":"

    Portugal’s Portuguese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7russianyA2EmF":{"name":"russian","abstract":"

    Russian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO15serbianCyrillicyA2EmF":{"name":"serbianCyrillic","abstract":"

    Serbian (Cyrillic) Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO12serbianLatinyA2EmF":{"name":"serbianLatin","abstract":"

    Serbian (Latin) Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO9slovenianyA2EmF":{"name":"slovenian","abstract":"

    Slovenian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7spanishyA2EmF":{"name":"spanish","abstract":"

    Spanish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7swedishyA2EmF":{"name":"swedish","abstract":"

    Swedish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO4thaiyA2EmF":{"name":"thai","abstract":"

    Thai Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7turkishyA2EmF":{"name":"turkish","abstract":"

    Turkish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO4urduyA2EmF":{"name":"urdu","abstract":"

    Urdu Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO9ukrainianyA2EmF":{"name":"ukrainian","abstract":"

    Ukranian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO10vietnameseyA2EmF":{"name":"vietnamese","abstract":"

    Vietnamese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html":{"name":"Language","abstract":"

    Determines the available languages in which the update message and alert button titles should appear.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV7appName33_2FDBEF65899237DA36B11FA5846AD0EALLSSvp":{"name":"appName","abstract":"

    The name of the app as defined by the Info.plist.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV13forceLanguage33_2FDBEF65899237DA36B11FA5846AD0EALLAC0D0OSgvp":{"name":"forceLanguage","abstract":"

    Overrides the default localization of a user’s device when presenting the update message and button titles in the alert.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV7appName016andForceLanguageB0ACSSSg_AC0G0OSgtcfc":{"name":"init(appName:andForceLanguageLocalization:)","abstract":"

    Initializes

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV12alertMessage25forCurrentAppStoreVersionS2S_tF":{"name":"alertMessage(forCurrentAppStoreVersion:)","abstract":"

    The localized string for the UIAlertController‘s message field. .

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV10alertTitleSSyF":{"name":"alertTitle()","abstract":"

    The localized string for the UIAlertController‘s title field. .

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV19nextTimeButtonTitleSSyF":{"name":"nextTimeButtonTitle()","abstract":"

    The localized string for the Next time UIAlertAction.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV15skipButtonTitleSSyF":{"name":"skipButtonTitle()","abstract":"

    The localized string for the Skip this version UIAlertAction.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV17updateButtonTitleSSyF":{"name":"updateButtonTitle()","abstract":"

    The localized string for the Update UIAlertAction.

    ","parent_name":"Localization"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV12alertMessageSSvpZ":{"name":"alertMessage","abstract":"

    The text that conveys the message that there is an app update available

    ","parent_name":"AlertConstants"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV10alertTitleSSvpZ":{"name":"alertTitle","abstract":"

    The alert title which defaults to Update Available.

    ","parent_name":"AlertConstants"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV19nextTimeButtonTitleSSvpZ":{"name":"nextTimeButtonTitle","abstract":"

    The button text that conveys the message that the user should be prompted to update next time the app launches.

    ","parent_name":"AlertConstants"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV15skipButtonTitleSSvpZ":{"name":"skipButtonTitle","abstract":"

    The text that conveys the message that the the user wants to skip this verison update.

    ","parent_name":"AlertConstants"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV17updateButtonTitleSSvpZ":{"name":"updateButtonTitle","abstract":"

    The button text that conveys the message that the user would like to update the app right away.

    ","parent_name":"AlertConstants"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO5majoryA2EmF":{"name":"major","abstract":"

    Major release available: A.b.c.d

    ","parent_name":"UpdateType"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO5minoryA2EmF":{"name":"minor","abstract":"

    Minor release available: a.B.c.d

    ","parent_name":"UpdateType"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO5patchyA2EmF":{"name":"patch","abstract":"

    Patch release available: a.b.C.d

    ","parent_name":"UpdateType"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO8revisionyA2EmF":{"name":"revision","abstract":"

    Revision release available: a.b.c.D

    ","parent_name":"UpdateType"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO7unknownyA2EmF":{"name":"unknown","abstract":"

    No information available about the update.

    ","parent_name":"UpdateType"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV15releasedForDaysSivp":{"name":"releasedForDays","abstract":"

    The alert will only show up if the current version has already been released for X days.

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV011majorUpdateB0AA0B0Vvp":{"name":"majorUpdateRules","abstract":"

    The Rules that should be used when the App Store version of the app signifies that it is a major version update (A.b.c.d).

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV011minorUpdateB0AA0B0Vvp":{"name":"minorUpdateRules","abstract":"

    The Rules that should be used when the App Store version of the app signifies that it is a minor version update (a.B.c.d).

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV011patchUpdateB0AA0B0Vvp":{"name":"patchUpdateRules","abstract":"

    The Rules that should be used when the App Store version of the app signifies that it is a patch version update (a.b.C.d).

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV014revisionUpdateB0AA0B0Vvp":{"name":"revisionUpdateRules","abstract":"

    The Rules that should be used when the App Store version of the app signifies that it is a revision version update (a.b.c.D).

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV011majorUpdateB005minoreB005patcheB008revisioneB050showAlertAfterCurrentVersionHasBeenReleasedForDaysAcA0B0V_A3JSitcfc":{"name":"init(majorUpdateRules:minorUpdateRules:patchUpdateRules:revisionUpdateRules:showAlertAfterCurrentVersionHasBeenReleasedForDays:)","abstract":"

    Initializer that sets update-specific Rules for all updates (e.g., major, minor, patch, revision).","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV06globalB050showAlertAfterCurrentVersionHasBeenReleasedForDaysAcA0B0V_Sitcfc":{"name":"init(globalRules:showAlertAfterCurrentVersionHasBeenReleasedForDays:)","abstract":"

    Initializer that sets the same update Rules for all types of updates (e.g., major, minor, patch, revision).","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV04loadB13ForUpdateTypeyAA0B0VAC0fG0OF":{"name":"loadRulesForUpdateType(_:)","abstract":"

    Returns the appropriate update rules based on the type of version that is returned from the API.

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV7defaultACvpZ":{"name":"default","abstract":"

    The default RulesManager.

    ","parent_name":"RulesManager"},"Structs/RulesManager/UpdateType.html":{"name":"UpdateType","abstract":"

    Informs Siren of the type of update that is available so that","parent_name":"RulesManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV17CompletionHandlera":{"name":"CompletionHandler","abstract":"

    Return results or errors obtained from performing a version check with Siren.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV12localizationAA12LocalizationVvp":{"name":"localization","abstract":"

    The localization data structure that will be used to construct localized strings for the update alert.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV9tintColorSo7UIColorCSgvp":{"name":"tintColor","abstract":"

    The tint color of the UIAlertController buttons.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV12alertMessageSSvp":{"name":"alertMessage","abstract":"

    The descriptive update message of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV10alertTitleSSvp":{"name":"alertTitle","abstract":"

    The main message of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV19nextTimeButtonTitleSSvp":{"name":"nextTimeButtonTitle","abstract":"

    The Next time button text of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV15skipButtonTitleSSvp":{"name":"skipButtonTitle","abstract":"

    The Skip this version button text of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV17updateButtonTitleSSvp":{"name":"updateButtonTitle","abstract":"

    The Update button text of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV15alertController33_CEF2109017F934DAB33AED8753BA096CLLSo07UIAlertE0CSgvp":{"name":"alertController","abstract":"

    The instance of the UIAlertController used to present the update alert.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV13updaterWindow33_CEF2109017F934DAB33AED8753BA096CLLSo8UIWindowCvp":{"name":"updaterWindow","abstract":"

    The UIWindow instance that presents the SirenViewController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV14alertTintColor7appName0D5Title0D7Message012updateButtonI008nextTimelI004skiplI025forceLanguageLocalizationACSo7UIColorCSg_SSSgS5SAA0R0V0Q0OSgtcfc":{"name":"init(alertTintColor:appName:alertTitle:alertMessage:updateButtonTitle:nextTimeButtonTitle:skipButtonTitle:forceLanguageLocalization:)","abstract":"

    PresentationManager‘s public initializer.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV7defaultACvpZ":{"name":"default","abstract":"

    The default PresentationManager.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV12presentAlert9withRules25forCurrentAppStoreVersion10completionyAA0G0V_SSyAA0E6ActionOcSgtF":{"name":"presentAlert(withRules:forCurrentAppStoreVersion:completion:)","abstract":"

    Constructs the localized update alert UIAlertController object.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV17updateAlertAction33_CEF2109017F934DAB33AED8753BA096CLL10completionSo07UIAlertF0CyAA0eF0OcSg_tF":{"name":"updateAlertAction(completion:)","abstract":"

    The UIAlertAction that is executed when the Update option is selected.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV19nextTimeAlertAction33_CEF2109017F934DAB33AED8753BA096CLL10completionSo07UIAlertG0CyAA0fG0OcSg_tF":{"name":"nextTimeAlertAction(completion:)","abstract":"

    The UIAlertAction that is executed when the Next time option is selected.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV15skipAlertAction33_CEF2109017F934DAB33AED8753BA096CLL25forCurrentAppStoreVersion10completionSo07UIAlertF0CSS_yAA0eF0OcSgtF":{"name":"skipAlertAction(forCurrentAppStoreVersion:completion:)","abstract":"

    The UIAlertAction that is executed when the Skip this version option is selected.

    ","parent_name":"PresentationManager"},"Structs/APIManager/Constants.html#/s:5Siren10APIManagerV9Constants33_8071139324B24E2065F4037045A8D960LLV8bundleIDSSvpZ":{"name":"bundleID","abstract":"

    Constant for the bundleId parameter in the iTunes Lookup API request.

    ","parent_name":"Constants"},"Structs/APIManager/Constants.html#/s:5Siren10APIManagerV9Constants33_8071139324B24E2065F4037045A8D960LLV7countrySSvpZ":{"name":"country","abstract":"

    Constant for the country parameter in the iTunes Lookup API request.

    ","parent_name":"Constants"},"Structs/APIManager/Constants.html":{"name":"Constants","abstract":"

    Constants used in the APIManager.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV17CompletionHandlera":{"name":"CompletionHandler","abstract":"

    Return results or errors obtained from performing a version check with Siren.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV11countryCodeSSSgvp":{"name":"countryCode","abstract":"

    The region or country of an App Store in which the app is available.","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV11countryCodeACSSSg_tcfc":{"name":"init(countryCode:)","abstract":"

    Initializes APIManager to the region or country of an App Store in which the app is available.","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV7defaultACvpZ":{"name":"default","abstract":"

    The default APIManager.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV26performVersionCheckRequest10completionyyAA11LookupModelVSg_AA10KnownErrorOSgtcSg_tF":{"name":"performVersionCheckRequest(completion:)","abstract":"

    Creates and performs a URLRequest against the iTunes Lookup API.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV26processVersionCheckResults33_8071139324B24E2065F4037045A8D960LL8withData8response5error10completiony10Foundation0M0VSg_So13NSURLResponseCSgs5Error_pSgyAA11LookupModelVSg_AA05KnownS0OSgtcSgtF":{"name":"processVersionCheckResults(withData:response:error:completion:)","abstract":"

    Parses and maps the the results from the iTunes Lookup API request.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV13makeITunesURL33_8071139324B24E2065F4037045A8D960LL10Foundation0E0VyKF":{"name":"makeITunesURL()","abstract":"

    Creates the URL that points to the iTunes Lookup API.

    ","parent_name":"APIManager"},"Structs/APIManager.html":{"name":"APIManager","abstract":"

    APIManager for Siren

    "},"Structs/PresentationManager.html":{"name":"PresentationManager","abstract":"

    PresentationManager for Siren

    "},"Structs/RulesManager.html":{"name":"RulesManager","abstract":"

    RulesManager for Siren

    "},"Structs/AlertConstants.html":{"name":"AlertConstants","abstract":"

    The default constants used for the update alert’s messaging.

    "},"Structs/Localization.html":{"name":"Localization","abstract":"

    Localization information and strings for Siren.

    "},"Structs/LookupModel.html":{"name":"LookupModel","abstract":"

    Model representing a selection of results from the iTunes Lookup API.

    "},"Structs/Results.html":{"name":"Results","abstract":"

    The relevant metadata returned from Siren upon completing a successful version check.

    "},"Structs/Rules.html":{"name":"Rules","abstract":"

    Alert Presentation Rules for Siren.

    "},"Structs/DataParser.html":{"name":"DataParser","abstract":"

    Version parsing functions for Siren.

    "},"Extensions/UserDefaults/SirenKeys.html#/s:So14NSUserDefaultsC5SirenE0C4Keys33_0884631E60E090AA276701A736B793BBLLO37PerformVersionCheckOnSubsequentLaunchyA2FmF":{"name":"PerformVersionCheckOnSubsequentLaunch","abstract":"

    Key that notifies Siren to perform a version check and present","parent_name":"SirenKeys"},"Extensions/UserDefaults/SirenKeys.html#/s:So14NSUserDefaultsC5SirenE0C4Keys33_0884631E60E090AA276701A736B793BBLLO22StoredVersionCheckDateyA2FmF":{"name":"StoredVersionCheckDate","abstract":"

    Key that stores the timestamp of the last version check.

    ","parent_name":"SirenKeys"},"Extensions/UserDefaults/SirenKeys.html#/s:So14NSUserDefaultsC5SirenE0C4Keys33_0884631E60E090AA276701A736B793BBLLO20StoredSkippedVersionyA2FmF":{"name":"StoredSkippedVersion","abstract":"

    Key that stores the version that a user decided to skip.

    ","parent_name":"SirenKeys"},"Extensions/UserDefaults/SirenKeys.html":{"name":"SirenKeys","abstract":"

    Siren-specific UserDefaults Keys

    ","parent_name":"UserDefaults"},"Extensions/UserDefaults.html#/s:So14NSUserDefaultsC5SirenE43shouldPerformVersionCheckOnSubsequentLaunchSbvpZ":{"name":"shouldPerformVersionCheckOnSubsequentLaunch","abstract":"

    Sets and Gets a UserDefault around performing a version check on a subsequent launch.

    ","parent_name":"UserDefaults"},"Extensions/UserDefaults.html#/s:So14NSUserDefaultsC5SirenE20storedSkippedVersionSSSgvpZ":{"name":"storedSkippedVersion","abstract":"

    Sets and Gets a UserDefault around storing a version that the user wants to skip updating.

    ","parent_name":"UserDefaults"},"Extensions/UserDefaults.html#/s:So14NSUserDefaultsC5SirenE21alertPresentationDate10Foundation0F0VSgvpZ":{"name":"alertPresentationDate","abstract":"

    Sets and Gets a UserDefault around the last time the user was presented a version update alert.

    ","parent_name":"UserDefaults"},"Extensions/UIAlertController.html#/s:So17UIAlertControllerC5SirenE4show6windowySo8UIWindowC_tF":{"name":"show(window:)","abstract":"

    Presents Siren’s UIAlertController in a new UIWindow.

    ","parent_name":"UIAlertController"},"Extensions/UIAlertController.html#/s:So17UIAlertControllerC5SirenE4hide6windowySo8UIWindowC_tF":{"name":"hide(window:)","abstract":"

    Hides Siren’s UIAlertController within a given window.

    ","parent_name":"UIAlertController"},"Extensions/Date.html#/s:10Foundation4DateV5SirenE4days5sinceSiAC_tFZ":{"name":"days(since:)","abstract":"

    The amount of days passed from a specific source date.

    ","parent_name":"Date"},"Extensions/Date.html#/s:10Foundation4DateV5SirenE4days5sinceSiSgSS_tFZ":{"name":"days(since:)","abstract":"

    The amount of days passed from a specific source date string.

    ","parent_name":"Date"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV15bundleExtensionSSvpZ":{"name":"bundleExtension","abstract":"

    Constant for the .bundle file extension.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV11displayNameSSvpZ":{"name":"displayName","abstract":"

    Constant for CFBundleDisplayName.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV19englishLocalizationSSvpZ":{"name":"englishLocalization","abstract":"

    Constant for the default US English localization.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV16projectExtensionSSvpZ":{"name":"projectExtension","abstract":"

    Constant for the project file extension.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV18shortVersionStringSSvpZ":{"name":"shortVersionString","abstract":"

    Constant for CFBundleShortVersionString.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV5tableSSvpZ":{"name":"table","abstract":"

    Constant for the localization table.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html":{"name":"Constants","abstract":"

    Constants used in the Bundle extension.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE7versionSSSgyFZ":{"name":"version()","abstract":"

    Fetches the current verison of the app.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE15localizedString6forKey20andForceLocalizationS2S_AC0I0V8LanguageOSgtFZ":{"name":"localizedString(forKey:andForceLocalization:)","abstract":"

    Returns the localized string for a given default string.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE19bestMatchingAppNameSSyFZ":{"name":"bestMatchingAppName()","abstract":"

    The appropriate name for the app to be displayed in the update alert.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE15sirenBundlePath33_9C775CF4CEC7A5F21E625F58C71BDF22LLSSSgyFZ":{"name":"sirenBundlePath()","abstract":"

    The path to Siren’s localization Bundle.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE21sirenForcedBundlePath33_9C775CF4CEC7A5F21E625F58C71BDF22LL25forceLanguageLocalizationSSSgAC0R0V0Q0O_tFZ":{"name":"sirenForcedBundlePath(forceLanguageLocalization:)","abstract":"

    The path for a particular language localizationin Siren’s localization Bundle.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE14deviceLanguage33_9C775CF4CEC7A5F21E625F58C71BDF22LLAC12LocalizationV0D0OSgyFZ":{"name":"deviceLanguage()","abstract":"

    The user’s preferred language based on their device’s localization.

    ","parent_name":"Bundle"},"Extensions/Bundle.html":{"name":"Bundle"},"Extensions/Date.html":{"name":"Date"},"Extensions/UIAlertController.html":{"name":"UIAlertController"},"Extensions/UserDefaults.html":{"name":"UserDefaults"},"Enums/KnownError.html#/s:5Siren10KnownErrorO20appStoreAppIDFailureyA2CmF":{"name":"appStoreAppIDFailure","abstract":"

    Error retrieving trackId as the JSON does not contain a ‘trackId’ key.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO33appStoreDataRetrievalEmptyResultsyA2CmF":{"name":"appStoreDataRetrievalEmptyResults","abstract":"

    Error retrieving App Store data as JSON results were empty. Is your app available in the US? If not, change the countryCode variable to fix this error.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO28appStoreDataRetrievalFailureyACs0C0_pSg_tcACmF":{"name":"appStoreDataRetrievalFailure(underlyingError:)","abstract":"

    Error retrieving App Store data as an error was returned.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO26appStoreJSONParsingFailureyACs0C0_p_tcACmF":{"name":"appStoreJSONParsingFailure(underlyingError:)","abstract":"

    Error parsing App Store JSON data.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO28appStoreOSVersionUnsupportedyA2CmF":{"name":"appStoreOSVersionUnsupported","abstract":"

    The version of iOS on the device is lower than that of the one required by the app verison update.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO27appStoreVersionArrayFailureyA2CmF":{"name":"appStoreVersionArrayFailure","abstract":"

    Error retrieving App Store verson number as the JSON does not contain a version key.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO25currentVersionReleaseDateyA2CmF":{"name":"currentVersionReleaseDate","abstract":"

    The currentVersionReleaseDate key is missing in the JSON payload. Please leave an issue on https://github.com/ArtSabintsev/Siren with as many details as possible.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO12malformedURLyA2CmF":{"name":"malformedURL","abstract":"

    One of the iTunes URLs used in Siren is malformed. Please leave an issue on https://github.com/ArtSabintsev/Siren with as many details as possible.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO15missingBundleIDyA2CmF":{"name":"missingBundleID","abstract":"

    Please make sure that you have set a Bundle Identifier in your project.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO17noUpdateAvailableyA2CmF":{"name":"noUpdateAvailable","abstract":"

    No new update available.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO16recentlyPromptedyA2CmF":{"name":"recentlyPrompted","abstract":"

    Siren will not present an update alert if it performed one too recently. If you would like to present an alert every time Siren is called, please consider setting the UpdatePromptFrequency.immediately rule in RulesManager

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO15releasedTooSoonyACSi_SitcACmF":{"name":"releasedTooSoon(daysSinceRelease:releasedForDays:)","abstract":"

    The app has been released for X days, but Siren cannot prompt the user until Y (where Y > X) days have passed.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO17skipVersionUpdateyACSS_SStcACmF":{"name":"skipVersionUpdate(installedVersion:appStoreVersion:)","abstract":"

    The user has opted to skip updating their current version of the app to the current App Store version.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO20localizedDescriptionSSvp":{"name":"localizedDescription","abstract":"

    The localized description for each error handled by Siren.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO05sirenC033_B3C911EAD28C83CC211C07566B0F499ALLSSvpZ":{"name":"sirenError","abstract":"

    An easily identifiable prefix for all errors thrown by Siren.

    ","parent_name":"KnownError"},"Enums/AlertAction.html#/s:5Siren11AlertActionO8appStoreyA2CmF":{"name":"appStore","abstract":"

    The user clicked on the Update option, which took them to the app’s App Store page.

    ","parent_name":"AlertAction"},"Enums/AlertAction.html#/s:5Siren11AlertActionO8nextTimeyA2CmF":{"name":"nextTime","abstract":"

    The user clicked on the Next Time option, which dismissed the alert.

    ","parent_name":"AlertAction"},"Enums/AlertAction.html#/s:5Siren11AlertActionO4skipyA2CmF":{"name":"skip","abstract":"

    The user clicked on the Skip this version option, which dismissed the alert.

    ","parent_name":"AlertAction"},"Enums/AlertAction.html#/s:5Siren11AlertActionO7unknownyA2CmF":{"name":"unknown","abstract":"

    (Default) The user never chose an option. This is returned when an error is thrown by Siren.

    ","parent_name":"AlertAction"},"Enums/AlertAction.html":{"name":"AlertAction","abstract":"

    The UIAlertController button that was pressed upon being presented an update alert.

    "},"Enums/KnownError.html":{"name":"KnownError","abstract":"

    Enumerates all potentials errors that Siren can handle.

    "},"Classes/SirenViewController.html#/c:@M@Siren@objc(cs)SirenViewController(py)preferredStatusBarStyle":{"name":"preferredStatusBarStyle","abstract":"

    UIStatusBarStyle override.

    ","parent_name":"SirenViewController"},"Classes/Siren.html#/s:5SirenAAC14ResultsHandlera":{"name":"ResultsHandler","abstract":"

    Return results or errors obtained from performing a version check with Siren.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC6sharedABvpZ":{"name":"shared","abstract":"

    The Siren singleton. The main point of entry to the Siren library.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC12debugEnabledSbvp":{"name":"debugEnabled","abstract":"

    The debug flag, which is disabled by default.","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC10apiManagerAA10APIManagerVvp":{"name":"apiManager","abstract":"

    The manager that controls the App Store API that is","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC19presentationManagerAA012PresentationC0Vvp":{"name":"presentationManager","abstract":"

    The manager that controls the update alert’s string localization and tint color.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC12rulesManagerAA05RulesC0Vvp":{"name":"rulesManager","abstract":"

    The manager that controls the type of alert that should be displayed","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC23currentInstalledVersionSSSgvp":{"name":"currentInstalledVersion","abstract":"

    The current installed version of your app.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC23didBecomeActiveObserverSo8NSObject_pSgvp":{"name":"didBecomeActiveObserver","abstract":"

    The retained NotificationCenter observer that listens for UIApplication.didBecomeActiveNotification notifications.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC21alertPresentationDate33_7DFB1BC200A6C64FBED860A3A8153B65LL10Foundation0D0VSgvp":{"name":"alertPresentationDate","abstract":"

    The last date that an alert was presented to the user.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC5appID33_7DFB1BC200A6C64FBED860A3A8153B65LLSiSgvp":{"name":"appID","abstract":"

    The App Store’s unique identifier for an app.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC14resultsHandler33_7DFB1BC200A6C64FBED860A3A8153B65LLyAA7ResultsVSg_AA10KnownErrorOSgtcSgvp":{"name":"resultsHandler","abstract":"

    The completion handler used to return the results or errors returned by Siren.

    ","parent_name":"Siren"},"Classes/Siren.html#/c:@M@Siren@objc(cs)Siren(im)init":{"name":"init()","abstract":"

    The initialization method.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC4wail10completionyyAA7ResultsVSg_AA10KnownErrorOSgtcSg_tF":{"name":"wail(completion:)","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC14launchAppStoreyyF":{"name":"launchAppStore()","abstract":"

    Launches the AppStore in two situations when the user clicked the Update button in the UIAlertController modal.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC19performVersionCheckyyF":{"name":"performVersionCheck()","abstract":"

    Initiates the uni-directional version checking flow.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC8validate5modelyAA11LookupModelV_tF":{"name":"validate(model:)","abstract":"

    Validates the parsed and mapped iTunes Lookup Model","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC45determineIfAlertPresentationRulesAreSatisfied25forCurrentAppStoreVersion14andLookupModelySS_AA0oP0VtF":{"name":"determineIfAlertPresentationRulesAreSatisfied(forCurrentAppStoreVersion:andLookupModel:)","abstract":"

    Determines if the update alert can be presented based on the","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC12presentAlert9withRules25forCurrentAppStoreVersion5model13andUpdateTypeyAA0E0V_SSAA11LookupModelVAA0E7ManagerV0mN0OtF":{"name":"presentAlert(withRules:forCurrentAppStoreVersion:model:andUpdateType:)","abstract":"

    Presents the update alert to the end user.","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC12addObserversyyF":{"name":"addObservers()","abstract":"

    Add an observer that listens for app launching/relaunching","parent_name":"Siren"},"Classes/Siren.html":{"name":"Siren","abstract":"

    The Siren Class.

    "},"Classes/SirenViewController.html":{"name":"SirenViewController","abstract":"

    UIViewController Extension for Siren

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Enums.html":{"name":"Enumerations","abstract":"

    The following enumerations are available globally.

    "},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file +{"Structs/DataParser.html#/s:5Siren10DataParserV22isAppStoreVersionNewer09installedG003appfG0SbSSSg_AGtFZ":{"name":"isAppStoreVersionNewer(installedVersion:appStoreVersion:)","abstract":"

    Checks to see if the App Store version of the app is newer than the installed version.

    ","parent_name":"DataParser"},"Structs/DataParser.html#/s:5Siren10DataParserV30isUpdateCompatibleWithDeviceOS3forSbAA11LookupModelV_tFZ":{"name":"isUpdateCompatibleWithDeviceOS(for:)","abstract":"

    Validates that the latest version in the App Store is compatible with the device’s current version of iOS.

    ","parent_name":"DataParser"},"Structs/DataParser.html#/s:5Siren10DataParserV14parseForUpdate19forInstalledVersion011andAppStoreI0AA12RulesManagerV0F4TypeOSSSg_AKtFZ":{"name":"parseForUpdate(forInstalledVersion:andAppStoreVersion:)","abstract":"

    The type of update that is returned from the API in relation to the verison of the app that is installed.

    ","parent_name":"DataParser"},"Structs/DataParser.html#/s:5Siren10DataParserV5split33_35354280B893AD05C0C27D0AD925B30FLL7versionSaySiGSS_tFZ":{"name":"split(version:)","abstract":"

    Splits a version-formatted String into an[Int]`.

    ","parent_name":"DataParser"},"Structs/Rules/UpdatePromptFrequency.html#/s:5Siren5RulesV21UpdatePromptFrequencyO11immediatelyyA2EmF":{"name":"immediately","abstract":"

    Version check performed every time the app is launched.

    ","parent_name":"UpdatePromptFrequency"},"Structs/Rules/UpdatePromptFrequency.html#/s:5Siren5RulesV21UpdatePromptFrequencyO5dailyyA2EmF":{"name":"daily","abstract":"

    Version check performed once a day.

    ","parent_name":"UpdatePromptFrequency"},"Structs/Rules/UpdatePromptFrequency.html#/s:5Siren5RulesV21UpdatePromptFrequencyO6weeklyyA2EmF":{"name":"weekly","abstract":"

    Version check performed once a week.

    ","parent_name":"UpdatePromptFrequency"},"Structs/Rules/AlertType.html#/s:5Siren5RulesV9AlertTypeO5forceyA2EmF":{"name":"force","abstract":"

    Forces the user to update your app (1 button alert).

    ","parent_name":"AlertType"},"Structs/Rules/AlertType.html#/s:5Siren5RulesV9AlertTypeO6optionyA2EmF":{"name":"option","abstract":"

    Presents the user with option to update app now or at next launch (2 button alert).

    ","parent_name":"AlertType"},"Structs/Rules/AlertType.html#/s:5Siren5RulesV9AlertTypeO4skipyA2EmF":{"name":"skip","abstract":"

    Presents the user with option to update the app now, at next launch, or to skip this version all together (3 button alert).

    ","parent_name":"AlertType"},"Structs/Rules/AlertType.html#/s:5Siren5RulesV9AlertTypeO4noneyA2EmF":{"name":"none","abstract":"

    Doesn’t present the alert.","parent_name":"AlertType"},"Structs/Rules.html#/s:5Siren5RulesV9alertTypeAC05AlertD0Ovp":{"name":"alertType","abstract":"

    The type of alert that should be presented.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV9frequencyAC21UpdatePromptFrequencyOvp":{"name":"frequency","abstract":"

    The frequency in which a the user is prompted to update the app","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV15promptFrequency12forAlertTypeA2C012UpdatePromptD0O_AC0fG0Otcfc":{"name":"init(promptFrequency:forAlertType:)","abstract":"

    Initializes the alert presentation rules.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV8annoyingACvpZ":{"name":"annoying","abstract":"

    Performs a version check immediately, but allows the user to skip updating the app until the next time the app becomes active.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV8criticalACvpZ":{"name":"critical","abstract":"

    Performs a version check immediately and forces the user to update the app.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV7defaultACvpZ":{"name":"default","abstract":"

    Performs a version check once a day, but allows the user to skip updating the app until","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV10persistentACvpZ":{"name":"persistent","abstract":"

    Performs a version check daily, but allows the user to skip updating the app until the next time the app becomes active.

    ","parent_name":"Rules"},"Structs/Rules.html#/s:5Siren5RulesV7relaxedACvpZ":{"name":"relaxed","abstract":"

    Performs a version check weekly, but allows the user to skip updating the app until","parent_name":"Rules"},"Structs/Rules/AlertType.html":{"name":"AlertType","abstract":"

    Determines the type of alert to present after a successful version check has been performed.

    ","parent_name":"Rules"},"Structs/Rules/UpdatePromptFrequency.html":{"name":"UpdatePromptFrequency","abstract":"

    Determines the frequency in which the user is prompted to update the app","parent_name":"Rules"},"Structs/Results.html#/s:5Siren7ResultsV11alertActionAA05AlertD0Ovp":{"name":"alertAction","abstract":"

    The UIAlertAction the user chose upon being presented with the update alert.","parent_name":"Results"},"Structs/Results.html#/s:5Siren7ResultsV12localizationAA12LocalizationVvp":{"name":"localization","abstract":"

    The Siren-supported locale that was used for the string in the update alert.

    ","parent_name":"Results"},"Structs/Results.html#/s:5Siren7ResultsV11lookupModelAA06LookupD0Vvp":{"name":"lookupModel","abstract":"

    The Swift-mapped API model, if a successful version check was performed.

    ","parent_name":"Results"},"Structs/Results.html#/s:5Siren7ResultsV10updateTypeAA12RulesManagerV06UpdateD0Ovp":{"name":"updateType","abstract":"

    The type of update that was returned for the API.

    ","parent_name":"Results"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO5appIDyA2HmF":{"name":"appID","abstract":"

    The appID JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO25currentVersionReleaseDateyA2HmF":{"name":"currentVersionReleaseDate","abstract":"

    The current version release date JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO16minimumOSVersionyA2HmF":{"name":"minimumOSVersion","abstract":"

    The minimum device iOS version compatibility JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO12releaseNotesyA2HmF":{"name":"releaseNotes","abstract":"

    The release notes JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html#/s:5Siren11LookupModelV7ResultsV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO7versionyA2HmF":{"name":"version","abstract":"

    The current App Store version JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/Results/CodingKeys.html":{"name":"CodingKeys","abstract":"

    Codable Coding Keys for the Results array in the iTunes Lookup API JSON response.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV5appIDSivp":{"name":"appID","abstract":"

    The app’s App ID.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV25currentVersionReleaseDateSSvp":{"name":"currentVersionReleaseDate","abstract":"

    The release date for the latest verison of the app.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV16minimumOSVersionSSvp":{"name":"minimumOSVersion","abstract":"

    The minimum verison of iOS that the current verison of the app requires.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV12releaseNotesSSSgvp":{"name":"releaseNotes","abstract":"

    The releases notes from the latest version of the app.

    ","parent_name":"Results"},"Structs/LookupModel/Results.html#/s:5Siren11LookupModelV7ResultsV7versionSSvp":{"name":"version","abstract":"

    The latest version of the app.

    ","parent_name":"Results"},"Structs/LookupModel/CodingKeys.html#/s:5Siren11LookupModelV10CodingKeys33_F2A9942F3CA9D99FD9845937489F40B8LLO7resultsyA2FmF":{"name":"results","abstract":"

    The results JSON key.

    ","parent_name":"CodingKeys"},"Structs/LookupModel/CodingKeys.html":{"name":"CodingKeys","abstract":"

    Codable Coding Keys for the Top-Level iTunes Lookup API JSON response.

    ","parent_name":"LookupModel"},"Structs/LookupModel.html#/s:5Siren11LookupModelV7resultsSayAC7ResultsVGvp":{"name":"results","abstract":"

    The array of results objects from the iTunes Lookup API.

    ","parent_name":"LookupModel"},"Structs/LookupModel/Results.html":{"name":"Results","abstract":"

    The Results object from the the iTunes Lookup API.

    ","parent_name":"LookupModel"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6arabicyA2EmF":{"name":"arabic","abstract":"

    Arabic Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO8armenianyA2EmF":{"name":"armenian","abstract":"

    Armenian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6basqueyA2EmF":{"name":"basque","abstract":"

    Basque Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO17chineseSimplifiedyA2EmF":{"name":"chineseSimplified","abstract":"

    Simplified Chinese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO18chineseTraditionalyA2EmF":{"name":"chineseTraditional","abstract":"

    Traditional Chinese Localization Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO8croatianyA2EmF":{"name":"croatian","abstract":"

    Croatian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO5czechyA2EmF":{"name":"czech","abstract":"

    Czech Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6danishyA2EmF":{"name":"danish","abstract":"

    Danish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO5dutchyA2EmF":{"name":"dutch","abstract":"

    Dutch Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7englishyA2EmF":{"name":"english","abstract":"

    English Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO8estonianyA2EmF":{"name":"estonian","abstract":"

    Estonian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7finnishyA2EmF":{"name":"finnish","abstract":"

    Finnish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6frenchyA2EmF":{"name":"french","abstract":"

    French Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6germanyA2EmF":{"name":"german","abstract":"

    German Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO5greekyA2EmF":{"name":"greek","abstract":"

    Greek Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6hebrewyA2EmF":{"name":"hebrew","abstract":"

    Hebrew Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO9hungarianyA2EmF":{"name":"hungarian","abstract":"

    Hungarian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO10indonesianyA2EmF":{"name":"indonesian","abstract":"

    Indonesian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7italianyA2EmF":{"name":"italian","abstract":"

    Italian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO8japaneseyA2EmF":{"name":"japanese","abstract":"

    Japanese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6koreanyA2EmF":{"name":"korean","abstract":"

    Korean Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7latvianyA2EmF":{"name":"latvian","abstract":"

    Latvian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO10lithuanianyA2EmF":{"name":"lithuanian","abstract":"

    Lithuanian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO5malayyA2EmF":{"name":"malay","abstract":"

    Malay Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO9norwegianyA2EmF":{"name":"norwegian","abstract":"

    Norwegian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7persianyA2EmF":{"name":"persian","abstract":"

    Persian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO18persianAfghanistanyA2EmF":{"name":"persianAfghanistan","abstract":"

    Persian (Afghanistan) Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO11persianIranyA2EmF":{"name":"persianIran","abstract":"

    Persian (Iran) Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO6polishyA2EmF":{"name":"polish","abstract":"

    Polish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO16portugueseBrazilyA2EmF":{"name":"portugueseBrazil","abstract":"

    Brazilian Portuguese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO18portuguesePortugalyA2EmF":{"name":"portuguesePortugal","abstract":"

    Portugal’s Portuguese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7russianyA2EmF":{"name":"russian","abstract":"

    Russian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO15serbianCyrillicyA2EmF":{"name":"serbianCyrillic","abstract":"

    Serbian (Cyrillic) Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO12serbianLatinyA2EmF":{"name":"serbianLatin","abstract":"

    Serbian (Latin) Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO9slovenianyA2EmF":{"name":"slovenian","abstract":"

    Slovenian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7spanishyA2EmF":{"name":"spanish","abstract":"

    Spanish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7swedishyA2EmF":{"name":"swedish","abstract":"

    Swedish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO4thaiyA2EmF":{"name":"thai","abstract":"

    Thai Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO7turkishyA2EmF":{"name":"turkish","abstract":"

    Turkish Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO4urduyA2EmF":{"name":"urdu","abstract":"

    Urdu Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO9ukrainianyA2EmF":{"name":"ukrainian","abstract":"

    Ukranian Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html#/s:5Siren12LocalizationV8LanguageO10vietnameseyA2EmF":{"name":"vietnamese","abstract":"

    Vietnamese Language Localization

    ","parent_name":"Language"},"Structs/Localization/Language.html":{"name":"Language","abstract":"

    Determines the available languages in which the update message and alert button titles should appear.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV7appName33_2FDBEF65899237DA36B11FA5846AD0EALLSSvp":{"name":"appName","abstract":"

    The name of the app as defined by the Info.plist.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV13forceLanguage33_2FDBEF65899237DA36B11FA5846AD0EALLAC0D0OSgvp":{"name":"forceLanguage","abstract":"

    Overrides the default localization of a user’s device when presenting the update message and button titles in the alert.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV7appName016andForceLanguageB0ACSSSg_AC0G0OSgtcfc":{"name":"init(appName:andForceLanguageLocalization:)","abstract":"

    Initializes

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV12alertMessage25forCurrentAppStoreVersionS2S_tF":{"name":"alertMessage(forCurrentAppStoreVersion:)","abstract":"

    The localized string for the UIAlertController‘s message field. .

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV10alertTitleSSyF":{"name":"alertTitle()","abstract":"

    The localized string for the UIAlertController‘s title field. .

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV19nextTimeButtonTitleSSyF":{"name":"nextTimeButtonTitle()","abstract":"

    The localized string for the Next time UIAlertAction.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV15skipButtonTitleSSyF":{"name":"skipButtonTitle()","abstract":"

    The localized string for the Skip this version UIAlertAction.

    ","parent_name":"Localization"},"Structs/Localization.html#/s:5Siren12LocalizationV17updateButtonTitleSSyF":{"name":"updateButtonTitle()","abstract":"

    The localized string for the Update UIAlertAction.

    ","parent_name":"Localization"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV12alertMessageSSvpZ":{"name":"alertMessage","abstract":"

    The text that conveys the message that there is an app update available

    ","parent_name":"AlertConstants"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV10alertTitleSSvpZ":{"name":"alertTitle","abstract":"

    The alert title which defaults to Update Available.

    ","parent_name":"AlertConstants"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV19nextTimeButtonTitleSSvpZ":{"name":"nextTimeButtonTitle","abstract":"

    The button text that conveys the message that the user should be prompted to update next time the app launches.

    ","parent_name":"AlertConstants"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV15skipButtonTitleSSvpZ":{"name":"skipButtonTitle","abstract":"

    The text that conveys the message that the the user wants to skip this verison update.

    ","parent_name":"AlertConstants"},"Structs/AlertConstants.html#/s:5Siren14AlertConstantsV17updateButtonTitleSSvpZ":{"name":"updateButtonTitle","abstract":"

    The button text that conveys the message that the user would like to update the app right away.

    ","parent_name":"AlertConstants"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO5majoryA2EmF":{"name":"major","abstract":"

    Major release available: A.b.c.d

    ","parent_name":"UpdateType"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO5minoryA2EmF":{"name":"minor","abstract":"

    Minor release available: a.B.c.d

    ","parent_name":"UpdateType"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO5patchyA2EmF":{"name":"patch","abstract":"

    Patch release available: a.b.C.d

    ","parent_name":"UpdateType"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO8revisionyA2EmF":{"name":"revision","abstract":"

    Revision release available: a.b.c.D

    ","parent_name":"UpdateType"},"Structs/RulesManager/UpdateType.html#/s:5Siren12RulesManagerV10UpdateTypeO7unknownyA2EmF":{"name":"unknown","abstract":"

    No information available about the update.

    ","parent_name":"UpdateType"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV15releasedForDaysSivp":{"name":"releasedForDays","abstract":"

    The alert will only show up if the current version has already been released for X days.

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV011majorUpdateB0AA0B0Vvp":{"name":"majorUpdateRules","abstract":"

    The Rules that should be used when the App Store version of the app signifies that it is a major version update (A.b.c.d).

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV011minorUpdateB0AA0B0Vvp":{"name":"minorUpdateRules","abstract":"

    The Rules that should be used when the App Store version of the app signifies that it is a minor version update (a.B.c.d).

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV011patchUpdateB0AA0B0Vvp":{"name":"patchUpdateRules","abstract":"

    The Rules that should be used when the App Store version of the app signifies that it is a patch version update (a.b.C.d).

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV014revisionUpdateB0AA0B0Vvp":{"name":"revisionUpdateRules","abstract":"

    The Rules that should be used when the App Store version of the app signifies that it is a revision version update (a.b.c.D).

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV011majorUpdateB005minoreB005patcheB008revisioneB050showAlertAfterCurrentVersionHasBeenReleasedForDaysAcA0B0V_A3JSitcfc":{"name":"init(majorUpdateRules:minorUpdateRules:patchUpdateRules:revisionUpdateRules:showAlertAfterCurrentVersionHasBeenReleasedForDays:)","abstract":"

    Initializer that sets update-specific Rules for all updates (e.g., major, minor, patch, revision).","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV06globalB050showAlertAfterCurrentVersionHasBeenReleasedForDaysAcA0B0V_Sitcfc":{"name":"init(globalRules:showAlertAfterCurrentVersionHasBeenReleasedForDays:)","abstract":"

    Initializer that sets the same update Rules for all types of updates (e.g., major, minor, patch, revision).","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV04loadB13ForUpdateTypeyAA0B0VAC0fG0OF":{"name":"loadRulesForUpdateType(_:)","abstract":"

    Returns the appropriate update rules based on the type of version that is returned from the API.

    ","parent_name":"RulesManager"},"Structs/RulesManager.html#/s:5Siren12RulesManagerV7defaultACvpZ":{"name":"default","abstract":"

    The default RulesManager.

    ","parent_name":"RulesManager"},"Structs/RulesManager/UpdateType.html":{"name":"UpdateType","abstract":"

    Informs Siren of the type of update that is available so that","parent_name":"RulesManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV17CompletionHandlera":{"name":"CompletionHandler","abstract":"

    Return results or errors obtained from performing a version check with Siren.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV12localizationAA12LocalizationVvp":{"name":"localization","abstract":"

    The localization data structure that will be used to construct localized strings for the update alert.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV9tintColorSo7UIColorCSgvp":{"name":"tintColor","abstract":"

    The tint color of the UIAlertController buttons.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV12alertMessageSSvp":{"name":"alertMessage","abstract":"

    The descriptive update message of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV10alertTitleSSvp":{"name":"alertTitle","abstract":"

    The main message of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV19nextTimeButtonTitleSSvp":{"name":"nextTimeButtonTitle","abstract":"

    The Next time button text of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV15skipButtonTitleSSvp":{"name":"skipButtonTitle","abstract":"

    The Skip this version button text of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV17updateButtonTitleSSvp":{"name":"updateButtonTitle","abstract":"

    The Update button text of the UIAlertController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV15alertControllerSo07UIAlertE0CSgvp":{"name":"alertController","abstract":"

    The instance of the UIAlertController used to present the update alert.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV13updaterWindow33_CEF2109017F934DAB33AED8753BA096CLLSo8UIWindowCvp":{"name":"updaterWindow","abstract":"

    The UIWindow instance that presents the SirenViewController.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV14alertTintColor7appName0D5Title0D7Message012updateButtonI008nextTimelI004skiplI025forceLanguageLocalizationACSo7UIColorCSg_SSSgS5SAA0R0V0Q0OSgtcfc":{"name":"init(alertTintColor:appName:alertTitle:alertMessage:updateButtonTitle:nextTimeButtonTitle:skipButtonTitle:forceLanguageLocalization:)","abstract":"

    PresentationManager‘s public initializer.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV7defaultACvpZ":{"name":"default","abstract":"

    The default PresentationManager.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV12presentAlert9withRules25forCurrentAppStoreVersion10completionyAA0G0V_SSyAA0E6ActionOcSgtF":{"name":"presentAlert(withRules:forCurrentAppStoreVersion:completion:)","abstract":"

    Constructs the localized update alert UIAlertController object.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV17updateAlertAction33_CEF2109017F934DAB33AED8753BA096CLL10completionSo07UIAlertF0CyAA0eF0OcSg_tF":{"name":"updateAlertAction(completion:)","abstract":"

    The UIAlertAction that is executed when the Update option is selected.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV19nextTimeAlertAction33_CEF2109017F934DAB33AED8753BA096CLL10completionSo07UIAlertG0CyAA0fG0OcSg_tF":{"name":"nextTimeAlertAction(completion:)","abstract":"

    The UIAlertAction that is executed when the Next time option is selected.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV15skipAlertAction33_CEF2109017F934DAB33AED8753BA096CLL25forCurrentAppStoreVersion10completionSo07UIAlertF0CSS_yAA0eF0OcSgtF":{"name":"skipAlertAction(forCurrentAppStoreVersion:completion:)","abstract":"

    The UIAlertAction that is executed when the Skip this version option is selected.

    ","parent_name":"PresentationManager"},"Structs/PresentationManager.html#/s:5Siren19PresentationManagerV22cleanUpAlertController33_CEF2109017F934DAB33AED8753BA096CLLyyF":{"name":"cleanUpAlertController()","abstract":"

    Removes the alertController from memory.

    ","parent_name":"PresentationManager"},"Structs/APIManager/Constants.html#/s:5Siren10APIManagerV9Constants33_8071139324B24E2065F4037045A8D960LLV8bundleIDSSvpZ":{"name":"bundleID","abstract":"

    Constant for the bundleId parameter in the iTunes Lookup API request.

    ","parent_name":"Constants"},"Structs/APIManager/Constants.html#/s:5Siren10APIManagerV9Constants33_8071139324B24E2065F4037045A8D960LLV7countrySSvpZ":{"name":"country","abstract":"

    Constant for the country parameter in the iTunes Lookup API request.

    ","parent_name":"Constants"},"Structs/APIManager/Constants.html":{"name":"Constants","abstract":"

    Constants used in the APIManager.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV17CompletionHandlera":{"name":"CompletionHandler","abstract":"

    Return results or errors obtained from performing a version check with Siren.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV11countryCodeSSSgvp":{"name":"countryCode","abstract":"

    The region or country of an App Store in which the app is available.","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV11countryCodeACSSSg_tcfc":{"name":"init(countryCode:)","abstract":"

    Initializes APIManager to the region or country of an App Store in which the app is available.","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV7defaultACvpZ":{"name":"default","abstract":"

    The default APIManager.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV26performVersionCheckRequest10completionyyAA11LookupModelVSg_AA10KnownErrorOSgtcSg_tF":{"name":"performVersionCheckRequest(completion:)","abstract":"

    Creates and performs a URLRequest against the iTunes Lookup API.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV26processVersionCheckResults33_8071139324B24E2065F4037045A8D960LL8withData8response5error10completiony10Foundation0M0VSg_So13NSURLResponseCSgs5Error_pSgyAA11LookupModelVSg_AA05KnownS0OSgtcSgtF":{"name":"processVersionCheckResults(withData:response:error:completion:)","abstract":"

    Parses and maps the the results from the iTunes Lookup API request.

    ","parent_name":"APIManager"},"Structs/APIManager.html#/s:5Siren10APIManagerV13makeITunesURL33_8071139324B24E2065F4037045A8D960LL10Foundation0E0VyKF":{"name":"makeITunesURL()","abstract":"

    Creates the URL that points to the iTunes Lookup API.

    ","parent_name":"APIManager"},"Structs/APIManager.html":{"name":"APIManager","abstract":"

    APIManager for Siren

    "},"Structs/PresentationManager.html":{"name":"PresentationManager","abstract":"

    PresentationManager for Siren

    "},"Structs/RulesManager.html":{"name":"RulesManager","abstract":"

    RulesManager for Siren

    "},"Structs/AlertConstants.html":{"name":"AlertConstants","abstract":"

    The default constants used for the update alert’s messaging.

    "},"Structs/Localization.html":{"name":"Localization","abstract":"

    Localization information and strings for Siren.

    "},"Structs/LookupModel.html":{"name":"LookupModel","abstract":"

    Model representing a selection of results from the iTunes Lookup API.

    "},"Structs/Results.html":{"name":"Results","abstract":"

    The relevant metadata returned from Siren upon completing a successful version check.

    "},"Structs/Rules.html":{"name":"Rules","abstract":"

    Alert Presentation Rules for Siren.

    "},"Structs/DataParser.html":{"name":"DataParser","abstract":"

    Version parsing functions for Siren.

    "},"Extensions/UserDefaults/SirenKeys.html#/s:So14NSUserDefaultsC5SirenE0C4Keys33_0884631E60E090AA276701A736B793BBLLO37PerformVersionCheckOnSubsequentLaunchyA2FmF":{"name":"PerformVersionCheckOnSubsequentLaunch","abstract":"

    Key that notifies Siren to perform a version check and present","parent_name":"SirenKeys"},"Extensions/UserDefaults/SirenKeys.html#/s:So14NSUserDefaultsC5SirenE0C4Keys33_0884631E60E090AA276701A736B793BBLLO22StoredVersionCheckDateyA2FmF":{"name":"StoredVersionCheckDate","abstract":"

    Key that stores the timestamp of the last version check.

    ","parent_name":"SirenKeys"},"Extensions/UserDefaults/SirenKeys.html#/s:So14NSUserDefaultsC5SirenE0C4Keys33_0884631E60E090AA276701A736B793BBLLO20StoredSkippedVersionyA2FmF":{"name":"StoredSkippedVersion","abstract":"

    Key that stores the version that a user decided to skip.

    ","parent_name":"SirenKeys"},"Extensions/UserDefaults/SirenKeys.html":{"name":"SirenKeys","abstract":"

    Siren-specific UserDefaults Keys

    ","parent_name":"UserDefaults"},"Extensions/UserDefaults.html#/s:So14NSUserDefaultsC5SirenE43shouldPerformVersionCheckOnSubsequentLaunchSbvpZ":{"name":"shouldPerformVersionCheckOnSubsequentLaunch","abstract":"

    Sets and Gets a UserDefault around performing a version check on a subsequent launch.

    ","parent_name":"UserDefaults"},"Extensions/UserDefaults.html#/s:So14NSUserDefaultsC5SirenE20storedSkippedVersionSSSgvpZ":{"name":"storedSkippedVersion","abstract":"

    Sets and Gets a UserDefault around storing a version that the user wants to skip updating.

    ","parent_name":"UserDefaults"},"Extensions/UserDefaults.html#/s:So14NSUserDefaultsC5SirenE21alertPresentationDate10Foundation0F0VSgvpZ":{"name":"alertPresentationDate","abstract":"

    Sets and Gets a UserDefault around the last time the user was presented a version update alert.

    ","parent_name":"UserDefaults"},"Extensions/UIAlertController.html#/s:So17UIAlertControllerC5SirenE4show6windowySo8UIWindowC_tF":{"name":"show(window:)","abstract":"

    Presents Siren’s UIAlertController in a new UIWindow.

    ","parent_name":"UIAlertController"},"Extensions/UIAlertController.html#/s:So17UIAlertControllerC5SirenE4hide6windowySo8UIWindowC_tF":{"name":"hide(window:)","abstract":"

    Hides Siren’s UIAlertController within a given window.

    ","parent_name":"UIAlertController"},"Extensions/Date.html#/s:10Foundation4DateV5SirenE4days5sinceSiAC_tFZ":{"name":"days(since:)","abstract":"

    The amount of days passed from a specific source date.

    ","parent_name":"Date"},"Extensions/Date.html#/s:10Foundation4DateV5SirenE4days5sinceSiSgSS_tFZ":{"name":"days(since:)","abstract":"

    The amount of days passed from a specific source date string.

    ","parent_name":"Date"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV15bundleExtensionSSvpZ":{"name":"bundleExtension","abstract":"

    Constant for the .bundle file extension.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV11displayNameSSvpZ":{"name":"displayName","abstract":"

    Constant for CFBundleDisplayName.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV19englishLocalizationSSvpZ":{"name":"englishLocalization","abstract":"

    Constant for the default US English localization.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV16projectExtensionSSvpZ":{"name":"projectExtension","abstract":"

    Constant for the project file extension.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV18shortVersionStringSSvpZ":{"name":"shortVersionString","abstract":"

    Constant for CFBundleShortVersionString.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html#/s:So8NSBundleC5SirenE9ConstantsV5tableSSvpZ":{"name":"table","abstract":"

    Constant for the localization table.

    ","parent_name":"Constants"},"Extensions/Bundle/Constants.html":{"name":"Constants","abstract":"

    Constants used in the Bundle extension.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE7versionSSSgyFZ":{"name":"version()","abstract":"

    Fetches the current verison of the app.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE15localizedString6forKey20andForceLocalizationS2S_AC0I0V8LanguageOSgtFZ":{"name":"localizedString(forKey:andForceLocalization:)","abstract":"

    Returns the localized string for a given default string.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE19bestMatchingAppNameSSyFZ":{"name":"bestMatchingAppName()","abstract":"

    The appropriate name for the app to be displayed in the update alert.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE15sirenBundlePath33_9C775CF4CEC7A5F21E625F58C71BDF22LLSSSgyFZ":{"name":"sirenBundlePath()","abstract":"

    The path to Siren’s localization Bundle.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE21sirenForcedBundlePath33_9C775CF4CEC7A5F21E625F58C71BDF22LL25forceLanguageLocalizationSSSgAC0R0V0Q0O_tFZ":{"name":"sirenForcedBundlePath(forceLanguageLocalization:)","abstract":"

    The path for a particular language localizationin Siren’s localization Bundle.

    ","parent_name":"Bundle"},"Extensions/Bundle.html#/s:So8NSBundleC5SirenE14deviceLanguage33_9C775CF4CEC7A5F21E625F58C71BDF22LLAC12LocalizationV0D0OSgyFZ":{"name":"deviceLanguage()","abstract":"

    The user’s preferred language based on their device’s localization.

    ","parent_name":"Bundle"},"Extensions/Bundle.html":{"name":"Bundle"},"Extensions/Date.html":{"name":"Date"},"Extensions/UIAlertController.html":{"name":"UIAlertController"},"Extensions/UserDefaults.html":{"name":"UserDefaults"},"Enums/KnownError.html#/s:5Siren10KnownErrorO20appStoreAppIDFailureyA2CmF":{"name":"appStoreAppIDFailure","abstract":"

    Error retrieving trackId as the JSON does not contain a ‘trackId’ key.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO33appStoreDataRetrievalEmptyResultsyA2CmF":{"name":"appStoreDataRetrievalEmptyResults","abstract":"

    Error retrieving App Store data as JSON results were empty. Is your app available in the US? If not, change the countryCode variable to fix this error.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO28appStoreDataRetrievalFailureyACs0C0_pSg_tcACmF":{"name":"appStoreDataRetrievalFailure(underlyingError:)","abstract":"

    Error retrieving App Store data as an error was returned.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO26appStoreJSONParsingFailureyACs0C0_p_tcACmF":{"name":"appStoreJSONParsingFailure(underlyingError:)","abstract":"

    Error parsing App Store JSON data.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO28appStoreOSVersionUnsupportedyA2CmF":{"name":"appStoreOSVersionUnsupported","abstract":"

    The version of iOS on the device is lower than that of the one required by the app verison update.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO27appStoreVersionArrayFailureyA2CmF":{"name":"appStoreVersionArrayFailure","abstract":"

    Error retrieving App Store verson number as the JSON does not contain a version key.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO25currentVersionReleaseDateyA2CmF":{"name":"currentVersionReleaseDate","abstract":"

    The currentVersionReleaseDate key is missing in the JSON payload. Please leave an issue on https://github.com/ArtSabintsev/Siren with as many details as possible.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO12malformedURLyA2CmF":{"name":"malformedURL","abstract":"

    One of the iTunes URLs used in Siren is malformed. Please leave an issue on https://github.com/ArtSabintsev/Siren with as many details as possible.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO15missingBundleIDyA2CmF":{"name":"missingBundleID","abstract":"

    Please make sure that you have set a Bundle Identifier in your project.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO17noUpdateAvailableyA2CmF":{"name":"noUpdateAvailable","abstract":"

    No new update available.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO16recentlyPromptedyA2CmF":{"name":"recentlyPrompted","abstract":"

    Siren will not present an update alert if it performed one too recently. If you would like to present an alert every time Siren is called, please consider setting the UpdatePromptFrequency.immediately rule in RulesManager

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO15releasedTooSoonyACSi_SitcACmF":{"name":"releasedTooSoon(daysSinceRelease:releasedForDays:)","abstract":"

    The app has been released for X days, but Siren cannot prompt the user until Y (where Y > X) days have passed.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO17skipVersionUpdateyACSS_SStcACmF":{"name":"skipVersionUpdate(installedVersion:appStoreVersion:)","abstract":"

    The user has opted to skip updating their current version of the app to the current App Store version.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO20localizedDescriptionSSvp":{"name":"localizedDescription","abstract":"

    The localized description for each error handled by Siren.

    ","parent_name":"KnownError"},"Enums/KnownError.html#/s:5Siren10KnownErrorO05sirenC033_B3C911EAD28C83CC211C07566B0F499ALLSSvpZ":{"name":"sirenError","abstract":"

    An easily identifiable prefix for all errors thrown by Siren.

    ","parent_name":"KnownError"},"Enums/AlertAction.html#/s:5Siren11AlertActionO8appStoreyA2CmF":{"name":"appStore","abstract":"

    The user clicked on the Update option, which took them to the app’s App Store page.

    ","parent_name":"AlertAction"},"Enums/AlertAction.html#/s:5Siren11AlertActionO8nextTimeyA2CmF":{"name":"nextTime","abstract":"

    The user clicked on the Next Time option, which dismissed the alert.

    ","parent_name":"AlertAction"},"Enums/AlertAction.html#/s:5Siren11AlertActionO4skipyA2CmF":{"name":"skip","abstract":"

    The user clicked on the Skip this version option, which dismissed the alert.

    ","parent_name":"AlertAction"},"Enums/AlertAction.html#/s:5Siren11AlertActionO7unknownyA2CmF":{"name":"unknown","abstract":"

    (Default) The user never chose an option. This is returned when an error is thrown by Siren.

    ","parent_name":"AlertAction"},"Enums/AlertAction.html":{"name":"AlertAction","abstract":"

    The UIAlertController button that was pressed upon being presented an update alert.

    "},"Enums/KnownError.html":{"name":"KnownError","abstract":"

    Enumerates all potentials errors that Siren can handle.

    "},"Classes/SirenViewController.html#/c:@M@Siren@objc(cs)SirenViewController(py)preferredStatusBarStyle":{"name":"preferredStatusBarStyle","abstract":"

    UIStatusBarStyle override.

    ","parent_name":"SirenViewController"},"Classes/Siren.html#/s:5SirenAAC14ResultsHandlera":{"name":"ResultsHandler","abstract":"

    Return results or errors obtained from performing a version check with Siren.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC6sharedABvpZ":{"name":"shared","abstract":"

    The Siren singleton. The main point of entry to the Siren library.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC10apiManagerAA10APIManagerVvp":{"name":"apiManager","abstract":"

    The manager that controls the App Store API that is","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC19presentationManagerAA012PresentationC0Vvp":{"name":"presentationManager","abstract":"

    The manager that controls the update alert’s string localization and tint color.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC12rulesManagerAA05RulesC0Vvp":{"name":"rulesManager","abstract":"

    The manager that controls the type of alert that should be displayed","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC23currentInstalledVersionSSSgvp":{"name":"currentInstalledVersion","abstract":"

    The current installed version of your app.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC23didBecomeActiveObserverSo8NSObject_pSgvp":{"name":"didBecomeActiveObserver","abstract":"

    The retained NotificationCenter observer that listens for UIApplication.didBecomeActiveNotification notifications.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC26didEnterBackgroundObserverSo8NSObject_pSgvp":{"name":"didEnterBackgroundObserver","abstract":"

    The retained NotificationCenter observer that listens for UIApplication.didEnterBackgroundNotification notifications.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC21alertPresentationDate33_7DFB1BC200A6C64FBED860A3A8153B65LL10Foundation0D0VSgvp":{"name":"alertPresentationDate","abstract":"

    The last date that an alert was presented to the user.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC5appID33_7DFB1BC200A6C64FBED860A3A8153B65LLSiSgvp":{"name":"appID","abstract":"

    The App Store’s unique identifier for an app.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC14resultsHandler33_7DFB1BC200A6C64FBED860A3A8153B65LLyAA7ResultsVSg_AA10KnownErrorOSgtcSgvp":{"name":"resultsHandler","abstract":"

    The completion handler used to return the results or errors returned by Siren.

    ","parent_name":"Siren"},"Classes/Siren.html#/c:@M@Siren@objc(cs)Siren(im)init":{"name":"init()","abstract":"

    The initialization method.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC4wail10completionyyAA7ResultsVSg_AA10KnownErrorOSgtcSg_tF":{"name":"wail(completion:)","abstract":"

    This method executes the Siren version checking and alert presentation flow.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC14launchAppStoreyyF":{"name":"launchAppStore()","abstract":"

    Launches the AppStore in two situations when the user clicked the Update button in the UIAlertController modal.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC19performVersionCheck33_7DFB1BC200A6C64FBED860A3A8153B65LLyyF":{"name":"performVersionCheck()","abstract":"

    Initiates the unidirectional version checking flow.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC8validate33_7DFB1BC200A6C64FBED860A3A8153B65LL5modelyAA11LookupModelV_tF":{"name":"validate(model:)","abstract":"

    Validates the parsed and mapped iTunes Lookup Model","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC45determineIfAlertPresentationRulesAreSatisfied33_7DFB1BC200A6C64FBED860A3A8153B65LL25forCurrentAppStoreVersion14andLookupModelySS_AA0wX0VtF":{"name":"determineIfAlertPresentationRulesAreSatisfied(forCurrentAppStoreVersion:andLookupModel:)","abstract":"

    Determines if the update alert can be presented based on the","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC12presentAlert33_7DFB1BC200A6C64FBED860A3A8153B65LL9withRules25forCurrentAppStoreVersion5model13andUpdateTypeyAA0M0V_SSAA11LookupModelVAA0M7ManagerV0uV0OtF":{"name":"presentAlert(withRules:forCurrentAppStoreVersion:model:andUpdateType:)","abstract":"

    Presents the update alert to the end user.","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC12addObservers33_7DFB1BC200A6C64FBED860A3A8153B65LLyyF":{"name":"addObservers()","abstract":"

    Add app state observers

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC21addForegroundObserver33_7DFB1BC200A6C64FBED860A3A8153B65LLyyF":{"name":"addForegroundObserver()","abstract":"

    Adds an observer that listens for app launching/relaunching.

    ","parent_name":"Siren"},"Classes/Siren.html#/s:5SirenAAC21addBackgroundObserver33_7DFB1BC200A6C64FBED860A3A8153B65LLyyF":{"name":"addBackgroundObserver()","abstract":"

    Adds an observer that listens for when the app is sent to the background.

    ","parent_name":"Siren"},"Classes/Siren.html":{"name":"Siren","abstract":"

    The Siren Class.

    "},"Classes/SirenViewController.html":{"name":"SirenViewController","abstract":"

    UIViewController Extension for Siren

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Enums.html":{"name":"Enumerations","abstract":"

    The following enumerations are available globally.

    "},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file