Как вы создаете гибридные проекты XCode для Mac и iPhone? - PullRequest
12 голосов
/ 14 января 2009

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

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

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

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

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

Спасибо!

Ответы [ 4 ]

5 голосов
/ 18 декабря 2009

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

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

-framework Foundation -framework Security

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

3 голосов
/ 18 декабря 2009

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

3 голосов
/ 14 января 2009

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

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

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

0 голосов
/ 14 января 2009

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

...