CocoaPods на M1 (Apple Silicon) не работает из-за неправильной архитектуры ffi

Запуск "pod install" на MacBook M1 у меня не удался из-за проблемы с ffi, как описано в здесь.

Я воспользовался некоторыми обходными путями (думаю, я пробовал их все в разном порядке), но теперь я получаю немного другую ошибку:

LoadError - dlopen(/opt/homebrew/lib/ruby/gems/3.0.0/gems/ffi-1.15.0/lib/ffi_c.bundle, 9): no suitable image found.  Did find:
    /opt/homebrew/lib/ruby/gems/3.0.0/gems/ffi-1.15.0/lib/ffi_c.bundle: mach-o, but wrong architecture
    /opt/homebrew/lib/ruby/gems/3.0.0/gems/ffi-1.15.0/lib/ffi_c.bundle: mach-o, but wrong architecture - /opt/homebrew/lib/ruby/gems/3.0.0/gems/ffi-1.15.0/lib/ffi_c.bundle

Итак, похоже, у меня теперь есть ffi, но с неправильной архитектурой? Как я могу это исправить? Это происходит при запуске терминала в режиме Rosetta или без него.

Между прочим, один из предложенных обходных путей у меня не сработал. Когда я пытаюсь:

sudo arch -x86_64 gem install ffi

Я получил:

arch: posix_spawnp: gem: Bad CPU type in executable

Не уверен, связано ли это.


person Datasun    schedule 15.03.2021    source источник


Ответы (2)


Отвечая на свой вопрос. Я исправил проблему с ffi, удалив мою неисправную версию Ruby и CocoaPods, затем я использовал арку -x86_64 для переустановки ffi и CocoaPods.

Вот шаги, которые я сделал, чтобы вернуться в рабочее состояние (и применить обходные пути M1 для ffi):

  1. Удалите Ruby с помощью: brew uninstall ruby --force

  2. Удалите CocoaPods. Сначала попробуйте перечислить все версии / компоненты CocoaPods с gem list --local | grep cocoapods. Затем удалите их по одному, в моем случае:

sudo gem uninstall cocoapods

sudo gem uninstall cocoapods-core

sudo gem uninstall cocoapods-downloader

и т.п.

  1. В качестве следующего шага я смог переустановить ffi, а затем CocoaPods с помощью:

sudo arch -x86_64 gem install ffi

sudo arch -x86_64 gem install cocoapods

После этого я мог запустить pod install, как и ожидалось. Обратите внимание, что у меня всегда был открыт Терминал в стандартном режиме - Rosetta не требуется.

person Datasun    schedule 23.03.2021
comment
Наконец, я обнаружил, что это решение работает, я перепробовал все, от установки новой версии ruby ​​с rbenv до обновления всех зависимостей. Спасибо :) - person Luca Fang; 03.05.2021

Как сказал Датасун, я удалил кокосы.

gem list --local | grep cocoapods | awk '{print $1}' | xargs sudo gem uninstall

а затем запустите:

brew remove rbenv
sudo rm -rf ~/.rbenv
sudo arch -x86_64 gem install ffi
sudo arch -x86_64 gem install cocoapods
brew install rbenv
rbenv install 3.0.1
rbenv global 3.0.1

pod install

без каких-либо проблем.

person burtsevyg    schedule 01.06.2021
comment
Это здорово, спасибо, что упростили копирование и вставку - person Frankely Diaz; 25.06.2021
comment
Для потомков для тех, кто попробовал описанное выше и получил ошибку no podfile, я выполнил указанное выше, за исключением pod install, затем выполнил bundle install и теперь работает гладко. - person bashford7; 13.07.2021