it-swarm.com.ru

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

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

165
Filip Majernik

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

  1. Пропустить установку НЕТ для основной цели проекта
  2. Пропустить установку - ДА для целевых структур (подпроектов)
  3. На этапах сборки для подпроектов, заголовки копирования должны быть в Project, а не в Public (не применяется при создании статической библиотеки)
  4. Каталог установки в разделе Развертывание действителен (/ Приложения, например)
298
Alex L

Это может произойти, если вы добавили платформу/библиотеку ... вам нужно отредактировать Target-> Build Settings этой библиотеки и установить для параметра «Пропустить установку» значение «Да». Когда вы переархивируете, XCode должен снова начать создавать «Архив приложений iOS», а не «общий архив xcode».

74
delany

В дополнение к Пропустить установку к Да и в случае, если вы открыли другой проект lib/framwork в своем проекте приложения, вы должны переместить заголовки (если есть) из public в project в Фаза сборки / Копировать заголовки .

build phase of your lib/framwork target

61
ebtokyo

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

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

и это было все! 

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

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

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

enter image description here

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

enter image description here

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

43
abbood

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

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

 enter image description here

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

20
Josh Habdas

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

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

Надеюсь, это поможет кому-то, это поставило меня в тупик на целый день!

12
rebello95

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

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

10
Ehmad Zubair

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

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

Я снял флажки для всех столбцов для приложения, оставив только проверенные столбцы App FREE, и нажал кнопку ОК. В следующий раз, когда я выбрал «Продукт»> «Архив», я получил БЕСПЛАТНОЕ приложение вместо общего архива. :)

7
Stephen Watson

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

Чтобы выключить параллель, перейдите к 

  • Управлять схемами, 
  • Правка схему, 
  • Сборка, 
  • Удалить другую цель.
6
roman777

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

5
Bryan P

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

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

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

    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

Просто добавьте его в конец вашего Podfile и запустите pod install

5
wyzkid207

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

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

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

4
Tomas Andrle

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

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

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

4
Ryan Dorshorst

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

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

3
Michael

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

Пункт 3. Измените «Build Settings» -> «Public Folder Folder Path» на «include/xxx», также работает.

2
CopperCash

Если ничего из вышеперечисленного не помогло вам ... через много времени .......

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

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

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

2
ohc192
  1. Зайдите в настройки сборки и добавьте 

    yourAppName/Resources/dist.plist to Права подписи кода

  2. Нажмите cmd + B с устройство iOS или a реальное устройство выбранное в качестве цели сборки

  3. Когда закончите -> перейдите в папку «Продукты» и щелкните правой кнопкой мыши на вашем AppName.app

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

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

  6. Копировать yourAppName в вашу папку полезных данных

  7. Создайте Zip из вашей полезной папки

  8. Переименовать Zip to yourAppName.ipa

СДЕЛАННЫЙ

1
LoVo

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

  • Чистый, Архив
  • удалить DerivedData, Архив
  • перезапустите XCode (я использовал XCode7), Архив
  • комбинации выше ...

Затем я заметил, что в моем загрузочном разделе «недостаточно свободного места»… около 1 ГБ или около того…. Я перезагрузился, затем получил около 18 ГБ.

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

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

1
Peter Li

Если у вас есть файлы .xcodeproj в Project> Targets> Build Phases> target target, удалите их оттуда и затем соберите свой ipa. Меня устраивает. ура

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

1
Kalpesh Panchasara

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

${TARGET_BUILD_DIR}/myTempDir

Это означало, что после изучения архива с целью проверки его содержимого я обнаружил рядом с файлом .app папку myTempDir. Однажды я изменил скрипт, чтобы сохранить в другом месте вещи были отсортированы.

0
Eli

В моем случае ни один из 30+ ответов не работал. У нас в качестве местоположения для архивов («Настройки» -> «Местоположения») был задан произвольный путь, указывающий на наш сервер (Windows Server 2008, если это имеет какое-то значение). 

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

Теперь нам нужно перенести файлы .xcarchive на сервер вручную для хранения, но, по крайней мере, не возникает проблем с общими архивами.

0
alera729

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

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

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

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

0
ofavre

В моем случае у меня было несколько файлов в разделе «Копировать файлы». Я просто удалил их, а затем все работало нормально, и я достиг Архив приложений для iOS. Перейдите в Фазы сборки-> Копировать файлы и удалите файлы. Надеюсь, что это решит вашу проблему. :)

0
S_J

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

Перейдите к пути Расположение архива (доступно в Xcode -> Настройки -> Места -> Путь к архиву) и удалите папки проблемных дней!

Будь ты проклят, Apple!

0
Dhilip

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

0
Pierre-Yves Guillemet

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

0
miguelSantirso

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

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

Фон :

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

0
Mazyod

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

 enter image description here

0
CoderPug

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

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

0
dexyjones

В моем случае у меня было две цели (Target1 и Target2), и первая из них могла быть заархивирована в «iOS App», а вторая - только в «Other Items». Поэтому для меня более быстрым способом решения этой проблемы была замена моего Target2 на копию Target1 с помощью следующих шагов:
1. Переименуйте Target2 в Target2_old
2. Сделайте копию Target1 и переименуйте ее в Target2 .
3. Измените ссылку на соответствующий файл .plist (из более старой цели) для новой Target2 и отметьте «Target Membership» в ваших классах .
4. Откройте «Управление схемами ...» и удалите схему для Target2_old, а затем добавьте новую схему для новой Target2
5. Выберите эту новую схему, а затем Продукт -> Архив

0
Pavel Kataykin

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

0
Maciej Swic

Это случилось со мной в приложении, где версия была определена с неопределенной переменной $ (APP_PRODUCT_VERSION)

Я определил версию и смог создать приложение для iOS.

0
Fred

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

0
Inco Mob

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

0
Brian Stewart

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

Изменение Skip Install на YES для приложения WatchKit (но с сохранением его для NO для приложения iOS) устранило проблему, и XCode правильно сгенерировал Архив приложения для iOS вместо Универсального архива XCode.

0
StevenHolland

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

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

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

0
Ade Ward

В моем случае удаление подчеркивания из целевого имени исправило это.

Не уверен, что это было действительное подчеркивание или само изменение имени, которые сделали трюк.

0
Mathijs