Xcode 4 и three20 и создать архив IPA: нет такого файла или каталога

В Xcode 3.2.5 я использую «Build And Archive» для создания файла IPA без каких-либо проблем. Как я могу сделать это в Xcode 4? Я думаю, что мне нужно использовать «Продукт -> Архив», но я получаю более 100 сообщений об ошибках в фреймворке three20. Большинство из них - «Нет такого файла или каталога». («Продукт -> Сборка для -> Сборка для архивирования» работает. Ошибок нет.)

Например, это первое сообщение об ошибке:

../scripts/Protect.command: line 23: cd: /Users/[USERNAME]/Library/Developer/Xcode/DerivedData/[PROJECTNAME]-blabla/ArchiveIntermediates/[PROJECTNAME]/BuildProductsPath/Release-iphoneos/../three20/Three20Core: No such file or directory

Путь "/[PROJECTNAME]/BuildProductsPath/three20/" действительно не существует, но этот путь существует: "/[PROJECTNAME]/three20/"

Что я могу сделать?


person Manni    schedule 10.03.2011    source источник


Ответы (12)


Документация Three20 не решила для меня эту проблему (к сожалению ...). В конце концов, у меня сработало сочетание нескольких решений. Существует разница между «Архивом» и «Сборкой для архивации» (или сборкой для запуска), и с помощью этих шагов у меня оба работают без проблем со сборкой:

Вам нужно будет изменить сценарии как Упомянутый Манни, установите флаг" Пропустить установку "для каждого проекта Three20, связанного с деревом вашего проекта, и добавьте следующие пути в" Пути поиска заголовков "вашего проекта:

"$ (BUILT_PRODUCTS_DIR) /../ three20" "$ (BUILT_PRODUCTS_DIR) /../../ three20"

это заставит вас работать с опцией Build. Если вы хотите выполнить действие архивирования, вам также потребуется изменить предпочтение «Местоположение» в Xcode как упомянутый выше вариант" без пера ".

Я задокументировал эти шаги в этом сообщении.

person Amir Naor    schedule 24.04.2011
comment
Большой! Мне пришлось обновить Three20 Framework, и после этого я внес изменения! И это сработало !!! Спасибо - person NicTesla; 17.02.2012
comment
Чем раньше я удалю это из проекта, тем лучше !!! Требуется слишком много времени на обслуживание - person Liam; 16.03.2012
comment
Кстати, добавление шага пути "$(BUILT_PRODUCTS_DIR)/../three20" "$(BUILT_PRODUCTS_DIR)/../../three20" уже выполнено, выполнив шаги @ Manni. - person abbood; 27.02.2013

Конфигурация, которая работает как для сборки, так и для архивирования в Xcode4.
https://github.com/pazustep/three20/commit/4a9aad4eb90a6962dd729d245f9293a7cc0d7f36


src / common / Configurations / Paths.xcconfig

REPO_ROOT_PATH    = $(SRCROOT)/../..
ROOT_SOURCE_PATH  = $(REPO_ROOT_PATH)/src

//OBJROOT = $(REPO_ROOT_PATH)/Build
//SYMROOT = $(OBJROOT)/Products

// Search Paths

LIBRARY_SEARCH_PATHS    = $(STDLIB_LIBRARY)
//HEADER_SEARCH_PATHS     = $(STDLIB_HEADERS) "$(CONFIGURATION_BUILD_DIR)/../three20"
HEADER_SEARCH_PATHS     = $(STDLIB_HEADERS) "$(BUILT_PRODUCTS_DIR)/../three20" "$(BUILT_PRODUCTS_DIR)/../../three20"

src / scripts / Protect.command

# Ignore whitespace characters in paths
IFS=$'\n'

#cd ${CONFIGURATION_BUILD_DIR}${PUBLIC_HEADERS_FOLDER_PATH}

if [ "${DEPLOYMENT_LOCATION}" == "YES" ]; then
    PREFIX=${BUILT_PRODUCTS_DIR}/..
else
    PREFIX=${BUILT_PRODUCTS_DIR}
fi

cd ${PREFIX}${PUBLIC_HEADERS_FOLDER_PATH}

