Ссылочный код в отдельном проекте в XCode 4.2 - PullRequest
2 голосов
/ 10 января 2012

Я работаю над приложением для iOS, где я использую сторонние библиотеки. Я хочу перенести свой проект на использование ARC, но сторонние библиотеки все еще используют старое управление памятью. Поэтому я хочу отделить сторонний код и поместить его в отдельный проект без ARC, а затем каким-то образом связать этот проект с моим проектом iOS-приложения, чтобы они были собраны вместе с использованием одной конфигурации.

Возможно ли это сделать очень простым способом, или мне лучше просто отключить ARC для отдельных файлов? (кажется очень утомительным ..)

Могу ли я использовать рабочее пространство? Где один проект является моим iOS-приложением, а другой содержит сторонний код?

Я немного поиграл и много гуглил, но просто не кажется, что у меня просто так, или я ошибаюсь?

1 Ответ

4 голосов
/ 13 января 2012

Так что я понял это сам, с большой помощью из разных блогов.Что-то базовое должно быть более тривиальным и хорошо документированным ... Но здесь мы приступили, вот что я сделал, чтобы получить библиотеку для AsiHttpRequest:

  1. Создать новый проект iOS.Выберите шаблон «Статическая библиотека Cocoa Touch».Называй как хочешь.Вы не хотите ставить галочку «Использовать автоматический подсчет ссылок», так как AsiHttpRequest не поддерживает его.
  2. Выберите местоположение для вашего библиотечного проекта (будет иметь значение позже).
  3. Удалить значение по умолчанию.h- и .m-файл, созданный Xcode.
  4. Перетащите файлы AsiHttpRequest в проект
  5. Вы можете добавить рамки, от которых зависит AsiHttpRequest, но вам придется добавитьв любом случае, это ваш основной проект, поэтому в этом нет необходимости.
  6. Попробуйте построить проект, он должен делать это без ошибок.
  7. Откройте ваш главный проект
  8. Из поиска, перетащите файл библиотеки .proj в ваш основной проект (в Xcode, чтобы он «приземлился» в главном файле проекта)
  9. Теперь проект библиотеки должен появиться под вашим основным проектом (все еще в XCode).Он должен быть расширяемым, и вы также должны видеть файлы проекта библиотеки.Если этого не произойдет, попробуйте закрыть все открытые проекты и снова открыть основной проект.
  10. Выберите основной проект и выберите цель.В разделе «Этапы сборки - связать двоичные файлы с библиотеками» щелкните знак «+».
  11. В списке фреймворков вы должны увидеть свой библиотечный проект (называемый что-то вроде libname.a).Выберите этот файл
  12. Недавно добавленный файл может отображаться красным в списке платформ, не волнуйтесь, он все равно работает.Угадайте, что это ошибка.
  13. Все еще под целью, перейдите в Настройки сборки
  14. В разделе Пути поиска по заголовку добавьте относительный путь поиска, где находятся библиотеки .h-файлов.Это относительно ваших основных проектов .proj-файл.(Например, ../some folder / libproject /)
  15. Надеемся, ваш основной проект будет построен без ошибок, и проект библиотеки будет построен в то же время, используя ту же конфигурацию, что и основной проект.

Я понятия не имею, хороший ли это подход или есть какой-то более простой способ сделать это.Однако мне это нравится, поскольку я могу использовать проект библиотеки в нескольких проектах.И если я хочу обновить проект библиотеки, мне нужно будет сделать это только в одном месте, а другие проекты также будут обновлены, поскольку все они ссылаются на один и тот же проект.

Edit1: У меня были некоторые проблемы с библиотечными проектами, использующими целевые категории c.Я получил нераспознанный селектор, отправленный экземпляру ошибок во время выполнения при попытке вызвать эти методы.Эта проблема была решена следующим ответом здесь .

  1. Перейдите для создания настроек цели в основном проекте и добавьте -ObjC к записи, которая называется Другие флаги компоновщика * 1046.*

Edit2: Я нашел этот шаблон для создания универсальных фреймворков.Я не пробовал, но думаю, что-то подобное тоже подойдет.

...