由 UIImage.resize (Xcode 11) 引起的架构 arm64 的未定义符号
Undefined symbols for architecture arm64 caused by UIImage.resize (Xcode 11)
尝试在 Bitrise 中构建应用程序(使用 fastlane)时出现以下错误:
Undefined symbols for architecture arm64
> Symbol: (extension in Swift):Swift.Sequence< where A.Element: Swift.Comparable>.max() -> A.Element?
> Referenced from: (extension in myapp):__C.UIImage.resize(maxDimension: Swift.Double) -> __C.UIImage in UIImage+Resize.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我不知道这里到底出了什么问题。在本地构建和归档是成功的。我在 Whosebug 上针对类似问题尝试了一些解决方案,但它们指出了不同的问题。或者我不知道哪个库链接不正确。
更新:
resize函数是我自己添加的对UIImage的扩展:
import Foundation
extension UIImage {
func resize(maxDimension: Double) -> UIImage {
let maxCG = CGFloat(maxDimension)
if [self.size.width, self.size.height].max()! < maxCG {
return self
}
let factor = self.size.width > self.size.height ? maxCG / self.size.width : maxCG / self.size.height
let canvasSize = CGSize(width: self.size.width * factor, height: self.size.height * factor)
UIGraphicsBeginImageContextWithOptions(canvasSize, false, self.scale)
defer { UIGraphicsEndImageContext() }
self.draw(in: CGRect(origin: .zero, size: canvasSize))
return UIGraphicsGetImageFromCurrentImageContext()!
}
}
解决:问题出在这部分代码:
[self.size.width, self.size.height].max()!
我将其替换为:
let referenceLength = self.size.width >= self.size.height ? self.size.width : self.size.height;
现在可以了。
尝试在 Bitrise 中构建应用程序(使用 fastlane)时出现以下错误:
Undefined symbols for architecture arm64
> Symbol: (extension in Swift):Swift.Sequence< where A.Element: Swift.Comparable>.max() -> A.Element?
> Referenced from: (extension in myapp):__C.UIImage.resize(maxDimension: Swift.Double) -> __C.UIImage in UIImage+Resize.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我不知道这里到底出了什么问题。在本地构建和归档是成功的。我在 Whosebug 上针对类似问题尝试了一些解决方案,但它们指出了不同的问题。或者我不知道哪个库链接不正确。
更新:
resize函数是我自己添加的对UIImage的扩展:
import Foundation
extension UIImage {
func resize(maxDimension: Double) -> UIImage {
let maxCG = CGFloat(maxDimension)
if [self.size.width, self.size.height].max()! < maxCG {
return self
}
let factor = self.size.width > self.size.height ? maxCG / self.size.width : maxCG / self.size.height
let canvasSize = CGSize(width: self.size.width * factor, height: self.size.height * factor)
UIGraphicsBeginImageContextWithOptions(canvasSize, false, self.scale)
defer { UIGraphicsEndImageContext() }
self.draw(in: CGRect(origin: .zero, size: canvasSize))
return UIGraphicsGetImageFromCurrentImageContext()!
}
}
解决:问题出在这部分代码:
[self.size.width, self.size.height].max()!
我将其替换为:
let referenceLength = self.size.width >= self.size.height ? self.size.width : self.size.height;
现在可以了。