Не удается создать архив приложений iOS в xcode

У меня проблема с созданием архива приложений iOS из приложения. Приложение компилируется и даже работает в симуляторе. Теперь я хотел сделать специальное тестирование som и не могу создать архив приложений iOS. Когда я нажимаю на продукт - > архив, он генерирует общий архив xcode. Кто-нибудь может мне помочь. Я должен упомянуть, что я уже создал архив приложений iOS этого приложения. По какой-то причине он просто перестал генерировать архив iOS. Большое спасибо.

30 ответов


Проверьте Настройки Сборки:

  1. пропустить установку нет для основной цели проекта
  2. пропустить установку-да для целей framework (подпроектов)
  3. на этапах сборки для подпроектов заголовки копий должны быть в проекте, а не общедоступными (не применяется при создании статической библиотеки)
  4. каталог установки при развертывании действителен (например, / Applications)

Это может произойти, если вы добавили фреймворк/библиотека ... вам нужно отредактировать целевые - > настройки сборки этой библиотеки и установить параметр "пропустить установку" в "Да". Когда вы повторно архивируете, XCode должен снова начать создавать "архив приложений iOS", а не "общий архив xcode".


помимо Пропустить Установите to да и если вы открыли другой проект lib / framwork в своем проекте приложения, вам нужно переместить заголовки (если они есть) из общественные to проект на Построить Участок / Скопировать Заголовки.

build phase of your lib/framwork target


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

  1. у меня была статическая библиотека three20, я использовал cocoapods включить файлы в основной проект
  2. последовал за установкой skip для всех других подпроектов / статических библиотек и переключил заголовки копий с public на project, как указано выше
  3. самое главное: в каждой библиотеке ваш проект использует go to собрать фаз -> копировать файлы и обеспечить это назначения изменилась с Absolute path до products directory. Примечание: см. подсказку ниже, чтобы сузить поиск, чтобы найти библиотеку, вызывающую эту ошибку.

и это все!

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

  1. выберите архив и нажмите кнопку распространять.
  2. выберите "Сохранить встроенные продукты" выбор.
  3. нажмите Далее и сохранить.
  4. перейдите в созданный каталог в Finder.
  5. подкаталог "библиотеки" определит библиотеки, которые вам нужно установить для пропуска установки да.
  6. в некоторых случаях usr/local/include определит файлы заголовков виновника, которые вам нужно переместить из Public в Project или файлы, которые вы должны изменить с абсолютного пути в каталог products (или даже файлы, которые вы забыли установить флаг пропустить установку в yes). но это каталог (т. е. usr/local / include) варьируется в зависимости от вашей структуры подлиберальных каталогов. Во многих случаях.. вы увидите все файлы, перечисленные в разделе Копировать Файлы в шаге 3 выше перечисленных здесь. Если вы найдете их здесь, то у вас есть однозначный ответ на причину вашей проблемы.

обновление до подсказки: чтобы сделать жизнь еще проще.. любые файлы, отображаемые на шаге 4 в подсказка выше.. просто найдите в глобальный поиск в Xcode.. и вы должны получить немедленные результаты, что вы хотите.. например, это было содержимое моей папки (следуя инструкциям в подсказке выше):

enter image description here

поэтому я мог бы сказать, что это имеет какое-то отношение к crypto и протокол SSL библиотеки.. в поисках их:

enter image description here

заставил меня понять, что я забыл установить skip install в yes.


если вы экспортируете архив, откройте его и посмотрите /urs/local/include на продукты попробовать предложение:

в каждой капсуле, под Packaging, Private Headers Folder Path и Public Headers Folder Path установлено значение /usr/local/include. Если я очищу их, то получу действительный архив.

enter image description here

работал для меня после обновления моего родного приложения React до 0.11.0, Xcode 7 и CocoaPods 0.39.0.beta.4.


Если вы используете CocoaPods, а также WatchKit или расширение Today, есть open вопрос на репо CocoaPods объясняя, что ваша проблема может быть.

на решение для меня было убрать Copy Pod Resources фаза от расширения WatchKit и сегодня цели расширения под Build Phases. Проект скомпилирован и архивирован, как и ожидалось, как только я это сделал.

надеюсь, это поможет кому-то, это было меня в тупике в течение всего дня!


если какой-либо из вышеперечисленных ответов не работает, ваша проблема, вероятно, с cocoaPods. Последнее обновление 0.38.1 испортил мне все, но потом я понизился до 0.37.1 и все нормализовалось. Используя Xcode 6.3.1

позже редактировать: обновление 0.38.2 также исправит это. Подробнее о том, что вызвало эту проблему здесь:Cocoapods 0.38.1 не удалось создать действующую архиве


хотя я использую Xcode5 и то, что сортировало его для меня, редактировало схему сборки-попытка всех вышеуказанных предложений, которые были применимы, не помогла в моем случае.

