【问题标题】:How to import Social framework only for iOS 6?如何仅为 iOS 6 导入社交框架?
【发布时间】:2012-12-22 11:07:33
【问题描述】:

如何只为 iOS 6 导入社交框架?我想禁用其他 iOS 版本的社交框架。目前我正在尝试这个,我也尝试将 FrameWork 更改为可选,但不在 iOS 5.1 模拟器上运行。

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6.0)
        {
          #import <Social/Social.h>   
        }

请告诉如何检查和运行 iOS 5 和 iOS 6。谢谢。

【问题讨论】:

    标签: iphone ios ios5 ios6


    【解决方案1】:

    首先:不要查询操作系统版本来猜测支持的内容,检查特定功能是否实际可用,而不是根据假设使用它。

    也就是说,最新版本的 iOS 和工具链支持弱链接。只需检查您打算使用的类不是Nil(方法#1)。您也可以为此使用 Objective-C 运行时(方法 #2):

    // method #1 - weak linking
    if ([SLRequest class] != Nil) {
        // Social.framework is available
    }
    
    // method #2 - querying the runtime
    if (NSClassFromString(@"SLRequest") != Nil) {
        // Social.framework is available
    }
    

    为了使弱链接生效,您打算像这样使用的框架应添加为“可选”而不是“必需”。如果您不使用 Xcode 或 IDE,而仅使用命令行工具链,则可以通过传递来强制执行弱链接

    -flat_namespace -undefined dynamic_lookup
    

    到链接器。

    【讨论】:

    • @Macmade 是的,有经验的小事 :) 你应该知道Nil 是用于课程的,即使你从不使用它......感谢您的支持。
    • 应该提到的是,Social.framework 必须作为可选(而非必需)框架添加到目标中,除了提到的运行时检查。
    • 希望你们看到这条评论,我知道这在这种情况下是如何工作的,这将如何在导入和添加代表到您的班级中发挥作用。避免以下关于导入的回复……或者至少尝试一下。我将框架设置为“可选”,但我可以从中#import 而不会对不希望的情况(即仅 ios4 的软件)造成任何问题。
    • @H2CO3 这些方法中哪一种更好用(即一种与另一种的优缺点是什么)?
    • @keale 差别不大。使用您更喜欢的那个。
    【解决方案2】:
    #import <Avaibility.h>
    
    #if defined(__IPHONE_6_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_6_0
    #import <Social/Social.h>
    #import <Accounts/Accounts.h>
    #elif defined(__IPHONE_5.0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_5_0
    #import <Twitter/Twitter.h>
    #import <Accounts/Accounts.h>
    #else
    #error Your SDK is too old ! Need at least 5.0.
    #endif
    

    【讨论】:

    • 这不是一个有效的方法。不要这样做。这是编译时检查,而不是运行时检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2013-12-26
    • 2013-05-11
    • 1970-01-01
    相关资源
    最近更新 更多