Orchard
针对iOS、watchOS和tvOS的设备识别。
Orchard是一个用于iOS、watchOS和tvOS识别运行您代码的设备的库。它由Swift和Objective-C两个版本构建,代码使用系统的设备型号标识符来识别设备。
使用
“我以为我们不应该这样做!”
在大多数情况下,您不应对设备型号进行控制以实现应用功能。而不是硬编码哪些设备支持Touch ID或Face ID,请使用LAContext
而是基于设备型号进行布局,请使用Auto Layout和size classes。
有些情况下知道您的代码在哪个设备上运行是非常重要的。不管您是想为用户的当前设备销售配件、在真实的尺寸下绘制屏幕上的元素,还是测定设备硬件相对于屏幕的位置,有时您需要知道实际设备,这就是Orchard发挥作用的地方。
Objective-C
要在Objective-C中使用Orchard,请使用UIDevice
(或在watchOS中是WKInterfaceDevice
)的Orchard
类别来获取代表设备的枚举值——它可以是OrchardiOSDevice
、OrchardwatchOSDevice
或OrchardtvOSDevice
,具体取决于操作系统。然后,您可以使用此值在switch
语句中,或将其传递给其他方法,例如OrchardMarketingNameForiOSDevice()
,该方法返回表示设备市场名称的NSString
(例如,“iPhone XS Max”)。以下是一个示例
OrchardiOSDevice device = [UIDevice.currentDevice orchardiOSDevice];
switch (device) {
case OrchardiOSDeviceiPhoneXSMax:
NSLog(@"You have an iPhone XS Max!)";
}
Swift
要在Swift中使用Orchard,使用DeviceIdentity
枚举。您可以使用UIDevice
或WKInterfaceDevice
的deviceIdentity
计算属性来获取表示当前设备的实例。`DeviceIdentity`枚举的实例有一个marketingName
属性,它返回设备的市场名称(例如,“iPad Pro (12.9-inch) (3rd Generation)”)。以下是一个示例
let deviceIdentity = UIDevice.current.deviceIdentity
print("I’m an \(deviceIdentity.marketingName ?? "unknown device").")
switch deviceIdentity {
case .iPhone(.iPhone11ProMax), .iPhone(.iPhoneXSMax), .iPhone(.iPhone8Plus),
.iPhone(.iPhone7Plus), .iPhone(.iPhone6sPlus), .iPhone(.iPhone6Plus),
.iPad(.iPadPro12_9Inch), .iPad(.iPadPro12_9Inch2),
.iPad(.iPadPro12_9Inch3), .iPad(.iPadPro12_9Inch4):
print("You got the big one!")
default: break
}
混合源项目
Orchard的Objective-C代码可以从Swift中完全使用;设备名称带有NS_SWIFT_NAME
注释,因此可以像它们的Swift原生对应物一样在上述示例中使用。
安装
CocoaPods
可以使用CocoaPods来安装Orchard。有两个子规范:Swift
和ObjC
,因此在您的`Podfile`中使用以下任一行
pod "Orchard/ObjC"
pod "Orchard/Swift"
Swift 包管理器
Orchard 的 Swift 部分可以使用 Swift 包管理器 安装。
开发
Orchard 使用 [Swift gyb] 生成 Objective-C 和 Swift 源文件。实际的设备数据位于 Data
文件夹中,格式为 TSV。要添加新设备,只需更新 TSV 文件(或文件)中的新设备信息,并重新构建两个目标;将重新生成源代码。请不要修改任何有对应 .gyb
文件的文件,因为构建将覆盖您的更改。
要更新生成的源文件,请运行以下命令
make generate