Подтвердить что ты не робот

Как вы создаете гибридные проекты Xcode для Mac и iPhone?

Я работаю над проектом, который должен содержать две цели. Один для создания Framework для использования в Mac, а другой для создания статической библиотеки для использования в разработке iPhone.

В распространенном коде это не проблема для #ifdef между платформами, но я просто не могу правильно получить цели и зависимости.

Первый вопрос: какой базовый SDK использовать? Например, если я использую Mac 10.5, я не могу включить структуру UIKit (она отмечена красным цветом и не отображает файлы заголовков, если я его расширяю). Даже если цель, которая на самом деле связана с ней, строит для iPhone OS.

Другой вопрос: как насчет Foundation.framework, или что-то вроде Security.framework? Как с ними бороться, поскольку я могу включить только одну из версий (Mac или iPhone SDK)...

У кого-нибудь есть совет для меня? Я хотел бы иметь чистую структуру проекта и определенно одну и ту же кодовую базу для обеих целей... Есть ли способы конфигурации?

Спасибо!

4b9b3361

Ответ 1

Просто чтобы вы знали:

В итоге у меня был один проект с разными целями для разных платформ. Но я не включил фреймворк, на который я полагаюсь в самих объектах, но добавил их в настройки сборки флагов других компоновщиков:

-framework Foundation -framework Security

Вы можете проверить это в проекте, который я сделал на github.

Ответ 2

Вероятно, самый простой (с точки зрения того, что вам нужно сделать) способ сделать это - это два проекта (которые вы можете обернуть как подпроекты проекта фиктивного зонтика, если хотите), которые используют одни и те же наборы источников - один ориентированный на Mac OS X, другой iPhone OS.

В качестве альтернативы, вы не можете создать две отдельные цели в рамках одного и того же проекта и изменить "базовый SDK" со вкладки "Build" окна "Получить информацию" для каждого? У меня нет Xcode передо мной, чтобы проверить, но я думаю, что это позволит вам сделать это.

(Конечно, при любом подходе вы можете добавить третью цель: статическую библиотеку для симулятора, которая будет полезна при тестировании!)

Ответ 3

На самом деле это не так плохо. Просто создайте вторую цель соответствующего типа, а затем измените настройку сборки "Base SDK". Затем обязательно добавьте все необходимые файлы. Если вы хотите создать оба одновременно, создайте совокупную цель. Для практического примера см. Мой проект SSPromise.

Ответ 4

Вы не можете использовать PIMPL idiom? И/или иметь общий заголовок для обоих, но использовать другой файл реализации на основе целевой архитектуры или SDK?