Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions BLS/reset.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/bash

# A `realpath` alternative using the default C implementation.
filepath() {
[[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}

VERSION=${DARWINPRIVATEFRAMEWORKS_TARGET_RELEASE:-2024}
FRAMEWORK_ROOT="$(dirname $(filepath $0))/$VERSION"

framework_name=BacklightServices

rm -rf ${FRAMEWORK_ROOT}/${framework_name}.xcframework
4 changes: 2 additions & 2 deletions Example/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,8 @@ let project = Project(
product: .app,
bundleId: "\(bundleIdPrefix).GFExample",
deploymentTargets: .multiplatform(
iOS: "26.0",
macOS: "26.0"
iOS: "26.2",
macOS: "26.2"
),
infoPlist: .extendingDefault(with: defaultInfoPlist),
sources: ["GFExample/**"],
Expand Down
1 change: 1 addition & 0 deletions GF/latest
196 changes: 196 additions & 0 deletions Package@swift-6.2.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
// swift-tools-version: 6.2

import PackageDescription

/* GENERATED BY SPMManifestTool BEGIN */
/* DO NOT EDIT */

public protocol EnvironmentProvider {
func value(forKey key: String) -> String?
}

import PackageDescription
public struct PackageContextEnvironmentProvider: EnvironmentProvider {
public init() {}

public func value(forKey key: String) -> String? {
Context.environment[key]
}
}

public final class EnvManager {
nonisolated(unsafe) public static let shared = EnvManager()

private var domains: [String] = []
private var environmentProvider: EnvironmentProvider

/// When true, append raw key as fallback when searching in domains
public var includeFallbackToRawKey: Bool = false

private init() {
self.environmentProvider = PackageContextEnvironmentProvider()
}

/// Set a custom environment provider (useful for testing)
public func setEnvironmentProvider(_ provider: EnvironmentProvider) {
self.environmentProvider = provider
}

/// Reset domains and environment provider (useful for testing)
public func reset() {
domains.removeAll()
includeFallbackToRawKey = false
self.environmentProvider = PackageContextEnvironmentProvider()
}

public func register(domain: String) {
domains.append(domain)
}

public func withDomain<T>(_ domain: String, perform: () throws -> T) rethrows -> T {
domains.append(domain)
defer { domains.removeAll { $0 == domain } }
return try perform()
}

private func envValue<T>(rawKey: String, default defaultValue: T?, searchInDomain: Bool, parser: (String) -> T?) -> T? {
func parseEnvValue(_ key: String) -> (String, T)? {
guard let value = environmentProvider.value(forKey: key),
let result = parser(value) else { return nil }
return (value, result)
}
var keys: [String] = searchInDomain ? domains.map { "\($0.uppercased())_\(rawKey)" } : []
if !searchInDomain || includeFallbackToRawKey {
keys.append(rawKey)
}
for key in keys {
if let (value, result) = parseEnvValue(key) {
print("[Env] \(key)=\(value) -> \(result)")
return result
}
}
let primaryKey = keys.first ?? rawKey
if let defaultValue {
print("[Env] \(primaryKey) not set -> \(defaultValue)(default)")
}
return defaultValue
}

public func envBoolValue(rawKey: String, default defaultValue: Bool? = nil, searchInDomain: Bool) -> Bool? {
envValue(rawKey: rawKey, default: defaultValue, searchInDomain: searchInDomain) { value in
switch value {
case "1": true
case "0": false
default: nil
}
}
}

public func envIntValue(rawKey: String, default defaultValue: Int? = nil, searchInDomain: Bool) -> Int? {
envValue(rawKey: rawKey, default: defaultValue, searchInDomain: searchInDomain) { Int($0) }
}

public func envStringValue(rawKey: String, default defaultValue: String? = nil, searchInDomain: Bool) -> String? {
envValue(rawKey: rawKey, default: defaultValue, searchInDomain: searchInDomain) { $0 }
}
}

public func envBoolValue(_ key: String, default defaultValue: Bool = false, searchInDomain: Bool = true) -> Bool {
EnvManager.shared.envBoolValue(rawKey: key, default: defaultValue, searchInDomain: searchInDomain)!
}

public func envIntValue(_ key: String, default defaultValue: Int = 0, searchInDomain: Bool = true) -> Int {
EnvManager.shared.envIntValue(rawKey: key, default: defaultValue, searchInDomain: searchInDomain)!
}

public func envStringValue(_ key: String, default defaultValue: String, searchInDomain: Bool = true) -> String {
EnvManager.shared.envStringValue(rawKey: key, default: defaultValue, searchInDomain: searchInDomain)!
}

public func envStringValue(_ key: String, searchInDomain: Bool = true) -> String? {
EnvManager.shared.envStringValue(rawKey: key, searchInDomain: searchInDomain)
}

/* GENERATED BY SPMManifestTool END */
EnvManager.shared.register(domain: "DarwinPrivateFrameworks")
EnvManager.shared.register(domain: "OpenSwiftUI")

// MARK: - Env and config

#if os(macOS)
// NOTE: #if os(macOS) check is not accurate if we are cross compiling for Linux platform. So we add an env key to specify it.
let buildForDarwinPlatform = envBoolValue("BUILD_FOR_DARWIN_PLATFORM", default: true)
#else
let buildForDarwinPlatform = envBoolValue("BUILD_FOR_DARWIN_PLATFORM")
#endif

let releaseVersion = envIntValue("TARGET_RELEASE", default: 2025)
let libraryEvolutionCondition = envBoolValue("LIBRARY_EVOLUTION", default: buildForDarwinPlatform)


// MARK: - Shared Settings

var sharedSwiftSettings: [SwiftSetting] = [
.enableUpcomingFeature("InternalImportsByDefault"),
.enableExperimentalFeature("Extern"),
.swiftLanguageMode(.v5),
.define("ATTRIBUTEGRAPH_RELEASE_\(releaseVersion)"),
]

if libraryEvolutionCondition {
// NOTE: -enable-library-evolution will cause module verify failure for `swift build`.
// Either set OPENATTRIBUTEGRAPH_LIBRARY_EVOLUTION=0 or add `-Xswiftc -no-verify-emitted-module-interface` after `swift build`
sharedSwiftSettings.append(.unsafeFlags(["-enable-library-evolution", "-no-verify-emitted-module-interface"]))
}

let platforms: [SupportedPlatform] = switch releaseVersion {
case 2025: [.iOS(.v26), .macOS(.v26), .macCatalyst(.v26), .tvOS(.v26), .watchOS(.v26), .visionOS(.v26)]
case 2024: [.iOS(.v18), .macOS(.v15), .macCatalyst(.v18), .tvOS(.v18), .watchOS(.v10), .visionOS(.v2)]
case 2021: [.iOS(.v15), .macOS(.v12), .macCatalyst(.v15), .tvOS(.v15), .watchOS(.v7)]
default: []
}

let agVersion = releaseVersion >= 2025 ? "latest" : "\(releaseVersion)"

let package = Package(
name: "DarwinPrivateFrameworks",
platforms: platforms,
products: [
.library(name: "AttributeGraph", targets: ["AttributeGraph", "_AttributeGraphDeviceSwiftShims"]),
.library(name: "RenderBox", targets: ["RenderBox"]),
.library(name: "CoreUI", targets: ["CoreUI"]),
.library(name: "BacklightServices", targets: ["BacklightServices"]),
.library(name: "SFSymbols", targets: ["SFSymbols"]),
.library(name: "CoreSVG", targets: ["CoreSVG"]),
.library(name: "Gestures", targets: ["Gestures", "_GesturesDeviceSwiftShims"]),
],
targets: [
.binaryTarget(name: "AttributeGraph", path: "AG/\(agVersion)/AttributeGraph.xcframework"),
.target(
name: "_AttributeGraphDeviceSwiftShims",
dependencies: ["AttributeGraph"],
path: "AG/DeviceSwiftShims",
swiftSettings: sharedSwiftSettings
),
.binaryTarget(name: "RenderBox", path: "RB/2024/RenderBox.xcframework"),
.binaryTarget(name: "CoreUI", path: "CoreUI/2024/CoreUI.xcframework"),
.binaryTarget(name: "BacklightServices", path: "BLS/2024/BacklightServices.xcframework"),
.binaryTarget(name: "SFSymbols", path: "SF/2024/SFSymbols.xcframework"),
.binaryTarget(name: "CoreSVG", path: "CoreSVG/2024/CoreSVG.xcframework"),
.binaryTarget(name: "Gestures", path: "GF/2025/Gestures.xcframework"),
.target(
name: "_GesturesDeviceSwiftShims",
dependencies: ["Gestures"],
path: "GF/DeviceSwiftShims",
swiftSettings: sharedSwiftSettings
),
.plugin(
name: "UpdateXCFrameworks",
capability: .command(
intent: .custom(verb: "update-xcframeworks", description: "Update xcframeworks"),
permissions: [.writeToPackageDirectory(reason: "Update xcframeworks")]
)
),
],
cxxLanguageStandard: .cxx20
)
9 changes: 9 additions & 0 deletions Plugins/UpdateXCFrameworks/UpdateXCFrameworksCommand.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,18 @@ struct UpdateXCFrameworksCommand: CommandPlugin {
// CoreUI
try run(context: context, command: "CoreUI/reset.sh", environment: ["DARWINPRIVATEFRAMEWORKS_TARGET_RELEASE": "2024"])
try run(context: context, command: "CoreUI/update.sh", environment: ["DARWINPRIVATEFRAMEWORKS_TARGET_RELEASE": "2024"])
// BacklightServices
try run(context: context, command: "BLS/reset.sh", environment: ["DARWINPRIVATEFRAMEWORKS_TARGET_RELEASE": "2024"])
try run(context: context, command: "BLS/update.sh", environment: ["DARWINPRIVATEFRAMEWORKS_TARGET_RELEASE": "2024"])
// SFSymbols
try run(context: context, command: "SF/reset.sh", environment: ["DARWINPRIVATEFRAMEWORKS_TARGET_RELEASE": "2024"])
try run(context: context, command: "SF/update.sh", environment: ["DARWINPRIVATEFRAMEWORKS_TARGET_RELEASE": "2024"])
// CoreSVG
try run(context: context, command: "CoreSVG/reset.sh", environment: ["DARWINPRIVATEFRAMEWORKS_TARGET_RELEASE": "2024"])
try run(context: context, command: "CoreSVG/update.sh", environment: ["DARWINPRIVATEFRAMEWORKS_TARGET_RELEASE": "2024"])
// Gestures
try run(context: context, command: "GF/reset.sh", environment: ["DARWINPRIVATEFRAMEWORKS_TARGET_RELEASE": "2025"])
try run(context: context, command: "GF/update.sh", environment: ["DARWINPRIVATEFRAMEWORKS_TARGET_RELEASE": "2025"])
}

private func run(context: PackagePlugin.PluginContext, command: String, environment: [String: String]) throws {
Expand Down
Loading