From cde489c8880cb716d9ec26ad52123f82afe9c7b5 Mon Sep 17 00:00:00 2001 From: Arthur Ariel Sabintsev Date: Sat, 5 Jan 2019 23:08:34 -0500 Subject: [PATCH] Fixed alert layering issue. Fixed function scoping. Added background observer. Updated docs --- Example/Example/AppDelegate.swift | 6 +- Siren.podspec | 2 +- Sources/Managers/PresentationManager.swift | 17 +- Sources/Siren.swift | 45 +++-- docs/Classes.html | 2 +- docs/Classes/Siren.html | 168 ++++++++++++------ docs/Classes/SirenViewController.html | 2 +- docs/Enums.html | 2 +- docs/Enums/AlertAction.html | 2 +- docs/Enums/KnownError.html | 2 +- docs/Extensions.html | 2 +- docs/Extensions/Bundle.html | 2 +- docs/Extensions/Bundle/Constants.html | 2 +- docs/Extensions/Date.html | 2 +- docs/Extensions/UIAlertController.html | 2 +- docs/Extensions/UserDefaults.html | 2 +- docs/Extensions/UserDefaults/SirenKeys.html | 2 +- docs/Structs.html | 2 +- docs/Structs/APIManager.html | 4 +- docs/Structs/APIManager/Constants.html | 2 +- docs/Structs/AlertConstants.html | 2 +- docs/Structs/DataParser.html | 2 +- docs/Structs/Localization.html | 2 +- docs/Structs/Localization/Language.html | 2 +- docs/Structs/LookupModel.html | 2 +- docs/Structs/LookupModel/CodingKeys.html | 2 +- docs/Structs/LookupModel/Results.html | 2 +- .../LookupModel/Results/CodingKeys.html | 2 +- docs/Structs/PresentationManager.html | 37 +++- docs/Structs/Results.html | 2 +- docs/Structs/Rules.html | 4 +- docs/Structs/Rules/AlertType.html | 2 +- docs/Structs/Rules/UpdatePromptFrequency.html | 2 +- docs/Structs/RulesManager.html | 4 +- docs/Structs/RulesManager/UpdateType.html | 2 +- .../Contents/Resources/Documents/Classes.html | 2 +- .../Resources/Documents/Classes/Siren.html | 168 ++++++++++++------ .../Classes/SirenViewController.html | 2 +- .../Contents/Resources/Documents/Enums.html | 2 +- .../Documents/Enums/AlertAction.html | 2 +- .../Resources/Documents/Enums/KnownError.html | 2 +- .../Resources/Documents/Extensions.html | 2 +- .../Documents/Extensions/Bundle.html | 2 +- .../Extensions/Bundle/Constants.html | 2 +- .../Resources/Documents/Extensions/Date.html | 2 +- .../Extensions/UIAlertController.html | 2 +- .../Documents/Extensions/UserDefaults.html | 2 +- .../Extensions/UserDefaults/SirenKeys.html | 2 +- .../Contents/Resources/Documents/Structs.html | 2 +- .../Documents/Structs/APIManager.html | 4 +- .../Structs/APIManager/Constants.html | 2 +- .../Documents/Structs/AlertConstants.html | 2 +- .../Documents/Structs/DataParser.html | 2 +- .../Documents/Structs/Localization.html | 2 +- .../Structs/Localization/Language.html | 2 +- .../Documents/Structs/LookupModel.html | 2 +- .../Structs/LookupModel/CodingKeys.html | 2 +- .../Structs/LookupModel/Results.html | 2 +- .../LookupModel/Results/CodingKeys.html | 2 +- .../Structs/PresentationManager.html | 37 +++- .../Resources/Documents/Structs/Results.html | 2 +- .../Resources/Documents/Structs/Rules.html | 4 +- .../Documents/Structs/Rules/AlertType.html | 2 +- .../Structs/Rules/UpdatePromptFrequency.html | 2 +- .../Documents/Structs/RulesManager.html | 4 +- .../Structs/RulesManager/UpdateType.html | 2 +- .../Contents/Resources/Documents/index.html | 35 ++-- .../Contents/Resources/Documents/search.json | 2 +- .../Contents/Resources/docSet.dsidx | Bin 73728 -> 69632 bytes docs/docsets/Siren.tgz | Bin 115721 -> 116187 bytes docs/index.html | 35 ++-- docs/search.json | 2 +- 72 files changed, 445 insertions(+), 237 deletions(-) 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

  • +
  • + +
    +
    +
    +
    +
    +

    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 0faea670431cc875d7b715e4786125e2fed52d33..d5c82621b16b7bb5df499b1dc7512e74d304a530 100644 GIT binary patch delta 4060 zcmbVPc~q1~wy*o`{dM=(EeP; zs($x(e|Nz_VZmF%3XAvyA*6Fta4P)JHf>SRpj_59(g@b7RA8+#i#2jKYouPBK~E(0 z6tIq_5o3#bO6$}c>QI}v!B}Z`J+f~1eyznqv$4ufhUxN!WqA@2U5`&k^VhbA) zaBKfU-$VmOpK$Q(15ayh65fZ^$R*Z0W32Bc6vuF<-bUEEXc!zdrhDH zd3O!01PP?RR$73463TH`!Uoua#eXz{Vj%WKX;p zW=`cWXm4MRG~&Y{p|BEzlOmuAMTlHjm}%D!UPgR%7~mO^^+EI9tE4Lq}hzo^lLIL@Xl$n}M(b{oslJT;!(D0R^ zNWWPhtR7M4s-5^-a6*@@>{rIi*JR42!Gxw^-Q;>H!$R3ngKs!E@*x^>=8D_7GzR3< zyb9QgRarIW9g<4A)BZ5MysD~v&dkh8+iY8vtH9+%24wgQH|7;82kL#{Qvet|*9nFA zZOAmdoHbpcT_u}^CUbZ9uSgFY2!5?xt z(vG9T*7~zo^rwDYS#kZGh&km|rM4lFIX2f!Uua^)@-uRoe=dHl{TjV`18nFu)#ZiR3dE4hu9M4RuH*D$Q8)qlej-CMrf8DLN|V` z4AL5@zvvaSg$u$!9vi5~DYoW_QTEVQJTh15#JtTc=( zD=*8ea@m~!Agu1hMMMw!eS3j@aBe|f$t+u`Yif1DjM{3_ffwBlocr=29KG-ctiz#; zPGPm%4sYSXsD2pxa}`H6qSjcn^HmEZ0=&5M<3JEN*)D}xXcFLo=`%ev2pVu)zu8!~ zxE|Jc?=D`#4K=dM4j@jVwHyCztThH3el*nRALw7ycUL#7@w)xGEaiyOOWGri745>? z{Aunq7YWUvCtna}lVcD+g$np!#Wdh?eA8gyaAgyFR}5a+7#vE8M10`*+w1>xZ14;l z-Vav(NmR&l5_!ZLeG_JS2Q;6SlDQ0Gs?hdnJ&hk3bD5X(mCFWAzg*vi`I(_xsT-g? zuXK`Mko}pjqPR>96?O~b1fGxQc5oSO4&c0Ln-2oUv=+iays^F*cHy9?S#r4#;)#Ig zT_xU|528VyD1}+5k;B~U1svIl=Kp%2Us5hbS!oE&E}n&HQKRs}QUeCfQE=|V3aq%F z2VZ!vKGXo#?PFhqr=#7r6p zTvWU3HtI$zixrF9MjE91(lSXC*NAzHXe#-i$X|IuyUo2}Y%?YpzJOJRuqH>Q)F368 zX(nD=m;Y;i_;;#GNsJj71zd9bkz-sIF;SVTvOVW2ET3)56fIU9eKH*vt+$CEsZ}H& ze_sC#OSg9Kx_2*u_n8gtobvMHL*iXWiFf|SLQZC(vXk}#Pn#9GdVku~0vOb5GcIZ^ zh240qwO)POJyfQ8^TKkLmfi{QE`BEf)K}alnVQWD84})qHx47$Wj~4+$GQ~A!L94M zH{>Mb6jv3`usMrjYl>p?Snz!9gJ39`NKCD!q1tsV#&Fj#*$}P2rQfYzsL$62srS^= z>f5?gy6(z!rLXLkC8=KgtGHO~EgTba`1AZ^?hjRi3FLch=;x&r3|29BJ1Vgq2w6jG#V-qe=7}l6_->Zb&tZG z+l~fAg$s6;KzF>fb3ORu z(p^b%H)gZA!_hJ1DZHQfnn2^JAJ%{LAv}dKyZl>z;T9FcN9bz_(Ik_*iPhfW7fxz?{8lpvPrJn)TX#V>*EB+>=l)Z9 zv&m5;3pdDon!(}8Z8Z{U)^IB6G}%aF-5-D62t*ULq7B;rdO zzn>MD^oxl2SF?t<+xHKEPoYoaluK!lg=;U3f=s-5X^AwP;l(cjXD^JU^Z$VD|Ni@*s(%T4*?K&J4yA*YjW?2HdEZ2S_B-LZk5JjX;da87t7v zv_E#f`I;Ork#Y+owS&2S*pe$_`_1Pd4u}1;7-I4GPZd&(NWy|LF?w(upGKpx@>V)T z;g(ww&=1etih{l<{k&T4BN4mVoro6>`r)#JyHqOENQuOlX))#>qS-3!BYtEG(VgM) zSXR4guq(BSM5f3saxZBM*+yPVKX;z2L~BPQ!_>x(MsW{YQidA z@OQm&lFNkYhf6Twll!a|;^MF>cs8y*u~~Rb|HC=*DdsH*;O7jP?gRdB5S)UmPBz2m zt*wUv@AWA{&+&R#jg9Ra;7wfn@w}*3ADX);`GnO_MBAmM8SfaY4cGNwsz=o^x(;2o zE>yX!99CMC8YREY5vnjAn&vU95DHU0DJq0ZQ`iGqLhyF1l@FqmJxpVVz$DKm6;ffM z=N9V)QJ@nf;;WQcE%c;d`c0wqq|q1ZzCwrXG5*&*{vXAbf$d?Z<0M9qG~w40%2$H9 zjdU!dM3&ib!@KcM=C!~l@|wF7En+Kt!tn{+*y$JDNO}4!%O{Mn{x4za=F!4OX)6=I vUzg`QoSwOmLkmPU*@2Gx*?bKhfTLSXS` zhZ)zhI``@lKDVU8UFm}FZY^aty9lbYPGU@uAp{Sk=EwX z{!FlYG>`k!7P%{W42+!Yt|)l?Ou2T7DR zYO7kL+*I}`^OamBh+NSRfjP!sjE9WN4Eqgp4e16y2$S#1ZDgn1NNT0ilE1#I_>H(y z%oqD}bA^wEK6EF|=6AsfK1hF1KaD%AZT`<6S7PG_d1Z1rCDp~w8zMw<ydL zi*bMK2|!#H7Y5Jap|}WGioe87fi0LDA0jM^=6%gs96tYX54>TM@UNLBjyP~n{9tjt zorZd`D8RWdmtx_te3*}My%UhP6~P<0Hy{jG+6F@-w%bCo7Rk^+tYib>$MCY=rSGQO zMm7L%dc$N>cd1rop<*;HGX@zB7$(R+%5~BuX{LBtoGAP*>=Z`Oi*y#hQRmBba1ERV zK8J=TdrFt;t~oDHww98)&Re7Z)I;)uwiVJ1#UE5_fJ)Wa%QUE?B7 zLR{;#f*2QMRg z^i-^(y^J?mPSiH#XQfW@Gk$NZHQX^gZRjCylOv@4QmXihaF4!3Blr>exwV-ux3rlUj)MNcgfd*X`c<0!`yEovVQT0N7Q=3q^YKyYd?g;LVYu6Qwa=(8cvWu8jm{Qdx$|&P*<6`3oqnF{lVXNUuLyjRtzApz!wc;Uh zp>R$pq$lZQ{u_Qi-&?;~KUB9{m%zQxP38K-XP_<9WG~gtWC56WpbYxqkptVoAD=jw z1AX!6!NG<;lz3TLK#j%~ym2T4C%&%;y(tN|vLsw{yjGgcdQmda%4|4npItYX`Qfxf z4d9FC4^=`>%>H1uV5P*3oj<7~gAWF_=79wlw$=;YlmwVrI$GQ9dM0Uu=6<+X>_JJC zmBs!A?QLE0jrOTB^JiX^6k1s^UbweLH-tTcA#JfjcWs=-5rFog-SF3#7xXNGbwi)S zJB6;4jJG(_5!(Fm_rtG27u;|pgnIJC%N&jnYZd!351v@eQJ59m9b;pSVhA(wq>nis zm&XN)VNB(FhKM4g1^FKjR6bLhz z=a-=UQ*YOm+h&m2U?xy9$?WKg_ut;3%Vrd>9vuTb+Kv^a%7#qhOYB5mBZo+B${W&P zF3GSGPS8+eB>y2lQh&<0gsu@A1t+8lR$@1Ps&{bf^r~*1X{BN|4OBl+V?@s;dk`kx zItj01kK2o26V}~nNBQ^rxcF=tP7kheXGyN@zkCGxxis90FCVWLU#)j*aR!IhOB#yz z;naKeuoBBp%;A@_09uG19aFIKa5o%ve-Jn^^>24@a)=$b|9zVqhMAauH<{-)YWKv- z-&Vje%)7B1KEz*dWbg-=2d%|}KQ+Q0%(~gg?`9GW!uYeJTth!I0iOPRdW5Vk(VZ?O zqH0=g3R2%!#|kr)?-g(3tHwcw!-hP0zdVU9m3B$F!fx>*y)N2Y?2{>-Mh9w%1=e)f ze4;8Ui;BzZ6BEP3M^;vr)mCM?+vBEcarhbD?wAej_{-Tba1hha<-i79eXao3xt5>G z|5!iPgdcEf347sjNoN_0dQ# zc|bgRU8;vTY`RnivH1I?CK!s(eZK@^(C2a?48eJqi-l+nj26}vr>>u%o4^KR+LcK{ z6eTu`7US)S6}s6h61_X?g+Y|0SlB@Pq0W+E0 zcF9a&{WZ#)Sw8yRW+84z=qi*E(~G7MwN)rn$0{e43C5p=J;r3iB@JL*pNhhYujdnuD{#H9`YkZOVx>%#3d*z)!X|ew(>3Xv%&Kwc?!er;;A_TxBXS2IC(b+0OFPPx`UIZIF<_wUamzd7R zyJ=B@t0NLsO%B*hHclghTT%X-p!ocUps+GFR-5qP|4T2&Ks?489*Df@50TGfxf*TV z@le|_toQ$phw&_jCz>!l&?SR*kW4m)*CyJrb5ojB%SJyiM?Bu`sMMvfZ08;o(jd#J zH^Fikuo!k%s`8N@nba+tcPN0b8NhsLRfC33Fxp5!Ukwb&mMMJ-z!`|lab5Rlkt ifq9u765##ShcW8e8Ss>A^|N{ow>ln$0pyBwrA#ogWA-K97bcXxN^z5V^awJMY??UkSD&>W{`~@m@S7deLrZS|s&B{@Y z+$xl!{f2@QosC4&f>R_MU+8bAo7x;?x@hDV{J9Mh7#5xm%gdGS2IDuQqx194YQi-~ zhGvW-f}``n=q#DV=&WZndms7tC}(RPzi;kS8>Y_g-5oj~stdpU0)a1Z{+Z0zzUTp$ z^>Q5J+Q%R?I;hy{8lo8402s)n~w`0!~5?j2-!j_dwUz7?qaId04-D<58r?KZ(MdWpC8X2Eg&yfZN1W@Z>nd|$P_Uqyq9aAyh=|~ zj|zqPh~ushFNQe+M;E}wuy)dq4l0^*3iX=lYlL+~S~UbG#qvv?oHl@wqleSk*z+Z-_F17gIO$l{vTSk7go=B#Am z{(OFZ27W2RhIfL3FOTDi(80i}stfR+EPzK4tKtlrK|N-7N|w-k)Ka9exQ6oG!1_AA zvM$}FMHhJ{Hm_S`E2UB`w#~&5Fjkr#c&smej7?{p z*-@2YUktdA*PLlKEsDpWQEJ

    qTiOtcJI;#6scq7LzNBM3WgMqiNBjkFY-|toM+Z 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�Cs8Q*cX_yde;ixD&`%fhl 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 F{XYz&0&xHU delta 107748 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

    (!io?)S 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

    842xX-~ZS7v(UGtasKeyCezYUo#ce5 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�lHD< zgaj=T(+&d3qp@6F#^hDWCJ|F6Bw;VDJGPy+6#RJ@vdC0voB|FOK%uC;x_U8)j&TMl z$vC-ab?&8$4j~-ba0U#XAl3lD{>tJ$i;+K9*LQMpSXLIpUjB4e$)n+c9EgR zeaJa?#*ZK7gvl6tiPY5nF@M1^l_Z54AJ_bOlQ`b)`76n|86PpU^l&%HPX?Z+1BOog zS@_|ObO#vmJX@JzMp5+d_srb_=kmi*uiisrxg$h(FZ$Djc0bjd-w4t8;t_HD(WIs8 zAyCT5mt(R><2<8L-Ewo>G655!8rz6u!`%*wb=*Bi`^2A2s$#;i6)3e>Q}KM$dcgs` zb}Y$)QO9sBkv{gEMllioG%nQ02WkP|_#$~+&_84f40K*=1H04V&>*&WI+ z@G}X@VWI@WkSKA6hp}~mSC>QtyO|H@1r%3}G(*)QID9{`uw|%o6@{kjW)#=%nl~pZ-Lj3&_RvA4EW#)$wbG$R`^+;^OuPYr+`z^xr@;@k;bxe?oC)gG@DHc z%8FFSd66g8l2n4C{vh08b@UHQXd=&}3g^u_8D{XW%r{3rT?GA^i=i(c^eQA};U>n! z7E2R({w5r^5eiU#iRn0fX{DKbrJ-n!yi+>II3AvZG}uc~0@L8sTOitrJ$n1bCo677 zjY#@lFW|G!R-jZZ>e!4ver*t4%M z&_C9oC&+jmsZ4XA%^1}DLC2IKWZ2IflDRF?`4>AZ!zUur@ODhmC0TXXbau?NpUE`s z>!3N_3b*j++o}T}sVP9Dh+~9dsVvm11+9mhMiwK_YKCW(UQl(6BqR2qSU6!KjgZly ztTZdzC#T0mAp>)Tv+f(i>akmiK;L>MNvbJw4ehvS(Ei6w~_UV-M@~_TVMS#6uwHTYL(iqE3x|irE+) zIqxjGy|UyidFl6`N^9`YCcgZRq%Fyqgj7nFxd2zYt^k$#qcV3>qF~Ai248I29*3C- zQp_y^?k+jrpf}%%;|q8*_URx!!KELES=`K`pz{-Hj4z@K?P4TBP8$YqWtE3tKk20( z2p9e2Y4I!Vo3S=H3bnW~GXsTnqLE(g@NB6i^djEVU`MG!1q z>N%*wC?Qbwru2I&sZ*HyPc;pJPf_1A-`@}*Q&ES@W7i75Lf1&uG_9M!G|I1-B;h2s z#j#|Fll%Z0K&My=i{ymg-Y6I2%ipPeH=6wVp(k|!j*^bRbN03XOB5{m%?@0|+ zb{UehQ5=O%7*^aotdr({bgo!Z9W%6tP_}!O%tyAo!TP!Vpf9uGma+WO-_06-(KwHO zhuvfO;?a0Af|_ks)S7XGMbVx%Q3;;W-*yjSoGqSojXw=_EW4wl&QICCYRyv<$QnyK hZSiren 🚨

    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