Ошибка компиляции приложения iPhone со статическими библиотеками при сборке дистрибутива - PullRequest
2 голосов
/ 19 сентября 2009

В настоящее время я пытаюсь создать дистрибутив своего (первого) приложения для iphone, чтобы его можно было загрузить в App Store. Я прошел весь процесс профилирования идентификатора приложения и распределения и, наконец, получил конфигурацию сборки Организатора и цели, чтобы распознать ее.

Проблема в том, что при настройке «Активной конфигурации» на «Распространение» (дубликат конфигурации «Релиз» в соответствии с указаниями Центра разработки iPhone) я не могу получить код для компиляции. Проект содержит ссылку на статическую библиотеку, которая содержит несколько классов, которые используются в качестве базовых классов во многих классах проекта. Поэтому при сборке конфигурации дистрибутива компилятор выдает ошибки, говорящие о том, что он не может найти базовые классы из статической библиотеки, и сборка завершается неудачей.

Если я переключу активную конфигурацию. для «Отладки» (как используется при разработке) нет никаких проблем, и приложение правильно компилируется.

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

Ошибки распространения статической библиотеки iPhone и сборки релиза (но не для отладки)

Похоже, у Google тоже не так много полезных результатов. Я также проверил информацию о цели в разделе «Сборка» и переключался между конфигурациями «Отладка» и «Распространение», чтобы проверить наличие каких-либо существенных различий, но пока никто не найден. На самом деле я не нашел никакой соответствующей информации о статической библиотеке. Только на вкладке «Общие» информационного окна, но статическая библиотека правильно отображается в «Прямых зависимостях».

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

Не могли бы вы (ПОЖАЛУЙСТА :)) оказать некоторую помощь по этому вопросу. Любая помощь или подсказка, с благодарностью.

Заранее спасибо!

Ответы [ 3 ]

6 голосов
/ 19 сентября 2009

Вот оно:

Для создания дистрибутива (в соответствии с указаниями iPhone Dev Center) вам необходимо сделать копию конфигурации «Release» и назвать ее «Distribution», а затем собрать проект в соответствии с этой активной конфигурацией. Проверяя «Пути поиска заголовка» в информационном окне цели для конфигураций отладки и распространения, я заметил разницу в значении, которое было установлено как (для обеих конфигураций):

$ {BUILD_STYLE} - $ {PLATFORM_NAME} / USR / местные / включают

, что привело к замене $ {BUILD_STYLE} - $ {PLATFORM_NAME} на «Debug-iphoneos» и «Distribution-iphoneos» для каждой конфигурации. Все базовые классы из статической библиотеки были сохранены в папке «include», однако папки «Distribution-iphoneos» не было.

Это произошло из-за того, что я не добавил конфигурацию «Распространение» в статический проект lib, как я сделал в проекте основного приложения (я не знал, что должен был). Поэтому, чтобы решить проблему, я добавил только тот же конфиг. в статическом проекте lib и собрал его.

Итак, в итоге, если вы добавите новую конфигурацию в проект, который использует классы из указанной статической библиотеки, также добавьте эту же конфигурацию в проект статической библиотеки и выполните сборку. Таким образом, основной проект сможет найти базовые классы.

Может быть, это на самом деле простые вещи, извините, я просто изучаю язык (и XCode):).

Надеюсь, это поможет, спасибо Алексу снова.

Привет

3 голосов
/ 19 сентября 2009

Проверьте параметры сборки для конфигурации Debug; например, пути поиска заголовка для конфигурации отладки могут отличаться от конфигурации для распространения. Выберите меню Project > Edit Project Settings и введите: Header Search Paths, чтобы проверить эти настройки для перечисленных Configuration. Если что-то отличается между конфигурациями, сделайте их одинаковыми для обеих.

0 голосов
/ 19 сентября 2009

Я слышал о проблемах компоновщика с iPhone OS 3.0 SDK; Некоторые из обходных путей включают добавление -all_load к флагам компоновщика при сборке вашего проекта (хотя это может иметь непреднамеренные побочные эффекты). Другим вариантом является обновление до версии 3.1 SDK, где я считаю, что эти проблемы были решены. Конечно, это не может быть вашей проблемой вообще ...

Другие места для помощи:

...