Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f6590001df | |||
| 51eb58d236 | |||
| a8311bd6b9 | |||
| f8aa3f5534 | |||
| eba3e056c2 | |||
| 321ba43a15 | |||
| 0b9bae5cbb | |||
| c6b3ece14e | |||
| 6203ff3e17 | |||
| f9f9b82668 | |||
| 59e4b9e113 | |||
| a5a1797cce | |||
| 9eeb265614 | |||
| 31c0109adb | |||
| df3a8fd14f | |||
| c51fcc851b | |||
| add692995a | |||
| 379d4b3d82 | |||
| c402feabf1 | |||
| 1d563f89bf | |||
| 3a4d7dd841 | |||
| 543a3cc1cb | |||
| f44a3ba879 | |||
| 54b1042b5c | |||
| a904ca08df | |||
| 6101b30b3e | |||
| 208f0ade0a | |||
| e285ded587 | |||
| f2dc07757c | |||
| 6d7613fa3e | |||
| 2352276947 | |||
| 28b789f28f | |||
| d14e0ad046 |
@@ -0,0 +1 @@
|
||||
* @artsabintsev
|
||||
+11
-1
@@ -33,7 +33,17 @@
|
||||
- [Konstantinos N.](https://github.com/kwstasna) for [Pull Request #101](https://github.com/ArtSabintsev/Siren/pull/101)
|
||||
- [Christoph Mantler](https://github.com/ChrisixFlash) for [Pull Request #103](https://github.com/ArtSabintsev/Siren/pull/103)
|
||||
- [Christoph Mantler](https://github.com/ChrisixFlash) for [Pull Request #106](https://github.com/ArtSabintsev/Siren/pull/106)
|
||||
- [Pietro D'Alessandro](https://github.com/xedla) for [Pull Request #107](https://github.com/ArtSabintsev/Siren/pull/107)
|
||||
- [xedla](https://github.com/xedla) for [Pull Request #107](https://github.com/ArtSabintsev/Siren/pull/107)
|
||||
- [Daniel Hu](https://github.com/zongmumask) for [Pull Request #116](https://github.com/ArtSabintsev/Siren/pull/116)
|
||||
- [Jakob Krigovsky](https://github.com/sonicdoe) for [Pull Request #118](https://github.com/ArtSabintsev/Siren/pull/118)
|
||||
- [germ4n](https://github.com/glm4) for [Pull Request #122](https://github.com/ArtSabintsev/Siren/pull/122)
|
||||
- [Txai Wieser](https://github.com/txaiwieser) for [Pull Request #139](https://github.com/ArtSabintsev/Siren/pull/107)
|
||||
- [Txai Wieser](https://github.com/txaiwieser) for [Pull Request #140](https://github.com/ArtSabintsev/Siren/pull/107)
|
||||
- [premyslvlcek](https://github.com/premyslvlcek) for [Pull Request #143](https://github.com/ArtSabintsev/Siren/pull/143)
|
||||
- [Seyed Mojtaba Hosseini Zeidabadi](https://github.com/MojtabaHs) for [Pull Request #144](https://github.com/ArtSabintsev/Siren/pull/143)
|
||||
- [Chanchal Raj](https://github.com/RajChanchal) for [Pull Request #171 *Harpy)](https://github.com/ArtSabintsev/harpy/pull/171)
|
||||
- [Ryoh Tsukahara](https://github.com/nixnoughtnothing) for [Pull Request #150](https://github.com/ArtSabintsev/Siren/pull/150)
|
||||
- [Ryoh Tsukahara](https://github.com/nixnoughtnothing) for [Pull Request #159](https://github.com/ArtSabintsev/Siren/pull/159)
|
||||
|
||||
### Harpy Project Contributors
|
||||
This repo is a Swift language port of [Harpy](http://github.com/ArtSabintsev/Harpy). We couldn't have built this port without acknowledging the following developers who were instrumental in getting Harpy to v3.2.1, the version of Harpy that Siren was based on.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# A sample Gemfile
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem "cocoapods", "1.2.0"
|
||||
gem "cocoapods"
|
||||
gem "jazzy"
|
||||
|
||||
+30
-23
@@ -2,33 +2,33 @@ GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
CFPropertyList (2.3.5)
|
||||
activesupport (4.2.8)
|
||||
activesupport (4.2.9)
|
||||
i18n (~> 0.7)
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.3, >= 0.3.4)
|
||||
tzinfo (~> 1.1)
|
||||
claide (1.0.1)
|
||||
cocoapods (1.2.0)
|
||||
claide (1.0.2)
|
||||
cocoapods (1.3.1)
|
||||
activesupport (>= 4.0.2, < 5)
|
||||
claide (>= 1.0.1, < 2.0)
|
||||
cocoapods-core (= 1.2.0)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
cocoapods-core (= 1.3.1)
|
||||
cocoapods-deintegrate (>= 1.0.1, < 2.0)
|
||||
cocoapods-downloader (>= 1.1.3, < 2.0)
|
||||
cocoapods-plugins (>= 1.0.0, < 2.0)
|
||||
cocoapods-search (>= 1.0.0, < 2.0)
|
||||
cocoapods-stats (>= 1.0.0, < 2.0)
|
||||
cocoapods-trunk (>= 1.1.2, < 2.0)
|
||||
cocoapods-trunk (>= 1.2.0, < 2.0)
|
||||
cocoapods-try (>= 1.1.0, < 2.0)
|
||||
colored (~> 1.2)
|
||||
colored2 (~> 3.1)
|
||||
escape (~> 0.0.4)
|
||||
fourflusher (~> 2.0.1)
|
||||
gh_inspector (~> 1.0)
|
||||
molinillo (~> 0.5.5)
|
||||
molinillo (~> 0.5.7)
|
||||
nap (~> 1.0)
|
||||
ruby-macho (~> 0.2.5)
|
||||
xcodeproj (>= 1.4.1, < 2.0)
|
||||
cocoapods-core (1.2.0)
|
||||
activesupport (>= 4.0.2, < 5)
|
||||
ruby-macho (~> 1.1)
|
||||
xcodeproj (>= 1.5.1, < 2.0)
|
||||
cocoapods-core (1.3.1)
|
||||
activesupport (>= 4.0.2, < 6)
|
||||
fuzzy_match (~> 2.0.4)
|
||||
nap (~> 1.0)
|
||||
cocoapods-deintegrate (1.0.1)
|
||||
@@ -37,18 +37,18 @@ GEM
|
||||
nap
|
||||
cocoapods-search (1.0.0)
|
||||
cocoapods-stats (1.0.0)
|
||||
cocoapods-trunk (1.1.2)
|
||||
cocoapods-trunk (1.2.0)
|
||||
nap (>= 0.8, < 2.0)
|
||||
netrc (= 0.7.8)
|
||||
cocoapods-try (1.1.0)
|
||||
colored (1.2)
|
||||
colored2 (3.1.2)
|
||||
escape (0.0.4)
|
||||
ffi (1.9.18)
|
||||
fourflusher (2.0.1)
|
||||
fuzzy_match (2.0.4)
|
||||
gh_inspector (1.0.3)
|
||||
i18n (0.8.1)
|
||||
jazzy (0.7.5)
|
||||
i18n (0.8.6)
|
||||
jazzy (0.8.3)
|
||||
cocoapods (~> 1.0)
|
||||
mustache (~> 0.99)
|
||||
open4
|
||||
@@ -58,26 +58,33 @@ GEM
|
||||
sqlite3 (~> 1.3)
|
||||
xcinvoke (~> 0.3.0)
|
||||
liferaft (0.0.6)
|
||||
minitest (5.10.1)
|
||||
minitest (5.10.3)
|
||||
molinillo (0.5.7)
|
||||
mustache (0.99.8)
|
||||
nanaimo (0.2.3)
|
||||
nap (1.1.0)
|
||||
netrc (0.7.8)
|
||||
open4 (1.3.4)
|
||||
rb-fsevent (0.10.2)
|
||||
rb-inotify (0.9.10)
|
||||
ffi (>= 0.5.0, < 2)
|
||||
redcarpet (3.4.0)
|
||||
rouge (1.11.1)
|
||||
ruby-macho (0.2.6)
|
||||
sass (3.4.23)
|
||||
ruby-macho (1.1.0)
|
||||
sass (3.5.1)
|
||||
sass-listen (~> 4.0.0)
|
||||
sass-listen (4.0.0)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
sqlite3 (1.3.13)
|
||||
thread_safe (0.3.6)
|
||||
tzinfo (1.2.3)
|
||||
thread_safe (~> 0.1)
|
||||
xcinvoke (0.3.0)
|
||||
liferaft (~> 0.0.6)
|
||||
xcodeproj (1.4.4)
|
||||
xcodeproj (1.5.1)
|
||||
CFPropertyList (~> 2.3.3)
|
||||
claide (>= 1.0.1, < 2.0)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
colored2 (~> 3.1)
|
||||
nanaimo (~> 0.2.3)
|
||||
|
||||
@@ -85,8 +92,8 @@ PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
cocoapods (= 1.2.0)
|
||||
cocoapods
|
||||
jazzy
|
||||
|
||||
BUNDLED WITH
|
||||
1.14.6
|
||||
1.15.4
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
- [Device Compatibility](https://github.com/ArtSabintsev/Siren#device-compatibility)
|
||||
- [Testing Siren](https://github.com/ArtSabintsev/Siren#testing-siren)
|
||||
- [App Store Review & Submissions](https://github.com/ArtSabintsev/Siren#app-store-submissions)
|
||||
- [Phrased Releases](https://github.com/ArtSabintsev/Siren#phased-releases)
|
||||
- [Words of Caution](https://github.com/ArtSabintsev/Siren#words-of-caution)
|
||||
- [Ports](https://github.com/ArtSabintsev/Siren#ports)
|
||||
- [Attribution](https://github.com/ArtSabintsev/Siren#created-and-maintained-by)
|
||||
@@ -40,9 +41,9 @@ If a new version is available, an alert can be presented to the user informing t
|
||||
- [x] Carthage Support
|
||||
- [x] Swift Package Manager Support
|
||||
- [x] Localized for 30+ languages (see [Localization](https://github.com/ArtSabintsev/Siren#localization))
|
||||
- [x] Pre-Update Device Compatibility Check (see [Device Compatibility](https://github.com/ArtSabintsev/Siren#device-compatibility)
|
||||
- [x] Pre-Update Device Compatibility Check (see [Device Compatibility](https://github.com/ArtSabintsev/Siren#device-compatibility))
|
||||
- [x] Three types of alerts (see [Screenshots](https://github.com/ArtSabintsev/Siren#screenshots))
|
||||
- [x] Optional delegate methods (see [Delegates (Optional)](https://github.com/ArtSabintsev/Siren#optional-delegate-and-delegate-methods)
|
||||
- [x] Optional delegate methods (see [Delegates (Optional)](https://github.com/ArtSabintsev/Siren#optional-delegate-and-delegate-methods))
|
||||
- [x] Unit Tests
|
||||
- [x] Documentation can be found at http://sabintsev.com/Siren.
|
||||
|
||||
@@ -63,27 +64,32 @@ For Swift 3 support:
|
||||
pod 'Siren'
|
||||
```
|
||||
|
||||
For Swift 4 support:
|
||||
```ruby
|
||||
pod 'Siren', :git => 'https://github.com/ArtSabintsev/Siren.git', :branch => 'swift4'
|
||||
```
|
||||
|
||||
For Swift 2.3 support:
|
||||
```ruby
|
||||
pod 'Siren', :git => 'https://github.com/ArtSabintsev/Siren.git', :branch => 'swift2.3'
|
||||
```
|
||||
|
||||
For Swift 2.2 support:
|
||||
```ruby
|
||||
pod 'Siren', '0.9.5'
|
||||
```
|
||||
|
||||
### Carthage
|
||||
For Swift 3 support:
|
||||
|
||||
``` swift
|
||||
```swift
|
||||
github "ArtSabintsev/Siren"
|
||||
```
|
||||
|
||||
For Swift 4 support:
|
||||
```swift
|
||||
github "ArtSabintsev/Siren", "swift4"
|
||||
```
|
||||
|
||||
For Swift 2.3 support:
|
||||
|
||||
``` swift
|
||||
github "ArtSabintsev/Siren" "swift2.3"
|
||||
```ruby
|
||||
github "ArtSabintsev/Siren", "swift2.3"
|
||||
```
|
||||
|
||||
### Swift Package Manager
|
||||
@@ -113,6 +119,7 @@ func application(application: UIApplication, didFinishLaunchingWithOptions launc
|
||||
siren.showAlertAfterCurrentVersionHasBeenReleasedForDays = 3
|
||||
|
||||
// Replace .immediately with .daily or .weekly to specify a maximum daily or weekly frequency for version checks.
|
||||
// DO NOT CALL THIS METHOD IN didFinishLaunchingWithOptions IF YOU ALSO PLAN TO CALL IT IN applicationDidBecomeActive.
|
||||
siren.checkVersion(checkType: .immediately)
|
||||
|
||||
return true
|
||||
@@ -194,6 +201,8 @@ Siren is localized for
|
||||
- Armenian
|
||||
- Basque
|
||||
- Chinese (Simplified and Traditional)
|
||||
- Croatian
|
||||
- Czech
|
||||
- Danish
|
||||
- Dutch
|
||||
- English
|
||||
@@ -212,15 +221,17 @@ Siren is localized for
|
||||
- Lithuanian
|
||||
- Malay
|
||||
- Norwegian (Bokmål)
|
||||
- Persian (Afghanistan, Iran, Persian)
|
||||
- Polish
|
||||
- Portuguese (Brazil and Portugal)
|
||||
- Russian
|
||||
- Serbian (Cyrillic and Latin)
|
||||
- Slovenian
|
||||
- Swedish
|
||||
- Spanish
|
||||
- Swedish
|
||||
- Thai
|
||||
- Turkish
|
||||
- Urdu
|
||||
- Vietnamese
|
||||
|
||||
You may want the update dialog to *always* appear in a certain language, ignoring iOS's language setting (e.g. apps released in a specific country).
|
||||
@@ -243,6 +254,9 @@ For your convenience, you may turn on debugging statements by setting `self.debu
|
||||
## App Store Submissions
|
||||
The App Store reviewer will **not** see the alert. The version in the App Store will always be older than the version being reviewed.
|
||||
|
||||
## Phased Releases
|
||||
In 2017, Apple announced the [ability to rollout app updates gradually (a.k.a. Phased Releases)](https://itunespartner.apple.com/en/apps/faq/Managing%20Your%20Apps_Submission%20Process). Siren will continue to work as it has in the past, presenting an update modal to _all_ users. If you opt-in to a phased rollout for a specific version, you will need to remotely disable Siren until the rollout is done.
|
||||
|
||||
## Words of Caution
|
||||
Occasionally, the iTunes JSON will update faster than the App Store CDN, meaning the JSON may state that the new version of the app has been release, while no new binary is made available for download via the App Store. It is for this reason that Siren will, by default, wait 24 hours after the JSON has been updated to prompt the user to update. To change the default setting, please modify the value of `showAlertAfterCurrentVersionHasBeenReleasedForDays`.
|
||||
|
||||
|
||||
+3
-3
@@ -1,10 +1,10 @@
|
||||
Pod::Spec.new do |s|
|
||||
s.name = "Siren"
|
||||
s.version = "2.0.2"
|
||||
s.summary = "Notify users when a new version of your iOS app is available, and prompt them with the App Store link.."
|
||||
s.version = "2.0.8"
|
||||
s.summary = "Notify users that a new version of your iOS app is available, and prompt them with the App Store link."
|
||||
|
||||
s.description = <<-DESC
|
||||
Siren is checks a user’s currently installed version of your iOS app against the version that is currently available in the App Store.
|
||||
Notify users when a new version of your iOS app is available, and prompt them with the App Store link.
|
||||
DESC
|
||||
|
||||
s.homepage = "https://github.com/ArtSabintsev/Siren"
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
8E43D6231E8223EE00ECFFC8 /* SirenDateExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E43D6221E8223EE00ECFFC8 /* SirenDateExtension.swift */; };
|
||||
8E528A301E989A7A00B643C4 /* SirenDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E528A2F1E989A7A00B643C4 /* SirenDelegate.swift */; };
|
||||
8E528A321E989E0A00B643C4 /* SirenTestHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E528A311E989E0A00B643C4 /* SirenTestHelper.swift */; };
|
||||
8E5D15B11F3632D7001C0960 /* SirenLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E5D15B01F3632D7001C0960 /* SirenLog.swift */; };
|
||||
8E9C238B1E7CDB42000ED3DA /* SirenBundleExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E9C238A1E7CDB42000ED3DA /* SirenBundleExtension.swift */; };
|
||||
8E9C238D1E7CDD31000ED3DA /* SirenUIAlertControllerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E9C238C1E7CDD31000ED3DA /* SirenUIAlertControllerExtension.swift */; };
|
||||
8E9C238F1E7CDDE7000ED3DA /* SirenViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E9C238E1E7CDDE7000ED3DA /* SirenViewController.swift */; };
|
||||
@@ -67,6 +68,7 @@
|
||||
8E43D6221E8223EE00ECFFC8 /* SirenDateExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SirenDateExtension.swift; path = ../../Sources/SirenDateExtension.swift; sourceTree = "<group>"; };
|
||||
8E528A2F1E989A7A00B643C4 /* SirenDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SirenDelegate.swift; path = ../../Sources/SirenDelegate.swift; sourceTree = "<group>"; };
|
||||
8E528A311E989E0A00B643C4 /* SirenTestHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SirenTestHelper.swift; path = ../../Sources/SirenTestHelper.swift; sourceTree = "<group>"; };
|
||||
8E5D15B01F3632D7001C0960 /* SirenLog.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SirenLog.swift; path = ../../Sources/SirenLog.swift; sourceTree = "<group>"; };
|
||||
8E9C238A1E7CDB42000ED3DA /* SirenBundleExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SirenBundleExtension.swift; path = ../../Sources/SirenBundleExtension.swift; sourceTree = "<group>"; };
|
||||
8E9C238C1E7CDD31000ED3DA /* SirenUIAlertControllerExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SirenUIAlertControllerExtension.swift; path = ../../Sources/SirenUIAlertControllerExtension.swift; sourceTree = "<group>"; };
|
||||
8E9C238E1E7CDDE7000ED3DA /* SirenViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SirenViewController.swift; path = ../../Sources/SirenViewController.swift; sourceTree = "<group>"; };
|
||||
@@ -115,6 +117,7 @@
|
||||
8E528A2F1E989A7A00B643C4 /* SirenDelegate.swift */,
|
||||
8E9C238A1E7CDB42000ED3DA /* SirenBundleExtension.swift */,
|
||||
8E43D6221E8223EE00ECFFC8 /* SirenDateExtension.swift */,
|
||||
8E5D15B01F3632D7001C0960 /* SirenLog.swift */,
|
||||
8E528A311E989E0A00B643C4 /* SirenTestHelper.swift */,
|
||||
8E9C238C1E7CDD31000ED3DA /* SirenUIAlertControllerExtension.swift */,
|
||||
8E9C238E1E7CDDE7000ED3DA /* SirenViewController.swift */,
|
||||
@@ -253,24 +256,24 @@
|
||||
attributes = {
|
||||
LastSwiftMigration = 0700;
|
||||
LastSwiftUpdateCheck = 0730;
|
||||
LastUpgradeCheck = 0820;
|
||||
LastUpgradeCheck = 0900;
|
||||
ORGANIZATIONNAME = "Sabintsev iOS Projects";
|
||||
TargetAttributes = {
|
||||
55EC36461E6BB98A00726F13 = {
|
||||
CreatedOnToolsVersion = 8.2.1;
|
||||
LastSwiftMigration = 0820;
|
||||
LastSwiftMigration = 0900;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
8E3A6C031D07CB6F00A8B7CF = {
|
||||
CreatedOnToolsVersion = 7.3.1;
|
||||
LastSwiftMigration = 0800;
|
||||
LastSwiftMigration = 0900;
|
||||
TestTargetID = 8EC391801A58B465001C121E;
|
||||
};
|
||||
8EC391801A58B465001C121E = {
|
||||
CreatedOnToolsVersion = 6.1.1;
|
||||
DevelopmentTeam = HT94948NDD;
|
||||
DevelopmentTeamName = "Arthur Sabintsev";
|
||||
LastSwiftMigration = 0800;
|
||||
LastSwiftMigration = 0900;
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -348,6 +351,7 @@
|
||||
8E9C238F1E7CDDE7000ED3DA /* SirenViewController.swift in Sources */,
|
||||
55EC36611E6BB99B00726F13 /* Siren.swift in Sources */,
|
||||
8E43D6231E8223EE00ECFFC8 /* SirenDateExtension.swift in Sources */,
|
||||
8E5D15B11F3632D7001C0960 /* SirenLog.swift in Sources */,
|
||||
8E9C238B1E7CDB42000ED3DA /* SirenBundleExtension.swift in Sources */,
|
||||
8E528A301E989A7A00B643C4 /* SirenDelegate.swift in Sources */,
|
||||
8E9C238D1E7CDD31000ED3DA /* SirenUIAlertControllerExtension.swift in Sources */,
|
||||
@@ -428,7 +432,7 @@
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 3.0;
|
||||
SWIFT_VERSION = 4.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
@@ -457,7 +461,7 @@
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||
SWIFT_VERSION = 3.0;
|
||||
SWIFT_VERSION = 4.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
@@ -476,7 +480,7 @@
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.sabintsev.SirenTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 3.0;
|
||||
SWIFT_VERSION = 4.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SirenExample.app/SirenExample";
|
||||
};
|
||||
name = Debug;
|
||||
@@ -495,7 +499,7 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.sabintsev.SirenTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||
SWIFT_VERSION = 3.0;
|
||||
SWIFT_VERSION = 4.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SirenExample.app/SirenExample";
|
||||
};
|
||||
name = Release;
|
||||
@@ -508,14 +512,20 @@
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
@@ -554,14 +564,20 @@
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
@@ -594,7 +610,7 @@
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.apple.itunesconnect.mobile;
|
||||
PRODUCT_NAME = SirenExample;
|
||||
SWIFT_VERSION = 3.0;
|
||||
SWIFT_VERSION = 4.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@@ -609,7 +625,7 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.apple.itunesconnect.mobile;
|
||||
PRODUCT_NAME = SirenExample;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||
SWIFT_VERSION = 3.0;
|
||||
SWIFT_VERSION = 4.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0820"
|
||||
LastUpgradeVersion = "0900"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
@@ -26,6 +26,7 @@
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
language = ""
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
@@ -36,6 +37,7 @@
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
language = ""
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0820"
|
||||
LastUpgradeVersion = "0900"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
@@ -26,6 +26,7 @@
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
language = ""
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
<TestableReference
|
||||
@@ -55,6 +56,7 @@
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
language = ""
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
|
||||
@@ -22,7 +22,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
return true
|
||||
}
|
||||
|
||||
func setupSiren() {
|
||||
@objc func setupSiren() {
|
||||
let siren = Siren.shared
|
||||
|
||||
// Optional
|
||||
@@ -35,7 +35,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
// siren.appName = "Test App Name"
|
||||
|
||||
// Optional - Defaults to .Option
|
||||
// siren.alertType = .Option // or .Force, .Skip, .None
|
||||
// siren.alertType = .option // or .force, .skip, .none
|
||||
|
||||
// Optional - Can set differentiated Alerts for Major, Minor, Patch, and Revision Updates (Must be called AFTER siren.alertType, if you are using siren.alertType)
|
||||
siren.majorUpdateAlertType = .option
|
||||
@@ -54,8 +54,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
// To show the update immediately after Apple has updated their JSON, set this value to 0. Not recommended due to aforementioned reason in https://github.com/ArtSabintsev/Siren#words-of-caution.
|
||||
// siren.showAlertAfterCurrentVersionHasBeenReleasedForDays = 3
|
||||
|
||||
// Required
|
||||
siren.checkVersion(checkType: .immediately)
|
||||
// Optional (Only do this if you don't call checkVersion in didBecomeActive)
|
||||
// siren.checkVersion(checkType: .immediately)
|
||||
}
|
||||
|
||||
func applicationWillEnterForeground(_ application: UIApplication) {
|
||||
@@ -75,28 +75,28 @@ extension AppDelegate: SirenDelegate
|
||||
print(#function, alertType)
|
||||
}
|
||||
|
||||
func sirenUserDidCancel() {
|
||||
@objc func sirenUserDidCancel() {
|
||||
print(#function)
|
||||
}
|
||||
|
||||
func sirenUserDidSkipVersion() {
|
||||
@objc func sirenUserDidSkipVersion() {
|
||||
print(#function)
|
||||
}
|
||||
|
||||
func sirenUserDidLaunchAppStore() {
|
||||
@objc func sirenUserDidLaunchAppStore() {
|
||||
print(#function)
|
||||
}
|
||||
|
||||
func sirenDidFailVersionCheck(error: NSError) {
|
||||
@objc func sirenDidFailVersionCheck(error: NSError) {
|
||||
print(#function, error)
|
||||
}
|
||||
|
||||
func sirenLatestVersionInstalled() {
|
||||
@objc func sirenLatestVersionInstalled() {
|
||||
print(#function, "Latest version of app is installed")
|
||||
}
|
||||
|
||||
// This delegate method is only hit when alertType is initialized to .none
|
||||
func sirenDidDetectNewVersionWithoutAlert(message: String) {
|
||||
@objc func sirenDidDetectNewVersionWithoutAlert(message: String) {
|
||||
print(#function, "\(message)")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -240,6 +240,23 @@ extension SirenTests {
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update", forceLanguageLocalization: language), "Ažuriraj")
|
||||
}
|
||||
|
||||
func testCzechLocalization() {
|
||||
let language: Siren.LanguageType = .Czech
|
||||
siren.forceLanguageLocalization = language
|
||||
|
||||
// Update Available
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update Available", forceLanguageLocalization: language), "Aktualizace dostupná")
|
||||
|
||||
// Next time
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Next time", forceLanguageLocalization: language), "Příště")
|
||||
|
||||
// Skip this version
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Skip this version", forceLanguageLocalization: language), "Přeskočit tuto verzi")
|
||||
|
||||
// Update
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update", forceLanguageLocalization: language), "Aktualizovat")
|
||||
}
|
||||
|
||||
func testDanishLocalization() {
|
||||
let language: Siren.LanguageType = .Danish
|
||||
siren.forceLanguageLocalization = language
|
||||
@@ -432,7 +449,7 @@ extension SirenTests {
|
||||
siren.forceLanguageLocalization = language
|
||||
|
||||
// Update Available
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update Available", forceLanguageLocalization: language), "更新が利用可能")
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update Available", forceLanguageLocalization: language), "アップデートのお知らせ")
|
||||
|
||||
// Next time
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Next time", forceLanguageLocalization: language), "次回")
|
||||
@@ -441,7 +458,7 @@ extension SirenTests {
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Skip this version", forceLanguageLocalization: language), "このバージョンをスキップ")
|
||||
|
||||
// Update
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update", forceLanguageLocalization: language), "更新")
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update", forceLanguageLocalization: language), "アップデート")
|
||||
}
|
||||
|
||||
func testKoreanLocalization() {
|
||||
@@ -529,6 +546,57 @@ extension SirenTests {
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update", forceLanguageLocalization: language), "Oppdater")
|
||||
}
|
||||
|
||||
func testPersianLocalization() {
|
||||
let language: Siren.LanguageType = .Persian
|
||||
siren.forceLanguageLocalization = language
|
||||
|
||||
// Update Available
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update Available", forceLanguageLocalization: language), "بروزرسانی در دسترس")
|
||||
|
||||
// Next time
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Next time", forceLanguageLocalization: language), "دفعه بعد")
|
||||
|
||||
// Skip this version
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Skip this version", forceLanguageLocalization: language), "رد این نسخه")
|
||||
|
||||
// Update
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update", forceLanguageLocalization: language), "بروزرسانی")
|
||||
}
|
||||
|
||||
func testPersianAfghanistanLocalization() {
|
||||
let language: Siren.LanguageType = .PersianAfghanistan
|
||||
siren.forceLanguageLocalization = language
|
||||
|
||||
// Update Available
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update Available", forceLanguageLocalization: language), "بروزرسانی در دسترس")
|
||||
|
||||
// Next time
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Next time", forceLanguageLocalization: language), "دگر بار")
|
||||
|
||||
// Skip this version
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Skip this version", forceLanguageLocalization: language), "رد این نسخه")
|
||||
|
||||
// Update
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update", forceLanguageLocalization: language), "بروزرسانی")
|
||||
}
|
||||
|
||||
func testPersianIranLocalization() {
|
||||
let language: Siren.LanguageType = .PersianIran
|
||||
siren.forceLanguageLocalization = language
|
||||
|
||||
// Update Available
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update Available", forceLanguageLocalization: language), "بروزرسانی در دسترس")
|
||||
|
||||
// Next time
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Next time", forceLanguageLocalization: language), "دفعه بعد")
|
||||
|
||||
// Skip this version
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Skip this version", forceLanguageLocalization: language), "رد این نسخه")
|
||||
|
||||
// Update
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update", forceLanguageLocalization: language), "بروزرسانی")
|
||||
}
|
||||
|
||||
func testPolishLocalization() {
|
||||
let language: Siren.LanguageType = .Polish
|
||||
siren.forceLanguageLocalization = language
|
||||
@@ -715,6 +783,23 @@ extension SirenTests {
|
||||
// Update
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update", forceLanguageLocalization: language), "Güncelle")
|
||||
}
|
||||
|
||||
func testUrduLocalization() {
|
||||
let language: Siren.LanguageType = .Urdu
|
||||
siren.forceLanguageLocalization = language
|
||||
|
||||
// Update Available
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update Available", forceLanguageLocalization: language), "نیا اپڈیٹ")
|
||||
|
||||
// Next time
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Next time", forceLanguageLocalization: language), "اگلی مرتبہ")
|
||||
|
||||
// Skip this version
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Skip this version", forceLanguageLocalization: language), "اس ورزن کو چھوڑ دیں")
|
||||
|
||||
// Update
|
||||
XCTAssertEqual(Bundle().testLocalizedString(stringKey: "Update", forceLanguageLocalization: language), "اپڈیٹ کریں")
|
||||
}
|
||||
|
||||
func testVietnameseLocalization() {
|
||||
let language: Siren.LanguageType = .Vietnamese
|
||||
|
||||
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
+48
-35
@@ -14,12 +14,12 @@ import UIKit
|
||||
public final class Siren: NSObject {
|
||||
|
||||
/// Current installed version of your app.
|
||||
internal var currentInstalledVersion: String? = {
|
||||
@objc internal var currentInstalledVersion: String? = {
|
||||
return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String
|
||||
}()
|
||||
|
||||
/// The error domain for all errors created by Siren.
|
||||
public let SirenErrorDomain = "Siren Error Domain"
|
||||
@objc public let SirenErrorDomain = "Siren Error Domain"
|
||||
|
||||
/// The SirenDelegate variable, which should be set if you'd like to be notified:
|
||||
///
|
||||
@@ -34,8 +34,8 @@ public final class Siren: NSObject {
|
||||
public weak var delegate: SirenDelegate?
|
||||
|
||||
/// The debug flag, which is disabled by default.
|
||||
/// When enabled, a stream of println() statements are logged to your console when a version check is performed.
|
||||
public lazy var debugEnabled = false
|
||||
/// When enabled, a stream of print() statements are logged to your console when a version check is performed.
|
||||
@objc public lazy var debugEnabled = false
|
||||
|
||||
/// Determines the type of alert that should be shown.
|
||||
/// See the Siren.AlertType enum for full details.
|
||||
@@ -70,36 +70,36 @@ public final class Siren: NSObject {
|
||||
|
||||
/// The name of your app.
|
||||
/// By default, it's set to the name of the app that's stored in your plist.
|
||||
public lazy var appName: String = Bundle.main.bestMatchingAppName()
|
||||
@objc public lazy var appName: String = Bundle.main.bestMatchingAppName()
|
||||
|
||||
/// The region or country of an App Store in which your app is available.
|
||||
/// By default, all version checks are performed against the US App Store.
|
||||
/// If your app is not available in the US App Store, set it to the identifier of at least one App Store within which it is available.
|
||||
public var countryCode: String?
|
||||
@objc public var countryCode: String?
|
||||
|
||||
/// Overrides the default localization of a user's device when presenting the update message and button titles in the alert.
|
||||
/// See the Siren.LanguageType enum for more details.
|
||||
public var forceLanguageLocalization: Siren.LanguageType?
|
||||
|
||||
/// Overrides the tint color for UIAlertController.
|
||||
public var alertControllerTintColor: UIColor?
|
||||
@objc public var alertControllerTintColor: UIColor?
|
||||
|
||||
/// When this is set, the alert will only show up if the current version has already been released for X days
|
||||
/// Defaults to 1 day to avoid an issue where Apple updates the JSON faster than the app binary propogates to the App Store.
|
||||
public var showAlertAfterCurrentVersionHasBeenReleasedForDays: Int = 1
|
||||
@objc public var showAlertAfterCurrentVersionHasBeenReleasedForDays: Int = 1
|
||||
|
||||
/// The current version of your app that is available for download on the App Store
|
||||
public internal(set) var currentAppStoreVersion: String?
|
||||
@objc public internal(set) var currentAppStoreVersion: String?
|
||||
|
||||
internal var updaterWindow: UIWindow?
|
||||
@objc internal var updaterWindow: UIWindow?
|
||||
fileprivate var appID: Int?
|
||||
fileprivate var lastVersionCheckPerformedOnDate: Date?
|
||||
fileprivate lazy var alertViewIsVisible: Bool = false
|
||||
|
||||
/// The App's Singleton
|
||||
public static let shared = Siren()
|
||||
@objc public static let shared = Siren()
|
||||
|
||||
@available(*, deprecated: 1.2.0, unavailable, renamed: "shared")
|
||||
@objc @available(*, deprecated: 1.2.0, unavailable, renamed: "shared")
|
||||
public static let sharedInstance = Siren()
|
||||
|
||||
override init() {
|
||||
@@ -114,7 +114,7 @@ public final class Siren: NSObject {
|
||||
/// - checkType: The frequency in days in which you want a check to be performed. Please refer to the Siren.VersionCheckType enum for more details.
|
||||
public func checkVersion(checkType: VersionCheckType) {
|
||||
guard let _ = Bundle.bundleID() else {
|
||||
printMessage(message: "Please make sure that you have set a `Bundle Identifier` in your project.")
|
||||
printMessage("Please make sure that you have set a `Bundle Identifier` in your project.")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -133,6 +133,22 @@ public final class Siren: NSObject {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Launches the AppStore in two situations:
|
||||
///
|
||||
/// - User clicked the `Update` button in the UIAlertController modal.
|
||||
/// - Developer built a custom alert modal and needs to be able to call this function when the user chooses to update the app in the aforementioned custom modal.
|
||||
@objc public func launchAppStore() {
|
||||
guard let appID = appID,
|
||||
let iTunesURL = URL(string: "https://itunes.apple.com/app/id\(appID)") else {
|
||||
return
|
||||
}
|
||||
|
||||
DispatchQueue.main.async {
|
||||
UIApplication.shared.openURL(iTunesURL)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// MARK: - Helpers (Networking)
|
||||
@@ -170,7 +186,7 @@ private extension Siren {
|
||||
|
||||
DispatchQueue.main.async { [unowned self] in
|
||||
// Print iTunesLookup results from appData
|
||||
self.printMessage(message: "JSON results: \(appData)")
|
||||
self.printMessage("JSON results: \(appData)")
|
||||
|
||||
// Process Results (e.g., extract current version that is available on the AppStore)
|
||||
self.processVersionCheck(with: appData)
|
||||
@@ -228,7 +244,7 @@ private extension Siren {
|
||||
|
||||
guard daysSinceRelease >= showAlertAfterCurrentVersionHasBeenReleasedForDays else {
|
||||
let message = "Your app has been released for \(daysSinceRelease) days, but Siren cannot prompt the user until \(showAlertAfterCurrentVersionHasBeenReleasedForDays) days have passed."
|
||||
self.printMessage(message: message)
|
||||
self.printMessage(message)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -275,7 +291,7 @@ private extension Siren {
|
||||
}
|
||||
|
||||
func showAlert() {
|
||||
let updateAvailableMessage = Bundle().localizedString(stringKey: "Update Available", forceLanguageLocalization: forceLanguageLocalization)
|
||||
let updateAvailableMessage = Bundle.localizedString(stringKey: "Update Available", forceLanguageLocalization: forceLanguageLocalization)
|
||||
let newVersionMessage = localizedNewVersionMessage()
|
||||
|
||||
let alertController = UIAlertController(title: updateAvailableMessage, message: newVersionMessage, preferredStyle: .alert)
|
||||
@@ -380,7 +396,7 @@ private extension Siren {
|
||||
private extension Siren {
|
||||
func localizedNewVersionMessage() -> String {
|
||||
let newVersionMessageToLocalize = "A new version of %@ is available. Please update to version %@ now."
|
||||
let newVersionMessage = Bundle().localizedString(stringKey: newVersionMessageToLocalize, forceLanguageLocalization: forceLanguageLocalization)
|
||||
let newVersionMessage = Bundle.localizedString(stringKey: newVersionMessageToLocalize, forceLanguageLocalization: forceLanguageLocalization)
|
||||
|
||||
guard let currentAppStoreVersion = currentAppStoreVersion else {
|
||||
return String(format: newVersionMessage, appName, "Unknown")
|
||||
@@ -390,22 +406,22 @@ private extension Siren {
|
||||
}
|
||||
|
||||
func localizedUpdateButtonTitle() -> String {
|
||||
return Bundle().localizedString(stringKey: "Update", forceLanguageLocalization: forceLanguageLocalization)
|
||||
return Bundle.localizedString(stringKey: "Update", forceLanguageLocalization: forceLanguageLocalization)
|
||||
}
|
||||
|
||||
func localizedNextTimeButtonTitle() -> String {
|
||||
return Bundle().localizedString(stringKey: "Next time", forceLanguageLocalization: forceLanguageLocalization)
|
||||
return Bundle.localizedString(stringKey: "Next time", forceLanguageLocalization: forceLanguageLocalization)
|
||||
}
|
||||
|
||||
func localizedSkipButtonTitle() -> String {
|
||||
return Bundle().localizedString(stringKey: "Skip this version", forceLanguageLocalization: forceLanguageLocalization)
|
||||
return Bundle.localizedString(stringKey: "Skip this version", forceLanguageLocalization: forceLanguageLocalization)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Helpers (Version)
|
||||
|
||||
extension Siren {
|
||||
func isAppStoreVersionNewer() -> Bool {
|
||||
@objc func isAppStoreVersionNewer() -> Bool {
|
||||
var newVersionExists = false
|
||||
|
||||
if let currentInstalledVersion = currentInstalledVersion,
|
||||
@@ -456,20 +472,12 @@ private extension Siren {
|
||||
}
|
||||
}
|
||||
|
||||
func launchAppStore() {
|
||||
guard let appID = appID,
|
||||
let iTunesURL = URL(string: "https://itunes.apple.com/app/id\(appID)") else {
|
||||
return
|
||||
}
|
||||
|
||||
DispatchQueue.main.async {
|
||||
UIApplication.shared.openURL(iTunesURL)
|
||||
}
|
||||
}
|
||||
|
||||
func printMessage(message: String) {
|
||||
/// Routes a console-bound message to the `SirenLog` struct, which decorates the log message.
|
||||
///
|
||||
/// - Parameter message: The message to decorate and log to the console.
|
||||
func printMessage(_ message: String) {
|
||||
if debugEnabled {
|
||||
print("[Siren] \(message)")
|
||||
SirenLog(message)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -517,6 +525,7 @@ public extension Siren {
|
||||
case ChineseSimplified = "zh-Hans"
|
||||
case ChineseTraditional = "zh-Hant"
|
||||
case Croatian = "hr"
|
||||
case Czech = "cs"
|
||||
case Danish = "da"
|
||||
case Dutch = "nl"
|
||||
case English = "en"
|
||||
@@ -535,6 +544,9 @@ public extension Siren {
|
||||
case Lithuanian = "lt"
|
||||
case Malay = "ms"
|
||||
case Norwegian = "nb-NO"
|
||||
case Persian = "fa"
|
||||
case PersianAfghanistan = "fa-AF"
|
||||
case PersianIran = "fa-IR"
|
||||
case Polish = "pl"
|
||||
case PortugueseBrazil = "pt"
|
||||
case PortuguesePortugal = "pt-PT"
|
||||
@@ -546,6 +558,7 @@ public extension Siren {
|
||||
case Swedish = "sv"
|
||||
case Thai = "th"
|
||||
case Turkish = "tr"
|
||||
case Urdu = "ur"
|
||||
case Vietnamese = "vi"
|
||||
}
|
||||
}
|
||||
@@ -634,6 +647,6 @@ private extension Siren {
|
||||
|
||||
delegate?.sirenDidFailVersionCheck(error: error)
|
||||
|
||||
printMessage(message: error.localizedDescription)
|
||||
printMessage(error.localizedDescription)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,21 +11,23 @@ import Foundation
|
||||
// MARK: - Bundle Extension for Siren
|
||||
|
||||
internal extension Bundle {
|
||||
@objc
|
||||
class func bundleID() -> String? {
|
||||
return Bundle.main.bundleIdentifier
|
||||
}
|
||||
|
||||
func sirenBundlePath() -> String {
|
||||
@objc
|
||||
class func sirenBundlePath() -> String {
|
||||
return Bundle(for: Siren.self).path(forResource: "Siren", ofType: "bundle") as String!
|
||||
}
|
||||
|
||||
func sirenForcedBundlePath(forceLanguageLocalization: Siren.LanguageType) -> String {
|
||||
class func sirenForcedBundlePath(forceLanguageLocalization: Siren.LanguageType) -> String {
|
||||
let path = sirenBundlePath()
|
||||
let name = forceLanguageLocalization.rawValue
|
||||
return Bundle(path: path)!.path(forResource: name, ofType: "lproj")!
|
||||
}
|
||||
|
||||
func localizedString(stringKey: String, forceLanguageLocalization: Siren.LanguageType?) -> String {
|
||||
class func localizedString(stringKey: String, forceLanguageLocalization: Siren.LanguageType?) -> String {
|
||||
var path: String
|
||||
let table = "SirenLocalizable"
|
||||
if let forceLanguageLocalization = forceLanguageLocalization {
|
||||
@@ -37,6 +39,7 @@ internal extension Bundle {
|
||||
return Bundle(path: path)!.localizedString(forKey: stringKey, value: stringKey, table: table)
|
||||
}
|
||||
|
||||
@objc
|
||||
func bestMatchingAppName() -> String {
|
||||
let bundleDisplayName = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as? String
|
||||
let bundleName = Bundle.main.object(forInfoDictionaryKey: kCFBundleNameKey as String) as? String
|
||||
@@ -48,7 +51,7 @@ internal extension Bundle {
|
||||
// MARK: - Bundle Extension for Testing Siren
|
||||
|
||||
extension Bundle {
|
||||
func testLocalizedString(stringKey: String, forceLanguageLocalization: Siren.LanguageType?) -> String {
|
||||
return Bundle().localizedString(stringKey: stringKey, forceLanguageLocalization: forceLanguageLocalization)
|
||||
class func testLocalizedString(stringKey: String, forceLanguageLocalization: Siren.LanguageType?) -> String {
|
||||
return Bundle.localizedString(stringKey: stringKey, forceLanguageLocalization: forceLanguageLocalization)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ internal extension Date {
|
||||
|
||||
static func days(since dateString: String) -> Int? {
|
||||
let dateformatter = DateFormatter()
|
||||
dateformatter.locale = Locale(identifier: "en_US_POSIX")
|
||||
dateformatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"
|
||||
|
||||
guard let releaseDate = dateformatter.date(from: dateString) else {
|
||||
|
||||
@@ -39,31 +39,35 @@ public protocol SirenDelegate: class {
|
||||
public extension SirenDelegate {
|
||||
|
||||
func sirenDidShowUpdateDialog(alertType: Siren.AlertType) {
|
||||
assertionFailure("An attempt to reach \(#function) failed as it was called without being implemented.")
|
||||
printMessage()
|
||||
}
|
||||
|
||||
func sirenUserDidLaunchAppStore() {
|
||||
assertionFailure("An attempt to reach \(#function) failed as it was called without being implemented.")
|
||||
printMessage()
|
||||
}
|
||||
|
||||
func sirenUserDidSkipVersion() {
|
||||
assertionFailure("An attempt to reach \(#function) failed as it was called without being implemented.")
|
||||
printMessage()
|
||||
}
|
||||
|
||||
func sirenUserDidCancel() {
|
||||
assertionFailure("An attempt to reach \(#function) failed as it was called without being implemented.")
|
||||
printMessage()
|
||||
}
|
||||
|
||||
func sirenDidFailVersionCheck(error: NSError) {
|
||||
assertionFailure("An attempt to reach \(#function) failed as it was called without being implemented.")
|
||||
printMessage()
|
||||
}
|
||||
|
||||
func sirenDidDetectNewVersionWithoutAlert(message: String) {
|
||||
assertionFailure("An attempt to reach \(#function) failed as it was called without being implemented.")
|
||||
printMessage()
|
||||
}
|
||||
|
||||
func sirenLatestVersionInstalled() {
|
||||
assertionFailure("An attempt to reach \(#function) failed as it was called without being implemented.")
|
||||
printMessage()
|
||||
}
|
||||
|
||||
private func printMessage(_ function: String = #function) {
|
||||
SirenLog("The default implementation of \(function) is being called. You can ignore this message if you do not care to implement this method in your `SirenDelegate` conforming structure.")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
//
|
||||
// SirenLog.swift
|
||||
// SirenExample
|
||||
//
|
||||
// Created by Arthur Sabintsev on 8/5/17.
|
||||
// Copyright © 2017 Sabintsev iOS Projects. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
// MARK: - Log and decorate Siren-specific messages to the console.
|
||||
|
||||
struct SirenLog {
|
||||
|
||||
@discardableResult
|
||||
init(_ message: String) {
|
||||
print("[Siren] \(message)")
|
||||
}
|
||||
|
||||
}
|
||||
@@ -11,15 +11,15 @@ import Foundation
|
||||
// MARK: - Helpers (Testing Target)
|
||||
|
||||
extension Siren {
|
||||
func testSetCurrentInstalledVersion(version: String) {
|
||||
@objc func testSetCurrentInstalledVersion(version: String) {
|
||||
currentInstalledVersion = version
|
||||
}
|
||||
|
||||
func testSetAppStoreVersion(version: String) {
|
||||
@objc func testSetAppStoreVersion(version: String) {
|
||||
currentAppStoreVersion = version
|
||||
}
|
||||
|
||||
func testIsAppStoreVersionNewer() -> Bool {
|
||||
@objc func testIsAppStoreVersionNewer() -> Bool {
|
||||
return isAppStoreVersionNewer()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import Foundation
|
||||
// MARK: - UIAlertController Extension for Siren
|
||||
|
||||
internal extension UIAlertController {
|
||||
func show() {
|
||||
@objc func show() {
|
||||
let window = UIWindow(frame: UIScreen.main.bounds)
|
||||
window.rootViewController = SirenViewController()
|
||||
window.windowLevel = UIWindowLevelAlert + 1
|
||||
|
||||
+2
-2
@@ -13,7 +13,7 @@
|
||||
<a title="Classes Reference"></a>
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<p><a href="index.html">Siren Docs</a> (55% documented)</p>
|
||||
<p><a href="index.html">Siren Docs</a> (52% documented)</p>
|
||||
<p class="header-right"><a href="https://github.com/artsabintsev/siren"><img src="img/gh.png"/>View on GitHub</a></p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -105,7 +105,7 @@
|
||||
</section>
|
||||
<section id="footer">
|
||||
<p>© 2015-2017 <a class="link" href="http://www.sabintsev.com" target="_blank" rel="external">Arthur Ariel Sabintsev</a></p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.5</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.8.2</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
+48
-11
@@ -14,7 +14,7 @@
|
||||
<a title="Siren Class Reference"></a>
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<p><a href="../index.html">Siren Docs</a> (55% documented)</p>
|
||||
<p><a href="../index.html">Siren Docs</a> (52% documented)</p>
|
||||
<p class="header-right"><a href="https://github.com/artsabintsev/siren"><img src="../img/gh.png"/>View on GitHub</a></p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -113,14 +113,20 @@
|
||||
<div class="abstract">
|
||||
<p>The SirenDelegate variable, which should be set if you’d like to be notified:</p>
|
||||
|
||||
<p>When a user views or interacts with the alert
|
||||
- sirenDidShowUpdateDialog(alertType: AlertType)
|
||||
- sirenUserDidLaunchAppStore()
|
||||
- sirenUserDidSkipVersion()
|
||||
- sirenUserDidCancel()</p>
|
||||
<p>When a user views or interacts with the alert</p>
|
||||
|
||||
<p>When a new version has been detected, and you would like to present a localized message in a custom UI. use this delegate method:
|
||||
- sirenDidDetectNewVersionWithoutAlert(message: String)</p>
|
||||
<ul>
|
||||
<li>sirenDidShowUpdateDialog(alertType: AlertType)</li>
|
||||
<li>sirenUserDidLaunchAppStore()</li>
|
||||
<li>sirenUserDidSkipVersion()</li>
|
||||
<li>sirenUserDidCancel()</li>
|
||||
</ul>
|
||||
|
||||
<p>When a new version has been detected, and you would like to present a localized message in a custom UI. use this delegate method:</p>
|
||||
|
||||
<ul>
|
||||
<li>sirenDidDetectNewVersionWithoutAlert(message: String)</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="declaration">
|
||||
@@ -148,7 +154,7 @@
|
||||
<div class="pointer"></div>
|
||||
<div class="abstract">
|
||||
<p>The debug flag, which is disabled by default.
|
||||
When enabled, a stream of println() statements are logged to your console when a version check is performed.</p>
|
||||
When enabled, a stream of print() statements are logged to your console when a version check is performed.</p>
|
||||
|
||||
</div>
|
||||
<div class="declaration">
|
||||
@@ -539,7 +545,6 @@ you should set the <code><a href="../Classes/Siren.html#/s:vC5Siren5Siren11count
|
||||
<td>
|
||||
<div>
|
||||
<p>The frequency in days in which you want a check to be performed. Please refer to the Siren.VersionCheckType enum for more details.</p>
|
||||
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -549,6 +554,38 @@ you should set the <code><a href="../Classes/Siren.html#/s:vC5Siren5Siren11count
|
||||
</section>
|
||||
</div>
|
||||
</li>
|
||||
<li class="item">
|
||||
<div>
|
||||
<code>
|
||||
<a name="/s:FC5Siren5Siren14launchAppStoreFT_T_"></a>
|
||||
<a name="//apple_ref/swift/Method/launchAppStore()" class="dashAnchor"></a>
|
||||
<a class="token" href="#/s:FC5Siren5Siren14launchAppStoreFT_T_">launchAppStore()</a>
|
||||
</code>
|
||||
</div>
|
||||
<div class="height-container">
|
||||
<div class="pointer-container"></div>
|
||||
<section class="section">
|
||||
<div class="pointer"></div>
|
||||
<div class="abstract">
|
||||
<p>Launches the AppStore in two situations:</p>
|
||||
|
||||
<ul>
|
||||
<li>User clicked the <code>Update</code> button in the UIAlertController modal.</li>
|
||||
<li>Developer built a custom alert modal and needs to be able to call this function when the user chooses to update the app in the aforementioned custom modal.</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="declaration">
|
||||
<h4>Declaration</h4>
|
||||
<div class="language">
|
||||
<p class="aside-title">Swift</p>
|
||||
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">launchAppStore</span><span class="p">()</span></code></pre>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
@@ -646,7 +683,7 @@ by setting the forceLanguageLocalization property before calling checkVersion()<
|
||||
</section>
|
||||
<section id="footer">
|
||||
<p>© 2015-2017 <a class="link" href="http://www.sabintsev.com" target="_blank" rel="external">Arthur Ariel Sabintsev</a></p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.5</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.8.2</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<a title="AlertType Enum Reference"></a>
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<p><a href="../../index.html">Siren Docs</a> (55% documented)</p>
|
||||
<p><a href="../../index.html">Siren Docs</a> (52% documented)</p>
|
||||
<p class="header-right"><a href="https://github.com/artsabintsev/siren"><img src="../../img/gh.png"/>View on GitHub</a></p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -198,7 +198,7 @@ for use in a custom UI within the sirenDidDetectNewVersionWithoutAlert() delegat
|
||||
</section>
|
||||
<section id="footer">
|
||||
<p>© 2015-2017 <a class="link" href="http://www.sabintsev.com" target="_blank" rel="external">Arthur Ariel Sabintsev</a></p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.5</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.8.2</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<a title="LanguageType Enum Reference"></a>
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<p><a href="../../index.html">Siren Docs</a> (55% documented)</p>
|
||||
<p><a href="../../index.html">Siren Docs</a> (52% documented)</p>
|
||||
<p class="header-right"><a href="https://github.com/artsabintsev/siren"><img src="../../img/gh.png"/>View on GitHub</a></p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -258,6 +258,37 @@ by setting the forceLanguageLocalization property before calling checkVersion()<
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
<ul>
|
||||
<li class="item">
|
||||
<div>
|
||||
<code>
|
||||
<a name="/s:FOC5Siren5Siren12LanguageType5CzechFMS1_S1_"></a>
|
||||
<a name="//apple_ref/swift/Element/Czech" class="dashAnchor"></a>
|
||||
<a class="token" href="#/s:FOC5Siren5Siren12LanguageType5CzechFMS1_S1_">Czech</a>
|
||||
</code>
|
||||
</div>
|
||||
<div class="height-container">
|
||||
<div class="pointer-container"></div>
|
||||
<section class="section">
|
||||
<div class="pointer"></div>
|
||||
<div class="abstract">
|
||||
<p>Undocumented</p>
|
||||
|
||||
</div>
|
||||
<div class="declaration">
|
||||
<h4>Declaration</h4>
|
||||
<div class="language">
|
||||
<p class="aside-title">Swift</p>
|
||||
<pre class="highlight"><code><span class="kd">enum</span> <span class="kt">LanguageType</span><span class="p">:</span> <span class="kt">String</span></code></pre>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
<ul>
|
||||
<li class="item">
|
||||
@@ -816,6 +847,99 @@ by setting the forceLanguageLocalization property before calling checkVersion()<
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
<ul>
|
||||
<li class="item">
|
||||
<div>
|
||||
<code>
|
||||
<a name="/s:FOC5Siren5Siren12LanguageType7PersianFMS1_S1_"></a>
|
||||
<a name="//apple_ref/swift/Element/Persian" class="dashAnchor"></a>
|
||||
<a class="token" href="#/s:FOC5Siren5Siren12LanguageType7PersianFMS1_S1_">Persian</a>
|
||||
</code>
|
||||
</div>
|
||||
<div class="height-container">
|
||||
<div class="pointer-container"></div>
|
||||
<section class="section">
|
||||
<div class="pointer"></div>
|
||||
<div class="abstract">
|
||||
<p>Undocumented</p>
|
||||
|
||||
</div>
|
||||
<div class="declaration">
|
||||
<h4>Declaration</h4>
|
||||
<div class="language">
|
||||
<p class="aside-title">Swift</p>
|
||||
<pre class="highlight"><code><span class="kd">enum</span> <span class="kt">LanguageType</span><span class="p">:</span> <span class="kt">String</span></code></pre>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
<ul>
|
||||
<li class="item">
|
||||
<div>
|
||||
<code>
|
||||
<a name="/s:FOC5Siren5Siren12LanguageType18PersianAfghanistanFMS1_S1_"></a>
|
||||
<a name="//apple_ref/swift/Element/PersianAfghanistan" class="dashAnchor"></a>
|
||||
<a class="token" href="#/s:FOC5Siren5Siren12LanguageType18PersianAfghanistanFMS1_S1_">PersianAfghanistan</a>
|
||||
</code>
|
||||
</div>
|
||||
<div class="height-container">
|
||||
<div class="pointer-container"></div>
|
||||
<section class="section">
|
||||
<div class="pointer"></div>
|
||||
<div class="abstract">
|
||||
<p>Undocumented</p>
|
||||
|
||||
</div>
|
||||
<div class="declaration">
|
||||
<h4>Declaration</h4>
|
||||
<div class="language">
|
||||
<p class="aside-title">Swift</p>
|
||||
<pre class="highlight"><code><span class="kd">enum</span> <span class="kt">LanguageType</span><span class="p">:</span> <span class="kt">String</span></code></pre>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
<ul>
|
||||
<li class="item">
|
||||
<div>
|
||||
<code>
|
||||
<a name="/s:FOC5Siren5Siren12LanguageType11PersianIranFMS1_S1_"></a>
|
||||
<a name="//apple_ref/swift/Element/PersianIran" class="dashAnchor"></a>
|
||||
<a class="token" href="#/s:FOC5Siren5Siren12LanguageType11PersianIranFMS1_S1_">PersianIran</a>
|
||||
</code>
|
||||
</div>
|
||||
<div class="height-container">
|
||||
<div class="pointer-container"></div>
|
||||
<section class="section">
|
||||
<div class="pointer"></div>
|
||||
<div class="abstract">
|
||||
<p>Undocumented</p>
|
||||
|
||||
</div>
|
||||
<div class="declaration">
|
||||
<h4>Declaration</h4>
|
||||
<div class="language">
|
||||
<p class="aside-title">Swift</p>
|
||||
<pre class="highlight"><code><span class="kd">enum</span> <span class="kt">LanguageType</span><span class="p">:</span> <span class="kt">String</span></code></pre>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
<ul>
|
||||
<li class="item">
|
||||
@@ -1157,6 +1281,37 @@ by setting the forceLanguageLocalization property before calling checkVersion()<
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
<ul>
|
||||
<li class="item">
|
||||
<div>
|
||||
<code>
|
||||
<a name="/s:FOC5Siren5Siren12LanguageType4UrduFMS1_S1_"></a>
|
||||
<a name="//apple_ref/swift/Element/Urdu" class="dashAnchor"></a>
|
||||
<a class="token" href="#/s:FOC5Siren5Siren12LanguageType4UrduFMS1_S1_">Urdu</a>
|
||||
</code>
|
||||
</div>
|
||||
<div class="height-container">
|
||||
<div class="pointer-container"></div>
|
||||
<section class="section">
|
||||
<div class="pointer"></div>
|
||||
<div class="abstract">
|
||||
<p>Undocumented</p>
|
||||
|
||||
</div>
|
||||
<div class="declaration">
|
||||
<h4>Declaration</h4>
|
||||
<div class="language">
|
||||
<p class="aside-title">Swift</p>
|
||||
<pre class="highlight"><code><span class="kd">enum</span> <span class="kt">LanguageType</span><span class="p">:</span> <span class="kt">String</span></code></pre>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
<ul>
|
||||
<li class="item">
|
||||
@@ -1192,7 +1347,7 @@ by setting the forceLanguageLocalization property before calling checkVersion()<
|
||||
</section>
|
||||
<section id="footer">
|
||||
<p>© 2015-2017 <a class="link" href="http://www.sabintsev.com" target="_blank" rel="external">Arthur Ariel Sabintsev</a></p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.5</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.8.2</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<a title="VersionCheckType Enum Reference"></a>
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<p><a href="../../index.html">Siren Docs</a> (55% documented)</p>
|
||||
<p><a href="../../index.html">Siren Docs</a> (52% documented)</p>
|
||||
<p class="header-right"><a href="https://github.com/artsabintsev/siren"><img src="../../img/gh.png"/>View on GitHub</a></p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -166,7 +166,7 @@
|
||||
</section>
|
||||
<section id="footer">
|
||||
<p>© 2015-2017 <a class="link" href="http://www.sabintsev.com" target="_blank" rel="external">Arthur Ariel Sabintsev</a></p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.5</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.8.2</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
+2
-2
@@ -13,7 +13,7 @@
|
||||
<a title="Protocols Reference"></a>
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<p><a href="index.html">Siren Docs</a> (55% documented)</p>
|
||||
<p><a href="index.html">Siren Docs</a> (52% documented)</p>
|
||||
<p class="header-right"><a href="https://github.com/artsabintsev/siren"><img src="img/gh.png"/>View on GitHub</a></p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -105,7 +105,7 @@
|
||||
</section>
|
||||
<section id="footer">
|
||||
<p>© 2015-2017 <a class="link" href="http://www.sabintsev.com" target="_blank" rel="external">Arthur Ariel Sabintsev</a></p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.5</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.8.2</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<a title="SirenDelegate Protocol Reference"></a>
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<p><a href="../index.html">Siren Docs</a> (55% documented)</p>
|
||||
<p><a href="../index.html">Siren Docs</a> (52% documented)</p>
|
||||
<p class="header-right"><a href="https://github.com/artsabintsev/siren"><img src="../img/gh.png"/>View on GitHub</a></p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -315,7 +315,7 @@
|
||||
</section>
|
||||
<section id="footer">
|
||||
<p>© 2015-2017 <a class="link" href="http://www.sabintsev.com" target="_blank" rel="external">Arthur Ariel Sabintsev</a></p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.5</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.8.2</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="20"><linearGradient id="b" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="a"><rect width="128" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#a)"><path fill="#555" d="M0 0h93v20H0z"/><path fill="#dfb317" d="M93 0h35v20H93z"/><path fill="url(#b)" d="M0 0h128v20H0z"/></g><g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11"><text x="46.5" y="15" fill="#010101" fill-opacity=".3">documentation</text><text x="46.5" y="14">documentation</text><text x="109.5" y="15" fill="#010101" fill-opacity=".3">55%</text><text x="109.5" y="14">55%</text></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="20"><linearGradient id="b" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="a"><rect width="128" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#a)"><path fill="#555" d="M0 0h93v20H0z"/><path fill="#dfb317" d="M93 0h35v20H93z"/><path fill="url(#b)" d="M0 0h128v20H0z"/></g><g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11"><text x="46.5" y="15" fill="#010101" fill-opacity=".3">documentation</text><text x="46.5" y="14">documentation</text><text x="109.5" y="15" fill="#010101" fill-opacity=".3">52%</text><text x="109.5" y="14">52%</text></g></svg>
|
||||
|
Before Width: | Height: | Size: 808 B After Width: | Height: | Size: 808 B |
@@ -164,6 +164,11 @@ header {
|
||||
padding-top: 10px; }
|
||||
.main-content section .task-group-section .task-group:first-of-type .section-name {
|
||||
padding-top: 15px; }
|
||||
.main-content section .heading:before {
|
||||
content: "";
|
||||
display: block;
|
||||
padding-top: 70px;
|
||||
margin: -70px 0 0; }
|
||||
|
||||
.section {
|
||||
padding: 0 25px; }
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<a title="Classes Reference"></a>
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<p><a href="index.html">Siren Docs</a> (55% documented)</p>
|
||||
<p><a href="index.html">Siren Docs</a> (52% documented)</p>
|
||||
<p class="header-right"><a href="https://github.com/artsabintsev/siren"><img src="img/gh.png"/>View on GitHub</a></p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -105,7 +105,7 @@
|
||||
</section>
|
||||
<section id="footer">
|
||||
<p>© 2015-2017 <a class="link" href="http://www.sabintsev.com" target="_blank" rel="external">Arthur Ariel Sabintsev</a></p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.5</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.8.2</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<a title="Siren Class Reference"></a>
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<p><a href="../index.html">Siren Docs</a> (55% documented)</p>
|
||||
<p><a href="../index.html">Siren Docs</a> (52% documented)</p>
|
||||
<p class="header-right"><a href="https://github.com/artsabintsev/siren"><img src="../img/gh.png"/>View on GitHub</a></p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -113,14 +113,20 @@
|
||||
<div class="abstract">
|
||||
<p>The SirenDelegate variable, which should be set if you’d like to be notified:</p>
|
||||
|
||||
<p>When a user views or interacts with the alert
|
||||
- sirenDidShowUpdateDialog(alertType: AlertType)
|
||||
- sirenUserDidLaunchAppStore()
|
||||
- sirenUserDidSkipVersion()
|
||||
- sirenUserDidCancel()</p>
|
||||
<p>When a user views or interacts with the alert</p>
|
||||
|
||||
<p>When a new version has been detected, and you would like to present a localized message in a custom UI. use this delegate method:
|
||||
- sirenDidDetectNewVersionWithoutAlert(message: String)</p>
|
||||
<ul>
|
||||
<li>sirenDidShowUpdateDialog(alertType: AlertType)</li>
|
||||
<li>sirenUserDidLaunchAppStore()</li>
|
||||
<li>sirenUserDidSkipVersion()</li>
|
||||
<li>sirenUserDidCancel()</li>
|
||||
</ul>
|
||||
|
||||
<p>When a new version has been detected, and you would like to present a localized message in a custom UI. use this delegate method:</p>
|
||||
|
||||
<ul>
|
||||
<li>sirenDidDetectNewVersionWithoutAlert(message: String)</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="declaration">
|
||||
@@ -148,7 +154,7 @@
|
||||
<div class="pointer"></div>
|
||||
<div class="abstract">
|
||||
<p>The debug flag, which is disabled by default.
|
||||
When enabled, a stream of println() statements are logged to your console when a version check is performed.</p>
|
||||
When enabled, a stream of print() statements are logged to your console when a version check is performed.</p>
|
||||
|
||||
</div>
|
||||
<div class="declaration">
|
||||
@@ -539,7 +545,6 @@ you should set the <code><a href="../Classes/Siren.html#/s:vC5Siren5Siren11count
|
||||
<td>
|
||||
<div>
|
||||
<p>The frequency in days in which you want a check to be performed. Please refer to the Siren.VersionCheckType enum for more details.</p>
|
||||
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -549,6 +554,38 @@ you should set the <code><a href="../Classes/Siren.html#/s:vC5Siren5Siren11count
|
||||
</section>
|
||||
</div>
|
||||
</li>
|
||||
<li class="item">
|
||||
<div>
|
||||
<code>
|
||||
<a name="/s:FC5Siren5Siren14launchAppStoreFT_T_"></a>
|
||||
<a name="//apple_ref/swift/Method/launchAppStore()" class="dashAnchor"></a>
|
||||
<a class="token" href="#/s:FC5Siren5Siren14launchAppStoreFT_T_">launchAppStore()</a>
|
||||
</code>
|
||||
</div>
|
||||
<div class="height-container">
|
||||
<div class="pointer-container"></div>
|
||||
<section class="section">
|
||||
<div class="pointer"></div>
|
||||
<div class="abstract">
|
||||
<p>Launches the AppStore in two situations:</p>
|
||||
|
||||
<ul>
|
||||
<li>User clicked the <code>Update</code> button in the UIAlertController modal.</li>
|
||||
<li>Developer built a custom alert modal and needs to be able to call this function when the user chooses to update the app in the aforementioned custom modal.</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="declaration">
|
||||
<h4>Declaration</h4>
|
||||
<div class="language">
|
||||
<p class="aside-title">Swift</p>
|
||||
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">launchAppStore</span><span class="p">()</span></code></pre>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
@@ -646,7 +683,7 @@ by setting the forceLanguageLocalization property before calling checkVersion()<
|
||||
</section>
|
||||
<section id="footer">
|
||||
<p>© 2015-2017 <a class="link" href="http://www.sabintsev.com" target="_blank" rel="external">Arthur Ariel Sabintsev</a></p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.5</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.8.2</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<a title="AlertType Enum Reference"></a>
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<p><a href="../../index.html">Siren Docs</a> (55% documented)</p>
|
||||
<p><a href="../../index.html">Siren Docs</a> (52% documented)</p>
|
||||
<p class="header-right"><a href="https://github.com/artsabintsev/siren"><img src="../../img/gh.png"/>View on GitHub</a></p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -198,7 +198,7 @@ for use in a custom UI within the sirenDidDetectNewVersionWithoutAlert() delegat
|
||||
</section>
|
||||
<section id="footer">
|
||||
<p>© 2015-2017 <a class="link" href="http://www.sabintsev.com" target="_blank" rel="external">Arthur Ariel Sabintsev</a></p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.5</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.8.2</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
+157
-2
@@ -14,7 +14,7 @@
|
||||
<a title="LanguageType Enum Reference"></a>
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<p><a href="../../index.html">Siren Docs</a> (55% documented)</p>
|
||||
<p><a href="../../index.html">Siren Docs</a> (52% documented)</p>
|
||||
<p class="header-right"><a href="https://github.com/artsabintsev/siren"><img src="../../img/gh.png"/>View on GitHub</a></p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -258,6 +258,37 @@ by setting the forceLanguageLocalization property before calling checkVersion()<
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
<ul>
|
||||
<li class="item">
|
||||
<div>
|
||||
<code>
|
||||
<a name="/s:FOC5Siren5Siren12LanguageType5CzechFMS1_S1_"></a>
|
||||
<a name="//apple_ref/swift/Element/Czech" class="dashAnchor"></a>
|
||||
<a class="token" href="#/s:FOC5Siren5Siren12LanguageType5CzechFMS1_S1_">Czech</a>
|
||||
</code>
|
||||
</div>
|
||||
<div class="height-container">
|
||||
<div class="pointer-container"></div>
|
||||
<section class="section">
|
||||
<div class="pointer"></div>
|
||||
<div class="abstract">
|
||||
<p>Undocumented</p>
|
||||
|
||||
</div>
|
||||
<div class="declaration">
|
||||
<h4>Declaration</h4>
|
||||
<div class="language">
|
||||
<p class="aside-title">Swift</p>
|
||||
<pre class="highlight"><code><span class="kd">enum</span> <span class="kt">LanguageType</span><span class="p">:</span> <span class="kt">String</span></code></pre>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
<ul>
|
||||
<li class="item">
|
||||
@@ -816,6 +847,99 @@ by setting the forceLanguageLocalization property before calling checkVersion()<
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
<ul>
|
||||
<li class="item">
|
||||
<div>
|
||||
<code>
|
||||
<a name="/s:FOC5Siren5Siren12LanguageType7PersianFMS1_S1_"></a>
|
||||
<a name="//apple_ref/swift/Element/Persian" class="dashAnchor"></a>
|
||||
<a class="token" href="#/s:FOC5Siren5Siren12LanguageType7PersianFMS1_S1_">Persian</a>
|
||||
</code>
|
||||
</div>
|
||||
<div class="height-container">
|
||||
<div class="pointer-container"></div>
|
||||
<section class="section">
|
||||
<div class="pointer"></div>
|
||||
<div class="abstract">
|
||||
<p>Undocumented</p>
|
||||
|
||||
</div>
|
||||
<div class="declaration">
|
||||
<h4>Declaration</h4>
|
||||
<div class="language">
|
||||
<p class="aside-title">Swift</p>
|
||||
<pre class="highlight"><code><span class="kd">enum</span> <span class="kt">LanguageType</span><span class="p">:</span> <span class="kt">String</span></code></pre>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
<ul>
|
||||
<li class="item">
|
||||
<div>
|
||||
<code>
|
||||
<a name="/s:FOC5Siren5Siren12LanguageType18PersianAfghanistanFMS1_S1_"></a>
|
||||
<a name="//apple_ref/swift/Element/PersianAfghanistan" class="dashAnchor"></a>
|
||||
<a class="token" href="#/s:FOC5Siren5Siren12LanguageType18PersianAfghanistanFMS1_S1_">PersianAfghanistan</a>
|
||||
</code>
|
||||
</div>
|
||||
<div class="height-container">
|
||||
<div class="pointer-container"></div>
|
||||
<section class="section">
|
||||
<div class="pointer"></div>
|
||||
<div class="abstract">
|
||||
<p>Undocumented</p>
|
||||
|
||||
</div>
|
||||
<div class="declaration">
|
||||
<h4>Declaration</h4>
|
||||
<div class="language">
|
||||
<p class="aside-title">Swift</p>
|
||||
<pre class="highlight"><code><span class="kd">enum</span> <span class="kt">LanguageType</span><span class="p">:</span> <span class="kt">String</span></code></pre>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
<ul>
|
||||
<li class="item">
|
||||
<div>
|
||||
<code>
|
||||
<a name="/s:FOC5Siren5Siren12LanguageType11PersianIranFMS1_S1_"></a>
|
||||
<a name="//apple_ref/swift/Element/PersianIran" class="dashAnchor"></a>
|
||||
<a class="token" href="#/s:FOC5Siren5Siren12LanguageType11PersianIranFMS1_S1_">PersianIran</a>
|
||||
</code>
|
||||
</div>
|
||||
<div class="height-container">
|
||||
<div class="pointer-container"></div>
|
||||
<section class="section">
|
||||
<div class="pointer"></div>
|
||||
<div class="abstract">
|
||||
<p>Undocumented</p>
|
||||
|
||||
</div>
|
||||
<div class="declaration">
|
||||
<h4>Declaration</h4>
|
||||
<div class="language">
|
||||
<p class="aside-title">Swift</p>
|
||||
<pre class="highlight"><code><span class="kd">enum</span> <span class="kt">LanguageType</span><span class="p">:</span> <span class="kt">String</span></code></pre>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
<ul>
|
||||
<li class="item">
|
||||
@@ -1157,6 +1281,37 @@ by setting the forceLanguageLocalization property before calling checkVersion()<
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
<ul>
|
||||
<li class="item">
|
||||
<div>
|
||||
<code>
|
||||
<a name="/s:FOC5Siren5Siren12LanguageType4UrduFMS1_S1_"></a>
|
||||
<a name="//apple_ref/swift/Element/Urdu" class="dashAnchor"></a>
|
||||
<a class="token" href="#/s:FOC5Siren5Siren12LanguageType4UrduFMS1_S1_">Urdu</a>
|
||||
</code>
|
||||
</div>
|
||||
<div class="height-container">
|
||||
<div class="pointer-container"></div>
|
||||
<section class="section">
|
||||
<div class="pointer"></div>
|
||||
<div class="abstract">
|
||||
<p>Undocumented</p>
|
||||
|
||||
</div>
|
||||
<div class="declaration">
|
||||
<h4>Declaration</h4>
|
||||
<div class="language">
|
||||
<p class="aside-title">Swift</p>
|
||||
<pre class="highlight"><code><span class="kd">enum</span> <span class="kt">LanguageType</span><span class="p">:</span> <span class="kt">String</span></code></pre>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="task-group">
|
||||
<ul>
|
||||
<li class="item">
|
||||
@@ -1192,7 +1347,7 @@ by setting the forceLanguageLocalization property before calling checkVersion()<
|
||||
</section>
|
||||
<section id="footer">
|
||||
<p>© 2015-2017 <a class="link" href="http://www.sabintsev.com" target="_blank" rel="external">Arthur Ariel Sabintsev</a></p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.5</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.8.2</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
+2
-2
@@ -14,7 +14,7 @@
|
||||
<a title="VersionCheckType Enum Reference"></a>
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<p><a href="../../index.html">Siren Docs</a> (55% documented)</p>
|
||||
<p><a href="../../index.html">Siren Docs</a> (52% documented)</p>
|
||||
<p class="header-right"><a href="https://github.com/artsabintsev/siren"><img src="../../img/gh.png"/>View on GitHub</a></p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -166,7 +166,7 @@
|
||||
</section>
|
||||
<section id="footer">
|
||||
<p>© 2015-2017 <a class="link" href="http://www.sabintsev.com" target="_blank" rel="external">Arthur Ariel Sabintsev</a></p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.5</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.8.2</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<a title="Protocols Reference"></a>
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<p><a href="index.html">Siren Docs</a> (55% documented)</p>
|
||||
<p><a href="index.html">Siren Docs</a> (52% documented)</p>
|
||||
<p class="header-right"><a href="https://github.com/artsabintsev/siren"><img src="img/gh.png"/>View on GitHub</a></p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -105,7 +105,7 @@
|
||||
</section>
|
||||
<section id="footer">
|
||||
<p>© 2015-2017 <a class="link" href="http://www.sabintsev.com" target="_blank" rel="external">Arthur Ariel Sabintsev</a></p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.5</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.8.2</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<a title="SirenDelegate Protocol Reference"></a>
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<p><a href="../index.html">Siren Docs</a> (55% documented)</p>
|
||||
<p><a href="../index.html">Siren Docs</a> (52% documented)</p>
|
||||
<p class="header-right"><a href="https://github.com/artsabintsev/siren"><img src="../img/gh.png"/>View on GitHub</a></p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -315,7 +315,7 @@
|
||||
</section>
|
||||
<section id="footer">
|
||||
<p>© 2015-2017 <a class="link" href="http://www.sabintsev.com" target="_blank" rel="external">Arthur Ariel Sabintsev</a></p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.5</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.8.2</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
@@ -164,6 +164,11 @@ header {
|
||||
padding-top: 10px; }
|
||||
.main-content section .task-group-section .task-group:first-of-type .section-name {
|
||||
padding-top: 15px; }
|
||||
.main-content section .heading:before {
|
||||
content: "";
|
||||
display: block;
|
||||
padding-top: 70px;
|
||||
margin: -70px 0 0; }
|
||||
|
||||
.section {
|
||||
padding: 0 25px; }
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<a title="Siren Reference"></a>
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<p><a href="index.html">Siren Docs</a> (55% documented)</p>
|
||||
<p><a href="index.html">Siren Docs</a> (52% documented)</p>
|
||||
<p class="header-right"><a href="https://github.com/artsabintsev/siren"><img src="img/gh.png"/>View on GitHub</a></p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -58,10 +58,10 @@
|
||||
<section>
|
||||
<section class="section">
|
||||
|
||||
<a href='#siren' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h1 id='siren'>Siren</h1>
|
||||
<a href='#notify-users-when-a-new-version-of-your-app-is-available-and-prompt-them-to-upgrade' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='notify-users-when-a-new-version-of-your-app-is-available-and-prompt-them-to-upgrade'>Notify users when a new version of your app is available and prompt them to upgrade.</h3>
|
||||
<a href='#a-href-https-dashboard-buddybuild-com-apps-58c4d0d85601d40100c5c51d-build-latest-branch-master-img-src-https-dashboard-buddybuild-com-api-statusimage-appid-58c4d0d85601d40100c5c51d-branch-master-build-latest-alt-buddybuild-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-v-siren-svg-alt-cocoapods-a-a-href-https-github-com-carthage-carthage-img-src-https-img-shields-io-badge-carthage-compatible-4bc51d-svg-style-flat-alt-carthage-compatible-a-a-href-https-swift-org-package-manager-img-src-https-img-shields-io-badge-swiftpm-compatible-brightgreen-svg-alt-swiftpm-compatible-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-dt-siren-svg-alt-cocoapods-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-dm-siren-svg-alt-cocoapods-a' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='a-href-https-dashboard-buddybuild-com-apps-58c4d0d85601d40100c5c51d-build-latest-branch-master-img-src-https-dashboard-buddybuild-com-api-statusimage-appid-58c4d0d85601d40100c5c51d-branch-master-build-latest-alt-buddybuild-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-v-siren-svg-alt-cocoapods-a-a-href-https-github-com-carthage-carthage-img-src-https-img-shields-io-badge-carthage-compatible-4bc51d-svg-style-flat-alt-carthage-compatible-a-a-href-https-swift-org-package-manager-img-src-https-img-shields-io-badge-swiftpm-compatible-brightgreen-svg-alt-swiftpm-compatible-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-dt-siren-svg-alt-cocoapods-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-dm-siren-svg-alt-cocoapods-a'><a href="https://dashboard.buddybuild.com/apps/58c4d0d85601d40100c5c51d/build/latest?branch=master"><img src="https://dashboard.buddybuild.com/api/statusImage?appID=58c4d0d85601d40100c5c51d&branch=master&build=latest" alt="BuddyBuild"></a> <a href="https://cocoapods.org/pods/Siren"><img src="https://img.shields.io/cocoapods/v/Siren.svg" alt="CocoaPods"></a> <a href="https://github.com/Carthage/Carthage"><img src="https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat" alt="Carthage Compatible"></a> <a href="https://swift.org/package-manager/"><img src="https://img.shields.io/badge/SwiftPM-Compatible-brightgreen.svg" alt="SwiftPM Compatible"></a> <a href="https://cocoapods.org/pods/Siren"><img src="https://img.shields.io/cocoapods/dt/Siren.svg" alt="CocoaPods"></a> <a href="https://cocoapods.org/pods/Siren"><img src="https://img.shields.io/cocoapods/dm/Siren.svg" alt="CocoaPods"></a></h2>
|
||||
<a href='#table-of-contents' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='table-of-contents'>Table of Contents</h2>
|
||||
<h1 id='siren' class='heading'>Siren 🚨</h1>
|
||||
<h3 id='notify-users-when-a-new-version-of-your-app-is-available-and-prompt-them-to-upgrade' class='heading'>Notify users when a new version of your app is available and prompt them to upgrade.</h3>
|
||||
<h2 id='a-href-https-dashboard-buddybuild-com-apps-58c4d0d85601d40100c5c51d-build-latest-branch-master-img-src-https-dashboard-buddybuild-com-api-statusimage-appid-58c4d0d85601d40100c5c51d-branch-master-build-latest-alt-buddybuild-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-v-siren-svg-alt-cocoapods-a-a-href-https-github-com-carthage-carthage-img-src-https-img-shields-io-badge-carthage-compatible-4bc51d-svg-style-flat-alt-carthage-compatible-a-a-href-https-swift-org-package-manager-img-src-https-img-shields-io-badge-swiftpm-compatible-brightgreen-svg-alt-swiftpm-compatible-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-dt-siren-svg-alt-cocoapods-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-dm-siren-svg-alt-cocoapods-a' class='heading'><a href="https://dashboard.buddybuild.com/apps/58c4d0d85601d40100c5c51d/build/latest?branch=master"><img src="https://dashboard.buddybuild.com/api/statusImage?appID=58c4d0d85601d40100c5c51d&branch=master&build=latest" alt="BuddyBuild"></a> <a href="https://cocoapods.org/pods/Siren"><img src="https://img.shields.io/cocoapods/v/Siren.svg" alt="CocoaPods"></a> <a href="https://github.com/Carthage/Carthage"><img src="https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat" alt="Carthage Compatible"></a> <a href="https://swift.org/package-manager/"><img src="https://img.shields.io/badge/SwiftPM-Compatible-brightgreen.svg" alt="SwiftPM Compatible"></a> <a href="https://cocoapods.org/pods/Siren"><img src="https://img.shields.io/cocoapods/dt/Siren.svg" alt="CocoaPods"></a> <a href="https://cocoapods.org/pods/Siren"><img src="https://img.shields.io/cocoapods/dm/Siren.svg" alt="CocoaPods"></a></h2>
|
||||
<h2 id='table-of-contents' class='heading'>Table of Contents</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/ArtSabintsev/Siren#about">About</a></li>
|
||||
@@ -75,11 +75,12 @@
|
||||
<li><a href="https://github.com/ArtSabintsev/Siren#device-compatibility">Device Compatibility</a></li>
|
||||
<li><a href="https://github.com/ArtSabintsev/Siren#testing-siren">Testing Siren</a></li>
|
||||
<li><a href="https://github.com/ArtSabintsev/Siren#app-store-submissions">App Store Review & Submissions</a></li>
|
||||
<li><a href="https://github.com/ArtSabintsev/Siren#phased-releases">Phrased Releases</a></li>
|
||||
<li><a href="https://github.com/ArtSabintsev/Siren#words-of-caution">Words of Caution</a></li>
|
||||
<li><a href="https://github.com/ArtSabintsev/Siren#ports">Ports</a></li>
|
||||
</ul>
|
||||
<a href='#a-href-https-github-com-artsabintsev-siren-created-and-maintained-by-attribution-a' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='a-href-https-github-com-artsabintsev-siren-created-and-maintained-by-attribution-a'>- <a href="https://github.com/ArtSabintsev/Siren#created-and-maintained-by">Attribution</a></h2>
|
||||
<a href='#about' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='about'>About</h2>
|
||||
<h2 id='a-href-https-github-com-artsabintsev-siren-created-and-maintained-by-attribution-a' class='heading'>- <a href="https://github.com/ArtSabintsev/Siren#created-and-maintained-by">Attribution</a></h2>
|
||||
<h2 id='about' class='heading'>About</h2>
|
||||
|
||||
<p><strong>Siren</strong> checks a user’s currently installed version of your iOS app against the version that is currently available in the App Store.</p>
|
||||
|
||||
@@ -94,64 +95,65 @@
|
||||
</ul></li>
|
||||
<li>Siren is actively maintained by <a href="http://github.com/ArtSabintsev"><strong>Arthur Sabintsev</strong></a> and <a href="http://twitter.com/getaaron"><strong>Aaron Brager</strong></a></li>
|
||||
</ul>
|
||||
<a href='#readme-translations' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='readme-translations'>README Translations</h3>
|
||||
<h3 id='readme-translations' class='heading'>README Translations</h3>
|
||||
|
||||
<ul>
|
||||
<li><a href="README.zh_CN.md"><strong>简体中文</strong></a> (by <a href="http://www.jianshu.com/u/d8bbc4831623"><strong>Daniel Hu</strong></a>)</li>
|
||||
</ul>
|
||||
<a href='#features' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='features'>Features</h2>
|
||||
<h2 id='features' class='heading'>Features</h2>
|
||||
|
||||
<ul>
|
||||
<li>[x] CocoaPods Support</li>
|
||||
<li>[x] Carthage Support</li>
|
||||
<li>[x] Swift Package Manager Support</li>
|
||||
<li>[x] Localized for 30+ languages (see <a href="https://github.com/ArtSabintsev/Siren#localization">Localization</a>)</li>
|
||||
<li>[x] Pre-Update Device Compatibility Check (see <a href="https://github.com/ArtSabintsev/Siren#device-compatibility">Device Compatibility</a></li>
|
||||
<li>[x] Pre-Update Device Compatibility Check (see <a href="https://github.com/ArtSabintsev/Siren#device-compatibility">Device Compatibility</a>)</li>
|
||||
<li>[x] Three types of alerts (see <a href="https://github.com/ArtSabintsev/Siren#screenshots">Screenshots</a>)</li>
|
||||
<li>[x] Optional delegate methods (see <a href="https://github.com/ArtSabintsev/Siren#optional-delegate-and-delegate-methods">Delegates (Optional)</a></li>
|
||||
<li>[x] Optional delegate methods (see <a href="https://github.com/ArtSabintsev/Siren#optional-delegate-and-delegate-methods">Delegates (Optional)</a>)</li>
|
||||
<li>[x] Unit Tests</li>
|
||||
<li>[x] Documentation can be found at <a href="http://sabintsev.com/Siren">http://sabintsev.com/Siren</a>.</li>
|
||||
</ul>
|
||||
<a href='#screenshots' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='screenshots'>Screenshots</h2>
|
||||
<h2 id='screenshots' class='heading'>Screenshots</h2>
|
||||
|
||||
<ul>
|
||||
<li>The <strong>left picture</strong> forces the user to update the app.</li>
|
||||
<li>The <strong>center picture</strong> gives the user the option to update the app.</li>
|
||||
<li>The <strong>right picture</strong> gives the user the option to skip the current update.</li>
|
||||
<li>These options are controlled by the <code>SirenAlertType</code> enum.</li>
|
||||
<li>These options are controlled by the <code>Siren.AlertType</code> enum.</li>
|
||||
</ul>
|
||||
|
||||
<p><img src="https://github.com/ArtSabintsev/Siren/blob/master/Assets/picForcedUpdate.png?raw=true" height="480"><img src="https://github.com/ArtSabintsev/Siren/blob/master/Assets/picOptionalUpdate.png?raw=true" height="480"><img src="https://github.com/ArtSabintsev/Siren/blob/master/Assets/picSkippedUpdate.png?raw=true" height="480"></p>
|
||||
<a href='#installation-instructions' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='installation-instructions'>Installation Instructions</h2>
|
||||
<a href='#cocoapods' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='cocoapods'>CocoaPods</h3>
|
||||
<h2 id='installation-instructions' class='heading'>Installation Instructions</h2>
|
||||
<h3 id='cocoapods' class='heading'>CocoaPods</h3>
|
||||
|
||||
<p>For Swift 3 support:
|
||||
<code>ruby
|
||||
pod 'Siren'
|
||||
</code></p>
|
||||
<p>For Swift 3 support:</p>
|
||||
<pre class="highlight ruby"><code><span class="n">pod</span> <span class="s1">'Siren'</span>
|
||||
</code></pre>
|
||||
|
||||
<p>For Swift 2.3 support:
|
||||
<code>ruby
|
||||
pod 'Siren', :git => 'https://github.com/ArtSabintsev/Siren.git', :branch => 'swift2.3'
|
||||
</code></p>
|
||||
<p>For Swift 4 support:</p>
|
||||
<pre class="highlight ruby"><code><span class="n">pod</span> <span class="s1">'Siren'</span><span class="p">,</span> <span class="ss">:git</span> <span class="o">=></span> <span class="s1">'https://github.com/ArtSabintsev/Siren.git'</span><span class="p">,</span> <span class="ss">:branch</span> <span class="o">=></span> <span class="s1">'swift4'</span>
|
||||
</code></pre>
|
||||
|
||||
<p>For Swift 2.2 support:
|
||||
<code>ruby
|
||||
pod 'Siren', '0.9.5'
|
||||
</code></p>
|
||||
<a href='#carthage' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='carthage'>Carthage</h3>
|
||||
<p>For Swift 2.3 support:</p>
|
||||
<pre class="highlight ruby"><code><span class="n">pod</span> <span class="s1">'Siren'</span><span class="p">,</span> <span class="ss">:git</span> <span class="o">=></span> <span class="s1">'https://github.com/ArtSabintsev/Siren.git'</span><span class="p">,</span> <span class="ss">:branch</span> <span class="o">=></span> <span class="s1">'swift2.3'</span>
|
||||
</code></pre>
|
||||
<h3 id='carthage' class='heading'>Carthage</h3>
|
||||
|
||||
<p>For Swift 3 support:</p>
|
||||
<pre class="highlight swift"><code><span class="n">github</span> <span class="s">"ArtSabintsev/Siren"</span>
|
||||
</code></pre>
|
||||
|
||||
<p>For Swift 2.3 support:</p>
|
||||
<pre class="highlight swift"><code><span class="n">github</span> <span class="s">"ArtSabintsev/Siren"</span> <span class="s">"swift2.3"</span>
|
||||
<p>For Swift 4 support:</p>
|
||||
<pre class="highlight swift"><code><span class="n">github</span> <span class="s">"ArtSabintsev/Siren"</span><span class="p">,</span> <span class="s">"swift4"</span>
|
||||
</code></pre>
|
||||
<a href='#swift-package-manager' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='swift-package-manager'>Swift Package Manager</h3>
|
||||
|
||||
<p>For Swift 2.3 support:</p>
|
||||
<pre class="highlight ruby"><code><span class="n">github</span> <span class="s2">"ArtSabintsev/Siren"</span><span class="p">,</span> <span class="s2">"swift2.3"</span>
|
||||
</code></pre>
|
||||
<h3 id='swift-package-manager' class='heading'>Swift Package Manager</h3>
|
||||
<pre class="highlight swift"><code><span class="o">.</span><span class="kt">Package</span><span class="p">(</span><span class="nv">url</span><span class="p">:</span> <span class="s">"https://github.com/ArtSabintsev/Siren.git"</span><span class="p">,</span> <span class="nv">majorVersion</span><span class="p">:</span> <span class="mi">2</span><span class="p">)</span>
|
||||
</code></pre>
|
||||
<a href='#example-code' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='example-code'>Example Code</h2>
|
||||
<h2 id='example-code' class='heading'>Example Code</h2>
|
||||
|
||||
<p>Below is some commented sample code. Adapt this to meet your app’s needs.</p>
|
||||
|
||||
@@ -162,15 +164,15 @@ pod 'Siren', '0.9.5'
|
||||
// Siren is a singleton
|
||||
let siren = Siren.shared
|
||||
|
||||
// Optional: Defaults to .Option
|
||||
siren.alertType = <#SirenAlertType_Enum_Value#>
|
||||
// Optional: Defaults to .option
|
||||
siren.alertType = <#Siren.AlertType_Enum_Value#>
|
||||
|
||||
// Optional: Set this variable if you would only like to show an alert if your app has been available on the store for a few days.
|
||||
// This default value is set to 1 to avoid this issue: https://github.com/ArtSabintsev/Siren#words-of-caution
|
||||
// To show the update immediately after Apple has updated their JSON, set this value to 0. Not recommended due to aforementioned reason in https://github.com/ArtSabintsev/Siren#words-of-caution.
|
||||
siren.showAlertAfterCurrentVersionHasBeenReleasedForDays = 3
|
||||
|
||||
// Replace .Immediately with .Daily or .Weekly to specify a maximum daily or weekly frequency for version checks.
|
||||
// Replace .immediately with .daily or .weekly to specify a maximum daily or weekly frequency for version checks.
|
||||
siren.checkVersion(checkType: .immediately)
|
||||
|
||||
return true
|
||||
@@ -178,7 +180,7 @@ pod 'Siren', '0.9.5'
|
||||
|
||||
func applicationDidBecomeActive(application: UIApplication) {
|
||||
/*
|
||||
Perform daily (.Daily) or weekly (.Weekly) checks for new version of your app.
|
||||
Perform daily (.daily) or weekly (.weekly) checks for new version of your app.
|
||||
Useful if user returns to your app from the background after extended period of time.
|
||||
Place in applicationDidBecomeActive(_:). */
|
||||
|
||||
@@ -187,10 +189,10 @@ func applicationDidBecomeActive(application: UIApplication) {
|
||||
|
||||
func applicationWillEnterForeground(application: UIApplication) {
|
||||
/*
|
||||
Useful if user returns to your app from the background after being sent to the
|
||||
App Store, but doesn't update their app before coming back to your app.
|
||||
Useful if user returns to your app from the background after being sent to the
|
||||
App Store, but doesn't update their app before coming back to your app.
|
||||
|
||||
ONLY USE WITH SirenAlertType.Force
|
||||
ONLY USE WITH Siren.AlertType.immediately
|
||||
*/
|
||||
|
||||
Siren.shared.checkVersion(checkType: .immediately)
|
||||
@@ -198,13 +200,13 @@ func applicationWillEnterForeground(application: UIApplication) {
|
||||
</code></pre>
|
||||
|
||||
<p>And you’re all set!</p>
|
||||
<a href='#prompting-for-updates-without-alerts' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='prompting-for-updates-without-alerts'>Prompting for Updates without Alerts</h3>
|
||||
<h3 id='prompting-for-updates-without-alerts' class='heading'>Prompting for Updates without Alerts</h3>
|
||||
|
||||
<p>Some developers may want to display a less obtrusive custom interface, like a banner or small icon. To accomplish this, you can disable alert presentation by doing the following:</p>
|
||||
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">application</span><span class="p">(</span><span class="nv">application</span><span class="p">:</span> <span class="kt">UIApplication</span><span class="p">,</span> <span class="n">didFinishLaunchingWithOptions</span> <span class="nv">launchOptions</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSObject</span><span class="p">:</span> <span class="kt">AnyObject</span><span class="p">]?)</span> <span class="o">-></span> <span class="kt">Bool</span> <span class="p">{</span>
|
||||
<span class="o">...</span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">delegate</span> <span class="o">=</span> <span class="k">self</span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">alertType</span> <span class="o">=</span> <span class="o">.</span><span class="kt">None</span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">alertType</span> <span class="o">=</span> <span class="o">.</span><span class="k">none</span>
|
||||
<span class="o">...</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
@@ -217,20 +219,20 @@ func applicationWillEnterForeground(application: UIApplication) {
|
||||
</code></pre>
|
||||
|
||||
<p>Siren will call the <code>sirenDidDetectNewVersionWithoutAlert(message: String)</code> delegate method, passing a localized, suggested update string suitable for display. Implement this method to display your own messaging, optionally using <code>message</code>.</p>
|
||||
<a href='#granular-version-update-management' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='granular-version-update-management'>Granular Version Update Management</h2>
|
||||
<h2 id='granular-version-update-management' class='heading'>Granular Version Update Management</h2>
|
||||
|
||||
<p>If you would like to set a different type of alert for revision, patch, minor, and/or major updates, simply add one or all of the following <em>optional</em> lines to your setup <em>before</em> calling the <code>checkVersion()</code> method:</p>
|
||||
<pre class="highlight swift"><code> <span class="cm">/* Siren defaults to SirenAlertType.Option for all updates */</span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">revisionUpdateAlertType</span> <span class="o">=</span> <span class="o"><</span><span class="err">#</span><span class="kt">SirenAlertType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">patchUpdateAlertType</span> <span class="o">=</span> <span class="o"><</span><span class="err">#</span><span class="kt">SirenAlertType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">minorUpdateAlertType</span> <span class="o">=</span> <span class="o"><</span><span class="err">#</span><span class="kt">SirenAlertType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">majorUpdateAlertType</span> <span class="o">=</span> <span class="o"><</span><span class="err">#</span><span class="kt">SirenAlertType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
<pre class="highlight swift"><code> <span class="cm">/* Siren defaults to Siren.AlertType.option for all updates */</span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">revisionUpdateAlertType</span> <span class="o">=</span> <span class="o"><</span><span class="err">#</span><span class="kt">Siren</span><span class="o">.</span><span class="kt">AlertType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">patchUpdateAlertType</span> <span class="o">=</span> <span class="o"><</span><span class="err">#</span><span class="kt">Siren</span><span class="o">.</span><span class="kt">AlertType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">minorUpdateAlertType</span> <span class="o">=</span> <span class="o"><</span><span class="err">#</span><span class="kt">Siren</span><span class="o">.</span><span class="kt">AlertType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">majorUpdateAlertType</span> <span class="o">=</span> <span class="o"><</span><span class="err">#</span><span class="kt">Siren</span><span class="o">.</span><span class="kt">AlertType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
</code></pre>
|
||||
<a href='#optional-delegate-and-delegate-methods' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='optional-delegate-and-delegate-methods'>Optional Delegate and Delegate Methods</h2>
|
||||
<h2 id='optional-delegate-and-delegate-methods' class='heading'>Optional Delegate and Delegate Methods</h2>
|
||||
|
||||
<p>Six delegate methods allow you to handle or track the user’s behavior. Each method has a default, empty implementation, effectively making each of these methods optional.</p>
|
||||
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">protocol</span> <span class="kt">SirenDelegate</span><span class="p">:</span> <span class="kd">class</span> <span class="p">{</span>
|
||||
<span class="kd">func</span> <span class="nf">sirenDidShowUpdateDialog</span><span class="p">(</span><span class="nv">alertType</span><span class="p">:</span> <span class="kt">SirenAlertType</span><span class="p">)</span> <span class="c1">// User presented with update dialog</span>
|
||||
<span class="kd">func</span> <span class="nf">sirenDidShowUpdateDialog</span><span class="p">(</span><span class="nv">alertType</span><span class="p">:</span> <span class="kt">Siren</span><span class="o">.</span><span class="kt">AlertType</span><span class="p">)</span> <span class="c1">// User presented with update dialog</span>
|
||||
<span class="kd">func</span> <span class="nf">sirenUserDidLaunchAppStore</span><span class="p">()</span> <span class="c1">// User did click on button that launched App Store.app</span>
|
||||
<span class="kd">func</span> <span class="nf">sirenUserDidSkipVersion</span><span class="p">()</span> <span class="c1">// User did click on button that skips version update</span>
|
||||
<span class="kd">func</span> <span class="nf">sirenUserDidCancel</span><span class="p">()</span> <span class="c1">// User did click on button that cancels update dialog</span>
|
||||
@@ -238,66 +240,74 @@ func applicationWillEnterForeground(application: UIApplication) {
|
||||
<span class="kd">func</span> <span class="nf">sirenDidDetectNewVersionWithoutAlert</span><span class="p">(</span><span class="nv">message</span><span class="p">:</span> <span class="kt">String</span><span class="p">)</span> <span class="c1">// Siren performed version check and did not display alert</span>
|
||||
<span class="p">}</span>
|
||||
</code></pre>
|
||||
<a href='#localization' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='localization'>Localization</h2>
|
||||
<h2 id='localization' class='heading'>Localization</h2>
|
||||
|
||||
<p>Siren is localized for
|
||||
- Arabic
|
||||
- Armenian
|
||||
- Basque
|
||||
- Chinese (Simplified and Traditional)
|
||||
- Danish
|
||||
- Dutch
|
||||
- English
|
||||
- Estonian
|
||||
- Finnish
|
||||
- French
|
||||
- German
|
||||
- Greek
|
||||
- Hebrew
|
||||
- Hungarian
|
||||
- Indonesian
|
||||
- Italian
|
||||
- Japanese
|
||||
- Korean
|
||||
- Latvian
|
||||
- Lithuanian
|
||||
- Malay
|
||||
- Norwegian (Bokmål)
|
||||
- Polish
|
||||
- Portuguese (Brazil and Portugal)
|
||||
- Russian
|
||||
- Serbian (Cyrillic and Latin)
|
||||
- Slovenian
|
||||
- Swedish
|
||||
- Spanish
|
||||
- Thai
|
||||
- Turkish
|
||||
- Vietnamese</p>
|
||||
<p>Siren is localized for</p>
|
||||
|
||||
<ul>
|
||||
<li>Arabic</li>
|
||||
<li>Armenian</li>
|
||||
<li>Basque</li>
|
||||
<li>Chinese (Simplified and Traditional)</li>
|
||||
<li>Croatian</li>
|
||||
<li>Czech</li>
|
||||
<li>Danish</li>
|
||||
<li>Dutch</li>
|
||||
<li>English</li>
|
||||
<li>Estonian</li>
|
||||
<li>Finnish</li>
|
||||
<li>French</li>
|
||||
<li>German</li>
|
||||
<li>Greek</li>
|
||||
<li>Hebrew</li>
|
||||
<li>Hungarian</li>
|
||||
<li>Indonesian</li>
|
||||
<li>Italian</li>
|
||||
<li>Japanese</li>
|
||||
<li>Korean</li>
|
||||
<li>Latvian</li>
|
||||
<li>Lithuanian</li>
|
||||
<li>Malay</li>
|
||||
<li>Norwegian (Bokmål)</li>
|
||||
<li>Persian (Afghanistan, Iran, Persian)</li>
|
||||
<li>Polish</li>
|
||||
<li>Portuguese (Brazil and Portugal)</li>
|
||||
<li>Russian</li>
|
||||
<li>Serbian (Cyrillic and Latin)</li>
|
||||
<li>Slovenian</li>
|
||||
<li>Spanish</li>
|
||||
<li>Swedish</li>
|
||||
<li>Thai</li>
|
||||
<li>Turkish</li>
|
||||
<li>Urdu</li>
|
||||
<li>Vietnamese</li>
|
||||
</ul>
|
||||
|
||||
<p>You may want the update dialog to <em>always</em> appear in a certain language, ignoring iOS’s language setting (e.g. apps released in a specific country).</p>
|
||||
|
||||
<p>You can enable it like so:</p>
|
||||
<pre class="highlight swift"><code><span class="kt">Siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">forceLanguageLocalization</span> <span class="o">=</span> <span class="kt">SirenLanguageType</span><span class="o">.<</span><span class="err">#</span><span class="kt">SirenLanguageType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
<pre class="highlight swift"><code><span class="kt">Siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">forceLanguageLocalization</span> <span class="o">=</span> <span class="kt">Siren</span><span class="o">.</span><span class="kt">LanguageType</span><span class="o">.<</span><span class="err">#</span><span class="kt">Siren</span><span class="o">.</span><span class="kt">LanguageType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
</code></pre>
|
||||
<a href='#device-compatibility' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='device-compatibility'>Device Compatibility</h2>
|
||||
<h2 id='device-compatibility' class='heading'>Device Compatibility</h2>
|
||||
|
||||
<p>If an app update is available, Siren checks to make sure that the version of iOS on the user’s device is compatible with the one that is required by the app update. For example, if a user has iOS 9 installed on their device, but the app update requires iOS 10, an alert will not be shown. This takes care of the <em>false positive</em> case regarding app updating.</p>
|
||||
<a href='#testing-siren' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='testing-siren'>Testing Siren</h2>
|
||||
<h2 id='testing-siren' class='heading'>Testing Siren</h2>
|
||||
|
||||
<p>Temporarily change the version string in Xcode (within the <code>.xcodeproj</code>) to an older version than the one that’s currently available in the App Store. Afterwards, build and run your app, and you should see the alert.</p>
|
||||
|
||||
<p>If you currently don’t have an app in the store, change your bundleID to one that is already in the store. In the sample app packaged with this library, we use the <a href="https://itunes.apple.com/us/app/itunes-connect/id376771144?mt=8">iTunes Connect Mobile</a> app’s bundleID: <code>com.apple.itunesconnect.mobile</code>.</p>
|
||||
|
||||
<p>For your convenience, you may turn on debugging statements by setting <code>self.debugEnabled = true</code> before calling the <code>checkVersion()</code> method.</p>
|
||||
<a href='#app-store-submissions' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='app-store-submissions'>App Store Submissions</h2>
|
||||
<h2 id='app-store-submissions' class='heading'>App Store Submissions</h2>
|
||||
|
||||
<p>The App Store reviewer will <strong>not</strong> see the alert. The version in the App Store will always be older than the version being reviewed.</p>
|
||||
<a href='#words-of-caution' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='words-of-caution'>Words of Caution</h2>
|
||||
<h2 id='phased-releases' class='heading'>Phased Releases</h2>
|
||||
|
||||
<p>Occasionally, the iTunes JSON will update faster than the App Store CDN, meaning the JSON may state that the new version of the app has been release, while no new binary is made available for download via the App Store. It is for this reason, I caution developers to not use the <code>Force</code> option unless you are controlling the <code>Force</code> option with a remote configuration file (e.g., enabling Siren remotely only after you have guaranteed that the app has propagated to the App Store).</p>
|
||||
<p>In 2017, Apple announced the <a href="https://itunespartner.apple.com/en/apps/faq/Managing%20Your%20Apps_Submission%20Process">ability to rollout app updates gradually (a.k.a. Phased Releases)</a>. Siren will continue to work as it has in the past, presenting an update modal to <em>all</em> users. If you opt-in to a phased rollout for a specific version, you will need to remotely disable Siren until the rollout is done.</p>
|
||||
<h2 id='words-of-caution' class='heading'>Words of Caution</h2>
|
||||
|
||||
<p>Also, in even rarer situations, the iTunes JSON may fluctuate between multiple versions of your app shortly after pushing out a new version. This is extremely rare, and has only been reported once in the five years that Siren and Harpy have been around.</p>
|
||||
<a href='#ports' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='ports'>Ports</h2>
|
||||
<p>Occasionally, the iTunes JSON will update faster than the App Store CDN, meaning the JSON may state that the new version of the app has been release, while no new binary is made available for download via the App Store. It is for this reason that Siren will, by default, wait 24 hours after the JSON has been updated to prompt the user to update. To change the default setting, please modify the value of <code>showAlertAfterCurrentVersionHasBeenReleasedForDays</code>.</p>
|
||||
<h2 id='ports' class='heading'>Ports</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Objective-C (iOS)</strong>
|
||||
@@ -319,7 +329,7 @@ func applicationWillEnterForeground(application: UIApplication) {
|
||||
<li>The Siren Swift library inspired the React Native library.</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
<a href='#created-and-maintained-by' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='created-and-maintained-by'>Created and maintained by</h2>
|
||||
<h2 id='created-and-maintained-by' class='heading'>Created and maintained by</h2>
|
||||
|
||||
<p><a href="http://www.sabintsev.com/">Arthur Ariel Sabintsev</a> & <a href="http://twitter.com/getaaron">Aaron Brager</a></p>
|
||||
|
||||
@@ -327,7 +337,7 @@ func applicationWillEnterForeground(application: UIApplication) {
|
||||
</section>
|
||||
<section id="footer">
|
||||
<p>© 2015-2017 <a class="link" href="http://www.sabintsev.com" target="_blank" rel="external">Arthur Ariel Sabintsev</a></p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.5</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.8.2</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,257 +0,0 @@
|
||||
{
|
||||
"warnings": [
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 514,
|
||||
"symbol": "Siren.LanguageType.Arabic",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 515,
|
||||
"symbol": "Siren.LanguageType.Armenian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 516,
|
||||
"symbol": "Siren.LanguageType.Basque",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 517,
|
||||
"symbol": "Siren.LanguageType.ChineseSimplified",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 518,
|
||||
"symbol": "Siren.LanguageType.ChineseTraditional",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 519,
|
||||
"symbol": "Siren.LanguageType.Croatian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 520,
|
||||
"symbol": "Siren.LanguageType.Danish",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 521,
|
||||
"symbol": "Siren.LanguageType.Dutch",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 522,
|
||||
"symbol": "Siren.LanguageType.English",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 523,
|
||||
"symbol": "Siren.LanguageType.Estonian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 524,
|
||||
"symbol": "Siren.LanguageType.Finnish",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 525,
|
||||
"symbol": "Siren.LanguageType.French",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 526,
|
||||
"symbol": "Siren.LanguageType.German",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 527,
|
||||
"symbol": "Siren.LanguageType.Greek",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 528,
|
||||
"symbol": "Siren.LanguageType.Hebrew",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 529,
|
||||
"symbol": "Siren.LanguageType.Hungarian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 530,
|
||||
"symbol": "Siren.LanguageType.Indonesian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 531,
|
||||
"symbol": "Siren.LanguageType.Italian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 532,
|
||||
"symbol": "Siren.LanguageType.Japanese",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 533,
|
||||
"symbol": "Siren.LanguageType.Korean",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 534,
|
||||
"symbol": "Siren.LanguageType.Latvian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 535,
|
||||
"symbol": "Siren.LanguageType.Lithuanian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 536,
|
||||
"symbol": "Siren.LanguageType.Malay",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 537,
|
||||
"symbol": "Siren.LanguageType.Norwegian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 538,
|
||||
"symbol": "Siren.LanguageType.Polish",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 539,
|
||||
"symbol": "Siren.LanguageType.PortugueseBrazil",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 540,
|
||||
"symbol": "Siren.LanguageType.PortuguesePortugal",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 541,
|
||||
"symbol": "Siren.LanguageType.Russian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 542,
|
||||
"symbol": "Siren.LanguageType.SerbianCyrillic",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 543,
|
||||
"symbol": "Siren.LanguageType.SerbianLatin",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 544,
|
||||
"symbol": "Siren.LanguageType.Slovenian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 545,
|
||||
"symbol": "Siren.LanguageType.Spanish",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 546,
|
||||
"symbol": "Siren.LanguageType.Swedish",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 547,
|
||||
"symbol": "Siren.LanguageType.Thai",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 548,
|
||||
"symbol": "Siren.LanguageType.Turkish",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 549,
|
||||
"symbol": "Siren.LanguageType.Vietnamese",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
}
|
||||
],
|
||||
"source_directory": "/Users/Arthur/Documents/oss/siren"
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
+103
-93
@@ -13,7 +13,7 @@
|
||||
<a title="Siren Reference"></a>
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<p><a href="index.html">Siren Docs</a> (55% documented)</p>
|
||||
<p><a href="index.html">Siren Docs</a> (52% documented)</p>
|
||||
<p class="header-right"><a href="https://github.com/artsabintsev/siren"><img src="img/gh.png"/>View on GitHub</a></p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -58,10 +58,10 @@
|
||||
<section>
|
||||
<section class="section">
|
||||
|
||||
<a href='#siren' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h1 id='siren'>Siren</h1>
|
||||
<a href='#notify-users-when-a-new-version-of-your-app-is-available-and-prompt-them-to-upgrade' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='notify-users-when-a-new-version-of-your-app-is-available-and-prompt-them-to-upgrade'>Notify users when a new version of your app is available and prompt them to upgrade.</h3>
|
||||
<a href='#a-href-https-dashboard-buddybuild-com-apps-58c4d0d85601d40100c5c51d-build-latest-branch-master-img-src-https-dashboard-buddybuild-com-api-statusimage-appid-58c4d0d85601d40100c5c51d-branch-master-build-latest-alt-buddybuild-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-v-siren-svg-alt-cocoapods-a-a-href-https-github-com-carthage-carthage-img-src-https-img-shields-io-badge-carthage-compatible-4bc51d-svg-style-flat-alt-carthage-compatible-a-a-href-https-swift-org-package-manager-img-src-https-img-shields-io-badge-swiftpm-compatible-brightgreen-svg-alt-swiftpm-compatible-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-dt-siren-svg-alt-cocoapods-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-dm-siren-svg-alt-cocoapods-a' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='a-href-https-dashboard-buddybuild-com-apps-58c4d0d85601d40100c5c51d-build-latest-branch-master-img-src-https-dashboard-buddybuild-com-api-statusimage-appid-58c4d0d85601d40100c5c51d-branch-master-build-latest-alt-buddybuild-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-v-siren-svg-alt-cocoapods-a-a-href-https-github-com-carthage-carthage-img-src-https-img-shields-io-badge-carthage-compatible-4bc51d-svg-style-flat-alt-carthage-compatible-a-a-href-https-swift-org-package-manager-img-src-https-img-shields-io-badge-swiftpm-compatible-brightgreen-svg-alt-swiftpm-compatible-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-dt-siren-svg-alt-cocoapods-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-dm-siren-svg-alt-cocoapods-a'><a href="https://dashboard.buddybuild.com/apps/58c4d0d85601d40100c5c51d/build/latest?branch=master"><img src="https://dashboard.buddybuild.com/api/statusImage?appID=58c4d0d85601d40100c5c51d&branch=master&build=latest" alt="BuddyBuild"></a> <a href="https://cocoapods.org/pods/Siren"><img src="https://img.shields.io/cocoapods/v/Siren.svg" alt="CocoaPods"></a> <a href="https://github.com/Carthage/Carthage"><img src="https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat" alt="Carthage Compatible"></a> <a href="https://swift.org/package-manager/"><img src="https://img.shields.io/badge/SwiftPM-Compatible-brightgreen.svg" alt="SwiftPM Compatible"></a> <a href="https://cocoapods.org/pods/Siren"><img src="https://img.shields.io/cocoapods/dt/Siren.svg" alt="CocoaPods"></a> <a href="https://cocoapods.org/pods/Siren"><img src="https://img.shields.io/cocoapods/dm/Siren.svg" alt="CocoaPods"></a></h2>
|
||||
<a href='#table-of-contents' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='table-of-contents'>Table of Contents</h2>
|
||||
<h1 id='siren' class='heading'>Siren 🚨</h1>
|
||||
<h3 id='notify-users-when-a-new-version-of-your-app-is-available-and-prompt-them-to-upgrade' class='heading'>Notify users when a new version of your app is available and prompt them to upgrade.</h3>
|
||||
<h2 id='a-href-https-dashboard-buddybuild-com-apps-58c4d0d85601d40100c5c51d-build-latest-branch-master-img-src-https-dashboard-buddybuild-com-api-statusimage-appid-58c4d0d85601d40100c5c51d-branch-master-build-latest-alt-buddybuild-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-v-siren-svg-alt-cocoapods-a-a-href-https-github-com-carthage-carthage-img-src-https-img-shields-io-badge-carthage-compatible-4bc51d-svg-style-flat-alt-carthage-compatible-a-a-href-https-swift-org-package-manager-img-src-https-img-shields-io-badge-swiftpm-compatible-brightgreen-svg-alt-swiftpm-compatible-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-dt-siren-svg-alt-cocoapods-a-a-href-https-cocoapods-org-pods-siren-img-src-https-img-shields-io-cocoapods-dm-siren-svg-alt-cocoapods-a' class='heading'><a href="https://dashboard.buddybuild.com/apps/58c4d0d85601d40100c5c51d/build/latest?branch=master"><img src="https://dashboard.buddybuild.com/api/statusImage?appID=58c4d0d85601d40100c5c51d&branch=master&build=latest" alt="BuddyBuild"></a> <a href="https://cocoapods.org/pods/Siren"><img src="https://img.shields.io/cocoapods/v/Siren.svg" alt="CocoaPods"></a> <a href="https://github.com/Carthage/Carthage"><img src="https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat" alt="Carthage Compatible"></a> <a href="https://swift.org/package-manager/"><img src="https://img.shields.io/badge/SwiftPM-Compatible-brightgreen.svg" alt="SwiftPM Compatible"></a> <a href="https://cocoapods.org/pods/Siren"><img src="https://img.shields.io/cocoapods/dt/Siren.svg" alt="CocoaPods"></a> <a href="https://cocoapods.org/pods/Siren"><img src="https://img.shields.io/cocoapods/dm/Siren.svg" alt="CocoaPods"></a></h2>
|
||||
<h2 id='table-of-contents' class='heading'>Table of Contents</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/ArtSabintsev/Siren#about">About</a></li>
|
||||
@@ -75,11 +75,12 @@
|
||||
<li><a href="https://github.com/ArtSabintsev/Siren#device-compatibility">Device Compatibility</a></li>
|
||||
<li><a href="https://github.com/ArtSabintsev/Siren#testing-siren">Testing Siren</a></li>
|
||||
<li><a href="https://github.com/ArtSabintsev/Siren#app-store-submissions">App Store Review & Submissions</a></li>
|
||||
<li><a href="https://github.com/ArtSabintsev/Siren#phased-releases">Phrased Releases</a></li>
|
||||
<li><a href="https://github.com/ArtSabintsev/Siren#words-of-caution">Words of Caution</a></li>
|
||||
<li><a href="https://github.com/ArtSabintsev/Siren#ports">Ports</a></li>
|
||||
</ul>
|
||||
<a href='#a-href-https-github-com-artsabintsev-siren-created-and-maintained-by-attribution-a' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='a-href-https-github-com-artsabintsev-siren-created-and-maintained-by-attribution-a'>- <a href="https://github.com/ArtSabintsev/Siren#created-and-maintained-by">Attribution</a></h2>
|
||||
<a href='#about' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='about'>About</h2>
|
||||
<h2 id='a-href-https-github-com-artsabintsev-siren-created-and-maintained-by-attribution-a' class='heading'>- <a href="https://github.com/ArtSabintsev/Siren#created-and-maintained-by">Attribution</a></h2>
|
||||
<h2 id='about' class='heading'>About</h2>
|
||||
|
||||
<p><strong>Siren</strong> checks a user’s currently installed version of your iOS app against the version that is currently available in the App Store.</p>
|
||||
|
||||
@@ -94,64 +95,65 @@
|
||||
</ul></li>
|
||||
<li>Siren is actively maintained by <a href="http://github.com/ArtSabintsev"><strong>Arthur Sabintsev</strong></a> and <a href="http://twitter.com/getaaron"><strong>Aaron Brager</strong></a></li>
|
||||
</ul>
|
||||
<a href='#readme-translations' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='readme-translations'>README Translations</h3>
|
||||
<h3 id='readme-translations' class='heading'>README Translations</h3>
|
||||
|
||||
<ul>
|
||||
<li><a href="README.zh_CN.md"><strong>简体中文</strong></a> (by <a href="http://www.jianshu.com/u/d8bbc4831623"><strong>Daniel Hu</strong></a>)</li>
|
||||
</ul>
|
||||
<a href='#features' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='features'>Features</h2>
|
||||
<h2 id='features' class='heading'>Features</h2>
|
||||
|
||||
<ul>
|
||||
<li>[x] CocoaPods Support</li>
|
||||
<li>[x] Carthage Support</li>
|
||||
<li>[x] Swift Package Manager Support</li>
|
||||
<li>[x] Localized for 30+ languages (see <a href="https://github.com/ArtSabintsev/Siren#localization">Localization</a>)</li>
|
||||
<li>[x] Pre-Update Device Compatibility Check (see <a href="https://github.com/ArtSabintsev/Siren#device-compatibility">Device Compatibility</a></li>
|
||||
<li>[x] Pre-Update Device Compatibility Check (see <a href="https://github.com/ArtSabintsev/Siren#device-compatibility">Device Compatibility</a>)</li>
|
||||
<li>[x] Three types of alerts (see <a href="https://github.com/ArtSabintsev/Siren#screenshots">Screenshots</a>)</li>
|
||||
<li>[x] Optional delegate methods (see <a href="https://github.com/ArtSabintsev/Siren#optional-delegate-and-delegate-methods">Delegates (Optional)</a></li>
|
||||
<li>[x] Optional delegate methods (see <a href="https://github.com/ArtSabintsev/Siren#optional-delegate-and-delegate-methods">Delegates (Optional)</a>)</li>
|
||||
<li>[x] Unit Tests</li>
|
||||
<li>[x] Documentation can be found at <a href="http://sabintsev.com/Siren">http://sabintsev.com/Siren</a>.</li>
|
||||
</ul>
|
||||
<a href='#screenshots' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='screenshots'>Screenshots</h2>
|
||||
<h2 id='screenshots' class='heading'>Screenshots</h2>
|
||||
|
||||
<ul>
|
||||
<li>The <strong>left picture</strong> forces the user to update the app.</li>
|
||||
<li>The <strong>center picture</strong> gives the user the option to update the app.</li>
|
||||
<li>The <strong>right picture</strong> gives the user the option to skip the current update.</li>
|
||||
<li>These options are controlled by the <code>SirenAlertType</code> enum.</li>
|
||||
<li>These options are controlled by the <code>Siren.AlertType</code> enum.</li>
|
||||
</ul>
|
||||
|
||||
<p><img src="https://github.com/ArtSabintsev/Siren/blob/master/Assets/picForcedUpdate.png?raw=true" height="480"><img src="https://github.com/ArtSabintsev/Siren/blob/master/Assets/picOptionalUpdate.png?raw=true" height="480"><img src="https://github.com/ArtSabintsev/Siren/blob/master/Assets/picSkippedUpdate.png?raw=true" height="480"></p>
|
||||
<a href='#installation-instructions' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='installation-instructions'>Installation Instructions</h2>
|
||||
<a href='#cocoapods' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='cocoapods'>CocoaPods</h3>
|
||||
<h2 id='installation-instructions' class='heading'>Installation Instructions</h2>
|
||||
<h3 id='cocoapods' class='heading'>CocoaPods</h3>
|
||||
|
||||
<p>For Swift 3 support:
|
||||
<code>ruby
|
||||
pod 'Siren'
|
||||
</code></p>
|
||||
<p>For Swift 3 support:</p>
|
||||
<pre class="highlight ruby"><code><span class="n">pod</span> <span class="s1">'Siren'</span>
|
||||
</code></pre>
|
||||
|
||||
<p>For Swift 2.3 support:
|
||||
<code>ruby
|
||||
pod 'Siren', :git => 'https://github.com/ArtSabintsev/Siren.git', :branch => 'swift2.3'
|
||||
</code></p>
|
||||
<p>For Swift 4 support:</p>
|
||||
<pre class="highlight ruby"><code><span class="n">pod</span> <span class="s1">'Siren'</span><span class="p">,</span> <span class="ss">:git</span> <span class="o">=></span> <span class="s1">'https://github.com/ArtSabintsev/Siren.git'</span><span class="p">,</span> <span class="ss">:branch</span> <span class="o">=></span> <span class="s1">'swift4'</span>
|
||||
</code></pre>
|
||||
|
||||
<p>For Swift 2.2 support:
|
||||
<code>ruby
|
||||
pod 'Siren', '0.9.5'
|
||||
</code></p>
|
||||
<a href='#carthage' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='carthage'>Carthage</h3>
|
||||
<p>For Swift 2.3 support:</p>
|
||||
<pre class="highlight ruby"><code><span class="n">pod</span> <span class="s1">'Siren'</span><span class="p">,</span> <span class="ss">:git</span> <span class="o">=></span> <span class="s1">'https://github.com/ArtSabintsev/Siren.git'</span><span class="p">,</span> <span class="ss">:branch</span> <span class="o">=></span> <span class="s1">'swift2.3'</span>
|
||||
</code></pre>
|
||||
<h3 id='carthage' class='heading'>Carthage</h3>
|
||||
|
||||
<p>For Swift 3 support:</p>
|
||||
<pre class="highlight swift"><code><span class="n">github</span> <span class="s">"ArtSabintsev/Siren"</span>
|
||||
</code></pre>
|
||||
|
||||
<p>For Swift 2.3 support:</p>
|
||||
<pre class="highlight swift"><code><span class="n">github</span> <span class="s">"ArtSabintsev/Siren"</span> <span class="s">"swift2.3"</span>
|
||||
<p>For Swift 4 support:</p>
|
||||
<pre class="highlight swift"><code><span class="n">github</span> <span class="s">"ArtSabintsev/Siren"</span><span class="p">,</span> <span class="s">"swift4"</span>
|
||||
</code></pre>
|
||||
<a href='#swift-package-manager' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='swift-package-manager'>Swift Package Manager</h3>
|
||||
|
||||
<p>For Swift 2.3 support:</p>
|
||||
<pre class="highlight ruby"><code><span class="n">github</span> <span class="s2">"ArtSabintsev/Siren"</span><span class="p">,</span> <span class="s2">"swift2.3"</span>
|
||||
</code></pre>
|
||||
<h3 id='swift-package-manager' class='heading'>Swift Package Manager</h3>
|
||||
<pre class="highlight swift"><code><span class="o">.</span><span class="kt">Package</span><span class="p">(</span><span class="nv">url</span><span class="p">:</span> <span class="s">"https://github.com/ArtSabintsev/Siren.git"</span><span class="p">,</span> <span class="nv">majorVersion</span><span class="p">:</span> <span class="mi">2</span><span class="p">)</span>
|
||||
</code></pre>
|
||||
<a href='#example-code' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='example-code'>Example Code</h2>
|
||||
<h2 id='example-code' class='heading'>Example Code</h2>
|
||||
|
||||
<p>Below is some commented sample code. Adapt this to meet your app’s needs.</p>
|
||||
|
||||
@@ -162,15 +164,15 @@ pod 'Siren', '0.9.5'
|
||||
// Siren is a singleton
|
||||
let siren = Siren.shared
|
||||
|
||||
// Optional: Defaults to .Option
|
||||
siren.alertType = <#SirenAlertType_Enum_Value#>
|
||||
// Optional: Defaults to .option
|
||||
siren.alertType = <#Siren.AlertType_Enum_Value#>
|
||||
|
||||
// Optional: Set this variable if you would only like to show an alert if your app has been available on the store for a few days.
|
||||
// This default value is set to 1 to avoid this issue: https://github.com/ArtSabintsev/Siren#words-of-caution
|
||||
// To show the update immediately after Apple has updated their JSON, set this value to 0. Not recommended due to aforementioned reason in https://github.com/ArtSabintsev/Siren#words-of-caution.
|
||||
siren.showAlertAfterCurrentVersionHasBeenReleasedForDays = 3
|
||||
|
||||
// Replace .Immediately with .Daily or .Weekly to specify a maximum daily or weekly frequency for version checks.
|
||||
// Replace .immediately with .daily or .weekly to specify a maximum daily or weekly frequency for version checks.
|
||||
siren.checkVersion(checkType: .immediately)
|
||||
|
||||
return true
|
||||
@@ -178,7 +180,7 @@ pod 'Siren', '0.9.5'
|
||||
|
||||
func applicationDidBecomeActive(application: UIApplication) {
|
||||
/*
|
||||
Perform daily (.Daily) or weekly (.Weekly) checks for new version of your app.
|
||||
Perform daily (.daily) or weekly (.weekly) checks for new version of your app.
|
||||
Useful if user returns to your app from the background after extended period of time.
|
||||
Place in applicationDidBecomeActive(_:). */
|
||||
|
||||
@@ -187,10 +189,10 @@ func applicationDidBecomeActive(application: UIApplication) {
|
||||
|
||||
func applicationWillEnterForeground(application: UIApplication) {
|
||||
/*
|
||||
Useful if user returns to your app from the background after being sent to the
|
||||
App Store, but doesn't update their app before coming back to your app.
|
||||
Useful if user returns to your app from the background after being sent to the
|
||||
App Store, but doesn't update their app before coming back to your app.
|
||||
|
||||
ONLY USE WITH SirenAlertType.Force
|
||||
ONLY USE WITH Siren.AlertType.immediately
|
||||
*/
|
||||
|
||||
Siren.shared.checkVersion(checkType: .immediately)
|
||||
@@ -198,13 +200,13 @@ func applicationWillEnterForeground(application: UIApplication) {
|
||||
</code></pre>
|
||||
|
||||
<p>And you’re all set!</p>
|
||||
<a href='#prompting-for-updates-without-alerts' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='prompting-for-updates-without-alerts'>Prompting for Updates without Alerts</h3>
|
||||
<h3 id='prompting-for-updates-without-alerts' class='heading'>Prompting for Updates without Alerts</h3>
|
||||
|
||||
<p>Some developers may want to display a less obtrusive custom interface, like a banner or small icon. To accomplish this, you can disable alert presentation by doing the following:</p>
|
||||
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">application</span><span class="p">(</span><span class="nv">application</span><span class="p">:</span> <span class="kt">UIApplication</span><span class="p">,</span> <span class="n">didFinishLaunchingWithOptions</span> <span class="nv">launchOptions</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSObject</span><span class="p">:</span> <span class="kt">AnyObject</span><span class="p">]?)</span> <span class="o">-></span> <span class="kt">Bool</span> <span class="p">{</span>
|
||||
<span class="o">...</span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">delegate</span> <span class="o">=</span> <span class="k">self</span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">alertType</span> <span class="o">=</span> <span class="o">.</span><span class="kt">None</span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">alertType</span> <span class="o">=</span> <span class="o">.</span><span class="k">none</span>
|
||||
<span class="o">...</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
@@ -217,20 +219,20 @@ func applicationWillEnterForeground(application: UIApplication) {
|
||||
</code></pre>
|
||||
|
||||
<p>Siren will call the <code>sirenDidDetectNewVersionWithoutAlert(message: String)</code> delegate method, passing a localized, suggested update string suitable for display. Implement this method to display your own messaging, optionally using <code>message</code>.</p>
|
||||
<a href='#granular-version-update-management' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='granular-version-update-management'>Granular Version Update Management</h2>
|
||||
<h2 id='granular-version-update-management' class='heading'>Granular Version Update Management</h2>
|
||||
|
||||
<p>If you would like to set a different type of alert for revision, patch, minor, and/or major updates, simply add one or all of the following <em>optional</em> lines to your setup <em>before</em> calling the <code>checkVersion()</code> method:</p>
|
||||
<pre class="highlight swift"><code> <span class="cm">/* Siren defaults to SirenAlertType.Option for all updates */</span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">revisionUpdateAlertType</span> <span class="o">=</span> <span class="o"><</span><span class="err">#</span><span class="kt">SirenAlertType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">patchUpdateAlertType</span> <span class="o">=</span> <span class="o"><</span><span class="err">#</span><span class="kt">SirenAlertType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">minorUpdateAlertType</span> <span class="o">=</span> <span class="o"><</span><span class="err">#</span><span class="kt">SirenAlertType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">majorUpdateAlertType</span> <span class="o">=</span> <span class="o"><</span><span class="err">#</span><span class="kt">SirenAlertType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
<pre class="highlight swift"><code> <span class="cm">/* Siren defaults to Siren.AlertType.option for all updates */</span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">revisionUpdateAlertType</span> <span class="o">=</span> <span class="o"><</span><span class="err">#</span><span class="kt">Siren</span><span class="o">.</span><span class="kt">AlertType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">patchUpdateAlertType</span> <span class="o">=</span> <span class="o"><</span><span class="err">#</span><span class="kt">Siren</span><span class="o">.</span><span class="kt">AlertType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">minorUpdateAlertType</span> <span class="o">=</span> <span class="o"><</span><span class="err">#</span><span class="kt">Siren</span><span class="o">.</span><span class="kt">AlertType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
<span class="n">siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">majorUpdateAlertType</span> <span class="o">=</span> <span class="o"><</span><span class="err">#</span><span class="kt">Siren</span><span class="o">.</span><span class="kt">AlertType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
</code></pre>
|
||||
<a href='#optional-delegate-and-delegate-methods' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='optional-delegate-and-delegate-methods'>Optional Delegate and Delegate Methods</h2>
|
||||
<h2 id='optional-delegate-and-delegate-methods' class='heading'>Optional Delegate and Delegate Methods</h2>
|
||||
|
||||
<p>Six delegate methods allow you to handle or track the user’s behavior. Each method has a default, empty implementation, effectively making each of these methods optional.</p>
|
||||
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">protocol</span> <span class="kt">SirenDelegate</span><span class="p">:</span> <span class="kd">class</span> <span class="p">{</span>
|
||||
<span class="kd">func</span> <span class="nf">sirenDidShowUpdateDialog</span><span class="p">(</span><span class="nv">alertType</span><span class="p">:</span> <span class="kt">SirenAlertType</span><span class="p">)</span> <span class="c1">// User presented with update dialog</span>
|
||||
<span class="kd">func</span> <span class="nf">sirenDidShowUpdateDialog</span><span class="p">(</span><span class="nv">alertType</span><span class="p">:</span> <span class="kt">Siren</span><span class="o">.</span><span class="kt">AlertType</span><span class="p">)</span> <span class="c1">// User presented with update dialog</span>
|
||||
<span class="kd">func</span> <span class="nf">sirenUserDidLaunchAppStore</span><span class="p">()</span> <span class="c1">// User did click on button that launched App Store.app</span>
|
||||
<span class="kd">func</span> <span class="nf">sirenUserDidSkipVersion</span><span class="p">()</span> <span class="c1">// User did click on button that skips version update</span>
|
||||
<span class="kd">func</span> <span class="nf">sirenUserDidCancel</span><span class="p">()</span> <span class="c1">// User did click on button that cancels update dialog</span>
|
||||
@@ -238,66 +240,74 @@ func applicationWillEnterForeground(application: UIApplication) {
|
||||
<span class="kd">func</span> <span class="nf">sirenDidDetectNewVersionWithoutAlert</span><span class="p">(</span><span class="nv">message</span><span class="p">:</span> <span class="kt">String</span><span class="p">)</span> <span class="c1">// Siren performed version check and did not display alert</span>
|
||||
<span class="p">}</span>
|
||||
</code></pre>
|
||||
<a href='#localization' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='localization'>Localization</h2>
|
||||
<h2 id='localization' class='heading'>Localization</h2>
|
||||
|
||||
<p>Siren is localized for
|
||||
- Arabic
|
||||
- Armenian
|
||||
- Basque
|
||||
- Chinese (Simplified and Traditional)
|
||||
- Danish
|
||||
- Dutch
|
||||
- English
|
||||
- Estonian
|
||||
- Finnish
|
||||
- French
|
||||
- German
|
||||
- Greek
|
||||
- Hebrew
|
||||
- Hungarian
|
||||
- Indonesian
|
||||
- Italian
|
||||
- Japanese
|
||||
- Korean
|
||||
- Latvian
|
||||
- Lithuanian
|
||||
- Malay
|
||||
- Norwegian (Bokmål)
|
||||
- Polish
|
||||
- Portuguese (Brazil and Portugal)
|
||||
- Russian
|
||||
- Serbian (Cyrillic and Latin)
|
||||
- Slovenian
|
||||
- Swedish
|
||||
- Spanish
|
||||
- Thai
|
||||
- Turkish
|
||||
- Vietnamese</p>
|
||||
<p>Siren is localized for</p>
|
||||
|
||||
<ul>
|
||||
<li>Arabic</li>
|
||||
<li>Armenian</li>
|
||||
<li>Basque</li>
|
||||
<li>Chinese (Simplified and Traditional)</li>
|
||||
<li>Croatian</li>
|
||||
<li>Czech</li>
|
||||
<li>Danish</li>
|
||||
<li>Dutch</li>
|
||||
<li>English</li>
|
||||
<li>Estonian</li>
|
||||
<li>Finnish</li>
|
||||
<li>French</li>
|
||||
<li>German</li>
|
||||
<li>Greek</li>
|
||||
<li>Hebrew</li>
|
||||
<li>Hungarian</li>
|
||||
<li>Indonesian</li>
|
||||
<li>Italian</li>
|
||||
<li>Japanese</li>
|
||||
<li>Korean</li>
|
||||
<li>Latvian</li>
|
||||
<li>Lithuanian</li>
|
||||
<li>Malay</li>
|
||||
<li>Norwegian (Bokmål)</li>
|
||||
<li>Persian (Afghanistan, Iran, Persian)</li>
|
||||
<li>Polish</li>
|
||||
<li>Portuguese (Brazil and Portugal)</li>
|
||||
<li>Russian</li>
|
||||
<li>Serbian (Cyrillic and Latin)</li>
|
||||
<li>Slovenian</li>
|
||||
<li>Spanish</li>
|
||||
<li>Swedish</li>
|
||||
<li>Thai</li>
|
||||
<li>Turkish</li>
|
||||
<li>Urdu</li>
|
||||
<li>Vietnamese</li>
|
||||
</ul>
|
||||
|
||||
<p>You may want the update dialog to <em>always</em> appear in a certain language, ignoring iOS’s language setting (e.g. apps released in a specific country).</p>
|
||||
|
||||
<p>You can enable it like so:</p>
|
||||
<pre class="highlight swift"><code><span class="kt">Siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">forceLanguageLocalization</span> <span class="o">=</span> <span class="kt">SirenLanguageType</span><span class="o">.<</span><span class="err">#</span><span class="kt">SirenLanguageType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
<pre class="highlight swift"><code><span class="kt">Siren</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">forceLanguageLocalization</span> <span class="o">=</span> <span class="kt">Siren</span><span class="o">.</span><span class="kt">LanguageType</span><span class="o">.<</span><span class="err">#</span><span class="kt">Siren</span><span class="o">.</span><span class="kt">LanguageType_Enum_Value</span><span class="err">#</span><span class="o">></span>
|
||||
</code></pre>
|
||||
<a href='#device-compatibility' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='device-compatibility'>Device Compatibility</h2>
|
||||
<h2 id='device-compatibility' class='heading'>Device Compatibility</h2>
|
||||
|
||||
<p>If an app update is available, Siren checks to make sure that the version of iOS on the user’s device is compatible with the one that is required by the app update. For example, if a user has iOS 9 installed on their device, but the app update requires iOS 10, an alert will not be shown. This takes care of the <em>false positive</em> case regarding app updating.</p>
|
||||
<a href='#testing-siren' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='testing-siren'>Testing Siren</h2>
|
||||
<h2 id='testing-siren' class='heading'>Testing Siren</h2>
|
||||
|
||||
<p>Temporarily change the version string in Xcode (within the <code>.xcodeproj</code>) to an older version than the one that’s currently available in the App Store. Afterwards, build and run your app, and you should see the alert.</p>
|
||||
|
||||
<p>If you currently don’t have an app in the store, change your bundleID to one that is already in the store. In the sample app packaged with this library, we use the <a href="https://itunes.apple.com/us/app/itunes-connect/id376771144?mt=8">iTunes Connect Mobile</a> app’s bundleID: <code>com.apple.itunesconnect.mobile</code>.</p>
|
||||
|
||||
<p>For your convenience, you may turn on debugging statements by setting <code>self.debugEnabled = true</code> before calling the <code>checkVersion()</code> method.</p>
|
||||
<a href='#app-store-submissions' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='app-store-submissions'>App Store Submissions</h2>
|
||||
<h2 id='app-store-submissions' class='heading'>App Store Submissions</h2>
|
||||
|
||||
<p>The App Store reviewer will <strong>not</strong> see the alert. The version in the App Store will always be older than the version being reviewed.</p>
|
||||
<a href='#words-of-caution' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='words-of-caution'>Words of Caution</h2>
|
||||
<h2 id='phased-releases' class='heading'>Phased Releases</h2>
|
||||
|
||||
<p>Occasionally, the iTunes JSON will update faster than the App Store CDN, meaning the JSON may state that the new version of the app has been release, while no new binary is made available for download via the App Store. It is for this reason, I caution developers to not use the <code>Force</code> option unless you are controlling the <code>Force</code> option with a remote configuration file (e.g., enabling Siren remotely only after you have guaranteed that the app has propagated to the App Store).</p>
|
||||
<p>In 2017, Apple announced the <a href="https://itunespartner.apple.com/en/apps/faq/Managing%20Your%20Apps_Submission%20Process">ability to rollout app updates gradually (a.k.a. Phased Releases)</a>. Siren will continue to work as it has in the past, presenting an update modal to <em>all</em> users. If you opt-in to a phased rollout for a specific version, you will need to remotely disable Siren until the rollout is done.</p>
|
||||
<h2 id='words-of-caution' class='heading'>Words of Caution</h2>
|
||||
|
||||
<p>Also, in even rarer situations, the iTunes JSON may fluctuate between multiple versions of your app shortly after pushing out a new version. This is extremely rare, and has only been reported once in the five years that Siren and Harpy have been around.</p>
|
||||
<a href='#ports' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='ports'>Ports</h2>
|
||||
<p>Occasionally, the iTunes JSON will update faster than the App Store CDN, meaning the JSON may state that the new version of the app has been release, while no new binary is made available for download via the App Store. It is for this reason that Siren will, by default, wait 24 hours after the JSON has been updated to prompt the user to update. To change the default setting, please modify the value of <code>showAlertAfterCurrentVersionHasBeenReleasedForDays</code>.</p>
|
||||
<h2 id='ports' class='heading'>Ports</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Objective-C (iOS)</strong>
|
||||
@@ -319,7 +329,7 @@ func applicationWillEnterForeground(application: UIApplication) {
|
||||
<li>The Siren Swift library inspired the React Native library.</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
<a href='#created-and-maintained-by' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='created-and-maintained-by'>Created and maintained by</h2>
|
||||
<h2 id='created-and-maintained-by' class='heading'>Created and maintained by</h2>
|
||||
|
||||
<p><a href="http://www.sabintsev.com/">Arthur Ariel Sabintsev</a> & <a href="http://twitter.com/getaaron">Aaron Brager</a></p>
|
||||
|
||||
@@ -327,7 +337,7 @@ func applicationWillEnterForeground(application: UIApplication) {
|
||||
</section>
|
||||
<section id="footer">
|
||||
<p>© 2015-2017 <a class="link" href="http://www.sabintsev.com" target="_blank" rel="external">Arthur Ariel Sabintsev</a></p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.5</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.8.2</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+118
-83
@@ -2,252 +2,287 @@
|
||||
"warnings": [
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 514,
|
||||
"line": 522,
|
||||
"symbol": "Siren.LanguageType.Arabic",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 515,
|
||||
"line": 523,
|
||||
"symbol": "Siren.LanguageType.Armenian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 516,
|
||||
"line": 524,
|
||||
"symbol": "Siren.LanguageType.Basque",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 517,
|
||||
"line": 525,
|
||||
"symbol": "Siren.LanguageType.ChineseSimplified",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 518,
|
||||
"line": 526,
|
||||
"symbol": "Siren.LanguageType.ChineseTraditional",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 519,
|
||||
"line": 527,
|
||||
"symbol": "Siren.LanguageType.Croatian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 520,
|
||||
"symbol": "Siren.LanguageType.Danish",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 521,
|
||||
"symbol": "Siren.LanguageType.Dutch",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 522,
|
||||
"symbol": "Siren.LanguageType.English",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 523,
|
||||
"symbol": "Siren.LanguageType.Estonian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 524,
|
||||
"symbol": "Siren.LanguageType.Finnish",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 525,
|
||||
"symbol": "Siren.LanguageType.French",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 526,
|
||||
"symbol": "Siren.LanguageType.German",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 527,
|
||||
"symbol": "Siren.LanguageType.Greek",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 528,
|
||||
"symbol": "Siren.LanguageType.Hebrew",
|
||||
"symbol": "Siren.LanguageType.Czech",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 529,
|
||||
"symbol": "Siren.LanguageType.Hungarian",
|
||||
"symbol": "Siren.LanguageType.Danish",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 530,
|
||||
"symbol": "Siren.LanguageType.Indonesian",
|
||||
"symbol": "Siren.LanguageType.Dutch",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 531,
|
||||
"symbol": "Siren.LanguageType.Italian",
|
||||
"symbol": "Siren.LanguageType.English",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 532,
|
||||
"symbol": "Siren.LanguageType.Japanese",
|
||||
"symbol": "Siren.LanguageType.Estonian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 533,
|
||||
"symbol": "Siren.LanguageType.Korean",
|
||||
"symbol": "Siren.LanguageType.Finnish",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 534,
|
||||
"symbol": "Siren.LanguageType.Latvian",
|
||||
"symbol": "Siren.LanguageType.French",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 535,
|
||||
"symbol": "Siren.LanguageType.Lithuanian",
|
||||
"symbol": "Siren.LanguageType.German",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 536,
|
||||
"symbol": "Siren.LanguageType.Malay",
|
||||
"symbol": "Siren.LanguageType.Greek",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 537,
|
||||
"symbol": "Siren.LanguageType.Norwegian",
|
||||
"symbol": "Siren.LanguageType.Hebrew",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 538,
|
||||
"symbol": "Siren.LanguageType.Polish",
|
||||
"symbol": "Siren.LanguageType.Hungarian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 539,
|
||||
"symbol": "Siren.LanguageType.PortugueseBrazil",
|
||||
"symbol": "Siren.LanguageType.Indonesian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 540,
|
||||
"symbol": "Siren.LanguageType.PortuguesePortugal",
|
||||
"symbol": "Siren.LanguageType.Italian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 541,
|
||||
"symbol": "Siren.LanguageType.Russian",
|
||||
"symbol": "Siren.LanguageType.Japanese",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 542,
|
||||
"symbol": "Siren.LanguageType.SerbianCyrillic",
|
||||
"symbol": "Siren.LanguageType.Korean",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 543,
|
||||
"symbol": "Siren.LanguageType.SerbianLatin",
|
||||
"symbol": "Siren.LanguageType.Latvian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 544,
|
||||
"symbol": "Siren.LanguageType.Slovenian",
|
||||
"symbol": "Siren.LanguageType.Lithuanian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 545,
|
||||
"symbol": "Siren.LanguageType.Spanish",
|
||||
"symbol": "Siren.LanguageType.Malay",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 546,
|
||||
"symbol": "Siren.LanguageType.Swedish",
|
||||
"symbol": "Siren.LanguageType.Norwegian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 547,
|
||||
"symbol": "Siren.LanguageType.Thai",
|
||||
"symbol": "Siren.LanguageType.Persian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 548,
|
||||
"symbol": "Siren.LanguageType.Turkish",
|
||||
"symbol": "Siren.LanguageType.PersianAfghanistan",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 549,
|
||||
"symbol": "Siren.LanguageType.PersianIran",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 550,
|
||||
"symbol": "Siren.LanguageType.Polish",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 551,
|
||||
"symbol": "Siren.LanguageType.PortugueseBrazil",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 552,
|
||||
"symbol": "Siren.LanguageType.PortuguesePortugal",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 553,
|
||||
"symbol": "Siren.LanguageType.Russian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 554,
|
||||
"symbol": "Siren.LanguageType.SerbianCyrillic",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 555,
|
||||
"symbol": "Siren.LanguageType.SerbianLatin",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 556,
|
||||
"symbol": "Siren.LanguageType.Slovenian",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 557,
|
||||
"symbol": "Siren.LanguageType.Spanish",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 558,
|
||||
"symbol": "Siren.LanguageType.Swedish",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 559,
|
||||
"symbol": "Siren.LanguageType.Thai",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 560,
|
||||
"symbol": "Siren.LanguageType.Turkish",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 561,
|
||||
"symbol": "Siren.LanguageType.Urdu",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
},
|
||||
{
|
||||
"file": "/Users/Arthur/Documents/oss/siren/Sources/Siren.swift",
|
||||
"line": 562,
|
||||
"symbol": "Siren.LanguageType.Vietnamese",
|
||||
"symbol_kind": "source.lang.swift.decl.enumelement",
|
||||
"warning": "undocumented"
|
||||
|
||||
Reference in New Issue
Block a user