Mac から離れている間でも、VSCode を使用して Linux マシンで Swift コードのドラフトを作成できるようにしたいと考えています。sourcekit-lspしかし、iOS SDK からモジュールを認識させることができません。
私は時々 Mac にアクセスしますが、ほとんどは Linux マシンを使用しています。そのため、Mac でアプリをビルドできますが、VSCode を使用して Linux マシンで Swift コードを事前にドラフトできるようにしたいと考えています。
sourcekit-lspしかし、iOS SDK からモジュールを認識させることができません。TypeScript 開発者の場合と似てreferences.d.tsいますが、迅速で、VSCode/sourcekit-lsp のみがそれを気にします。
テキストエディタで調べたところ、必要なものを提供しているように見えるさまざまなファイルがXcode.app見つかりましたが、それらを見る方法がわかりません。.modulemap.swiftinterfacesourcekit-lsp
強調しておきますが、私はLinux マシンで iOS コードをコンパイルできるとは思っていませんし、そうしたいとも思っていません。私のトラブルシューティングでは、
swift buildより意味のあるエラーを見つけるためだけに使用しました。私は実際のビルドが行われるとは思っていません - それが Mac の目的です。UIKit などのネイティブ モジュールのオートコンプリートを VSCode で使用できるようにしたいだけなので、後でそれを Mac にコピーしてテストできます。
奇妙なワークフローですが、私が今アクセスできるものです。
設定
フレームワーク/SDK にアクセスできるように、Xcode 11 ベータ版をダウンロードして解凍しました。sourcekit-lspただし、さまざまなフレームワークのヘッダーを理解する方法が見つからないようです。
また、swift は の下にインストールされ/usr/local/bin/swift-5.1-DEVELOPMENT-SNAPSHOT-2019-06-21-a-ubuntu18.04ます。
sourcekit-lspは多くのエラーをログに記録しないため、うまくいけば何かが見つかるまで、できるだけ「動作」に近づくように何度も試行することにしましたswift build。sourcekit-lsp
試行錯誤
これまで、さまざまなコマンドを試してきました。しかし、私はこれまでに得た最高の進歩をたどります。
swiftcSDK と 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
これらのエラーを修正しようとしましたが、成功しませんでした。働く必要はありませんが、UIKit などを使用するコードを書けるようswift buildにしたいだけです。sourcekit-lsp
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"])])
]
)