Siren 🚨

当您的应用有新版本可用时通知用户,并提示他们升级。

Swift Support CocoaPods SwiftPM Compatible Accio supported


重要信息

我已于 2021 年停止担任积极主动的 iOS 工程师。目前,我将继续维护这个库以供社区使用,但我不会主动添加新功能。


目录


元数据

关于

Siren 将用户当前安装的 iOS 应用版本与 App Store 中当前可用的版本进行比较。

如果有新版本可用,则可以向用户显示语言本地化的提示,告知他们有新版本,并允许他们选择更新应用程序。 或者,Siren 可以通过其他方式通知您的应用程序,例如自定义用户界面。

Siren 基于 语义化版本控制 系统构建。

特性

当前特性


截图

移植


安装与集成

安装说明

Swift 版本 分支名称 是否会继续接收更新?
5.5+ master
5.1-5.4 swift5.4
5.0 swift5.0
4.2 swift4.2
4.1 swift4.1
3.2 swift3.2
3.1 swift3.1
2.3 swift2.3

CocoaPods

pod 'Siren' # Swift 5.5+
pod 'Siren', :git => 'https://github.com/ArtSabintsev/Siren.git', :branch => 'swift5.4' # Swift 5.1-5.4
pod 'Siren', :git => 'https://github.com/ArtSabintsev/Siren.git', :branch => 'swift5.0' # Swift 5.0
pod 'Siren', :git => 'https://github.com/ArtSabintsev/Siren.git', :branch => 'swift4.2' # Swift 4.2
pod 'Siren', :git => 'https://github.com/ArtSabintsev/Siren.git', :branch => 'swift4.1' # Swift 4.1
pod 'Siren', :git => 'https://github.com/ArtSabintsev/Siren.git', :branch => 'swift3.2' # Swift 3.2
pod 'Siren', :git => 'https://github.com/ArtSabintsev/Siren.git', :branch => 'swift3.1' # Swift 3.1
pod 'Siren', :git => 'https://github.com/ArtSabintsev/Siren.git', :branch => 'swift2.3' # Swift 2.3

Swift Package Manager

.Package(url: "https://github.com/ArtSabintsev/Siren.git", majorVersion: 6)

实现示例

实现 Siren 非常简单,只需在 AppDelegate.swiftSceneDelegate.swift 任一文件中添加两行代码即可

AppDelegate.swift 示例

import Siren // Line 1
import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        window?.makeKeyAndVisible()

	Siren.shared.wail() // Line 2

        return true
    }
}

SceneDelegate.swift 示例

import Siren // Line 1
import UIKit

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        window?.makeKeyAndVisible()

	Siren.shared.wail() // Line 2

        return true
    }
}

Siren 也有大量的自定义选项。 所有示例都可以在示例项目的 AppDelegate 文件中找到。 取消注释您想要测试的示例。


设备特定检查

本地化

Siren 已本地化为以下语言

阿拉伯语、亚美尼亚语、巴斯克语、中文(简体和繁体)、克罗地亚语、捷克语、丹麦语、荷兰语、英语、爱沙尼亚语、芬兰语、法语、德语、希腊语、希伯来语、匈牙利语、印度尼西亚语、意大利语、日语、韩语、拉脱维亚语、立陶宛语、马来语、挪威语(博克马尔语)、波斯语(阿富汗、伊朗、波斯语)、波兰语、葡萄牙语(巴西和葡萄牙)、罗马尼亚语、俄语、塞尔维亚语(西里尔语和拉丁语)、斯洛文尼亚语、西班牙语、瑞典语、泰语、土耳其语、乌克兰语、乌尔都语、越南语

如果用户的设备设置为支持的语言环境之一,更新消息将以该语言显示。 如果不支持某个语言环境,则消息将以英语显示。

您可能希望更新对话框*始终*以特定语言显示,忽略用户设备特定的设置。 您可以这样启用它

// In this example, we force the `Russian` language.
Siren.shared.presentationManager = PresentationManager(forceLanguageLocalization: .russian)

设备兼容性

如果有可用的应用程序更新,Siren 会检查用户设备上的 iOS 版本是否与应用程序更新所需的版本兼容。 例如,如果用户在其设备上安装了 iOS 11,但应用程序更新需要 iOS 12,则不会显示警报。 这解决了关于应用程序更新的*误报*情况。


测试

在本地测试 Siren

暂时更改 Xcode 中(在 .xcodeproj 文件中)的版本字符串为比 App Store 中当前可用的版本更旧的版本。 然后,构建并运行你的应用,你应该会看到警告。

如果你目前没有应用在商店中,请将你的 bundleID 更改为商店中已有的 bundleID。 在与此库一起打包的示例应用程序中,我们使用 Facebook 的 Bundle ID:com.facebook.Facebook

注意事项

有时,iTunes JSON 更新速度会快于 App Store CDN,这意味着 JSON 可能会声明已发布新版本的应用程序,但没有通过 App Store 提供新的二进制文件下载。 因此,默认情况下,Siren 会在 JSON 更新后等待 1 天(24 小时)再提示用户更新。 要更改默认设置,请修改 showAlertAfterCurrentVersionHasBeenReleasedForDays 的值。


应用提交

App Store 审核

App Store 审核员将*不会*看到警告。 App Store 中的版本将始终比正在审核的版本旧。

分阶段发布

2017 年,Apple 宣布了逐步推出应用更新(即分阶段发布)的能力。 Siren 将继续像过去一样工作,向*所有*用户展示更新模态框。 如果您选择针对特定版本进行分阶段发布,您有几个选择


致谢

特别鸣谢

衷心感谢以下人员

创建者

Arthur Ariel Sabintsev