XCode9: подписание кода заблокировано mmap() во время работы на устройстве

Я столкнулся со следующей проблемой после обновления до XCode9 (ну, я не мог полностью изолировать причину, потому что повторно сгенерировал сертификат сразу после обновления для включения службы Push):

dyld: Library not loaded: @rpath/apowo.framework/apowo
  Referenced from: /var/containers/Bundle/Application/2CD5CA32-1DAF-423B-B921-024DCBEE2AF0/picatown.app/picatown
  Reason: no suitable image found.  Did find:
    /private/var/containers/Bundle/Application/2CD5CA32-1DAF-423B-B921-024DCBEE2AF0/XXXX.app/Frameworks/apowo.framework/apowo: code signing blocked mmap() of '/private/var/containers/Bundle/Application/2CD5CA32-1DAF-423B-B921-024DCBEE2AF0/XXXX.app/Frameworks/apowo.framework/apowo'

В SO есть несколько похожих сообщений, но я полагаю, что это может быть вызвано чем-то новым. На самом деле исходная проблема была не в XXX.framework, а в libswiftcore, и после того, как я сделал все предложения по SO, ошибка возникла из моих собственных библиотек. И вот что я пробовал:

  • чистый
  • удалить производные данные
  • перезагрузить XCode, Mac и мой телефон
  • удалить все сертификаты и заново создать
  • удалите ссылки на фреймворк (а также двоичные файлы) из проекта и повторно добавьте

Ни один из них не работает.

Некоторые дополнительные данные: я использую jenkins и fastlane для управления сборкой. Проект XCode создается заново каждый раз при запуске задания. Та же работа хорошо работает на другой машине с XCode 8, и ничего не ломается (запускается после повторного создания сертификатов, так же как и с новыми сертификатами).

Я думал, что дело в библиотеках, и я пересобрал их в XCode 9. Недавно собранные библиотеки также были в приложении, созданном в XCode 8, и работали хорошо, но не в XCode 9.

Любая помощь будет оценена.


person YANG Lei    schedule 27.09.2017    source источник
comment
любое решение или обновление?   -  person Mehmet AKYOL    schedule 15.11.2017
comment
ну, оказывается, проблема с сертификатом. Я выбрал Всегда разрешать корневой сертификат, следуя одной статье. Однако это должно быть значение по умолчанию   -  person YANG Lei    schedule 09.12.2017
comment
@YANGLei, спасибо! ваш комментарий должен быть правильным ответом.   -  person Soheil    schedule 10.04.2018
comment
@SoheilB.Marvasti О да. Рад, что это помогает.   -  person YANG Lei    schedule 19.04.2018


Ответы (3)


Я попробовал следующий шаг, и он работает:
В XCode -> Build Phase -> Linked frameworks and libraries: выберите статус вашей конкретной платформы от обязательного до необязательного.

И должно работать ;)

person shadow24    schedule 23.01.2018
comment
Это также исправляет мою ошибку. Интересно, в чем причина? Может быть, это связано с кодовым знаком внутри WebRTC? groups.google.com/forum/#!topic/discuss-webrtc/ fXP9FjDiook - person allenlinli; 15.08.2018

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

Откройте доступ к связке ключей: Мои сертификаты > Сертификат "Щелкните правой кнопкой мыши" > получите информацию > Доверие > При использовании этих сертификатов > Использовать системные настройки по умолчанию

«При использовании этих сертификатов» следует выбрать «Использовать пользовательские настройки»> «Использовать системные значения по умолчанию».

https://blog.supereasyapps.com/how-to-fix-iphone-and-ipad-app-codesign-crashes-using-an-apple-developer-profile/

person SamsonTheBrave    schedule 27.07.2018

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

Что действительно помогло, так это то, что я заметил, что, хотя у меня в цепочке ключей был ЦС Apple Worldwide Developer Relations, мой сертификат разработчика все еще был подписан неизвестным органом (отображается только при двойном щелчке по нему, рядом с ним нет красного креста, например для просроченных). Оказывается, у Apple есть 5 разных ЦС WWDG — https://www.apple.com/certificateauthority/ Вы можете проверить, какой из них использовался для подписи вашего профиля (Имя эмитента -> Организационная единица: Gx) и загрузить соответствующий (или все). В моем случае, например, у меня был установлен только G1, а новый сертификат, автоматически созданный XCode, был подписан G3, которого не было в моей системе. Установка G3 (загрузите и дважды щелкните или перетащите в окно связки ключей) решила проблему, и я снова смог запустить приложение на своем телефоне.

person Sergey    schedule 06.07.2021