Я все еще хотел бы иметь возможность использовать VSCode для черчения кода Swift на моей машине с Linux, пока я вдали от своего Mac.Но я не могу заставить sourcekit-lsp
распознавать модули из iOS SDK.
У меня есть время от времени доступ к Mac, но я в основном использую свой компьютер с Linux.Таким образом, я могу создавать приложения на своем Mac, но я все же хотел бы иметь возможность использовать VSCode для предварительного написания кода Swift на моей машине с Linux.
Но я не могу получить sourcekit-lsp
распознавать модули из iOS SDK.Аналогичен references.d.ts
для разработчиков TypeScript, но с использованием swift, и об этом заботится только VSCode / sourcekit-lsp.
Я обкопал Xcode.app
и нашел различные .modulemap
и .swiftinterface
файлы, которые, посмотрев в текстовом редакторе, похоже, что они предоставляют то, что я хочу, но я не знаю, как заставить sourcekit-lsp
смотреть на них.
Чтобы подчеркнуть, я не ожидаю илихочу иметь возможность компилировать код iOS на машине с Linux.При устранении неполадок я использовал swift build
только для поиска более значимых ошибок.Я не ожидаю реальных сборок - вот для чего Mac.Я просто хочу иметь возможность использовать автозаполнение из собственных модулей, таких как UIKit, в VSCode, чтобы потом я мог скопировать его на Mac для проверки.
Я знаю, это странный рабочий процесс, ноэто то, к чему у меня есть доступ прямо сейчас.
Настройка
Я скачал бета-версию Xcode 11 и извлек ее, чтобы получить доступ к фреймворкам / SDK.Тем не менее, я не могу найти способ заставить sourcekit-lsp
понять заголовки для различных структур.
Кроме того, swift установлен в /usr/local/bin/swift-5.1-DEVELOPMENT-SNAPSHOT-2019-06-21-a-ubuntu18.04
.
, начиная с sourcekit-lsp
не регистрирует много ошибок, я решил попробовать swift build
снова и снова, приближаясь к «работе» настолько, насколько это возможно, пока, надеюсь, sourcekit-lsp
что-нибудь подхватит.
Метод проб и ошибок
До сих пор я пробовал много разных команд.Но я буду следовать лучшей линии прогресса, которую я получил.
Я начал с указания swiftc
на мой целевой SDK и iOS, используя -sdk Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk -target arm64-apple-ios13.0
Это исправило ошибки модуля, не найденные (при запуске swift build
)
<unknown>:0: error: unable to load standard library for target 'arm64-apple-ios13.0'
Я догадался, что это не были включены быстрые библиотеки, поэтому я скопировал Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos
в /usr/local/bin/swift-5.1-DEVELOPMENT-SNAPSHOT-2019-06-21-a-ubuntu18.04/usr/lib/swift/iphoneos
, что действительно исправляет вышеуказанную ошибку.
Где я застрял
Теперь swift build
выдает мне новую ошибку:
<unknown>:0: error: compiled module was created by an older version of the compiler; rebuild 'Swift' and try again: /usr/local/bin/swift-5.1-DEVELOPMENT-SNAPSHOT-2019-06-21-a-ubuntu18.04/usr/lib/swift/iphoneos/Swift.swiftmodule/arm64.swiftmodule
Кроме того, при возврате к VSCode при наведении указателя мыши на импорт модуля (например, Foundation
) выдается другая ошибка:
error response (Request Failed): did not find primary SourceFile
Я безуспешно пытался исправить эти ошибки.Мне не нужно swift build
для работы, но я просто хочу sourcekit-lsp
, чтобы позволить мне писать код, который использует UIKit / и т.д.
Package.swift
// swift-tools-version:5.0
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "Example",
platforms: [
.iOS("13.0")
],
products: [
// Products define the executables and libraries produced by a package, and make them visible to other packages.
.library(
name: "Example",
targets: ["Example"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.target(
name: "Example",
dependencies: [], swiftSettings: [SwiftSetting.unsafeFlags(["-sdk", "/why/doesnt/this/work/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk", "-target", "arm64-apple-ios13.0"])])
]
)