URLSession from Foundation are not known (Swift 5.5.2; error occurring with
import Foundation, no other import). So is Foundation still incomplete on Windows? If yes, is there a chance that this will be implemented soon, and how can I know that something is not supported on a certain platform without trying?
I would split your question into two parts.
URLSession and other types related to network requests are placed in
FoundationNetworking instead of
Foundation on non-Darwin platforms. This helps to strip
libcurl dependency from
Foundation because it’s heavy and less likely used.
sleep is not an interface of
Foundation. It is exposed as a part of the C standard library (
Darwin.C on Apple systems or
Glibc on Linux/BSD), which is imported by
ucrt on Windows doesn’t expose
sleep, that’s why you can’t find it by importing
In fact, such exposure of APIs from an imported third-party library is not ideal. Some community members are working on import access control, which will introduce hiding external APIs by default, see [Pre-Pitch] Import access control: a modest proposal. If you want to use
sleep, you’d better import
The open-source, Swift-based implementation of
Foundation is available and under development at GitHub - apple/swift-corelibs-foundation: The Foundation Project, providing core utilities, internationalization, and OS independence. All toolchains available at Swift.org uses the open-source implementation, so you can easily check them out.
@stevapple answered the specifics of your issue. To answer the general question, yes, Foundation is still incomplete on non-Apple platforms. My experience is mainly limited to
URLSession, but it still has limited support for the full set of features we have on Apple platforms, like customized redirects and caching. The simpler parts generally work though.
Thank you both for your answers.
Not ideal to have such a difference. Should then be the same on macOS.
Q: How can I then "sleep" on Windows?
It it will be complete at some point, OK. If not, the compiler should be able to warn when using parts of the Foundation & Co. that are not implemented on all platforms (but I have no idea how this should work). At least the documentation should be accordingly.
It generally warns when a feature is completely unavailable, but abilities within a feature do not, like the
URLSession delegate methods which may not be called or behave differently.
The portable spelling is