Swift代码单独编译正常,打包为XCode Swift Package时遇版本错误及公开化问题
问题一:Swift Package版本兼容错误解决方案
出现“'Path'仅在macOS 10.15或更高版本可用”错误,是因为Swift Package默认的目标平台最低版本低于10.15,而单独运行时Xcode项目的目标版本符合要求。解决方式有两种:
方式一:指定Package最低兼容版本
在Package.swift中明确设置macOS最低版本为10.15,确保所有target都遵循该版本要求。示例代码:let package = Package( name: "YourPackageName", platforms: [ .macOS(.v10_15), ], products: [ .library(name: "YourPackageName", targets: ["YourPackageName"]), ], targets: [ .target(name: "YourPackageName"), .testTarget(name: "YourPackageNameTests", dependencies: ["YourPackageName"]), ] )方式二:兼容旧版本系统
如果需要支持macOS 10.15以下版本,在使用Path的代码块中添加版本判断,替换为旧版API(NSBezierPath)实现。示例代码:#if os(macOS) @available(macOS 10.15, *) private func createRoundedPath() -> Path { // 基于Path的圆角实现代码 } private func createLegacyRoundedPath() -> NSBezierPath { // 基于NSBezierPath的圆角实现代码 } #endif
问题二:RectCorner结构体的public实现修复
当前代码的初始化方法错误覆盖了传入的rawValue,且静态成员未设为public,导致外部无法正常使用。修正后的代码如下:
// defines OptionSet, which corners to be rounded – same as UIRectCorner public struct RectCorner: OptionSet, Sendable { public let rawValue: Int // 正确初始化:直接赋值传入的rawValue public init(rawValue: Int) { self.rawValue = rawValue } // 静态成员添加public修饰,允许外部访问 public static let topLeft = RectCorner(rawValue: 1 << 0) public static let topRight = RectCorner(rawValue: 1 << 1) public static let bottomRight = RectCorner(rawValue: 1 << 2) public static let bottomLeft = RectCorner(rawValue: 1 << 3) public static let allCorners: RectCorner = [.topLeft, .topRight, .bottomLeft, .bottomRight] }
关键修正点:
- 初始化方法不再强制设置为
allCorners的rawValue,而是直接使用传入的值 - 所有预定义的静态角落选项添加
public修饰符,确保外部模块可以访问
内容的提问来源于stack exchange,提问作者iPadawan
相关产品推荐
相关产品推荐

