no such module ‘UIKit’

Hai Feng Kao
4 min readMar 9, 2020

--

最近在折騰vscode的swift自動補完功能
來總結一下為什麼sourcekit-lsp會找不到UIKit的原因

  1. 沒有打開workspace:如果vscode只有打開檔案,沒有指定專案的workspace,那麼Maintained Swift Development Environment[1]會回報錯誤

Sourcekit需要知道.build的內容,這個資料夾通常是放在專案的的根目錄下面(就是workspace)

2. 參考[2]的做法,修改~/.vscode/extensions/vknabel.vscode-swift-development-environment-2.9.0/out/src/clientMain.js

在sourcekitLspServerOptions這個函數裡面加入-sdk和-target的參數

3. 檢查package.swift,確定所有要自動補完的swift檔案都有在path指定的資料夾內(如果swift檔案都是放在預設的Sources資料夾裡就不用寫path)。sourcekit-lsp是靠swift build出來的結果來達成自動補完的功能,如果swift build沒有編譯到這個swift檔案,sourcekit-lsp就會找不到UIKit(但是它還是找得到Foundation,見鬼了

4. Maintained Swift Development Environment的設定,除了要設sourcekit-lsp的位置和xctoolchain的位置以外,也要記得設swift build的參數

因為swift build預設是找不到UIKit的

要加上sdk和target的參數才行

swift build -Xswiftc “-sdk” -Xswiftc “/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk” -Xswiftc “-target” -Xswiftc “x86_64-apple-ios12.1-simulator”

最後就大功告成

題外話,如果是用sourcekit-lsp內建的vs code extension[3],在設定裡開啟trace mode之後,可以在Output的地方看到sourcekit-lsp server的log(右上角要選SourceKit Language Server。

參考資料:

[1] Maintained Swift Development Environment

[2]Developing Swift for iOS in VSCode

[3]sourcekit-lsp內建的vscode extension

--

--

Responses (1)