#if canImport (CoreImage) не работает в менеджере пакетов swift - PullRequest
0 голосов
/ 04 октября 2018

Я делаю библиотеку, которая использует CoreImage.Библиотека поддерживает менеджер пакетов Cocoapods, Carthage и Swift.

Когда я собираю его в Swift Package Manager, я получаю эту ошибку:

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, так что мне все еще нужен этот код, по крайней мере, для карфагенов / кокапод

...