Orchard

Version License Platform

iOS、watchOS 和 tvOS 的设备识别。

Orchard 是一个用于 iOS、watchOS 和 tvOS 的库,用于识别运行您代码的设备。代码使用 Swift 和 Objective-C 两种变体构建,使用系统的设备型号标识符来识别设备。

使用

“但我想我们不应该这样做的!”

在大多数情况下,您不应该使用设备型号来控制应用程序的功能。 不要硬编码哪些设备支持 Touch ID 或 Face ID,而是使用 LAContext。 不要根据设备型号计算布局,而是使用 Auto Layout 和尺寸类。

在某些情况下,知道您的代码正在哪个设备上运行很重要的。 无论您是试图销售用户当前设备的配件、以实际尺寸绘制屏幕上的元素,还是定位相对于屏幕的设备硬件,有时您需要知道实际的设备,而这正是 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 英寸) (第 3 代)”)。 您可以在下面的示例中看到这一点

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 Package Manager

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

开发

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

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

make generate