Поэтому я пытаюсь использовать Shopify API. Когда я архивирую приложение и проверяю его, проблем не возникает, но когда я отправляю его в магазин приложений, возникают следующие проблемы.
- ОШИБКА ITMS-90087: «Неподдерживаемая архитектура. Ваш исполняемый файл содержит неподдерживаемую архитектуру« [x86_64, i386] »."
- ОШИБКА ITMS-90209: «Неверное выравнивание сегмента. Двоичный файл приложения на SJAPP.app/Frameworks/Buy.framework/Buy не имеет правильного выравнивания сегмента. Попробуйте перестроить приложение с последней версией Xcode». (Я уже использую последнюю версию.)
- ОШИБКА ITMS-90125: «Двоичный файл недействителен. Информация шифрования в команде загрузки LC_ENCRYPTION_INFO либо отсутствует, либо недействительна, либо двоичный файл уже зашифрован. Похоже, этот двоичный файл не был создан с помощью компоновщика Apple».
- ПРЕДУПРЕЖДЕНИЕ ITMS-90080: «Исполняемая полезная нагрузка /..../ Buy.framework не является позиционно-независимым исполняемым файлом. Пожалуйста, убедитесь, что настройки сборки сконфигурированы для создания исполняемых файлов PIE».
Ответы:
Проблема заключается в том, что платформа Buy содержит сборку как для симулятора (x86_64), так и для реальных устройств (ARM).
Конечно, вам не разрешено отправлять в App Store двоичный файл для неподдерживаемой архитектуры, поэтому решение состоит в том, чтобы «вручную» удалить ненужные архитектуры из окончательного двоичного файла перед его отправкой.
Даниэль Кеннетт придумал хорошее решение и предоставляет этот сценарий для добавления на этапе сборки:
Я использовал это, и это работало отлично.
РЕДАКТИРОВАТЬ: убедитесь, что вы посмотрите на измененный скрипт, опубликованный Varrry, так как у этого есть некоторые незначительные проблемы.
источник
Ответ от pAkY88 работает, но я столкнулся с той же проблемой, что и Марио Гусман в https://stackoverflow.com/a/35240555/5272316 : как только мы отключаем неиспользуемые архитектуры, мы больше не можем запускать скрипт, так как он пытается удалить не существующие фрагменты, потому что xcode не перестраивает бинарный файл каждый раз. Идея была - просто удалите фрагменты i386 и x86_64 при создании архива, поэтому я изменил скрипт:
Этот скрипт просто удаляет фрагменты i386 и x86_64 из толстого бинарного файла (если они существуют), если работает не для симулятора (это означает, что папка назначения не похожа на «Debug-iphonesimulator»).
Извините, я не знаком со скриптами оболочки, так что, возможно, кто-то мог бы написать это более элегантным способом. Но это работает)
источник
case "${TARGET_BUILD_DIR}" in *"iphonesimulator") echo "Skip simulator target"; continue ;; esac
и это сработало как шарм.TARGET -> Build Phases -> [CP] Embedded Pods Frameworks
но он не работает, и у меня все еще есть ошибки загрузки в iTunesConnect. Как запустить этот скрипт?Если вы используете Карфаген, вы можете столкнуться с этой проблемой, потому что проект:
carthage copy-frameworks
фаза сборки.Это действие фильтрует фреймворки в список допустимых архитектур (код) .
Настройка фазы сборки copy-frameworks
Из здания Карфагена для шагов iOS :
источник
$(SRCROOT)/Carthage/Build/iOS/Marshal.framework
проделанную работуЯ исправил ошибку ITMS-90080, удалив фреймворк (отличный SVProgressHUD) из раздела Embedded Binaries (цель XCode -> вкладка General).
источник
Если вы используете,
Carthage
убедитесь, что выEmbed Frameworks
Build Step
доCarthage
copy-frameworks
В некоторых необычных случаях (пример: платформа Lottie-iOS):
у вас это будет просто в "Библиотеке ссылок", как обычно.
Однако вы должны также явно добавить его в «Вставить рамочные» (несмотря на то, что кажется бессмысленным, так как она прекрасно работает , когда у вас есть только в «Embed рамочные»),
и положить его в копи-фреймворки
и убедитесь, что копирование фреймворков после "Вставить фреймворки"
источник
Удалите [x86_64, i386] из каркаса, используя шаг ниже. [x86_64, i386] используется для симулятора.
открыто
Terminal
откройте путь перетаскивания вашего проекта соответствующей платформы в терминал
пример :
cd /Users/MAC/Desktop/MyProject/Alamofire.framework
установите имя вашей платформы в приведенной ниже команде и запустите
lipo -remove i386 Alamofire -o Alamofire && lipo -remove x86_64 Alamofire -o Alamofire
источник
Я добавлю свои 2 цента здесь (менее страшно :-). Я встречал довольно много толстых библиотек от поставщиков, которые (по какой-то причине) не работают обычным образом, добавляя их в
Frameworks
каталог, как описано в Apple. Единственный способ заставить их работать, это потянуть.framekwork
вправо в каталог проекта и связатьEmbedded Frameworks
иLink Binary with Libraries
вручную в настройках сборки. Однако, похоже, это работало без проблем, так как с любой толстой библиотекой они идут с посторонними архитектурами симулятораi386
иx86_64
вместе сarm
архитектурами.Быстрый способ проверить архитектуру в толстой библиотеке
Который должен выплевывать вывод примерно так
Это подтверждает, что вам нужно будет «обрезать жир» (а именно
i386
&x86_64
) из вашей инфраструктуры до загрузки архива iTunesConnect, что не позволяет использовать эти архитектуры (поскольку они не поддерживаются для iOS).Теперь все ответы (или, по крайней мере, некоторые из ответов) здесь предоставляют эти замечательные Run Scripts, которые, я уверен, работают действительно хорошо, но только если ваша Framework находится в
Frameworks
каталоге. Теперь, если вы не любитель сценариев оболочки, эти сценарии без изменений не будут работать для сценария, который я объяснил выше. Тем не менее, существует очень простой способ избавиться отi386
&x86_64
архитектуры из фреймворка.Откройте терминал в каталоге вашего проекта.
Изменить каталог прямо в
.framekwork
, какcd YourProjectDir/YourProject/YourLibrary.framework
Запустите серию команд, как показано ниже:
Несколько вещей, на которые следует обратить внимание, -
lipo -remove
это необходимо сделать один раз для удаления каждой архитектуры.lipo
не изменяет входной файл, он создает только файл, поэтому вам нужно запустить егоlipo -remove
один разx86_64
иi386
. Приведенные выше команды просто делают это, сначала переименовывая исполняемый файл, а затем, в конце концов, удаляя нужные архивы, а затем убирая оставшиеся файлы. И все, теперь вы должны увидеть зеленую галочку при загрузке приложения Application Loader Archival в iTunesConnect.Что нужно иметь в виду : вышеупомянутые шаги должны быть выполнены только во время производственной сборки, так как сборки
.framework
будут удалены из архитектур симулятора, сборки на симуляторах перестанут работать (что ожидается). В среде разработки не должно быть необходимости удалять архитектуру.framework
файла, поскольку вы хотите иметь возможность проводить тестирование как на симуляторе, так и на физическом устройстве. Если ваша толстая библиотека находится вFrameworks
папке в проекте, пожалуйста, посмотрите на принятый ответ.источник
У меня была такая же проблема даже после добавления скрипта и обновления фреймворка несколько раз.
Убедитесь, что в xCode скрипт добавлен в конце после встраивания. Я думаю, что я случайно переместил скрипт перед встроенным фреймворком.
Примечание: у меня есть xCode 9.1
источник
Вам просто нужно удалить фреймворк из Embedded Binaries и просто добавить его в связанные фреймворки и библиотеки.
Смотрите скриншот ниже;
источник
Спасибо всем вышеперечисленным ответам. Вот скрипт, работающий со Swift 4.2 и 5 . Замените строку Your_Framework_Name исходным именем вашей платформы.
источник
Эта проблема была решена для меня, слегка изменив скрипт запуска из ответа pAky88 и выполнив его после встраивания фреймворков. Также обязательно снимите флажок «Запускать скрипт только при установке».
источник
Я удалил архитектуры i386 и x64_86 из Настройки сборки - Допустимые архитектуры - Выпуск, и все заработало просто отлично.
Теперь единственная проблема заключается в том, что вы не можете запустить сборку RELEASE для тестирования на SIMULATOR . Но так же легко, как вы удалили арки, вы можете добавить их обратно, если хотите.
источник
простое решение, которое работало для меня, было
сделано!
источник
Эта ошибка (ITMS-90240) также может быть вызвана статической (.a) библиотекой. Вот сценарий, чтобы лишить лишние архитектуры. В XCode добавьте это к Target> BuildPhases> Нажмите + и выберите Run Script. Затем вставьте это в поле сценария.
Сценарий ищет файлы .a, проверяет, содержит ли он нарушающую архитектуру, а затем создает новый файл .a без этой архитектуры.
Для macOS:
Для iOS:
источник
У меня была такая же проблема. Даже он не работал после добавления данного Run Script. Это была проблема, связанная с Xcode. Я использовал версию Xcode 9.0, но последняя версия была 9.2.
Поэтому я установил последнюю версию Xcode (9.2), и она заработала.
источник
Ваш фреймворк содержит
ARM
иx86
код, и это позволяет вам использовать его на устройстве или в симуляторе. Если вы собираетесь отправить свое приложение в App Store, запустите следующий скрипт, чтобы удалить неактивный код из двоичного файла.1.Выберите цель в Навигаторе проекта и нажмите «Фазы сборки» в верхней части редактора проекта.
2. В меню «Редактор» выберите «Добавить этап сборки», затем «Добавить этап сборки сценария запуска» (или нажмите кнопку «+» в верхнем левом углу редактора этапов сборки).
3.Разверните раскрывающий треугольник рядом с новой только что добавленной фазой построения Run Script. В окне редактора сценариев вставьте следующее: bash
источник
Вот скрипт, который я использовал, чтобы специально удалить только архитектуру одного фреймворка из исполняемого файла.
Добавьте этот скрипт в ваши проекты "Build Phases" вашего проекта. Обязательно установите флажок: «Запускать скрипт только при установке»
источник