У меня было две цели, скажем, "App"и" App FREE". Мои проблемы с общим архивом произошли, когда я пытался архивировать бесплатную версию, которую я добавил после "нормальной" версии приложения. В моем случае, когда я выбрал свою схему на панели инструментов и выбрал Edit Scheme ... Я видел, что секция сборки имела два цели, а именно App и App бесплатно.

Я снял все столбцы для приложения, оставив только столбцы App FREE, и нажал OK. В следующий раз, когда я выбрал продукт > архив, я получил бесплатное приложение вместо общего архива. :)


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

включить параллельно строила получают

  • управление схемы
  • схема правка
  • телосложения,
  • удалить другую цель.

у меня была эта проблема после обновления до iOS 9 и Xcode 7. Решение Джоша H сработало для меня:

в каждом стручке, под упаковкой, частный путь папки заголовков и публика Путь к папке заголовков установлен в /usr / local / include. Если я освобожу их тогда Я получаю действительный архив.

Я также сделал скрипт post install для моего Подфайла, чтобы сделать это автоматически!

    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


у меня есть несколько проектов в моей рабочей области (GTL, стручки и мой основной проект), и это то, что сработало для меня:

выберите проект, там будет 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 для каждого проекта и цели, чтобы убедиться, что они все одинаковые.


У меня была эта проблема. В моем случае это было вызвано сохранением цели приложения Mac в качестве зависимости от приложения iOS.

причина, по которой он был настроен так, заключалась в том, что приложение Mac было инструментом, используемым для генерации некоторых данных для приложения iOS, которое затем было включено в комплект.

Мне пришлось удалить эту зависимость и построить инструмент отдельно, прежде чем делать сборку самого приложения iOS.


в моем сценарии я получал ошибочный "общий архив" только после того, как я начал включать Swift-код в свой преимущественно Objective-C. После множества устранения неполадок и изучения файла архива, который выплевывал Xcode, я заметил, что SwiftSupport папка (с необходимыми dylibs для выполнения Swift)была в другом месте в моем архиве, чем из ванильного совершенно нового архива приложений Swift project.

нашел Installation Directory настройка сборки и заметил, что это было установите пользовательский путь в моем проекте. Я просто удалил его (установив его общее значение /Applications) и следующий Build - > Archive я работал, как ожидалось, и дал мне правильный архив приложений iOS.

TL; DR: убедитесь, что ваш Installation Directory параметр сборки имеет значение по умолчанию /Applications при включении Swift-кода в приложение, особенно если вы начинаете с более старого файла проекта, который может иметь некоторые неожиданные устаревшие настройки сборки.


дополнение к ответу Алекса л.

пункт 3. Изменение "настройки сборки" - > "путь к папке общего заголовка" на "include / xxx" также работает.


оставив это здесь, чтобы спасти других от той же дороге.

Я обнаружил, что мне нужно удалить ту же фазу сборки ресурсов модуля копирования из статической библиотеки в моей рабочей области.


  1. перейдите к настройкам сборки и добавьте

    yourAppName / Resources / dist.файл plist до Право Подписи Кода

  2. пресс cmd + B С устройство iOS или Реальное Устройство выбран в качестве цели

  3. когда закончите - > прокрутите до папки "Products" и щелкните правой кнопкой мыши на yourAppName.app

  4. выберите " Показать в Finder"

  5. создайте папку с именем полезная нагрузка ("П")

  6. скопировать yourAppName в папку полезной нагрузки

  7. создать zip из папки полезной нагрузки

  8. переименовать zip to yourAppName.ИПА

сделал


Если ни один из вышеперечисленных не помог вам...спустя много времени.......

Я удалил значение в Info.plist для версии пакета потому что я был достаточно доволен только версией Bundle Short 1.0. плохо. Не делай этого.

*примечание. Я действительно сделал это, отредактировав его в пользовательском интерфейсе справа, не понимая, что он поместит пустой ключ в информацию.plist файл. Думаю, это делает его недействительным. Мой пакет появился как другие предметы во время архивирования и не имел icon, и я не мог загрузить никуда.

Это сводится к недопустимым значениям в информации.файл plist. Если это недействительный архив, попробуйте распаковать старый архив и вставить / перезаписать текущий и посмотреть, исправляет ли он его при перестройке архива.


попробовав почти все:

  • Чистые, Архив
  • удалить DerivedData, архив
  • перезапустить Xcode (я использовал XCode7), архив
  • сочетания вышеуказанного...

затем я заметил, что мой загрузочный раздел был "низким на свободном дисковом пространстве"... около 1GB или около того. Я перезагрузился, а затем получил 18gb бесплатно.

затем открыл Xcode и проект, выполнил архив... и удивительно (после часа попыток построить архив) я, наконец, получил не общий архив.

