Как связать со статической библиотекой coco2d (1.1 beta 2), используя рабочие пространства в Xcode 4.3.1 - PullRequest
8 голосов
/ 25 марта 2012

До сих пор я сделал следующее:

  1. Создано рабочее пространство
  2. Добавлен мой проект
  3. Добавлен проект Cocos2d для iOS (путем перетаскивания в браузер проекта),Это брат моего проекта (не дочерний).
  4. В моем проекте, на этапе сборки, связан с libcocos2d.a
  5. В настройках сборки моего проекта - Установите Всегда искать пути в YES
  6. Создана переменная дерева исходных текстов, указывающая на папку, содержащую файл iOS xcodeproj cocos2d.
  7. В пути заголовка пользователя моего проекта добавлена ​​переменная дерева исходных текстов из шага 6. Установить как рекурсивную.8. В навигаторе проекта кликнул на библиотеку libcocos2d.a (она отображается красным цветом).Установка местоположения "Относительно продуктов сборки" Вы устанавливаете это в самом правом окне в Xcode 4.3.1.
  8. Закрытое рабочее пространство и открываете файл pbxproj в TextWrangler.Поиск пути, содержащего libcocos2d.a Удалить путь, поэтому запись только читает "libcocos2d.a".Это потому, что после компиляции библиотека в любом случае находится в том же каталоге сборки приложения.

Codesense и автозаполнение работы.Но это не скомпилируется.Около 70 ошибок компоновщика появляются, когда я пытаюсь собрать, все они говорят что-то вроде:

Неопределенные символы для архитектуры armv7: "_OBJC_CLASS _ $ _ CCDirector", на которые ссылается: objc-class-ref в AppDelegate.o objc-class-ref в ViewController.o "_kEAGLColorFormatRGB565", на который ссылаются из: - [RIAppDelegate applicationDidFinishLaunching:] в AppDelegate.o "_OBJC_CLASS _ $ _ CCTexture2D", на который ссылаются из: objc-class-ref_re_ _ _ _ _ _ _ __L_D_L_L из _Reg_LBobjc-class-ref в AppDelegate.o

Если я пытаюсь собрать для симулятора, то вместо armv7 он говорит, что символы для i386 отсутствуют.Сам проект cocos2d компилируется и собирается нормально.Это мой проект с вышеуказанными ошибками.

Библиотека cocos2d присутствует в каталоге сборки моего приложения после того, как я пытаюсь собрать.

РЕДАКТИРОВАТЬ: Забыл упомянуть.Я также отредактировал схему для моего проекта, чтобы не строить параллельно.Я также добавил цель cocos2d и сделал ее верхней частью списка (поэтому она должна быть построена первой).

РЕДАКТИРОВАТЬ: Чтобы уточнить - после внесения изменений в файл pbxproj, как описано выше, libcocos2d.aФайл больше не красный.Выглядит нормально.Кроме того, мое приложение также построено, даже при наличии ошибок ссылки и сбоя сборки.(На самом деле он не собирается, но продукт не «красный». Файл приложения создается в том же месте, где создается библиотека cocos2d.

Ответы [ 2 ]

11 голосов
/ 27 апреля 2012

Я уже некоторое время пытаюсь использовать Cocos2d в качестве статической библиотеки вместо шаблона.Причина в том, что это облегчает разработку моего проекта по модульному принципу.Кроме того, это облегчает переключение между версиями cocos2d и так далее.После поиска на форумах cocos2d-x я нашел эту ссылку: http://cfc.kizzx2.com/index.php/cocos2d-x-with-xcode-4-from-scratch-without-template/

Я нашел рамки, которые мне нужно было добавить, и это решило все проблемы со связыванием.

У меня до сих пор нетподал заявку в магазин, так что если кто-то с большим опытом мог бы просмотреть его, чтобы проверить, есть ли какие-либо подводные камни / ошибки, было бы здорово.Английский для меня второй язык, поэтому, пожалуйста, не возражайте.Это было сделано с помощью cocos2d1.1beta2 и Xcode 4.3.1

  1. Создание рабочего пространства Xcode
  2. Перейдите в папку, содержащую файл cocos2d xcodeproj (iOS / Mac).Здесь вы разархивировали cocos2d после его загрузки.
  3. Перетащите файл xcodeproj в окно навигатора Xcode. (Крайнее левое окно).
  4. Нажмите на крошечный треугольник рядом с проектом cocos2dфайл, поэтому все его содержимое исчезнет.
  5. Добавьте новый проект в рабочую область, щелкнув правой кнопкой мыши в навигаторе и «Новый проект».Убедитесь, что проект добавлен как одноуровневый элемент в проект cocos2d, а не как дочерний элемент.Я выбрал приложение для одного окна (iOS)
  6. В этом новом проекте перейдите к настройкам сборки и измените «Всегда искать пути пользователя» на «Да»
  7. Добавить местоположениеваша папка cocos2d в «пути поиска заголовка пользователя».Если вам нравится, вы можете вместо этого добавить папку cocos2d в ваш список исходных деревьев в XCode, и вместо этого просто введите здесь имя переменной.Например: $ {COCOS2D_SRC}.Это удобно, если в дальнейшем вы захотите изменить структуру папок среды сборки.

  8. Нажмите на цель и выберите вкладку фаз сборки.Вы хотите связать следующие двоичные файлы с вашей библиотекой.Убедитесь, что они там.libcocos2d.a libz.dylib libxml2.dylib OpenGLES.framework QuartzCore.framework UIKit.framework Foundation.framework CoreGraphics.framework

Если libcocos2d.a «красный», то не беспокойтесьоб этом.Он по-прежнему правильно компилируется / связывается.

  1. В настройках сборки измените «Только для активных архитектур» на YES.

В противном случае вы можете получить сообщение об ошибке игнорирования файла /Users/Pteriedaktyl/Library/Developer/Xcode/DerivedData/Build/Products/Debug-iphoneos/libcocos2d.a, файл был создан для архива, который не являетсясвязанная архитектура (armv6)

  1. В вашем файле info.plist обязательно удалите запись внутри «требуемых возможностей устройства», в которой указано armv7.В противном случае ваш код будет работать только на новых устройствах.

Теперь все готово!Вы должны иметь доступ к api cocos2d из одноуровневого проекта.Если вы когда-нибудь захотите изменить свою версию cocos2d, вам просто нужно изменить проект cocos2d, который находится в рабочей области, обновить путь к исходному дереву (при необходимости) и ссылку на новый libCocos2d.a

Testing: Просто чтобы попробовать, я изменил делегат приложения и просмотр кода контроллера, чтобы он соответствовал коду из одного из моих старых проектов hello world.

Пожалуйста, попробуйте это и добавьте в ветку, если у вас возникнут проблемы,

1 голос
/ 26 марта 2012

На панели «Служебные программы» для libCocos2d.a, под «Идентификационными данными и типом», где вы устанавливаете библиотеку относительно продуктов сборки, прокрутите вниз и убедитесь, что для ваших целей выбрано «Целевое членство». Если это не так, он не будет включен в фактическую сборку, выполненную целью. По крайней мере, это был единственный способ воспроизвести эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...