了解 AppleSeed for IT 和托管软件更新
Discover AppleSeed for IT and Managed Software Updates
2020年6月24日
一句话判断
如果你是企业的 IT 管理员,AppleSeed for IT 让你可以在正式发布前测试 macOS 和 iOS 更新,而新的 Managed Software Updates 能力让你精确控制企业设备的系统更新节奏。
这场 Session 讲了什么
Session 面向企业 IT 管理员和 MDM 解决方案提供商,介绍了两个相关的功能。第一,AppleSeed for IT 是 Apple 的企业预览计划,注册企业可以提前获取 macOS 和 iOS 的测试版,在正式发布前验证兼容性。第二,macOS Big Sur 引入了 Managed Software Updates,允许 IT 管理员通过 MDM 精确控制设备的系统更新策略。
具体来说,Managed Software Updates 支持三种更新策略:强制更新(在指定日期前必须安装)、推荐更新(用户可以选择延迟但最终必须安装)、以及可选更新(只通知不强制)。管理员可以设置本地化的通知消息,告诉用户为什么要更新。这些策略可以通过 MDM 配置文件下发到所有托管设备。
值得深挖的点
AppleSeed for IT 的测试价值
对于大型企业来说,一个系统更新可能导致内部 App 不兼容。AppleSeed for IT 让企业的 IT 团队可以提前 2-4 周获取即将发布的系统更新,在有限的测试设备上验证兼容性。如果发现问题,可以通过 Apple 的反馈通道报告,Apple 可能会在正式发布前修复。这比”正式发布后发现问题再回滚”要安全得多。
MDM 控制的更新策略粒度
Managed Software Updates 提供了非常细粒度的控制。你可以为不同的设备组设置不同的策略——比如高管设备设置强制更新(安全性最高),研发设备设置推荐更新(给 2 周缓冲期),测试设备设置可选更新。你还可以设置”允许延迟的最大天数”和”最低要求版本”。
代码片段
配置 MDM 的软件更新策略
场景:通过 MDM 配置文件设置设备更新策略。
<!-- MDM 配置文件示例:Managed Software Updates -->
<!-- 这通常通过 MDM 解决方案(如 Jamf、Microsoft Intune)的界面配置 -->
<plist version="1.0">
<dict>
<!-- 强制更新的截止日期 -->
<key>ForceDeadlineDate</key>
<string>2020-09-01T00:00:00Z</string>
<!-- 允许延迟的最大天数 -->
<key>MaxDeferralDays</key>
<integer>14</integer>
<!-- 最低要求版本 -->
<key>TargetOSVersion</key>
<string>14.0</string>
<!-- 本地化的通知消息 -->
<key>NotificationMsg</key>
<dict>
<key>en</key>
<string>A security update is available. Please install by Sep 1.</string>
<key>zh_CN</key>
<string>安全更新已发布,请在9月1日前安装。</string>
</dict>
<!-- 更新策略 -->
<key>UpdatePolicy</key>
<string>installASAP</string> <!-- 或 installLater, notifyOnly -->
</dict>
</plist>
检查设备的系统更新状态
场景:在 App 中检查设备是否满足最低系统版本要求。
import UIKit
class SystemUpdateChecker {
/// 检查当前系统版本是否满足要求
static func isSystemVersionSupported(_ minVersion: String) -> Bool {
let currentVersion = ProcessInfo.processInfo.operatingSystemVersion
let required = parseVersion(minVersion)
if currentVersion.majorVersion > required.major { return true }
if currentVersion.majorVersion < required.major { return false }
if currentVersion.minorVersion > required.minor { return true }
if currentVersion.minorVersion < required.minor { return false }
return currentVersion.patchVersion >= required.patch
}
private static func parseVersion(_ version: String) -> (major: Int, minor: Int, patch: Int) {
let components = version.split(separator: ".").map { Int($0) ?? 0 }
return (
major: components.count > 0 ? components[0] : 0,
minor: components.count > 1 ? components[1] : 0,
patch: components.count > 2 ? components[2] : 0
)
}
/// 提示用户更新系统
static func promptUpdateIfNeeded(minVersion: String, from viewController: UIViewController) {
if !isSystemVersionSupported(minVersion) {
let alert = UIAlertController(
title: "系统版本过低",
message: "此功能需要 iOS \(minVersion) 或更高版本。请前往「设置 > 通用 > 软件更新」进行升级。",
preferredStyle: .alert
)
alert.addAction(UIAlertAction(title: "去更新", style: .default) { _ in
if let url = URL(string: "App-prefs:General&path=SOFTWARE_UPDATE_LINK") {
UIApplication.shared.open(url)
}
})
alert.addAction(UIAlertAction(title: "稍后", style: .cancel))
viewController.present(alert, animated: true)
}
}
}
使用 ProcessInfo 获取系统信息
场景:在 App 中获取详细的系统版本信息。
import Foundation
class DeviceInfoReporter {
struct SystemInfo {
let osVersion: String
let buildNumber: String
let deviceModel: String
let isMac: Bool
}
static func getSystemInfo() -> SystemInfo {
let processInfo = ProcessInfo.processInfo
// 获取系统版本
let osVersion = processInfo.operatingSystemVersion
let versionString = "\(osVersion.majorVersion).\(osVersion.minorVersion).\(osVersion.patchVersion)"
// 获取设备型号
var systemInfo = utsname()
uname(&systemInfo)
let machine = withUnsafePointer(to: &systemInfo.machine) {
$0.withMemoryRebound(to: CChar.self, capacity: 1) {
String(cString: $0)
}
}
// 检测是否在 Mac 上运行
let isMac: Bool
if #available(iOS 14.0, *) {
isMac = processInfo.isiOSAppOnMac
} else {
isMac = false
}
return SystemInfo(
osVersion: versionString,
buildNumber: processInfo.operatingSystemVersionString,
deviceModel: machine,
isMac: isMac
)
}
}
最佳实践
IT 管理员:注册 AppleSeed for IT 计划,在每次系统大版本发布前进行兼容性测试。使用 MDM 的 Managed Software Updates 来控制企业设备的更新节奏——不要让用户随意更新,也不要完全阻止更新。为不同部门设置不同的更新策略。
开发者:如果你的 App 面向企业客户,了解 MDM 的软件更新控制能力。确保你的 App 在新系统版本发布后能快速适配。提供清晰的系统版本要求说明,帮助企业的 IT 管理员制定更新计划。
还有什么值得关注
- macOS Big Sur 的系统更新机制改为像 iOS 一样的完整更新(不再分开更新),这意味着更新过程更简单但耗时可能更长。
- AppleSeed for IT 需要企业 Apple ID 注册,个人开发者无法使用。
- MDM 配置文件可以通过
profile命令行工具在本地测试。