This file provides guidance to AI agents when working with code in this repository.
OpenSwiftUI is an open source implementation of Apple's SwiftUI framework, designed to:
- Build GUI apps on non-Apple platforms (Linux, Windows)
- Diagnose and debug SwiftUI issues on Apple platforms
- Maintain API compatibility with SwiftUI
This project is in active development and contains multiple Swift packages with extensive environment-based configuration.
./Scripts/build.sh
# Or directly: swift build./Scripts/build_swiftinterface.sh
# Generates module interfaces for library evolutionThe build system uses many environment variables for configuration:
OPENSWIFTUI_BUILD_FOR_DARWIN_PLATFORM: Build for Darwin platforms (default: true on macOS)OPENSWIFTUI_DEVELOPMENT: Enable development mode featuresOPENSWIFTUI_USE_LOCAL_DEPS: Use local dependency paths instead of remote reposOPENSWIFTUI_LIBRARY_EVOLUTION: Enable library evolution supportOPENSWIFTUI_COMPATIBILITY_TEST: Run compatibility tests with SwiftUI
swift testswift test --filter OpenSwiftUICoreTests
swift test --filter OpenSwiftUICompatibilityTests
swift test --filter OpenSwiftUISymbolDualTestsswift test --enable-code-coverageswift test --list-testsThe project requires cloning additional repositories in the same parent directory:
cd ..
git clone https://github.com/OpenSwiftUIProject/OpenAttributeGraph.git
git clone https://github.com/OpenSwiftUIProject/OpenRenderBox.git
git clone https://github.com/OpenSwiftUIProject/DarwinPrivateFrameworks.git- OpenSwiftUI_SPI: System Programming Interface and low-level utilities
- OpenSwiftUICore: Core framework implementation with animations, layout, graphics
Use swift-docc format when writing documentation.
Follow SwiftUI documentation style.
Since CDDefaultCodeListingLanguage is Swift, stop using swift and to wrap Swift code example in documentation. Instead just use a new line + 4 space indent.
Example:
/// Example code:
///
/// @main
/// struct MyApp: App {
/// var body: some View {
/// WindowGroup {
/// ContentView()
/// }
/// .environment(ProfileService.currentProfile)
/// }
/// }
///
public protocol App {}