Я только что создал новый проект Swift в Xcode. Мне интересно, какую версию Swift он использует.
Как я могу видеть, в Xcode или терминале, какую версию Swift я использую в своем проекте?
Я только что создал новый проект Swift в Xcode. Мне интересно, какую версию Swift он использует.
Как я могу видеть, в Xcode или терминале, какую версию Swift я использую в своем проекте?
Ответы:
В настройках сборки проекта есть блок «Swift Compiler - Languages», в котором хранится информация о версии языка Swift в формате ключ-значение. Он покажет вам всю доступную (поддерживаемую) языковую версию Swift для вашего Xcode и активную версию также с помощью галочки.
Проект ► (Выберите цель проекта) ► Параметры сборки ► (Введите 'swift_version' в строке поиска) Язык компилятора Swift ► Версия Swift Language ► Нажмите на список языков, чтобы открыть его (и в любом из списков будет отмечена галочка). - это будет текущая версия swift).
Посмотрите на этот снимок, для простоты понимания:
С помощью следующего кода программно вы можете найти версию Swift, поддерживаемую вашим проектом.
#if swift(>=5.2)
print("Hello, Swift 5.2")
#elseif swift(>=5.1)
print("Hello, Swift 5.1")
#elseif swift(>=5.0)
print("Hello, Swift 5.0")
#elseif swift(>=4.2)
print("Hello, Swift 4.2")
#elseif swift(>=4.1)
print("Hello, Swift 4.1")
#elseif swift(>=4.0)
print("Hello, Swift 4.0")
#elseif swift(>=3.2)
print("Hello, Swift 3.2")
#elseif swift(>=3.0)
print("Hello, Swift 3.0")
#elseif swift(>=2.2)
print("Hello, Swift 2.2")
#elseif swift(>=2.1)
print("Hello, Swift 2.1")
#elseif swift(>=2.0)
print("Hello, Swift 2.0")
#elseif swift(>=1.2)
print("Hello, Swift 1.2")
#elseif swift(>=1.1)
print("Hello, Swift 1.1")
#elseif swift(>=1.0)
print("Hello, Swift 1.0")
#endif
Вот результат использования Playground (с Xcode 11.x )
Что я делаю, это говорю в Терминале:
$ xcrun swift -version
Выход для Xcode 6.3.2:
Apple Swift version 1.2 (swiftlang-602.0.53.1 clang-602.0.53)
Конечно, это предполагает, что вы xcrunправильно указываете на свою копию XCode. Если, как и я, вы манипулируете несколькими версиями Xcode, это может быть проблемой! Чтобы убедиться, что это так, скажем,
$ xcrun --find swift
и посмотрите на путь к Xcode, который он вам показывает. Например:
/Applications/Xcode.app/...
Если это ваш Xcode, то вывод от -versionточный. Если вам нужно переизбрать xcrun, используйте всплывающее меню инструментов командной строки на панели настроек Locations в Xcode.
xcode-select -pчтобы напечатать путь к Xcode, который будет использовать xcrun, и sudo xcode-select -s /path/to/Xcode.appизменить его.
Начиная с Xcode 8.3 и далее, Build Settingsесть ключ Swift Language Versionсо значением быстрой версии, которую использует ваша цель.
Для старых кодов X используйте это решение, откройте терминал и введите следующую команду (ы)
Случай 1: Вы установили только одно приложение XCode
swift -version
Случай 2: Вы установили несколько приложений Xcode
Переключатель active developer directory(замените Xcode_7.3.appследующую команду именем вашего файла приложения XCode из каталога приложений, для которого вы хотите проверить версию swift)
sudo xcode-select --switch /Applications/Xcode_7.3.app/Contents/Developerзатем
swift -versionПРИМЕЧАНИЕ. От Xcode 8 до Xcode 8.2.x вы можете использовать swift 2.3, даже если Xcode 8 использует swift 3.x в качестве версии swift по умолчанию. Чтобы использовать swift 2.3, просто включите флаг Use Legacy Swift Language Versionto YESfrom, Build Settingи XCode будет использовать Swift 2.3 для этой цели проекта.
Вы можете увидеть и выбрать, какую версию Swift Xcode использует в:
Цель -> Настройки сборки -> Версия Swift Language :
Это доступно в Xcode 8.3 и Xcode 9 (не проверял более старые версии)
Swift Language Versionне подходит в качестве настройки в моем проекте Xcode 8.2.1. Это имеет Use Legacy Swift Language Version.
Swift Language Versionне существовало здесь Build Settingsдо Xcode 8.3 .... в предыдущих версиях Xcode 8.x Use Legacy Swift Language Version, No= Swift 3 и Yes= Swift 2.3
Это сообщение Reddit помогло мне: https://www.reddit.com/r/swift/comments/4o8atc/xcode_8_which_swift/d4anpet
Xcode 8 использует Swift 3.0 по умолчанию. Но вы можете включить Swift 2.3. Перейдите в «Настройки сборки» проекта и установите «Использовать старую версию Swift Language» на YES.
Старый добрый reddit :)
Чтобы увидеть версию swift по умолчанию, установленную на вашем компьютере, а затем из командной строки введите следующее:
swift --version
Apple Swift версия 4.1.2 (swiftlang-902.0.54 clang-902.0.39.2)
Цель: x86_64-apple-darwin17.6.0
Скорее всего, это версия, которая включена в версию Xcode магазина приложений, которую вы установили (если вы ее не изменили).
Если вы хотите определить фактическую версию Swift, используемую конкретной версией Xcode (например, бета), то из командной строки вызовите исполняемый файл swift в пакете Xcode и передайте ему параметр --version
/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift --version
Apple Swift версия 4.2 (swiftlang-1000.0.16.7 clang-1000.10.25.3)
Цель: x86_64-apple-darwin17.6.0
/usr/bin/swiftc --version
На случай, если кто-то ищет быстрое сопоставление версии Swift на основе версии Xcode:
Xcode 11.5 : Swift version 5.2.4
Xcode 11.4 : Swift version 5.2
Xcode 11.3 : Swift version 5.1.3
Xcode 11.2.1: Swift version 5.1.2
Получается при выполнении следующей команды, как указано в разных версиях Xcode:
/Applications/Xcode11.5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift --version
Бонус: я использую собственный скрипт node.js для извлечения чистой строки для использования с документацией Jazzy. Вы можете воспользоваться этим, если сможете найти место для работы в процессе разработки:
Вызывается из скрипта Bash:
#!/bin/bash
swiftversion=$(node SwiftVerSlicer.js "${xcrun swift -version}");
echo $swiftversion
SwiftVerSlicer.js:
// begin script
const inputString = `${process.argv[2]}`
let searchTerm = (inputString.indexOf('(') - 1)//-1 cause whitespace
let version = inputString.slice(0,searchTerm)
console.log(version)
// end script
Вы также можете использовать регулярные выражения, но делайте что хотите:]