Orchard 1.15.0

Orchard 1.15.0

Nathan WalczakJeff Kelley维护。



Orchard 1.15.0

  • 作者
  • Jeff Kelley

Orchard

Version License Platform

针对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类别来获取代表设备的枚举值——它可以是OrchardiOSDeviceOrchardwatchOSDeviceOrchardtvOSDevice,具体取决于操作系统。然后,您可以使用此值在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枚举。您可以使用UIDeviceWKInterfaceDevicedeviceIdentity计算属性来获取表示当前设备的实例。`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。有两个子规范:SwiftObjC,因此在您的`Podfile`中使用以下任一行

pod "Orchard/ObjC"

pod "Orchard/Swift"

Swift 包管理器

Orchard 的 Swift 部分可以使用 Swift 包管理器 安装。

开发

Orchard 使用 [Swift gyb] 生成 Objective-C 和 Swift 源文件。实际的设备数据位于 Data 文件夹中,格式为 TSV。要添加新设备,只需更新 TSV 文件(或文件)中的新设备信息,并重新构建两个目标;将重新生成源代码。请不要修改任何有对应 .gyb 文件的文件,因为构建将覆盖您的更改。

要更新生成的源文件,请运行以下命令

make generate