#if canImport(CoreImage) 在 swift 包管理器中不起作用



我制作使用CoreImage的库。Library 支持 Cocoapods、Carthage 和 Swift 包管理器。

当我在 Swift 包管理器中构建它时,我收到此错误:

Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_CIFilter", referenced from:
objc-class-ref in EIP67Code.swift.o
"_OBJC_CLASS_$_CIImage", referenced from:
objc-class-ref in EIP67Code.swift.o
ld: symbol(s) not found for architecture x86_64

当我使用#if canImport(CoreImage)

#if canImport(CoreImage)
import CoreImage
extension Web3 {
public struct EIP67CodeGenerator {
public static func createImage(from: EIP67Code, scale: Double = 1.0) -> CIImage {
guard let string = from.toString().addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) else { return CIImage() }
guard let data = string.data(using: .utf8, allowLossyConversion: false) else { return CIImage() }
let filter = CIFilter(name: "CIQRCodeGenerator", parameters: ["inputMessage" : data, "inputCorrectionLevel":"L"])
guard var image = filter?.outputImage else { return CIImage() }
let transformation = CGAffineTransform(scaleX: CGFloat(scale), y: CGFloat(scale))
image = image.transformed(by: transformation)
return image
}
}
}
extension Web3.EIP67Code {
public func toImage(scale: Double = 1.0) -> CIImage {
return Web3.EIP67CodeGenerator.createImage(from: self, scale: scale)
}
}
#endif

如果我使用#if os(iOS) || os(tvOS)它工作正常

但是CoreImage可以在macOS上运行,所以我仍然需要这段代码,至少对于迦太基/cocoapods。

没有找到任何解决方案,所以我只是在包中排除了这个文件.swift

.target(
name: "web3swift",
dependencies: ["BigInt", "secp256k1", "keccak", "scrypt", "PromiseKit", "base58"],
exclude: ["ObjectiveC", "Utils/EIP67Code.swift", "Migration-iOS.swift"]
),

也许您的框架中依赖于 CoreImage 的某些功能不支持默认Package.swiftmacOS 10.10 。尝试从 macOS 10.12 开始升级软件包支持。

let package = Package(
name: "Example",
platforms: [
.macOS(.v10_12),
]
)

这是一个链接器错误,它针对已移动或更改名称的框架列出。对于 CoreImage 的特定情况,您可以通过将部署目标设置为 macOS 10.12 或导入 QuartzCore 而不是 CoreImage 来解决问题。

如果打开框架的 tbd 文件 ($(xcrun --sdk macosx --show-sdk-path)/System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage.tbd( 并找到以$ld$install_name$os开头的符号,则此框架受此错误影响,您需要使用比列表中最新install_name更新的部署目标(在本例中,比 10.11 更新(,或者您需要使用其旧名称导入框架(在此名称中, 石英核心(。

相关内容

  • 没有找到相关文章

最新更新