提问人:Jeshua Lacock 提问时间:6/2/2023 更新时间:6/2/2023 访问量:75
预处理器指令,用于检测使用“专为 iPad 设计”目标在 macOS 上运行
Preprocessor directive to detect running on macOS using the Designed for iPad target
问:
Apple 提供了一个运行时属性,用于检测是否使用目标在 Mac 上运行。isiOSAppOnMac
ProcessInfo
Designed for iPad
我宁愿使用预处理器指令,也不必进行运行时检查。使用目标时,这起作用:MacCatalyst
#if targetEnvironment(macCatalyst)
我都试过了:
#if os(macOS)
#if !os(iOS)
但这些不适用于.这实际上似乎有效,但我想知道是否有更好的方法?Designed for iPad
#if arch(arm64) && os(iOS) && !targetEnvironment(simulator)
print("Designed for iPad on a Mac")
#endif
答:
0赞
HangarRash
6/2/2023
#1
请记住,在这种情况下,您不会对 Mac 版本的应用程序执行单独的编译。这只是在 Apple Silicon Mac 上运行的 iPad 应用程序的问题。由于只有一个 iOS 版本,因此不能使用编译器标志。您唯一的选择是使用运行时检查来确定 iPad 应用程序当前是否在 Mac 上运行。
当然,如果您以后使用 Mac Catalyst 构建应用程序的 Mac 版本(因此除了 Apple Silicon Mac 之外,您还可以支持 Intel Mac),那么您可以使用编译器标志(正如您在问题中指出的那样),因为您有两个版本,一个用于 Mac(通过 Mac Catalyst),一个用于 iOS。
评论
0赞
Jeshua Lacock
6/2/2023
我现在正在尝试使用 Mac Catalyst,但我需要它仅支持 Apple Silicon。似乎可以指定 。xcodebuild
arm64
arch
0赞
HangarRash
6/2/2023
好奇为什么你要排除英特尔 Mac,如果你去使用 Mac Catalyst 的麻烦。
0赞
Jeshua Lacock
6/2/2023
因为如果没有 Apple 神经网络引擎,CoreML 推理速度会慢 10 倍,而且我更愿意有一个单独的目标,这样我就可以使用预处理器指令而不是运行时检查。基本上,我想要一个特定于 Mac 的目标,但不想支持 Intel Mac。
评论