У меня возникла проблема с созданием архива приложений iOS из приложения. Приложение просто отлично и даже работает в симуляторе. Теперь я хотел сделать som ad hoc testing и не могу создать архив приложений iOS. Когда я нажимаю на Product → Archive, он генерирует общий архив xcode. Может кто-нибудь мне помочь. Следует отметить, что я уже создал архив приложений для iOS этого приложения. По какой-то причине он просто прекратил генерировать архив iOS. Большое спасибо.
Не удается создать архив приложений iOS в xcode
Ответ 1
Проверьте настройки сборки:
- Пропустить установку НЕТ для основной цели проекта.
- Пропустить установку - YES для целей инфраструктуры (подпроектов).
- При построении фаз для подпроектов заголовки копий должны быть в Project, а не Public (не применяются при построении статической библиотеки).
- Каталог установки в разделе Deployment действителен (например, приложения)
Ответ 2
Это может произойти, если вы добавили фреймворк/библиотеку... вам нужно изменить настройки Target- > Build этой библиотеки и установить для параметра "Пропустить установку" значение "Да". Когда вы повторно архивируете, XCode должен снова начать "Архив приложений iOS", а не "общий архив xcode".
Ответ 3
В дополнение к Пропустить установку в Да, и в случае, если вы открыли другой проект lib/framwork в своем проекте приложения, вам нужно переместить заголовки (если есть) из общедоступного в проекта в Фазе сборки/ Копировать заголовки.
Ответ 4
Я сделал следующее, чтобы заставить его работать для меня:
- У меня была статическая библиотека три20, я использовал cocoapods для включения файлов в основной проект
- выполнил пропущенную установку для всех других подпроектов/статических библиотек и переключил заголовки копий от публики к проекту, как указано выше.
- : в каждой библиотеке, которую использует ваш проект, перейдите на фазы сборки → Скопировать файлы и убедитесь, что destination изменен с
Absolute path
доproducts directory
. Примечание: см. Подсказку ниже, чтобы сузить область поиска, чтобы найти библиотеку, вызывающую эту ошибку.
и все!
подсказка:, чтобы получить представление о файлах с нарушением, которые заставляют ваш архив создавать файл архива, а не ipa:
- Выберите архив и нажмите кнопку "Распространять".
- Выберите параметр "Сохранить встроенные продукты".
- Нажмите "Далее" и "Сохранить".
- Просмотрите созданный каталог в Finder.
- В подкаталоге "library" будут указаны библиотеки, которые необходимо установить для параметра "Пропустить установку" на "Да".
- в некоторых случаях
usr/local/include
будет идентифицировать файлы заголовков злоумышленников, которые вам нужно переместить из Public в Project, или файлы, которые вы должны изменить, из каталога абсолютного пути в каталог (или даже файлы, которые вы забыли установить для пропустить установку, чтобы да флаг). но этот каталог (т.е. usr/local/include) изменяется в зависимости от вашей структуры каталога sublibrary. Во многих случаях вы увидите все файлы, перечисленные в разделе Скопировать файлы на шаге 3, приведенном выше. Если вы найдете их здесь, то у вас есть определенный ответ на причину вашей проблемы.
обновить до намека:, чтобы сделать жизнь еще более простой.. любые файлы появляются под шагом 4 в подсказке выше.. просто найдите его в глобальном поиске xcode.. и вы должны немедленно получить результаты для того, что вы хотите. Например, это было содержимое моей папки (следуя инструкциям выше):
Итак, я мог сказать, что это имеет какое-то отношение к библиотекам crypto и ssl. Ищите их:
заставил меня понять, что я забыл установить пропустить установку на "да".
Ответ 5
Если вы экспортируете архив, откройте его и посмотрите /urs/local/include
в продуктах try это предложение:
В каждом контейнере под
Packaging
,Private Headers Folder Path
иPublic Headers Folder Path
установлено значение/usr/local/include
. Если я их очищу, я получу действительный архив.
Работала для меня после обновления моего приложения React Native до 0.11.0
, Xcode 7
и CocoaPods 0.39.0.beta.4
.
Ответ 6
Если вы используете CocoaPods, а также WatchKit или Today Extension, в репозитории CocoaPods есть открытый issue, объясняющий, что может быть вашей проблемой.
решение для меня состояло в том, чтобы удалить фазу Copy Pod Resources
из целевых показателей расширения и сегодняшнего расширения WatchKit под Build Phases
. Проект был скомпилирован и архивирован, как и ожидалось, как только я это сделал.
Надеюсь, это поможет кому-то, это застало меня в тупик целый день!
Ответ 7
Если какой-либо из вышеперечисленных ответов не работает, ваша проблема, вероятно, связана с cocoaPods
. Последнее обновление 0.38.1
перепутало меня, но затем я понизился до 0.37.1
, и все вернулось к нормальному состоянию. Используя Xcode 6.3.1
Редактирование позже: до 0.38.2
также исправит это. Подробнее о том, что вызвало эту проблему здесь: Cocoapods 0.38.1 не удалось создать действительный архив
Ответ 8
Хотя я использую Xcode5, и то, что его сортировало для меня, редактировало схему сборки. Пробовав все вышеприведенные предложения, которые были применимы, в моем случае не помогло.
У меня было две цели, скажем, "App" и "App FREE". Мои проблемы с общим архивом произошли, когда я пытался архивировать бесплатную версию, которую я добавил после "нормальной" версии приложения. В моем случае, когда я выбрал его схему на панели инструментов и выбрал Edit Scheme... Я видел, что в разделе Build было две цели: App и App FREE.
Я снял флажки для всех столбцов для приложения, оставив только столбцы, свободные от приложения FREE, и нажал ОК. В следующий раз, когда я выбрал Product > Archive, я получил бесплатное приложение вместо Generic Archive.:)
Ответ 9
Если у вас есть только один проект, возможно, это решение было бы полезно. Эта проблема возникла, когда я дублировал цель. В результате у меня было две цели, построенные параллельно. Это вызвало проблему. Был создан общий архив IOS.
Чтобы включить параллельное построение, перейдите в
- Управление схемами,
- Изменить схему,
- Сборка,
- Удалите другую цель.
Ответ 10
У меня была эта проблема после обновления до iOS 9 и Xcode 7. Решение Josh H работало для меня:
В каждом контейнере, в разделе "Упаковка", "Папка папки личных заголовков" и "Публичная" Папка для папок заголовков установлена в/usr/local/include. Если я очищу их, тогда Я получаю действительный архив.
Я также сделал post install script, чтобы мой подфайл сделал это автоматически!
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['PUBLIC_HEADERS_FOLDER_PATH'] = [""];
config.build_settings['PRIVATE_HEADERS_FOLDER_PATH'] = [""];
end
end
end
Просто добавьте его в нижнюю часть вашего подфайла и запустите pod install
Ответ 11
У меня есть несколько проектов в моей рабочей области (GTL, Pods и мой основной проект), и это помогло мне:
Выберите проект, там будет 2 типа, там Проект и там Цели.
Для проектов, которые не являются вашими главными, как GTL
или PODS
:
Проекты
Skip Install = NO
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""
Цель:
Skip Install = YES
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""
Для основного проекта (который обычно называется так же, как имя вашего продукта):
Проекты
Skip Install = NO
Installation Directory = /Applications
Цель:
Skip Install = NO
Installation Directory = /Applications
Проверьте цель развертывания ios для каждого проекта и целей, чтобы убедиться, что они все одинаковы.
Ответ 12
У меня была эта проблема. В моем случае это было вызвано тем, что цель приложения для Mac была зависимой от приложения iOS.
Причина, по которой это было настроено, заключалась в том, что приложение Mac было инструментом, предназначенным для создания некоторых данных для приложения iOS, которое затем было включено в комплект.
Мне пришлось удалить эту зависимость и создать инструмент отдельно, прежде чем создавать сборку самого приложения iOS.
Ответ 13
В моем сценарии я получал ошибочный "Общий архив" только после того, как начал использовать код Swift в моем основном проекте Objective-C. После многократного устранения неполадок и изучения архивного файла, который Xcode выплевывал, я заметил, что папка SwiftSupport
(с необходимыми dylib для Swift runtime) была в другом месте в моем архиве, чем в ванильном новом Swift архив проекта проекта.
Я нашел настройку сборки Installation Directory
и заметил, что в моем проекте был установлен пользовательский путь. Я просто удалил его (установив его в свое общее значение /Applications
), а следующий Build → Archive, который я сделал, работал должным образом и дал мне правильный архив приложений для iOS.
TL; DR: Удостоверьтесь, что для параметра Installation Directory
build установлено значение по умолчанию /Applications
при включении кода Swift в ваше приложение, особенно если вы начинаете с более старого файла проекта, который может иметь некоторые неожиданные устаревшие настройки сборки.
Ответ 14
Оставляя это здесь, чтобы спасти других от одного и того же путешествия.
Я обнаружил, что мне нужно было удалить ту же фазу сборки Copy Pod Resources из целевой статической библиотеки в моей рабочей области.
Ответ 15
Дополнение к ответу Alex L.
Пункт 3. Изменение "Настройки сборки" → "Путь к папке общего заголовка" в "include/xxx" также работает.
Ответ 16
Если ничего из этого не помогло вам... после долгого времени.......
Я удалил значение в Info.plist для версии Bundle, потому что я был достаточно доволен только Bundle Version Short 1.0. Bad. Не делайте этого.
* Примечание. Я действительно сделал это, отредактировав его в пользовательском интерфейсе справа, не понимая, что он поместил бы пустой ключ в файл Info.plist. Я думаю, это делает его недействительным. Мой пакет появился как другие элементы во время архивации и не имел иконки, и я не мог загрузить нигде.
Это сводится к недопустимым значениям в Info.plist. Если он не является допустимым архивом, попробуйте разархивировать старый архив и сбросить/перезаписать текущий файл и посмотреть, исправляет ли он его при перестройке архива.
Ответ 17
-
Перейдите в раздел "Настройки сборки" и добавьте
yourAppName/Resources/dist.plist к Правам на подпись кода
-
Нажмите cmd + B с устройством iOS или Real Device, выбранным как объект сборки
-
Когда закончите → перейдите в папку "Продукты" и щелкните правой кнопкой мыши по адресу yourAppName.app
-
Выберите "Показать в Finder"
-
Создайте папку с именем Полезная нагрузка (capital "P" )
-
Скопировать yourAppName в папку Payload
-
Создайте zip из папки Payload
-
Переименуйте zip в yourAppName.ipa
DONE
Ответ 18
После всего, что угодно:
- Очистить, Архив
- удалить DerivedData, Архив
- перезапустить Xcode (я использовал XCode7), Архив
- комбинации выше...
Затем я заметил, что мой загрузочный раздел был "низким на свободном диске"... около 1 ГБ или около того. Я перезагрузился, а затем получил около 18 ГБ бесплатно.
Затем открыли Xcode и проект, выполнили Archive... и удивительно (спустя час после попытки создания архива) я наконец получил не общий архив.
Не знаю, была ли проблема с свободным диском, которая исправила его или перезагрузила macOS, которая его исправила, но это сработало для меня.
Ответ 19
Если у вас есть файлы .xcodeproj в Project > Targetets > Build Phases > целевые зависимости, удалите их и создайте ipa. Меня устраивает. Приветствия
Здесь вы можете получить ответ: xcode создает общий архив xcode вместо архива приложений iOS
Ответ 20
В моем случае мне пришлось перемещать как FMDB, так и BlocksKit в статические библиотеки. Раньше они строились как подпроекты. Помните, что вы можете использовать lipo для создания универсальных библиотек. При создании конечных продуктов код симулятора будет автоматически отключен.
Ответ 21
Другая возможная причина для этого - иметь ссылки в "Зависимости целей" к проектам для другой платформы. В моем конкретном случае я работал над проектом, который разделяет код для OSX и iOS. В одной из целей iOS я случайно добавил цель OSX в качестве зависимости.
Ответ 22
Чтобы быть основательным, я отправляю свое решение.
Я столкнулся с одной и той же проблемой, пытаясь построить Архив проекта iOS в Xcode 5.1.1 (5B1008). Ни одно из вышеперечисленных предложений не устранило проблему, и большинство из них были неактуальны (я не добавил никаких рамок и не имел никаких публичных записей в разделе "Копировать заголовки" моих фаз сборки).
В моем случае исправление проблемы состояло в простом закрытии моего проекта, удалении любых архивов, которые я ранее сделал, в разделе "Настройки" > "Учетные записи", удалении моей учетной записи разработчика, выходе из Xcode, повторной перезагрузке, повторной добавлении моей учетной записи разработчика, начиная Архивный процесс снова. Это немедленно устранило мою проблему.
Ответ 23
Еще одно решение, так как все вышеизложенное не помогло мне...
Изменен User Header Search Paths
(я полагаю, что Header Search Paths
будет работать так же элегантно) до "$(BUILT_PRODUCTS_DIR)/BlocksKit"
.
Фон
В BlockKit разработчики структурировали заголовки в основном проекте иначе, чем структура при развертывании. Таким образом, вы не можете ссылаться на заголовки в проекте и должны ссылаться на заголовки, скопированные в каталог сборки.
Ответ 24
Как это сработало для меня (Xcode 5) у меня было 2 цели, и когда я редактировал схему, на левой панели редактора схемы вы увидите [BUILD, RUN, TEST, PROFILE XXX.APP, ANALYZE, ARCHIVE] из панели BUILD, вы увидите цели вашего проекта, перечисленные в списке. В крайнем правом углу вы увидите выбор ARCHIVE, убедитесь, что для архивирования выбрано только одна цель.
У меня было 2 из моих целей, выбранных в моем проекте, я проверил только цель, которую я хотел в продукте, и это сработало!
Ответ 25
Я решил эту ошибку с помощью открытия только проекта приложения в XCode, т.е. не открывать рабочее пространство, включающее приложение и другие проекты/библиотеки/фреймворки.
Имея 2 отдельных проекта, фреймворк или общую библиотеку и приложение iOS, мне пришлось открыть 2 разных окна XCode, каждый из которых открывал файл .xcodeproj вместо обычного .xcworkspace, чтобы предварительно создать каждый.
Как хороший побочный эффект, XCode больше не перестраивает каждую цель каждого проекта после того, как я делаю "Чистый", что приводит к сокращению времени сборки.
Справочная информация. Я создаю SDK с открытым исходным кодом и приложение для демонстрации iOS. Я открыл оба в одном рабочем пространстве. Установка "Пропустить установку" на "Да" по целям SDK не позволит никому создавать архив, поскольку он будет пустым, так что это не вариант. Использование Project вместо заголовков Public приведет к тому, что в архиве не будут отсутствовать файлы заголовков, которые должны быть распространены, поэтому это тоже не вариант.
Ответ 26
Потому что я работал в рабочей области. Проект архивирован, но не будет отображаться в окне органайзера. Я закрыл рабочее пространство и открыл проект сам по себе. Архивированный открыт в организаторе... надеюсь, что это поможет.
Ответ 27
В моем случае у меня был пользовательский script, который копировал временные файлы в:
${TARGET_BUILD_DIR}/myTempDir
Это означало, что после изучения архива для проверки его содержимого я нашел рядом с файлом .app файл myTempDir. Как только я изменил script, чтобы сохранить в другом месте, все было отсортировано.
Ответ 28
Попробуйте установить заголовки $(PROJECT_NAME) в Framework projet Public Headers Path. Вы должны перейти к созданию настроек Библиотечного объекта, а затем изменить путь к папке Public Headers как заголовок $(PROJECT_NAME).
Ответ 29
При использовании Xcode 7 с cocoapods v.0.38.2. Попробуйте удалить copy pod resources
из вашей сегодняшней цели назначения.
Ответ 30
Я столкнулся с этой проблемой после добавления инструмента командной строки OS X в мой проект приложения iOS, а для параметра "Пропустить установку" по умолчанию для целевого инструмента инструмента командной строки было установлено значение "НЕТ". Так как вы, очевидно, не можете установить двоичный файл OS X на устройство iOS, архивирование по умолчанию не соответствует общему архиву Xcode. Установка Skip Install для YES для этой цели устранила проблему.