在运行时找到我无法重新编译的框架的部署目标

时间:2014-08-14 16:38:43

标签: objective-c runtime deployment-target

使用宏__IPHONE_OS_VERSION_MIN_REQUIRED在编译时确定应用程序的部署目标非常简单。它也很容易找到应用程序在运行时运行的当前iOS版本。我试图在运行时找出应用程序的部署目标。我需要在已经编译的框架中使用它。是否有公共API方法来确定这一点?我找不到一个。

要清楚。我希望从我的框架中获得运行时iOS应用程序的部署目标。不编译时间。在我的框架中,我需要提醒框架的用户,如果他们的部署目标太远,某些功能将无法正常工作。

编译时我很容易做到,但我的框架已经编译好了,我不想要求框架用户在我们的框架代码中添加宏来确定他们的部署目标。

2 个答案:

答案 0 :(得分:0)

我不明白为什么这段代码对你不起作用!

NSLog(@"Deployment target: %i", __IPHONE_OS_VERSION_MIN_REQUIRED);

答案 1 :(得分:0)

这是一个老问题,但我刚刚验证了答案,所以这里是:

在iOS上,您应该使用Info.plist中的MinimumOSVersion键来查找运行时支持的最低版本。

来源实际为linked from the documentation Josh Caswell posted,约为LSMinimumSystemVersion

请注意,作为开发人员,您解释的文档不应自行设置MinimumOSVersion值,并且在构建期间由Xcode自动填充。这解释了本文档另一部分中的rather cryptic "Do Not Use"

此处为后人(2016年12月)发布此密钥的说明,以防文档发生变化:

  

MinimumOSVersion(String - iOS)。构建iOS应用程序时,Xcode使用项目的iOS部署目标设置来设置MinimumOSVersion键的值。不要在Info.plist文件中自己指定此密钥;它是系统编写的密钥。当您将应用程序发布到App Store时,商店会根据此密钥指示您的应用程序可以运行的iOS版本。它等同于macOS中的LSMinimumSystemVersion键。

我通过在测试应用中打印出值来验证这一点(并将Xcode项目的部署目标更改为不同的值:

if let infoPlist = Bundle.main.infoDictionary {
  let minimumVersion = infoPlist["MinimumOSVersion"]
  if let minimumVersion = minimumVersion {
    print("Minimum version is \(minimumVersion)")
  }
}