GData静态库:使用-fno-objc-arc从ARC中排除文件?

时间:2011-11-28 17:45:56

标签: ios gdata-api automatic-ref-counting

我在使用ARC的应用中使用GData静态库。谷歌的说明是将图书馆的头文件链接到项目目标。

问题在于,当我这样做时,由于GData库与ARC不兼容,我收到编译器错误。

谷歌表示:

  

ARC兼容性

     

当库源文件直接编译到使用ARC的项目中时,必须专门为库源禁用ARC。

     

要在Xcode 4中为源文件禁用ARC,请在Xcode中选择项目和目标。根据目标"构建阶段"选项卡,展开Compile Sources构建阶段,选择库源文件,然后按Enter打开编辑字段,并键入-fno-objc-arc作为这些文件的编译器标志。

reference

但由于我只有头文件,所以我无法在app目标中使用此标志。

1 个答案:

答案 0 :(得分:3)

好吧,我问了,10分钟后发现了衣服。无论如何它会帮助某人:

  1. 问题仅在于.h文件,Goole备注仅适用于您将库嵌入而非静态库的情况。
  2. 有人向谷歌报告问题后,他们添加了新的宏来解决问题,方法如下:
  3. 在头文件中搜索名为GDataDefines.h的文件 并在里面添加此代码:

    //
    // Simple macros to allow building headers for non-ARC files
    // into ARC apps
    //
    
    #ifndef GDATA_REQUIRES_ARC
    #if defined(__clang__)
    #if __has_feature(objc_arc)
    #define GDATA_REQUIRES_ARC 1
    #endif
    #endif
    #endif
    
    #if GDATA_REQUIRES_ARC
    #define GDATA_UNSAFE_UNRETAINED __unsafe_unretained
    #else
    #define GDATA_UNSAFE_UNRETAINED
    #endif
    

    然后在导致ARC错误的GDataObject.h中

    将GDataDescriptionRecord结构更改为

       typedef struct GDataDescriptionRecord {
           NSString GDATA_UNSAFE_UNRETAINED *label;
           NSString GDATA_UNSAFE_UNRETAINED  *keyPath;
           GDataDescRecTypes reportType;
       } GDataDescriptionRecord;
    

       __weak GDataObject *parent_;  // parent in tree of GData objects
    

       GDataObject GDATA_UNSAFE_UNRETAINED *parent_;
    

    这是google update的链接: http://code.google.com/p/gdata-objectivec-client/source/detail?r=712

    就是这样。

    希望它会帮助某人

    沙尼