Ссылка на исходный код кросс-проекта в Xcode 4 - PullRequest
6 голосов
/ 03 января 2012

Я знаю, что XCode может ссылаться на цели сборки framework / static lib в других проектах, но если проект, на который вы хотите сослаться, не имеет Framework / static lib target, вы можете напрямую обратиться к исходному коду из другогоXcode проект?Я пытался сделать это, используя как подпроект, так и рабочее пространство Xcode 4, но безрезультатно.После корректировки пути поиска в заголовке все операторы #import работают правильно, но я все еще получаю неприятную ошибку компиляции, символы повторения не найдены.

setenv MACOSX_DEPLOYMENT_TARGET 10.7
/Developer/usr/bin/clang -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.7.sdk -L/Users/Tony/Library/Developer/Xcode/DerivedData/-bewprsseyzwgmsdpwvjfuzjiilap/Build/Products/Debug -F/Users/Tony/Library/Developer/Xcode/DerivedData/-bewprsseyzwgmsdpwvjfuzjiilap/Build/Products/Debug -filelist /Users/Tony/Library/Developer/Xcode/DerivedData/-bewprsseyzwgmsdpwvjfuzjiilap/Build/Intermediates/.build/Debug/.build/Objects-normal/x86_64/.LinkFileList -mmacosx-version-min=10.7 -fobjc-arc -framework Cocoa -o /Users/Tony/Library/Developer/Xcode/DerivedData/-bewprsseyzwgmsdpwvjfuzjiilap/Build/Products/Debug/.app/Contents/MacOS/

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_MagicalRecordHelpers", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_MRCoreDataAction", referenced from:
      objc-class-ref in ItemsArrayController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Кроме того, в чем дело с этим новым рабочим пространством Xcode 4?И чем именно он отличается от подпроектов?Единственное, что я смог найти, это то, что они выглядят визуально по-другому ...

Рабочая область

enter image description here

Подпроект

enter image description here

1 Ответ

6 голосов
/ 04 января 2012

Ответ на первый вопрос, очевидно, таков: «Ни один Xcode не может ссылаться на исходные файлы в другом проекте».Для того, чтобы скомпилировать исходный файл (файлы .m).Проект Xcode должен содержать прямые ссылки на них.Вы можете перейти к настройке цели -> Этапы сборки -> Скомпилированные ресурсы, чтобы увидеть, что будет скомпилировано.Обратите внимание, что если файлы не будут добавлены в проект напрямую, они не будут отображаться в ресурсах для компиляции.Заголовки, однако, могут быть переданы между различными проектами.

EDIT

И я думаю, что ответ на второй вопрос заключается в том, что, хотя Xcode 3 требует всегда явного управления зависимостями, рабочее пространство Xcode 4 позволяет неявно управлять целевыми зависимостямиДо тех пор, пока они все находятся в одном рабочем пространстве.Все, что требуется для определения зависимости, - это добавить продукт другого проекта, на который вы хотите ссылаться, как связанную библиотеку на странице сводки.Эти выводы заняли слишком много времени (полный рабочий день), документация по этому вопросу может и должна быть обязательно улучшена!

...