【问题标题】:Check Base SDK at run time在运行时检查 Base SDK
【发布时间】:2014-09-15 18:32:30
【问题描述】:

我正在构建一个库,当使用它的应用运行更新的基础 SDK(xCode 6、基础 SDK iOS 8.0)时,一些功能被破坏了。

在尝试解决此问题时,使用旧版 SDK 构建的应用程序已损坏。 (xCode 5,基础 SDK 7.1)

与设备上的版本无关。

有没有办法在代码中检查 App 设置的 Base SDK 是什么?

【问题讨论】:

    标签: ios xcode


    【解决方案1】:

    您可以使用宏。正如 rckoenes 在此 question 中所述,您可以使用宏 __IPHONE_7_0 来了解您正在使用 iOS 7.0 SDK 进行编译。对于 iOS 8.0 SDK 你当然可以使用__IPHONE_8_0 宏。这些宏在Availability.h 标头中定义。

    还请务必阅读Apple's SDK Compatibility Guide 以了解有关使用多个 SDK 的更多信息。

    【讨论】:

    • 问题是我正在创建一个库。并且这些标志是在我构建它时设置的,并且不受使用该库的应用程序的影响。如果我使用 Base SDK 8.0 构建库,即使应用程序是使用 Base SDK 7.1 构建的,它也会输入 #ifdef __IPHONE_8_0。
    • SDK 7.1 没有定义 __IPHONE_8_0 宏。你确定你不是说它会在 iOS 7.1 设备上输入这个,而是用 SDK 8.0 构建的吗?
    • 不,该库是为 8.0 构建的(代码中包含宏),应用程序是为 7.1 构建的。在 8.0 设备上运行时,我希望库“输入”7.1 代码,因为该应用程序是为它构建的。但它改为输入 8.0 代码。
    • 输入那个代码是有道理的,因为这是一个宏,它在编译时被解析,如果你用 8.0 SDK 编译库,它总是会输入那个代码。然后您必须修改库,但是您所说的没有意义。您是说您正在使用 8.0 SDK 构建库,然后使用 7.1 SDK 构建整个应用程序?这不会导致链接器错误吗?
    • 没有链接器错误。我不想拥有 2 个版本的库,一个用于为 7.1 构建的应用程序,一个用于 8.0。这就是为什么我试图找到一种方法来了解应用程序所针对的 sdk。
    猜你喜欢
    • 2017-12-24
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 2011-07-03
    • 2018-11-05
    • 2016-10-04
    相关资源
    最近更新 更多