Создать статическую библиотеку, содержащую библиотеку RestKit - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть другая проблема при использовании библиотеки RestKit.

Моя цель - создать специальную библиотеку для моей компании, которую можно использовать для всех проектов разработки IOS.

Для этого я создал библиотеку, в которую импортировал библиотеку RestKIt. Я следовал руководству по установке RestKit xCode 4.x.

Итак, я создал новый проект, в который импортировал свою библиотеку с именем «m2mBackEnd».

В моем тестовом проекте, который использует библиотеку, я сделал Oppers следующее:

1 - я импортировал библиотеку "m2mBackEnd".

2 - В «Настройки сборки / Другие флаги компоновщика» я добавил «-ObjC».

3 - В «Настройки сборки / Пути поиска в заголовке пользователя» я добавил папку, содержащую все ». ч.

4 - В «Этапы сборки / целевые зависимости» я добавил зависимость к «m2mBackEnd»

5 - В «Фазы сборки / связать двоичные файлы с библиотеками» я добавил «libm2mBackEnd.a».

но не работает я сталкиваюсь с ошибками:

undefined symbols for architecture i386:
"_CFHTTPMessageCreateRequest", referenced from:
  -[RKRequest addHeadersToRequest] in libm2mBackEnd.a(RKRequest.o)
"_CFHTTPMessageAddAuthentication", referenced from:
  -[RKRequest addHeadersToRequest] in libm2mBackEnd.a(RKRequest.o)
"_CFHTTPMessageCopyHeaderFieldValue", referenced from:
  -[RKRequest addHeadersToRequest] in libm2mBackEnd.a(RKRequest.o)
"_kCFHTTPAuthenticationSchemeBasic", referenced from:
  -[RKRequest addHeadersToRequest] in libm2mBackEnd.a(RKRequest.o)
"_kCFHTTPVersion1_1", referenced from:
  -[RKRequest addHeadersToRequest] in libm2mBackEnd.a(RKRequest.o)
"_SCNetworkReachabilityCreateWithAddress", referenced from:
  -[RKReachabilityObserver initWithAddress:] in    libm2mBackEnd.a(RKReachabilityObserver.o)
"_SCNetworkReachabilityCreateWithName", referenced from:
  -[RKReachabilityObserver initWithHost:] in libm2mBackEnd.a(RKReachabilityObserver.o)
"_SCNetworkReachabilityGetFlags", referenced from:
  -[RKReachabilityObserver getFlags] in libm2mBackEnd.a(RKReachabilityObserver.o)
"_SCNetworkReachabilitySetCallback", referenced from:
  -[RKReachabilityObserver scheduleObserver] in libm2mBackEnd.a(RKReachabilityObserver.o)
"_SCError", referenced from:
  -[RKReachabilityObserver scheduleObserver] in libm2mBackEnd.a(RKReachabilityObserver.o)
  -[RKReachabilityObserver unscheduleObserver] in libm2mBackEnd.a(RKReachabilityObserver.o)
"_SCErrorString", referenced from:
  -[RKReachabilityObserver scheduleObserver] in libm2mBackEnd.a(RKReachabilityObserver.o)
  -[RKReachabilityObserver unscheduleObserver] in libm2mBackEnd.a(RKReachabilityObserver.o)
"_SCNetworkReachabilitySetDispatchQueue", referenced from:
  -[RKReachabilityObserver scheduleObserver] in libm2mBackEnd.a(RKReachabilityObserver.o)
  -[RKReachabilityObserver unscheduleObserver] in libm2mBackEnd.a(RKReachabilityObserver.o)
"_UTTypeCreatePreferredIdentifierForTag", referenced from:
  -[NSString(RestKit) MIMETypeForPathExtension] in libm2mBackEnd.a(NSString+RestKit.o)
"_UTTypeCopyPreferredTagWithClass", referenced from:
  -[NSString(RestKit) MIMETypeForPathExtension] in libm2mBackEnd.a(NSString+RestKit.o)
"_kUTTagClassFilenameExtension", referenced from:
  -[NSString(RestKit) MIMETypeForPathExtension] in libm2mBackEnd.a(NSString+RestKit.o)
"_kUTTagClassMIMEType", referenced from:
  -[NSString(RestKit) MIMETypeForPathExtension] in libm2mBackEnd.a(NSString+RestKit.o)
"_xmlNodeGetContent", referenced from:
  -[RKXMLParserLibXML parseNode:] in libm2mBackEnd.a(RKXMLParserLibXML.o)
"_xmlNewParserCtxt", referenced from:
  -[RKXMLParserLibXML parseXML:] in libm2mBackEnd.a(RKXMLParserLibXML.o)
"_xmlParseMemory", referenced from:
  -[RKXMLParserLibXML parseXML:] in libm2mBackEnd.a(RKXMLParserLibXML.o)
"_xmlFreeDoc", referenced from:
  -[RKXMLParserLibXML parseXML:] in libm2mBackEnd.a(RKXMLParserLibXML.o)
"_xmlFreeParserCtxt", referenced from:
  -[RKXMLParserLibXML parseXML:] in libm2mBackEnd.a(RKXMLParserLibXML.o)
