vknabel / vscode-swift-development-environment

New home of Swift Development Environment for VS Code
https://marketplace.visualstudio.com/items?itemName=vknabel.vscode-swift-development-environment
Apache License 2.0
175 stars 14 forks source link

autocomplete for UIKit not working #55

Closed haifengkao closed 5 years ago

haifengkao commented 5 years ago

the webpage says SDE supports UIKit. however, adding the settings from the webpage doesn't work at all.

  "swift.targets": [
    {
      "name": "TT",
      "path": "TT",
      "sources": ["**/*.swift"],
      "compilerArguments": [
        "-sdk",
        "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk",
        "-target",
        "arm64-apple-ios11.0"
      ]
    }
  ]

The diagnostics still says no such module UIKit Then I add the parameters to swiftBuildingParams

"sde.swiftBuildingParams" : [
     "-target", "arm64-apple-ios11.0"
  ]

The diagnostics error is gone, but the UIKit autocomplete is still missing.

The trace

index2 0
[request] {
  key.request: source.request.codecomplete,
  key.sourcefile: "/Users/lion/tmp/SwiftTT/Sources/Hi/Hi.swift",
  key.offset: 322,
  key.compilerargs: ["-target","x86_64-apple-macosx10.10","-swift-version","5","-enable-batch-mode","-index-store-path","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/index/store","-sdk","/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk","-F","/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks","-Onone","-g","-enable-testing","-j16","-DSWIFT_PACKAGE","-DDEBUG","-module-cache-path","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/ModuleCache","-parseable-output","-module-name","Hi","-Onone","-Xcc","-I","-Xcc","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug","-I","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug","-Xcc","-F","-Xcc","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug","-F","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug","/Users/lion/tmp/SwiftTT/Sources/Hi/Hi.swift"],
  key.sourcetext: "import Foundation\nimport UIKit\nstruct Hi {\n    var text = \"Hello, World!\"\n}\n\nfunc tt(with value: Int) {\n\n    var v = [1, 2, 3]\n    v.append(5)\n    v.append(contentsOf: hi)\n    v.append(contentsOf: Sequence)\n    v.append(contentsOf: te)\n    \n    let view = UIView()\n    v.append(contentsOf: hioh)\n    let b = Hi()\n    view.\n\n\n}\n"
}

[SourcekiteResponseHandler] 2
{
  "key.results" : [

  ]
}

It's strange that the target is still x86_64-apple-macosx10.10. It seems that the setting in settings.json doesn't apply to anywhere

vknabel commented 5 years ago

Hi @haifengkao. Thanks for your feedback and the good bug report!

That's indeed strange and a bug! Do you have a Package.swift file including a Hi-target? This might override your settings. Does swift package clean and removing the target from your Package.swift help? Does a restart of the vscode-window help?

haifengkao commented 5 years ago

Do you have a Package.swift file including a Hi-target? Yes

let package = Package(
name: "Hi",
platforms: [
.iOS(.v10)
],
haifengkao commented 5 years ago

I think the problem comes from swift build I saw SDE get the compiler parameters from .build/debug.yaml If I use the following command

swift build -Xswiftc "-target" -Xswiftc "x86_64-apple-ios12.1-simulator" -Xswiftc "-sdk" -Xswiftc "/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator13.0.sdk"

to build the project. The debug.yaml will look like

"C.RxTest-debug.module":
    tool: swift-compiler
    executable: "/Library/Developer/Toolchains/swift-5.1-DEVELOPMENT-SNAPSHOT-2019-08-27-a.xctoolchain/usr/bin/swiftc"
    module-name: "RxTest"
    module-output-path: "/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.swiftmodule"
    inputs: ["/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/Any+Equatable.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/Bag.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/ColdObservable.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/Deprecated.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/DeprecationWarner.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/Event+Equatable.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/HotObservable.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/Recorded+Event.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/Recorded.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/RxTest.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/Subscription.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/TestScheduler.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/TestSchedulerVirtualTimeConverter.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/TestableObservable.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/TestableObserver.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/XCTest+Rx.swift","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxSwift.swiftmodule"]
    outputs: ["/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/Any+Equatable.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/Bag.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/ColdObservable.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/Deprecated.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/DeprecationWarner.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/Event+Equatable.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/HotObservable.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/Recorded+Event.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/Recorded.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/RxTest.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/Subscription.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/TestScheduler.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/TestSchedulerVirtualTimeConverter.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/TestableObservable.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/TestableObserver.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/XCTest+Rx.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.swiftmodule"]
    import-paths: ["/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug"]
    temps-path: "/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build"
    objects: ["/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/Any+Equatable.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/Bag.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/ColdObservable.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/Deprecated.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/DeprecationWarner.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/Event+Equatable.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/HotObservable.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/Recorded+Event.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/Recorded.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/RxTest.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/Subscription.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/TestScheduler.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/TestSchedulerVirtualTimeConverter.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/TestableObservable.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/TestableObserver.swift.o","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxTest.build/XCTest+Rx.swift.o"]
    other-args: ["-target","x86_64-apple-macosx10.10","-swift-version","4","-enable-batch-mode","-index-store-path","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/index/store","-sdk","/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk","-F","/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks","-Onone","-g","-enable-testing","-j16","-DSWIFT_PACKAGE","-DDEBUG","-Xcc","-fmodule-map-file=/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/RxAtomic.build/module.modulemap","-I","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxAtomic/include","-module-cache-path","/Users/lion/tmp/SwiftTT/.build/x86_64-apple-macosx/debug/ModuleCache","-parseable-output","-Xfrontend","-color-diagnostics","-sdk","/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator13.0.sdk","-target","x86_64-apple-ios12.1-simulator"]
    sources: ["/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/Any+Equatable.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/Bag.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/ColdObservable.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/Deprecated.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/DeprecationWarner.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/Event+Equatable.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/HotObservable.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/Recorded+Event.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/Recorded.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/RxTest.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/Subscription.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/TestScheduler.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/TestSchedulerVirtualTimeConverter.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/TestableObservable.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/TestableObserver.swift","/Users/lion/tmp/SwiftTT/.build/checkouts/RxSwift/Sources/RxTest/XCTest+Rx.swift"]
    is-library: true
    enable-whole-module-optimization: false
    num-threads: "16"

If I remove the irrelevant flags in other-args, I will get

other-args: ["-target","x86_64-apple-macosx10.10",
"-sdk","/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk", 
"-sdk","/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator13.0.sdk",
"-target","x86_64-apple-ios12.1-simulator"]

Despite the SDK and target are specified in -Swiftc parameters, swift build will still insert -target x86_64-apple-macosx10.10. The above process doesn't involve SDE at all, so I believe it is Apple's bug.

My swift is

swift --version                             
Apple Swift version 5.1-dev (LLVM b47beb8a70, Swift e90298ce10)
Target: x86_64-apple-darwin18.7.0

A possible workaround is to remove the incorrect target x86_64-apple-macosx10.10 and incorrect SDK /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk from the debug.yaml.

vknabel commented 5 years ago

Hi @haifengkao. Sorry for the late response, but I didn't have enough time earlier. Summed up: the fix has been released as 2.8.1.


After a bit of debugging I found out that Hi.swift within Sources/Hi (from the configs) wasn't recognized as /Users/lion/tmp/SwiftTT/Sources/Hi/Hi.swift (from debug.yaml). Both were treated as different files, because the latter was absolute. If both would've been relative, every would've been fine. 👍