Latest Swift Development Snapshot (2021-03-21 or later)1
Windows 10
Windows SDK 10.0.107763 or newer
1 Stable releases are not currently supported as they are built from release branches, and this project requires the latest development snapshot from the main branch.
Building
This project requires the latest Swift snapshot (March 21, 2021 or later). You can use the snapshot binaries from
swift.org or download the nightly build
from Azure.
Debugging
Debugging for Swift/WinRT is complicated by the fact that the code is highly
intertwined with the system code, with the call stack excessively calling
between C++, C, and Swift portions. Most issues tend to occur between the Swift
and the C/C++ aspects of the system. This is most effectively debugged using
WinDBG. The following will enable CodeView debug information generation for The
Swift code, enabling a better experience with WinDBG:
swift build -Xswiftc -g -Xswiftc -debug-info-format=codeview -Xlinker -debug
For debugging with lldb, you can use the following command line to ensure that
the DWARF data is emitted properly:
swift build -Xlinker -debug:dwarf
About Swift/WinRT
This project is highly experimental. It is meant to be a playground for
experimenting with both how COM interfaces are exposed as well as the Win/RT
interfaces. It is modelled from the learnings from
Swift/COM.
The files are split into the name of the type that they bridge, but provide only the barest amount of
sugar: mapping the HRESULT return value to a Swift.Error through the
WinRT.Error type. Additionally, for the cases where it makes sense,
additional sugar is added in a separate file, which appends the +Swift suffix.
The long term goals are to generate the unsuffixed files, either through code
generation or through improvements to the Swift compiler’s “ClangImporter”.
Maturing C++ support should also provide an easier way to bridge the types
through without going through the C ABI layer.
Swift/WinRT
Bridging to WinRT (Windows Runtime) to Swift.
Example
Basic synchronous calls to the Windows Runtime:
Basic asynchronous call into the Windows Runtime:
Build Requirements
1 Stable releases are not currently supported as they are built from release branches, and this project requires the latest development snapshot from the
main
branch.Building
This project requires the latest Swift snapshot (March 21, 2021 or later). You can use the snapshot binaries from swift.org or download the nightly build from Azure.
Debugging
Debugging for Swift/WinRT is complicated by the fact that the code is highly intertwined with the system code, with the call stack excessively calling between C++, C, and Swift portions. Most issues tend to occur between the Swift and the C/C++ aspects of the system. This is most effectively debugged using WinDBG. The following will enable CodeView debug information generation for The Swift code, enabling a better experience with WinDBG:
For debugging with lldb, you can use the following command line to ensure that the DWARF data is emitted properly:
About Swift/WinRT
This project is highly experimental. It is meant to be a playground for experimenting with both how COM interfaces are exposed as well as the Win/RT interfaces. It is modelled from the learnings from Swift/COM.
The files are split into the name of the type that they bridge, but provide only the barest amount of sugar: mapping the
HRESULT
return value to aSwift.Error
through theWinRT.Error
type. Additionally, for the cases where it makes sense, additional sugar is added in a separate file, which appends the+Swift
suffix.The long term goals are to generate the unsuffixed files, either through code generation or through improvements to the Swift compiler’s “ClangImporter”. Maturing C++ support should also provide an easier way to bridge the types through without going through the C ABI layer.