有没有一种方法可以在运行时或编译时检测Mac Catalyst应用程序是否是“Scaled to Match iPad”还是“Optimize for Mac”。
条件编译块建议使用类似于targetEnvironment(macCatalyst)
的方法在编译时无法获得此信息。
Build settings reference说这个信息在TARGETED_DEVICE_FAMILY Info.plist条目中,所以也许我可以在运行时从那里得到它。
此信息在ProcessInfo.processInfo.environment
中不存在。
2条答案
按热度按时间plupiseo1#
没有可用的编译时检查。如果你在编译Swift文件时查看构建日志,在两个设置之间传递给编译器的标志没有区别。
但是正如Choosing a user interface idiom for your Mac app中所描述的,有运行时检查。这涉及到从适当的trait集合或
UIDevice userInterfaceIdiom
中查看接口习惯用法。当你构建为“为Mac优化”时,你会得到
.mac
习惯用法。当你构建为“扩展以匹配iPad”时,你会得到.ipad
习惯用法。链接文档中显示的示例如下:
字符串
在某些情况下,您可能希望将此类代码 Package 在
targetEnvironment(macCatalyst)
的编译器检查中,以便iOS代码可以使用与Mac版本不同的选项。nnvyjq4y2#
我意识到了答案: