- Notifications
You must be signed in to change notification settings - Fork0
The Foundation Project, providing core utilities, internationalization, and OS independence
License
daveinglis/swift-corelibs-foundation
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
The Foundation framework defines a base layer of functionality that is required for almost all applications. It provides primitive classes and introduces several paradigms that define functionality not provided by either the Objective-C runtime and language or Swift standard library and language.
It is designed with these goals in mind:
- Provide a small set of basic utility classes and data structures.
- Make software development easier by introducing consistent conventions.
- Support internationalization and localization, to make software accessible to users around the world.
- Provide a level of OS independence, to enhance portability.
There is more information on the Foundation frameworkhere.
This project,swift-corelibs-foundation, provides a compatibility implementation of the Foundation API for platforms where there is no Objective-C runtime. On macOS, iOS, and other Apple platforms, apps should use the Foundation that comes with the operating system.
Foundation builds in different configurations and is composed of several projects.
graph TD; FF[Foundation.framework]-->SF subgraph GitHub SCLF[swift-corelibs-foundation]-->SF SF[swift-foundation]-->FICU[swift-foundation-icu] SF-->SC[swift-collections] endA shared library shipped in the Swift toolchain, written in Swift. It provides the core implementation of many key types, includingURL,Data,JSONDecoder,Locale,Calendar, and more in theFoundationEssentials andFoundationInternationalization modules. Its source code is shared across all platforms.
swift-foundation depends on a limited set of packages, primarilyswift-collections andswift-syntax.
A shared library shipped in the Swift toolchain. It provides compatibility API for clients that need pre-Swift API from Foundation. It is written in Swift and C. It provides, among other types,NSObject, class-based data structures,NSFormatter, andNSKeyedArchiver. It re-exports theFoundationEssentials andFoundationInternationalization modules, allowing compatibility for source written before the introduction of theswift-foundation project. As these implementations are distinct from those written in Objective-C, the compatibility is best-effort only.
swift-corelibs-foundation builds for non-Darwin platforms only. It installs theFoundation umbrella module,FoundationXML, andFoundationNetworking.
A private library for Foundation, wrapping ICU. Using a standard version of ICU provides stability in the behavior of our internationalization API, and consistency with the latest releases on Darwin platforms. It is imported from theFoundationInternationalization module only. Clients that do not need API that relies upon the data provided by ICU can importFoundationEssentials instead.
Aframework built into macOS, iOS, and all other Darwin platforms. It is written in a combination of C, Objective-C, and Swift. The Foundation framework compiles the sources fromswift-foundation into its binary and provides oneFoundation module that contains all features.
Here is a simplemain.swift file which uses Foundation. This guide assumes you have already installed a version of the latestSwift binary distribution.
import Foundation// Make a URLComponents instanceletswifty=URLComponents(string:"https://swift.org")!// Print something useful about the URLprint("\(swifty.host!)")// Output: "swift.org"
You will want to use theSwift Package Manager to build your Swift apps.
swift-corelibs-foundation builds as a standalone project using Swift Package Manager. Simply useswift build in the root of the checkout to build the project.
swift-corelibs-foundation also builds as part of the toolchain for non-Darwin platforms. Instructions on building the toolchain are available in theSwift project.
When building Foundation as a standalone project, it requires you to provide some dependencies that it will link during the build. SwiftPM already fetches most of these dependencies and on Linux the remaining dependencies (dispatch, zlib, curl, libxml) are found in the Swift toolchain or on the host OS. However, Windows does not ship with zlib/curl/libxml on the host OS. In order to build swift-corelibs-foundation as a package on Windows, you must first checkout and build these dependenies before runningswift build as recommended above. To do this, you can build the provided CMake target which (instead of building Foundation via CMake) will checkout and build these 3 dependencies via CMake and provide environment variables that will connect the SwiftPM build to these dependencies. To build these targets, run the following commands:
cmake -G Ninja -B <build folder> -DFOUNDATION_SWIFTPM_DEPS=YEScmake --build <build folder> --target --target WindowsSwiftPMDependenciesAfter running these commands, the output will include a list of environment variables to set. After setting these environment variables, you can runswift test/swift build just like on Linux in order to build swift-corelibs-foundation with an existing Swift toolchain.
We welcome contributions to Foundation! Please see theknown issues page if you are looking for an area where we need help. We are also standing by on themailing lists to answer questions about what is most important to do and what we will accept into the project.
About
The Foundation Project, providing core utilities, internationalization, and OS independence
Resources
License
Contributing
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Languages
- C63.7%
- Swift35.2%
- Other1.1%