Несмотря на то, что Xcode 4 объявляется о том, что он знает о межпроектных классах проектов в общем рабочем пространстве, я не нашел это работающим и провел некоторое исследование проблемы. Общее решение, обсуждаемое во многих потоках здесь, состоит в том, чтобы создать статическую библиотеку и связать ваши проекты с ней.
Поэтому я последовал руководству Ионы (http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/)) и создал статическую библиотеку для обмена часто используемыми подклассами UIView с несколькими проектами.
Имея некоторый опыт проб и ошибок и устранение неполадок, я нашел это решение действительно удовлетворительным и чистым, но есть некоторые сложности:
(1) Статическая библиотека не может обмениваться файлами XIB
После проведенного мной исследования кажется невозможным получить доступ к файлам XIB из-за пределов статического проекта библиотеки без их включения, перетаскивая их в каждый проект, в котором они необходимы для создания ссылок. С учетом подкласса UIViewController в статической библиотеке, который должен быть загружен из XIB - хотя подкласс UIViewController доступен из любого проекта, который ссылается на статическую библиотеку, вы не можете вызвать initWithNibName без добавления файла XIB в этот проект.
Я временно решил эту проблему, создавая ссылки на файлы XIB статической библиотеки в каждом нужном мне проекте - есть ли лучшее решение?
(2) Интерфейсный Разработчик не знает о классах в статической библиотеке
Хотя я могу выбрать один из подклассов UIView в моей статической библиотеке в качестве класса объекта, который я перетащил в XIB в своем проекте (даже с автозаполнением), во время выполнения я получаю сообщение об ошибке: «Неизвестный класс [UIViewSubclassName] в файле Интерфейсного Разработчика ".
Решение, которое я нашел здесь - Interface Builder не может видеть классы в статической библиотеке - (перетаскивая файл заголовка в браузер XIB, чтобы Interface Builder распознал класс), очевидно, перестала работать с новый Xcode 4 - браузер XIB объединен в интерфейс с одним окном и не отвечает на файлы заголовков, перетаскиваемые в него.
Как я могу сделать так, чтобы мой XIB включал объекты из статической библиотеки (например, подкласс UIViewController в моем проекте, который должен содержать некоторые кнопки, которые я часто использую и, следовательно, включал в мою статическую библиотеку), не вызывая исключения во время выполнения?
Большое спасибо!
PS: некоторые из этих ошибок происходят с кодом, который без проблем компилируется для симулятора, но выдает ошибки при сборке для устройства ...