🚨
Siren当您的应用的新版本可用时通知用户并提示他们升级。
目录
元数据
关于
《Siren》用于检测用户当前安装的iOS应用版本与App Store当前可用的版本。
如果可用新版本,可以向用户展示语言本地化的警告,告知他们新版本信息,并给他们提供更新应用的选择。或者,Siren可以通过其他方式,例如自定义用户界面,通知您的应用。
- 规范语义版本使用三位数字版本系统(例如,1.0.0)
- Siren还支持两位数字版本(例如,1.0)和四位数字版本(例如,1.0.0.0)
功能
当前功能
- 兼容iOS 13+和tvOS 13+
- 支持CocoaPods和Swift Package Manager(参见安装说明)
- 三种类型的警报(参见截图)
- 高度自定义的展示规则(参见实现示例)
- 支持40多种语言的本地化(参见本地化)
- 设备兼容性检查(参见设备兼容性)
截图
- 左侧图片强制用户更新应用程序。
- 中间图片为用户提供了更新应用程序的选项。
- 右侧图片为用户提供了跳过当前更新的选项。
- 这些选项由
Rules.AlertType
枚举控制。
端口
- Objective-C (iOS)
- Harpy
- Siren是从Harpy移植过来的,因为Siren和Harpy由同一开发者维护。
- 截至2018年12月,Harpy已经弃用,以Siren取而代之。
- Java (Android)
- Egghead Games的Siren库
- Siren Swift库启发了Java库。
- React Native (iOS)
- Gant Laborde的Siren库
- Siren Swift库启发了React Native库。
安装和集成
安装说明
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 实现,简单如在 pinggai 或 SceneDelegate.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
}
}
海狼也提供了丰富的自定义选项。所有示例都可以在示例项目中的 AppDelegate 文件中找到。取消注释你想要测试的示例。
设备特定检查
本地化
Siren支持以下语言
阿拉伯语、亚美尼亚语、巴斯克语、中文(简体和繁体)、克罗地亚语、捷克语、丹麦语、荷兰语、英语、爱沙尼亚语、芬兰语、法语、德语、希腊语、希伯来语、匈牙利语、印度尼西亚语、意大利语、日语、韩语、拉脱维亚语、立陶宛语、马来语、挪威语(博克马尔)、波斯语(阿富汗、伊朗、波斯)、波兰语、葡萄牙语(巴西和葡萄牙)、罗马尼亚语、俄语、塞尔维亚语(西里尔和拉丁)、斯洛文尼亚语、西班牙语、瑞典语、泰语、土耳其语、乌克兰语、乌尔都语、越南语
如果用户的设备设置为支持的区域之一,更新消息将显示在该语言中。如果区域不受支持,则消息将以英语显示。
你可能希望更新对话框始终以特定语言显示,忽略用户的设备特定设置。你可以这样启用:
// In this example, we force the `Russian` language.
Siren.shared.presentationManager = PresentationManager(forceLanguageLocalization: .russian)
设备兼容性
如果有应用更新可用,海狼会检查用户的设备上的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 Review
App Store 审查员将 不会 看到该警告。App Store 中的版本总是比正在审查的版本更早。
分阶段发布
2017年,苹果公司宣布了逐步滚动推出应用程序更新的能力(即分阶段发布)。Siren将继续按照过去的操作进行,向所有用户显示更新模态。如果您选择参与特定版本的分阶段发布,您有几个选择
- 您可以将Siren配置为正常。分阶段发布将继续自动更新应用程序。因为所有用户都可以还筐从App Store手动直接更新您的应用程序,因此Siren将忽略分阶段发布并提示用户更新。
- 您可以将
showAlertAfterCurrentVersionHasBeenReleasedForDays
设置为7
,然后Siren将在最新版本发布后7天(分阶段发布完成后),不再提示任何用户。 - 您可以使用您自己的API/后端逻辑远程禁用Siren,直到发布完成。
鸣谢
特别感谢
深深的致谢和感谢送给以下人士
- Aaron Brager,因为他在2015年激励我,并帮助我构建Siren的初始概念(基于Harpy),如果没有他,Siren可能永远不会被构建。
- 感谢Harpy的所有贡献者在2012-2015年间帮助构建了功能集,这些功能集是Siren第一个版本的基础。
- 感谢Siren的所有贡献者让Siren如此强大和没有错误。