chmod a-w *.h 2>> /dev/null
chmod a-w private/*.h 2>> /dev/null

exit 0
person Manni    schedule 11.03.2011
comment
После этих изменений я получаю Three20 / Three20.h: в моем исходном коде нет такого файла или каталога: #import Three20 / Three20.h - person Manni; 11.03.2011

Еще одна вещь, которая может помешать процессу сборки, - это использование имени схемы, содержащего пробелы.

XCode не помешает вам сделать это, но если вы используете имя типа «Ad Hoc» для своей схемы, вы получите те же ошибки:

Three20/Three20+Additions.h: No such file or directory
person jverdi    schedule 19.05.2011
comment
Я переучивал это правило несколько раз. Я часто вижу ошибки на этапе связывания. - person Kristopher Johnson; 01.11.2011

Я изучаю это прямо сейчас и, надеюсь, соберу адекватный патч, который работает как в Xcode 3.2. #, Так и в Xcode 4.

Изменить: похоже, что самый простой способ заставить старые проекты Xcode 3.2 работать с Xcode 4 - это сделать следующее:

  • Зайдите в настройки Xcode 4 (Cmd +,).
  • Выберите вкладку «Местоположения».
  • Там, где написано «Места сборки», выберите раскрывающийся список и выберите «Поместить продукты для сборки в места, указанные целевыми объектами».

Я напишу статью на сайте three20.info, в которой подробно расскажу об этом.

person featherless    schedule 10.03.2011
comment
Я изменил место сборки, но по-прежнему получаю сообщение об ошибке отсутствия такого файла или каталога :-( - person Manni; 11.03.2011
comment
Мне пришлось один раз скомпилировать его обычным способом, прежде чем пытаться создать архив, чтобы это работало! - person fredrik; 12.08.2011
comment
Боюсь, этот пост устарел для Xcode 4.5, там у вас есть только настройки - ›вкладка местоположения-› производные данные - ›расширенный -› расположение сборки - ›пользовательский, который дает вам три варианта: 1. относительно производных данных, относительно рабочее пространство, и абсолютное .. какой из них это? (вопрос задан здесь) - person abbood; 27.02.2013

three20.info: Руководство по переходу на Xcode 4
http://three20.info/article/2011-03-10-Xcode4-Support

Это руководство было составлено командой Three20, чтобы помочь вам успешно перенести ваши приложения на Xcode 4.

person Manni    schedule 11.03.2011
comment
Пожалуйста, используйте эту статью для перехода на Xcode 4. Все остальные методы официально не поддерживаются. - person featherless; 14.03.2011
comment
Увы, эта статья у меня не работает. Хотя буду пробовать разные вещи. :( - person Joe D'Andrea; 17.06.2011

Убедитесь, что в названии вашей схемы нет пробелов. Это также приводит к ошибке сборки «Файл не найден».

person Martin Reichl    schedule 14.11.2011

Мне пришлось перейти в Project Info> Build (вкладка) и добавить в путь поиска заголовка следующее:

three20/Build/Products/three20

Этот путь может быть специфическим для моего проекта, но на тот случай, если он работает для кого-то другого.

person Banjer    schedule 19.12.2011

Откройте файл /src/common/Configurations/Paths.xcconfig

старый код:

HEADER_SEARCH_PATHS     = $(STDLIB_HEADERS) "$(CONFIGURATION_BUILD_DIR)/../three20"

новый код:

HEADER_SEARCH_PATHS     = $(STDLIB_HEADERS) "$(CONFIGURATION_BUILD_DIR)/../../three20"

Итак, у меня осталось 7 ошибок, но я могу создать архив ...

person Manni    schedule 10.03.2011

Группы Google: Xcode 4, Three20 и Project -> Архив
http://groups.google.com/group/three20/browse_frm/thread/cde36b7dab178bad

person Manni    schedule 11.03.2011

Ответ Амира Наора идеален. Я проверил его ответ на xcode 4.2, и он сработал. Я пропустил шаг «Вам нужно будет изменить сценарии, как Манни, упомянутый выше», поэтому я продолжал получать аналогичную ошибку, как указано в исходном вопросе. надеюсь, вы не совершите ту же ошибку. также, начиная с xcode 4.2, шаг «тогда вам также нужно будет изменить предпочтение« Местоположение »в Xcode как упомянутое выше без перьев». больше не нужен.

person Ross    schedule 16.10.2011

Я сделал следующее, чтобы это работало для меня:

  1. для статической библиотеки three20 я использовал cocoapods, чтобы включить файлы в основной проект .. он только что получил избавился от всех проблем, которые доставлял мне три20 (а их много ...), кстати, я попытался заменить three20 на Nimbus .. но Nimbus не хватало некоторых функций, для которых мой проект использовал three20 ... так что Nimbus не помог.
  2. установите для пропуска установки значение да в настройках сборки для всех других подпроектов / статических библиотек и переключите заголовки копии с общедоступных на проект на этапах сборки
  3. самое главное: во вспомогательных библиотеках ... на этапах сборки я убедился, что место назначения копирования файлов было изменено с Absolute path на products directory.

вот и все!

Подсказка: чтобы получить представление о файлах-нарушителях, из-за которых в вашем архиве создается архивный файл, а не ipa, сделайте следующее:

  1. Выберите архив и нажмите кнопку «Распространить».
  2. Выберите вариант «Сохранить встроенные продукты».
  3. Нажмите «Далее» и «Сохранить».
  4. Просмотрите созданный каталог в Finder.
  5. В подкаталоге "библиотеки" будут указаны библиотеки, которые необходимо установить для параметра "Пропустить установку" значение "Да".
  6. в некоторых случаях usr/local/include идентифицирует файлы заголовков-виновников, которые вам нужно переместить из Public в Project, или файлы, которые вам нужно изменить с абсолютного пути в каталог продуктов. но этот каталог (например, usr / local / include) зависит от вашей структуры каталогов подбиблиотеки
person abbood    schedule 27.02.2013

Если вам нужен быстрый обходной путь, просто выполните следующие простые шаги:

1. перейдите по указанному пути /Users/[USERNAME]/Library/Developer/Xcode/DerivedData/[PROJECTNAME]-blabla/ArchiveIntermediates/[PROJECTNAME]/BuildProductsPath/ (он будет в вашем сообщении об ошибке). Это должна быть подстрока до /.. в этом пути.
2. Создайте там папку Release-iphoneos (или Debug-iphoneos, если необходимо)

Тогда все наладится!

Сценарий Three20 предполагает, что у вас уже есть эта папка, но при первой сборке никого не существует. Вот почему вам нужно исправить «Сборка» и «Архив» отдельно: для действия «Сборка» обычно используется Debug-iphoneos папка, а для действия «Архив» используется Release-iphoneos.

Совет: вы можете создать сразу все необходимые папки, чтобы избежать проблем с разными конфигурациями. Это:
Release-iphoneos
Debug-iphoneos
Release-iphonesimulator
Debug-iphonesimulator

person tar500    schedule 14.01.2015