Не знаю, если его свободный диск проблема, которая исправила его или перезагрузка macOS, который исправил его, но он работал для меня.


Если у вас возникли .файлы xcodeproj в Project>Targets>Build Phases>target dependencies удалите его оттуда, а затем создайте свой ipa. Это работает на меня. Ура!--1-->

вы можете получить ответ здесь : xcode создает общий архив xcode вместо архива приложений iOS


в моем случае мне пришлось переместить FMDB и BlocksKit в статические библиотеки. Ранее они строились как подпроекты. Помните, что вы можете использовать lipo для создания универсальных библиотек. При создании конечных продуктов код симулятора будет автоматически удален.


другой возможной причиной этого является наличие ссылок в "целевых зависимостях" на проекты для другой платформы. В моем конкретном случае я работал над проектом, который разделяет код для OSX и iOS. В одной из целей iOS я случайно добавил цель OSX в качестве зависимости.


чтобы быть тщательным, я публикую свое решение.

Я испытал точно такую же проблему, пытаясь создать архив проекта iOS в Xcode 5.1.1 (5B1008). Ни одно из вышеперечисленных предложений не исправило проблему, и большинство из них не имели значения (я не добавил никаких фреймворков и не имел никаких открытых записей в разделе "копировать заголовки" моих этапов сборки).

в моем случае исправление проблемы состояло из простого закрытия моего проекта, удаления любых архивов что я ранее сделал, перейдя в Настройки > Учетные записи, удалив учетную запись разработчика, выйдя из Xcode, перезапустив, повторно добавив учетную запись разработчика, снова запустив процесс архивирования. Это немедленно исправило мою проблему.


еще одно решение, так как все вышеперечисленное не сработало для меня...

изменил User Header Search Paths (Я полагаю,Header Search Paths будет работать так же элегантно) до "$(BUILT_PRODUCTS_DIR)/BlocksKit".

фон:

в BlockKit разработчики структурировали заголовки в основном проекте иначе, чем структура при развертывании. Таким образом, вы не можете ссылаться на заголовки в проекте и должны ссылаться на заголовки, скопированные в каталог сборки.


Как это работало для меня в (Xcode 5) у меня было 2 цели, и когда я редактировал схему, на левой панели редактора схемы вы увидите [BUILD, RUN, TEST, PROFILE XXX.APP, ANALYZE, ARCHIVE] на панели "сборка" вы увидите цели проекта, перечисленные в списке. В дальнем правом конце вы увидите выбор архива, убедитесь, что для архивирования выбран только один целевой объект.

У меня было 2 из моих целей, выбранных в моем проекте, я проверил только цель, которую я хотел в продукт, и это сработало!


Я решил эту ошибку путем открытие исключительно проекта приложения в XCode, т. е. Не открывать рабочее пространство включая приложение и другие проекты/библиотеки/фреймворки.

имея 2 отдельных проекта, фреймворк или общую библиотеку и приложение iOS, мне пришлось открыть 2 разных окна XCode, каждый из которых непосредственно открыл .xcodeproj файл вместо .xcworkspace все, для того, чтобы preperly строить каждый.

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

Справочная информация: Я создаю SDK с открытым исходным кодом и демонстрационное приложение iOS. Я открыл их в одном рабочем пространстве. Настройка пропустить установите to да в целях SDK никто не сможет создать архив, так как он будет пустым, поэтому это не вариант. Используя проект вместо общественные заголовки приведут к отсутствию в архиве файлов заголовков, которые должны быть распределены, поэтому это тоже не вариант.


потому что я работал в рабочей области. Проект архивируется, но не будет отображаться в окне организатора. Я закрыл рабочее пространство и открыл проект сам. Архив был открыт в организаторе ... надеюсь, это поможет.


в моем случае, у меня был специальный скрипт, который копировал некоторые временные файлы в:

${TARGET_BUILD_DIR}/myTempDir

это означало, что, исследовав архив, чтобы проверить его содержимое, я нашел рядом с ним .файл приложения в папке myTempDir. Как только я изменил скрипт, чтобы сохранить его в другом месте, все было отсортировано.


попробуйте установить заголовки $(PROJECT_NAME) в пути к папке общих заголовков Framework projet. Вы должны перейти к настройкам сборки целевой библиотеки, а затем отредактировать путь к папке общих заголовков как заголовки $(PROJECT_NAME).


при использовании Xcode 7 С cocoapods V. 0.38.2. Попробуйте удалить copy pod resources от вашей цели расширения сегодня.

enter image description here


Я столкнулся с этой проблемой после добавления инструмента командной строки OS X в проект моего приложения iOS, и пропустить установку было установлено значение NO по умолчанию для цели инструмента командной строки. Поскольку вы, очевидно, не можете установить двоичный файл OS X на устройство iOS, архивация по умолчанию выполняется в общий архив Xcode. Установка Skip Install в YES для этой цели исправила проблему.