Модуль: OS::Mac::CLT Закрытый
- Расширен модулем:
- Utils::Output::Mixin
- Определён в:
- os/mac/xcode.rb
Обзор
Этот модуль является частью закрытого API. Этот модуль можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого модуля, поскольку он может быть удалён или изменён без предупреждения.
Вспомогательный модуль для получения сведений о Command Line Tools в macOS.
Краткое описание констант свернуть
- EXECUTABLE_PKG_ID =
Эта константа является частью закрытого API. Эту константу можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.
"com.apple.pkg.CLTools_Executables"- PKG_PATH =
Эта константа является частью закрытого API. Эту константу можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.
"/Library/Developer/CommandLineTools"
Краткое описание методов класса свернуть
- .below_minimum_version? ⇒ Boolean закрытый
- .detect_clang_version ⇒ String? закрытый
- .detect_version ⇒ String? закрытый
- .detect_version_from_clang_version ⇒ String? закрытый
- .installation_instructions ⇒ String закрытый
- .installation_then_reinstall_instructions ⇒ String закрытый
- .installed? ⇒ Boolean закрытый
Возвращает true, даже если установлены устаревшие инструменты.
- .latest_clang_version ⇒ String закрытый
Обновляйте эти значения, когда новая версия распространяется через Software Update и наши системы CI обновлены.
- .minimum_version ⇒ String закрытый
Обновляйте эти значения, если без этого возникают серьёзные проблемы (например, отсутствие SDK для этой версии macOS).
- .outdated? ⇒ Boolean закрытый
- .reinstall_instructions(reason: "resolve your issues") ⇒ String закрытый
- .sdk(version = nil) ⇒ SDK? закрытый
- .sdk_locator ⇒ CLTSDKLocator закрытый
- .sdk_path(version = nil) ⇒ ::Pathname? закрытый
- .update_instructions ⇒ String закрытый
- .version ⇒ ::Version внутренний
Строка версии пакета CLT (довольно длинная).
Методы, подключённые из Utils::Output::Mixin
issue_reporting_message, odebug, odeprecated, odie, odisabled, ofail, oh1, oh1_title, ohai, ohai_title, onoe, opoo, opoo_outside_github_actions, opoo_without_github_actions_annotation, pretty_deprecated, pretty_disabled, pretty_duration, pretty_install_status, pretty_installed, pretty_uninstalled, pretty_upgradable, pretty_warning
Подробное описание методов класса
.below_minimum_version? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
356 357 358 359 360 | # File 'os/mac/xcode.rb', line 356 def self.below_minimum_version? return false unless installed? version < minimum_version end |
.detect_clang_version ⇒ String?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
371 372 373 374 | # File 'os/mac/xcode.rb', line 371 def self.detect_clang_version version_output = Utils.popen_read("#{PKG_PATH}/usr/bin/clang", "--version") version_output[/clang-(\d+(\.\d+)+)/, 1] end |
.detect_version ⇒ String?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
399 400 401 402 403 404 405 406 407 | # File 'os/mac/xcode.rb', line 399 def self.detect_version version = T.let(nil, T.nilable(String)) if File.exist?("#{PKG_PATH}/usr/bin/clang") version = MacOS.pkgutil_info(EXECUTABLE_PKG_ID)[/version: (.+)$/, 1] return version if version end detect_version_from_clang_version end |
.detect_version_from_clang_version ⇒ String?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
377 378 379 380 381 382 | # File 'os/mac/xcode.rb', line 377 def self.detect_version_from_clang_version clang_version = detect_clang_version&.sub(/\A(\d+)(\d)(\d)\..*/, "\\1.\\2.\\3") return if clang_version.nil? MacOS::Xcode.detect_version_from_clang_version(Version.new(clang_version)) end |
.installation_instructions ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
270 271 272 273 274 275 276 277 278 279 280 281 282 | # File 'os/mac/xcode.rb', line 270 def self.installation_instructions if OS::Mac.version.prerelease? <<~EOS Install the Command Line Tools for Xcode #{minimum_version.split(".").first} from: #{Formatter.url(MacOS::Xcode::APPLE_DEVELOPER_DOWNLOAD_URL)} EOS else <<~EOS Install the Command Line Tools: xcode-select --install EOS end end |
.installation_then_reinstall_instructions ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
315 316 317 318 319 320 | # File 'os/mac/xcode.rb', line 315 def self.installation_then_reinstall_instructions <<~EOS #{installation_instructions}#{reinstall_instructions} EOS end |
.installed? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Возвращает true, даже если установлены устаревшие инструменты.
250 251 252 | # File 'os/mac/xcode.rb', line 250 def self.installed? !version.null? end |
.latest_clang_version ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Обновляйте эти значения, когда новая версия распространяется через Software Update и наши системы CI обновлены.
325 326 327 328 329 330 331 332 333 334 335 | # File 'os/mac/xcode.rb', line 325 def self.latest_clang_version case MacOS.version when "27" then "2100.3.20.102" when "26", "15" then "1700.6.4.2" when "14" then "1600.0.26.6" when "13" then "1500.1.0.2.5" when "12" then "1400.0.29.202" when "11" then "1300.0.29.30" else "1200.0.32.29" end end |
.minimum_version ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Обновляйте эти значения, если без этого возникают серьёзные проблемы (например, отсутствие SDK для этой версии macOS). Как правило, это будет первый стабильный выпуск CLT для этой версии macOS.
341 342 343 344 345 346 347 348 349 350 351 352 353 | # File 'os/mac/xcode.rb', line 341 def self.minimum_version macos = MacOS.version case macos when "15" then "16.0.0" when "14" then "15.0.0" when "13" then "14.0.0" when "12" then "13.0.0" when "11" then "12.5.0" when "10.15" then "11.0.0" else "#{macos}.0.0" end end |
.outdated? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
363 364 365 366 367 368 | # File 'os/mac/xcode.rb', line 363 def self.outdated? clang_version = detect_clang_version return false unless clang_version ::Version.new(clang_version) < latest_clang_version end |
.reinstall_instructions(reason: "resolve your issues") ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
285 286 287 288 289 290 291 292 293 294 295 | # File 'os/mac/xcode.rb', line 285 def self.reinstall_instructions(reason: "resolve your issues") <<~EOS If that doesn't #{reason}, run: sudo rm -rf /Library/Developer/CommandLineTools sudo xcode-select --install Alternatively, manually download them from: #{Formatter.url(MacOS::Xcode::APPLE_DEVELOPER_DOWNLOAD_URL)}. You should download the Command Line Tools for Xcode #{MacOS::Xcode.latest_version}. EOS end |
.sdk(version = nil) ⇒ SDK?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
260 261 262 | # File 'os/mac/xcode.rb', line 260 def self.sdk(version = nil) sdk_locator.sdk_if_applicable(version) end |
.sdk_locator ⇒ CLTSDKLocator
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
255 256 257 | # File 'os/mac/xcode.rb', line 255 def self.sdk_locator @sdk_locator ||= T.let(CLTSDKLocator.new, T.nilable(OS::Mac::CLTSDKLocator)) end |
.sdk_path(version = nil) ⇒ ::Pathname?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
265 266 267 | # File 'os/mac/xcode.rb', line 265 def self.sdk_path(version = nil) sdk(version)&.path end |
.update_instructions ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 | # File 'os/mac/xcode.rb', line 298 def self.update_instructions return installation_instructions if OS::Mac.version.prerelease? software_update_location = if MacOS.version >= "13" "System Settings" else "System Preferences" end <<~EOS Update them from Software Update in #{software_update_location}. #{reinstall_instructions(reason: "show you any updates")} EOS end |
.version ⇒ ::Version
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и formulae. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Строка версии пакета CLT (довольно длинная). Обратите внимание, что разные способы установки CLT приводят к разным номерам версий.
390 391 392 393 394 395 396 | # File 'os/mac/xcode.rb', line 390 def self.version if @version ||= T.let(detect_version, T.nilable(String)) ::Version.new @version else ::Version::NULL end end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/OS/Mac/CLT.html