Xcode 4 & three20 & создать архив IPA: нет такого файла или каталога - PullRequest
14 голосов
/ 10 марта 2011

В Xcode 3.2.5 я использую «Build And Archive» для создания файла IPA без каких-либо проблем. Как я могу сделать это в Xcode 4? Я думаю, что мне нужно использовать «Product -> Archive», но я получаю более 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/"

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

Ответы [ 12 ]

16 голосов
/ 25 апреля 2011

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

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

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

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

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

13 голосов
/ 11 марта 2011

Конфигурация, которая работает как для сборки, так и для архива в 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"

ЦСИ / скрипты / 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
5 голосов
/ 19 мая 2011

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

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

Three20/Three20+Additions.h: No such file or directory
4 голосов
/ 10 марта 2011

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

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

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

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

2 голосов
/ 14 ноября 2011

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

2 голосов
/ 11 марта 2011

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

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

1 голос
/ 20 декабря 2011

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

three20/Build/Products/three20

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

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

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

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

Тогда все будет хорошо!

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

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

0 голосов
/ 27 февраля 2013

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

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

и все!

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

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

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

...