平台技术综述
Platforms State of the Union
2021年6月7日
一句话判断
这是一场信息密度极高的全景扫描——Swift 并发、Xcode Cloud、StoreKit 2、SharePlay 四大主题构成了 2021 年 Apple 开发者生态的骨架。
这场 Session 讲了什么
Platforms State of the Union 是 WWDC 的技术版主题演讲,覆盖所有平台的技术更新。2021 年的 SOTU 信息量巨大,但主线非常清晰:Swift 语言层面用 async/await 和 Actor 彻底重构并发模型;开发工具层面推出 Xcode Cloud 持续集成服务;商业层面用 StoreKit 2 和 App Store Server API 重做内购体系;用户层面用 SharePlay 和 GroupActivities 开辟共享体验赛道。
iOS 15 本身的 UIKit 和 SwiftUI 更新也不少——SwiftUI 的 List 性能终于跟上了 UIKit 的 UICollectionView,AsyncImage 让网络图片加载变成一行代码,Material 背景材质让毛玻璃效果标准化。UIKit 则引入了 UIButton.Configuration 这个全新的按钮配置系统,告别了那个让人头疼的 buttonType 枚举。
跨平台方面,macOS 的 iPad 和 iPhone App 体验继续改进,watchOS 8 增加了新的 complication 类型,tvOS 加强了媒体播放能力。
值得深挖的点
StoreKit 2 是内购体系的推倒重来
原来的 StoreKit 是基于 transaction observer 的回调式 API,你需要处理队列、验证收据、管理订阅状态,代码复杂且容易出错。StoreKit 2 用 async/await 彻底重写了整个流程:Product.products(for:) 一步加载商品信息,purchase() 方法直接返回交易结果,Transaction.currentEntitlements 流式获取用户权益。配合新的 App Store Server API,服务端验证也从笨重的收据解析变成了标准的 JWT 验证。这套方案让内购代码量减少了一半以上。
Xcode Cloud 的定位
Xcode Cloud 不是又一个 CI 服务。它深度集成在 Xcode 和 App Store Connect 中——自动跑测试、自动做 TestFlight 分发、自动做代码分析。定价按小时计费,对小型团队来说比维护自己的 Jenkins/GitLab CI 划算。但它目前只支持 Git 仓库(GitHub、GitLab、Bitbucket),不支持本地构建脚本,这意味着高度定制化的 CI 流程暂时还得靠传统方案。
代码片段
StoreKit 2 购买流程
import StoreKit
// 加载商品信息
let products = try await Product.products(for: ["com.app.premium"])
// 发起购买
let result = try await products[0].purchase()
switch result {
case .success(let verification):
// 验证交易
let transaction = try checkVerified(verification)
// 解锁内容
unlockPremium()
// 完成交易
await transaction.finish()
case .userCancelled:
print("用户取消了购买")
case .pending:
print("交易待处理(需要家长审批等)")
default:
break
}
SwiftUI AsyncImage 一行加载网络图片
// 最简用法
AsyncImage(url: URL(string: "https://example.com/photo.jpg"))
// 带占位图和错误处理
AsyncImage(url: photoURL) { phase in
switch phase {
case .success(let image):
image.resizable().aspectRatio(contentMode: .fit)
case .failure:
Image(systemName: "photo").foregroundColor(.gray)
case .empty:
ProgressView()
@unknown default:
EmptyView()
}
}
UIButton.Configuration 新风格
// 用 Configuration 创建按钮,告别 buttonType
let config = UIButton.Configuration.filled()
config.title = "确认购买"
config.subtitle = "¥6.00/月"
config.image = UIImage(systemName: "cart.fill")
config.imagePlacement = .leading
config.cornerStyle = .capsule
config.baseBackgroundColor = .systemBlue
let button = UIButton(configuration: config)
最佳实践
规划升级: 2021 年的四大更新(Swift 并发、Xcode Cloud、StoreKit 2、SharePlay)不可能一个版本全上。建议优先级:Swift 并发 > StoreKit 2 > SharePlay > Xcode Cloud。并发是基础设施级别的变化,越早迁移技术债越小。StoreKit 2 直接影响收入,但可以和新功能并行。SharePlay 取决于你的产品是否有社交场景。
学习路径: 先看 “Meet async/await in Swift” 和 “Swift concurrency: Behind the scenes” 两场 Session,建立并发模型的心智基础。然后看 “What’s new in Swift” 获取全貌。StoreKit 2 看 “Meet StoreKit 2” 就够了。
还有什么值得关注
- SwiftUI 的
@FocusState让你用声明式方式管理焦点,终于不用和 UIKit 的becomeFirstResponder搏斗了。 - UIKit 的
UINavigationBar支持了自定义外观代理的滚动时动态变化。 - Xcode 13 的 Vim 模式终于内置了,不用装插件。