"_xmlFree", referenced from:
  -[RKXMLParserLibXML parseNode:] in libm2mBackEnd.a(RKXMLParserLibXML.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я что-то пропустил? Или сделал что-то не так?

Можно ли создать библиотеку с помощью RestKit?

Спасибо за вашу помощь.

Ответы [ 3 ]

3 голосов
/ 16 декабря 2011

Я надеюсь, что к этому времени вы бы решили проблему, если нет, попробуйте описанные ниже шаги установки

Проверьте, выполнили ли вы шаги установки, как указано в файле read me, и добавили всю упомянутую в нем работу с фреймами, а также изменения, указанные в настройке Build

Xcode 4.x (Git Submodule)

  1. Добавить подмодуль: git submodule add git://github.com/RestKit/RestKit.git RestKit
  2. Откройте проект, к которому вы хотите добавить RestKit в Xcode.
  3. Сфокусируйте проект и выберите меню «Вид»> «Навигаторы»> «Проект», чтобы отобразить список файлов проекта.
  4. Перетащите файл RestKit.xcodeproj из Finder и поместите его в "" .xcodeproj.
  5. Нажмите на название вашего проекта на боковой панели слева, чтобы открыть представление настроек проекта на правой панели окна.
  6. В средней панели вы увидите заголовки PROJECT и TARGETS для вашего проекта. Нажмите на название своего проекта, затем выберите Настройки сборки в верхней части, чтобы открыть редактор настроек сборки для всего проекта.
  7. Найдите Поиск путей заголовка . Дважды щелкните и добавьте новую запись. Добавьте путь поиска в каталог "$(SOURCE_ROOT)/RestKit/Build", который вы добавили в свой проект. НЕ установите флажок Recursive.
  8. Найдите Пути поиска в библиотеке . Дважды щелкните и добавьте новую запись. Добавьте путь поиска в каталог "$(SOURCE_ROOT)/RestKit/Build/$(BUILD_STYLE)-$(PLATFORM_NAME)", который вы добавили в свой проект.
    ПРИМЕЧАНИЕ : Это необходимо, только если вы НЕ используете DerivedData.
  9. Найдите запись Other Linker Flags и дважды щелкните по ней. Используйте кнопку + , чтобы добавить новую запись, и введите -ObjC -all_load. Закрыть редактор с помощью кнопки Done .
  10. Найдите цель, к которой вы хотите добавить RestKit, в списке TARGETS в середине панели редактора. Выберите его, чтобы открыть редактор настроек цели в правой панели окна.
  11. Перейдите на вкладку Фазы сборки в верхней части окна, чтобы открыть редактор фаз сборки.
  12. Щелкните раскрывающие треугольники рядом с Целевые зависимости и Связать двоичные файлы с библиотеками элементов.
  13. В разделе Target Dependencies нажмите кнопку + , чтобы открыть лист выбора Target. Нажмите на совокупную цель RestKit (у нее будет значок «бычий глаз») и нажмите кнопку Добавить , чтобы создать зависимость.
  14. В разделе Link Binary with Libraries нажмите кнопку + , чтобы открыть лист выбора библиотеки. Здесь нам нужно указать цели связать все необходимые библиотеки RestKit и несколько системных библиотек. Выберите каждый из следующих элементов (по одному или удерживая нажатой клавишу «Command», чтобы выбрать все из них одновременно), а затем нажмите кнопку Добавить :
    • libRestKitCoreData.a - Необязательно. Требуется только если вы используете Core Data.
    • libRestKitJSONParserJSONKit.a
    • libRestKitNetwork.a
    • libRestKitObjectMapping.a
    • libRestKitSupport.a
    • CFNetwork.framework
    • CoreData.framework - Необязательно. Требуется только если вы используете Core Data
    • MobileCoreServices.framework
    • SystemConfiguration.framework
    • libxml2.dylib - Необязательно. Требуется только в том случае, если вы сопоставляете полезные данные XML и связываете libRestKitXMLParserLibxml.a с вашим приложением.
  15. Убедитесь, что все библиотеки отображаются в разделе Link Binary with Libraries , прежде чем продолжить.

Поздравляем, вы закончили добавлять RestKit в проект на базе Xcode 4!

Теперь вам нужно только добавить включения для библиотек RestKit в соответствующих местах в вашем приложении. Соответствующие включают в себя:

#import <RestKit/RestKit.h>
// And if you are using Core Data...
#import <RestKit/CoreData/CoreData.h>
0 голосов
/ 05 октября 2013

Рекомендуемый подход для установки RestKit - через диспетчер пакетов CocoaPods , поскольку он обеспечивает гибкое управление зависимостями и очень простую установку. Для достижения наилучших результатов рекомендуется установить через CocoaPods> = 0.19.1, используя Git> = 1.8.0, установленную через Homebrew .

Установите CocoaPods, если он еще не доступен:

$ [sudo] gem install cocoapods
$ pod setup

Перейдите в каталог вашего проекта XCode, создайте и измените свой Podfile и добавьте RestKit:

$ cd /path/to/MyProject
$ touch Podfile
$ edit Podfile

platform :ios, '5.0' 
# Or platform :osx, '10.7'
pod 'RestKit', '~> 0.20.0'

# Testing and Search are optional components
pod 'RestKit/Testing', '~> 0.20.0'
pod 'RestKit/Search',  '~> 0.20.0'

Установите в свой проект:

$ pod install

Откройте ваш проект в Xcode из файла .xcworkspace (не из обычного файла проекта)

$ open MyProject.xcworkspace

Обратите внимание, что в случае сбоя установки это может быть связано с тем, что вы устанавливаете версию с Git ниже, чем ожидает CocoaPods. Убедитесь, что вы используете Git> = 1.8.0, выполнив git --version. Вы можете получить полную картину деталей установки, выполнив pod install --verbose.

0 голосов
/ 16 сентября 2012

Попробуйте добавить CFNetwork.framework к цели вашего проекта (для меня исправлены первые 6 ошибок)

...