Ответ 1
При обновлении XCode вам необходимо установить средства командной строки и дополнительно принять условия:
sudo xcode-select --install
Тогда:
sudo xcodebuild -license
Я обновил XCode на своем Mac и с тех пор при запуске Docker с помощью docker-sync-stack start
я получаю это сообщение об ошибке:
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/include/ruby.h
Я попытался установить ruby с этим: brew install rbenv ruby-build
, но это ничего не меняет.
Кто-нибудь знает, как я могу это исправить?
Спасибо!
При обновлении XCode вам необходимо установить средства командной строки и дополнительно принять условия:
sudo xcode-select --install
Тогда:
sudo xcodebuild -license
Ни одно из других решений не помогло мне, вот что я использовал для решения проблемы в Mac OS 10.14.x:
sudo rm -rf /Library/Developer/CommandLineTools
xcode-select --install
sudo xcodebuild -license accept
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
Для Xcode 11 я исправил это, также установив пакет /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
.
Начиная с Xcode 11, кажется, что заголовочные файлы разработки ruby больше не включены, поэтому вам нужно будет установить их вручную вне инструментов командной строки Xcode.
Например. для меня с помощью rbenv я сделал
rbenv install 2.6.4
rbenv global 2.6.4
eval "$(rbenv init -)"
Затем запустил пакетную установку, и все заработало как положено.
У меня была такая же проблема при установке fastlane. Ответ tadman правильный, но командные строки у меня не работают с Xcode 10.2.1 (я не уверен с другими версиями). Вам нужно открыть XCode, затем открыть Preferences, выбрать Locations и выбрать Инструменты командной строки. В моем случае поле инструментов командной строки пустое.
Как сказал @bdorfman в своем комментарии, заголовки Ruby больше не включаются в сборку Xcode 11, но, похоже, они пытаются создать новую сборку для этого как можно скорее (?): https://discuss.circleci.com/t/xcode-11-gm-seed-2-released/32505/12.
Для меня было полезно использовать rbenv
, как сказал @bdorfman:
rbenv install 2.6.4
rbenv global 2.6.4
eval "$(rbenv init -)"
Но с дополнительным шагом добавления docker-sync
к вашей новой версии ruby. Поскольку после изменения версии ruby (например)
$ ruby -v
ruby 2.6.4p104 (2019-08-28 revision 67798) [x86_64-darwin18]
А затем запустим список драгоценных камней:
$ gem list
bigdecimal (default: 1.4.1)
bundler (default: 1.17.2)
cmath (default: 1.0.0)
csv (default: 3.0.9)
date (default: 2.0.0)
dbm (default: 1.0.0)
did_you_mean (1.3.0)
e2mmap (default: 0.1.0)
etc (default: 1.0.1)
fcntl (default: 1.0.0)
fiddle (default: 1.0.0)
fileutils (default: 1.1.0)
forwardable (default: 1.2.0)
io-console (default: 0.4.7)
ipaddr (default: 1.2.2)
irb (default: 1.0.0)
json (default: 2.1.0)
logger (default: 1.3.0)
matrix (default: 0.1.0)
minitest (5.11.3)
mutex_m (default: 0.1.0)
net-telnet (0.2.0)
openssl (default: 2.1.2)
ostruct (default: 0.1.0)
power_assert (1.1.3)
prime (default: 0.1.0)
psych (default: 3.1.0)
rake (12.3.2)
rdoc (default: 6.1.2)
rexml (default: 3.1.9)
rss (default: 0.2.7)
scanf (default: 1.0.0)
sdbm (default: 1.0.0)
shell (default: 0.7)
stringio (default: 0.0.2)
strscan (default: 1.0.0)
sync (default: 0.5.0)
test-unit (3.2.9)
thwait (default: 0.1.0)
tracer (default: 0.1.0)
webrick (default: 1.4.2)
xmlrpc (0.3.0)
zlib (default: 1.0.0)
(не содержит синхронизацию с докером)
Если вы запустите установку gem для docker-sync, вы будете использовать docker-sync для вашего управляемого рубина rbenv.
$ gem install docker-sync
Исправление однострочной команды:
В OSX Mojave я выполнил следующую команду:
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
и это решило проблему.
Для XCode 11 в MacOS 10.14 это может произойти даже после установки XCode, установки инструментов командной строки и принятия лицензии с помощью
xcode-select --install
xcodebuild -license accept
Проблема в том, что Xcode поставляет macOS 10.15 SDK, который включает заголовки для ruby2.6, но не для macOS 10.14 ruby2.3. Вы можете убедиться, что это ваша проблема, запустив
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'
который в macOS 10.14 с Xcode 11 печатает несуществующий путь
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0
В /Library/Developer/CommandLineTools/SDKs
все еще может быть macOS 10.14 SDK. Нет необходимости загрязнять системные каталоги, устанавливая старые заголовочные файлы, как указано в других ответах. Вместо этого, указав на нее переменную окружения SDKROOT
, будут найдены соответствующие заголовки ruby2.3:
SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/
export SDKROOT
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'
Теперь это должно правильно напечатать
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk//System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0
Аналогично, gem install
должен работать, пока установлена переменная окружения SDKROOT
.
Если вы хотите глубже понять проблему:
Mac OS X 10.14 прекратила помещать библиотеки включения в свои обычное местоположение, /usr/include, сохраняя их только внутри XCode Каталог.
Чтобы подтвердить, что это проблема, просто запустите
ls /usr/include
. Если результат получается пустым, это действительно проблема.Apple поставляет "устаревший установщик", чтобы вы могли установить Заголовки в "старом месте". Чтобы решить проблему, просто запустите это:
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /