Статическая библиотека GData: исключить файлы из ARC с -fno-objc-arc? - PullRequest
1 голос
/ 28 ноября 2011

Я использую статическую библиотеку GData в своем приложении, которое использует ARC. В инструкциях Google говорится, чтобы связать файлы заголовков из библиотеки с целью проекта.

Проблема в том, что когда я это делаю, я получаю ошибки компилятора, поскольку библиотека GData не совместима с ARC.

Google заявляет, что:

ARC Совместимость

Когда исходные файлы библиотеки компилируются непосредственно в проект, который использует ARC, ARC необходимо отключить специально для источников библиотеки.

Чтобы отключить ARC для исходных файлов в Xcode 4, выберите проект и цель в Xcode. На целевой вкладке «Фазы сборки» разверните фазу сборки Источники компиляции, выберите исходные файлы библиотеки, затем нажмите Enter, чтобы открыть поле редактирования, и введите -fno-objc-arc в качестве флага компилятора для этих файлов.

( ссылка )

Но так как у меня есть только заголовочные файлы, я не могу использовать этот флаг в цели приложения.

1 Ответ

3 голосов
/ 28 ноября 2011

Ну, я спросил и нашел несвязанные 10 минут спустя.В любом случае, если это кому-то поможет:

  1. Проблема только с файлами .h, замечание Гул только для случаев, когда вы встраиваете библиотеку не как статическую библиотеку.
  2. После кого-тосообщил о проблеме в Google, они добавили новые макросы, которые решают проблему, вот как:

найдите в заголовочных файлах файл с именем: 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

Затем в GDataObject.h, который вызывает ошибки ARC

Измените структуру 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: http://code.google.com/p/gdata-objectivec-client/source/detail?r=712

Вот и все.

Надеюсь, это кому-нибудь поможет

Шани

...