Подтвердить что ты не робот

Что такое libswiftRemoteMirror.dylib и почему он включен в мой комплект приложений?

У меня есть приложение iOS, которое я недавно перешел на Xcode 8. В рамках этого мы перешли от быстрых 2,2 к 2,3 (быстрый 3 придет позже).

У меня есть автоматизированный конвейер сборки, который по существу запускает xcodebuild, чтобы создать двоичный файл release на выделенной машине сборки, и после того, как я разобрал все это (автоматическая кодовая подпись Xcode 8 действительно закручивает все), теперь, когда я загрузите мое приложение в iTunes connect, он не с этой ошибкой:

ERROR ITMS-90171: "Недопустимая структура пакета". Запрещен бинарный файл "MyApp.app/libswiftRemoteMirror.dylib". Приложение не может содержать автономные исполняемые файлы или библиотеки, отличные от CFBundleExecutable поддерживаемых пакетов. руководство по программированию Bundle в https://developer.apple.com/go/?id=bundle-structure для получения информации о структуре пакета приложений iOS."

Конечно, если я разархивирую файл .ipa и посмотрю, там libswiftRemoteMirror.dylib сидит там.

Если я архивирую/экспортирую iTunes с помощью Xcode, он создает пакет приложений, который не имеет libswiftRemoteMirror.dylib, однако все остальные сборки моего приложения, похоже, имеют его. Даже просто делая отладочную сборку внутри Xcode, тогда просмотр вывода показывает, что libswiftRemoteMirror.dylib сидит в моем приложении, указывая, что сам Xcode определенно помещает его туда, а не какую-либо часть моей автоматической сборки script.

Что это за файл, зачем он туда помещен, и что мне делать? Я могу изменить мою сборку script, чтобы удалить этот файл для сборки релиза, но я обеспокоен тем, что это может повлиять на процесс подписи кода. Я все равно попробую и посмотрю, что произойдет, но похоже, что это не совсем то, что нужно делать.

Любые советы будут оценены.

4b9b3361

Ответ 1

Я никогда не смогу получить командную строку xcodebuild, когда-либо работающую с автоматической подписью кода. Я предполагаю, что автоматическая машина для сборки работает как другая учетная запись, доступ к которой осуществляется только через SSH. У нее никогда не было "полного" Xcode, запускаемого как учетная запись пользователя, и у нее нет никаких сертификатов в этом ключевом слоте входа или что-то в этом роде.

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

Вот что я сделал, чтобы исправить проблему (это ужасно, но это было единственное, что я смог найти, что заставило его работать в конце)

  • В автоматическом сборке script отредактируйте .pbxproj для поиска и замены Provisioning Style = Automatic; с помощью Provisioning Style = Manual;. Также замените iOS Developer на iOS Distribution на предмет подписи кода в том же файле pbxproj. Эти две вещи отключают автоматическое подписание

  • Запустите xcodebuild, чтобы построить (но не архивировать) проект так же, как в Xcode7. Xcode компилирует приложение и подписывает его, но он еще недействителен, так как он содержит libswiftRemoteMirror.dylib, а также по какой-то причине не получил никакого файла прав

  • Удалите libswiftRemoteMirror.dylib из пакета приложений (это делает недействительным подпись)

  • Сгенерируйте Entitlements.plist в папке пакета приложения, извлекая бит прав из профиля подготовки (как то, что BlackBerry SWSiOSResign.sh script делает)

    1. Повторно подпишите пакет приложений, используя codesign --entitlements <file>

    2. Оттуда используйте аналогичную технику для bq/package_ipa.sh и скопируйте папку SwiftSupport, затем запишите файл в ipa.

Я не мог использовать файл package_ipa.sh, мне нужно было повторно реализовать подобную логику, потому что мне нужно ссылаться на Swift_2.3.toolchain, чтобы получить SwiftSupport, поскольку мое приложение все еще быстрое 2.3 - not XcodeDefault.toolchain (которое быстро) 3)

Кажется, я должен использовать xcodebuild --archive в сочетании с некоторыми другими вещами, чтобы избежать некоторых из этих шагов. Я никогда не мог получить это, чтобы работать под Xcode7, но я могу попробовать снова с XC8, если у меня есть время

Ответ 2

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

Я решил рассмотреть Fastlane в качестве альтернативы, а их gym создает ipa, который может быть отправлен в Apple.

Мне было легко заменить вызов ipa (исполняемый файл shenzhen) с вызовом gym, а остальные мои скрипты сборки и загрузки работали без изменений.

Если вы предпочитаете строить напрямую, я снял следующее с gym readme. Он создает .xcarchive, содержащий файл .app без libswiftRemoteMirror.dylib. Я сам не использую такой поток, поэтому не могу сказать, как вы будете двигаться дальше.

xcodebuild \
  -scheme Scheme \
  -workspace Project.xcworkspace \
  -configuration 'Release' \
  -destination 'generic/platform=iOS' \
  -archivePath './Output.xcarchive' \
  archive

Ответ 3

В моем случае я получил ERROR ITMS-90171, потому что я использую пользовательские фреймворки.

"Недопустимая структура Bundle - двоичный файл 'MyFramework.framework/libswiftRemoteMirror.dylib'

(я не получил его для своего приложения.)

Я пробовал спортзал но он застрял в xcrun. Поэтому я попытался сделать rm -rf libswiftRemoteMirror в фразе сборки (с пользовательским run-script) для каждой настраиваемой структуры, которую у меня есть, и интересно, что я ничего не сломал: она работала.

Ответ 4

Просто перейдите к настройке сборки и сделайте так, как только ваша проблема будет решена.

enter image description here

Ответ 5

просто Архивируйте свою сборку из Xcode правой кнопкой мыши по файлу архива → show in finder → щелкните правой кнопкой мыши → показать содержимое пакета → продукт → приложение → скопировать файл .app, создать полезную нагрузку и загрузить с помощью Application Loader. Это помогает в моем случае.