Я работаю над проектом, который должен содержать две цели. Один для создания Framework для использования в разработке для Mac, а другой для создания статической библиотеки для использования в разработке для iPhone.
В общем коде нет проблем с #ifdef между платформами, но я просто не могу правильно определить цели и зависимости.
Первый вопрос: какой базовый SDK использовать? Например, если я использую Mac 10.5, я не могу включить фреймворк UIKit (он отмечен красным и не показывает файлы заголовков, если я его разверну). Даже если цель, которая на самом деле ссылается на нее, создана для iPhone OS ..
Другой вопрос, как насчет Foundation.framework или чего-то вроде Security.framework? Как с ними бороться, ведь я могу включить только одну из версий (Mac или iPhone SDK) ...
У кого-нибудь есть для меня совет? Я бы хотел иметь чистую структуру проекта и определенно одну и ту же кодовую базу для обеих целей ... Подходят ли конфигурации?
Спасибо!





Разве вы не можете использовать Идиома PIMPL? И / или иметь общий заголовок для обоих, но использовать другой файл реализации в зависимости от целевой архитектуры или SDK?
Вероятно, самый простой (с точки зрения того, что вам нужно сделать) способ сделать это - два проекта (которые вы можете обернуть как подпроекты фиктивного зонтичного проекта, если хотите), которые используют одни и те же наборы источников - один нацелен на Mac. OS X, другая операционная система iPhone.
В качестве альтернативы, нельзя ли создать две отдельные цели в одном проекте и изменить «Базовый SDK» на вкладке «Сборка» окна «Получить информацию» для каждой из них? У меня нет Xcode для проверки, но я думаю, он позволит вам это сделать.
(Конечно, при любом подходе вы можете добавить третью цель: статическую библиотеку для симулятора, которая будет полезна при тестировании!)
Просто что бы ты знал:
В итоге у меня был один проект с разными целями для разных платформ. Но я не включил фреймворк, от которого завис, в сами цели, а добавил их в настройки сборки Другие флаги компоновщика:
-framework Foundation -framework Security
Вы можете проверить это в моем проекте на github.
На самом деле это не так уж и плохо. Просто создайте вторую цель соответствующего типа, а затем измените настройку сборки «Базовый SDK». Затем обязательно добавьте все необходимые файлы. Если вы хотите создать и то, и другое одновременно, создайте совокупную цель. Для практического примера см. Мой проект SSPromise.
Именно в этом и проблема. Наличие двух целей с разными базовыми SDK, одна из которых - Mac OS X, не позволяет мне включать фреймворк UIKit. И проблема с фреймворком безопасности, который имеет одно и то же имя на обеих платформах, также существует. Но идея «зонтичного проекта» могла бы быть хорошей.