Xcode 4 & three20 & create IPA archive: Нет такого файла или каталога
В Xcode 3.2.5 я использую "Build And Archive" для создания файла IPA без каких-либо проблем.
Как я могу это сделать в Xcode 4? Я думаю, что мне нужно использовать "Продукт → Архив", но я получаю более 100 сообщений об ошибках в трехмерной структуре. Большинство из них: "Нет такого файла или каталога". ( "Продукт → сборка для → сборка для архивирования" ). Нет ошибок.)
Например, это первое сообщение об ошибке:
../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/"
Что я могу сделать?
Ответы
Ответ 1
Документация Three20 не решила эту проблему для меня (к сожалению...). В конечном счете то, что сработало для меня, было комбинацией нескольких решений. Существует разница между "Архив" и "Создать для архивации" (или сборка для запуска), и с помощью этих шагов у меня есть оба из них, которые не работают без проблем сборки:
Вам нужно будет изменить сценарии как Манни, упомянутые, установите флаг "Пропустить установку" для каждого проекта Three20, связанного с вашим деревом проектов, и добавьте следующие пути к ваш проект "Пути поиска заголовков":
"$ (BUILT_PRODUCTS_DIR)/../Three20"
"$ (BUILT_PRODUCTS_DIR)/../../Three20"
это поможет вам работать с опцией Build. Если вы хотите выполнить действие архива, вам также нужно будет изменить предпочтение "Местоположения" в Xcode как выше, чем указано выше.
Я задокументировал эти шаги в этом post.
Ответ 2
Конфигурация, которая работает как для сборки, так и для архива в Xcode4.
https://github.com/pazustep/three20/commit/4a9aad4eb90a6962dd729d245f9293a7cc0d7f36
SRC/общая/Конфигурация/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/скрипты/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
Ответ 3
Еще одна вещь, которая может отбросить процесс сборки, - это имя схемы, содержащее пробелы.
XCode не остановит вас от этого, но если вы используете для своей схемы такое имя, как "Ad Hoc", вы получите те же ошибки:
Three20/Three20+Additions.h: No such file or directory
Ответ 4
Я изучаю это прямо сейчас и, надеюсь, соберет подходящий патч, который работает как в Xcode 3.2. #, так и в Xcode 4.
Изменить:
Таким образом, самый простой способ получить старые проекты Xcode 3.2 для работы с Xcode 4 - это сделать следующее:
- Перейдите в настройки Xcode 4 (Cmd +,).
- Выберите вкладку "Местоположения".
- Где он говорит "Построить местоположения", выберите раскрывающийся список и выберите "Разместить сборку продуктов в местах, указанных целями"
Я напишу статью о tr20.info, в которой подробно расскажу об этом.
Ответ 5
three20.info: Руководство по переходу Xcode 4
http://three20.info/article/2011-03-10-Xcode4-Support
Это руководство было составлено команда Three20, чтобы помочь вам перенести свои приложения на Xcode 4 успешно.
Ответ 6
Убедитесь, что имя вашей схемы не содержит пробелов. Это также приводит к ошибке сборки "Файл не найден".
Ответ 7
Мне нужно было перейти в Project Info > Build (вкладка) и добавить в путь поиска заголовка следующее:
three20/Build/Products/three20
Этот путь может быть специфичным для моего проекта, но там он на тот случай, если он работает для кого-то другого.
Ответ 8
Откройте файл /src/common/Configurations/Paths.xcconfig
старый код:
HEADER_SEARCH_PATHS = $(STDLIB_HEADERS) "$(CONFIGURATION_BUILD_DIR)/../three20"
новый код:
HEADER_SEARCH_PATHS = $(STDLIB_HEADERS) "$(CONFIGURATION_BUILD_DIR)/../../three20"
Итак, у меня все еще есть 7 ошибок, но я могу создать архив...
Ответ 9
Группы Google: Xcode 4, Three20 и Project → Архив
http://groups.google.com/group/three20/browse_frm/thread/cde36b7dab178bad
Ответ 10
Ответ Амира Наора идеален. Я проверил его ответ на xcode 4.2, и он сработал. Я пропустил шаг "Вам нужно будет изменить сценарии, как упоминалось выше в Manni", поэтому я продолжал получать аналогичную ошибку, указанную в исходном вопросе. надеюсь, что вы не совершите ту же ошибку. также как и в xcode 4.2, шаг "тогда вам также нужно будет изменить предпочтения" Местоположения "в Xcode как выше, чем указано выше". больше не требуется.
Ответ 11
Я сделал следующее, чтобы заставить его работать для меня:
- для статической библиотеки три20, я использовал cocoapods, чтобы включить файлы в основной проект.. он просто избавился от всех Тревога три20 давала мне (и они много..) btw я попытался заменить tr20 Nimbus.., но Nimbus не хватало некоторых из функции, которые мой проект использовал три20 для.. так что Нимбус не помог.
- установить пропустить установку до да в соответствии с настройками сборки для всех других подпроектов/статических библиотек и переключить заголовки копий из публики в проект в фазах сборки
- : в подбиблиотеках. В фазах сборки я гарантировал, что назначение копировать файлы было изменено с
Absolute path
на products directory
.
и все!
подсказка:, чтобы получить представление о файлах с нарушением, которые заставляют ваш архив создавать файл архива, а не ipa:
- Выберите архив и нажмите кнопку "Распространять".
- Выберите параметр "Сохранить встроенные продукты".
- Нажмите "Далее" и "Сохранить".
- Просмотрите созданный каталог в Finder.
- В подкаталоге "library" будут указаны библиотеки, которые необходимо установить для параметра "Пропустить установку" на "Да".
- в некоторых случаях
usr/local/include
будет идентифицировать файлы заголовков преступника, которые вам нужно переместить из Public в Project, или файлы, которые вы должны изменить, от абсолютного пути к каталогу продуктов. но этот каталог (например, usr/local/include) изменяется в зависимости от структуры вашей подкаталога
Ответ 12
Если вы хотите быстро обходной путь, просто выполните следующие простые шаги:
1. перейдите к указанному пути /Users/[USERNAME]/Library/Developer/Xcode/DerivedData/[PROJECTNAME]-blabla/ArchiveIntermediates/[PROJECTNAME]/BuildProductsPath/
(он будет в вашем сообщении об ошибке). Это должно быть подстрока до /..
в этом пути.
2. создайте папку Release-iphoneos
(или Debug-iphoneos
если есть)
Тогда все будет хорошо построено!
Three20 script предполагает, что у вас уже есть эта папка, но когда вы строите первый раз, никто не существует. Вот почему вам нужно исправлять "Build" и "Archive" отдельно: действие "Build" обычно использует папку Debug-iphoneos
, а действие "Archive" использует Release-iphoneos
.
Совет: вы можете сразу создать все необходимые папки, чтобы избежать проблем с различными конфигурациями. Это:
Release-iphoneos
Debug-iphoneos
Release-iphonesimulator
Debug-iphonesimulator