带有 Swift 3 和 Xcode 9 GM 的 Apple Mach-O 链接器 (ld) 错误组
Posted
技术标签:
【中文标题】带有 Swift 3 和 Xcode 9 GM 的 Apple Mach-O 链接器 (ld) 错误组【英文标题】:Apple Mach-O Linker (ld) Error Group with Swift 3 & Xcode 9 GM 【发布时间】:2017-09-13 15:57:48 【问题描述】:在 GM Xcode(和 ios 11)之前运行良好。现在我收到这些错误:
Apple Mach-O Linker (ld) Error Group
"__T0So20AVCapturePhotoOutputC12AVFoundation01_abC16SwiftNativeTypesACWP", referenced from:
xxxxxxxxxx
"__T012AVFoundation37_AVCapturePhotoOutputSwiftNativeTypesPAAE012availableRawc11PixelFormatG0SaySo8NSNumberCGfg", referenced from:
xxxxxxxxx
" "__T0So22AVCapturePhotoSettingsC12AVFoundation01_abC16SwiftNativeTypesACWP", referenced from:
xxxxxxxxxx
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
它指向的一些线是:
photoSettings = AVCapturePhotoSettings(rawPixelFormatType: OSType(self.photoOutput.availableRawPhotoPixelFormatTypes.first!))
photoSettings.previewPhotoFormat = [kCVPixelBufferPixelFormatTypeKey as String: photoSettings.availablePreviewPhotoPixelFormatTypes.first!.uint32Value,
kCVPixelBufferWidthKey as String: 3024, kCVPixelBufferHeightKey as String: 3024]
还有:
let rawFormat = self.photoOutput.availableRawPhotoPixelFormatTypes.first!.uint32Value
photoSettings = AVCapturePhotoSettings(rawPixelFormatType: OSType(rawFormat),
processedFormat: [AVVideoCodecKey : AVVideoCodecJPEG,
AVVideoCompressionPropertiesKey : [AVVideoQualityKey : 1.0]] as [String : Any])
photoSettings.previewPhotoFormat = [kCVPixelBufferPixelFormatTypeKey as String: photoSettings.availablePreviewPhotoPixelFormatTypes.first!.uint32Value,
kCVPixelBufferWidthKey as String: 3024,
kCVPixelBufferHeightKey as String: 3024]
【问题讨论】:
【参考方案1】:2017 年 9 月 15 日更新:
苹果官方回应:
我们深表歉意。对于使用 Swift 3.2 或 Swift 4.0 的应用程序,有几个 AVFoundation 捕获 API(外部协议的公共扩展) 在 Xcode 9 中无意中被标记为私有。以下 AVFoundation API 暂时不可用:
AVCaptureDevice.Format.supportedColorSpaces
AVCaptureDevice.supportedFlashModes
AVCapturePhotoOutput.availablePhotoPixelFormatTypes
AVCapturePhotoOutput.availableRawPhotoPixelFormatTypes
AVCapturePhotoSettings.availablePreviewPhotoPixelFormatTypes
作为一种解决方法,您可以使用这些 API 的 SwiftPrivate 版本 通过在每个 API 前面加上双下划线 (
__
)。例如, 将AVCaptureDevice.Format.supportedColorSpaces
更改为AVCaptureDevice.Format.__supportedColorSpaces
.
我可以确认使用__availablePreviewPhotoPixelFormatTypes
修复了构建错误。
例如
let settings = AVCapturePhotoSettings()
let previewPixelType = settings.__availablePreviewPhotoPixelFormatTypes.first!
来源:https://forums.developer.apple.com/thread/86810#259270
【讨论】:
感谢好友发了这么好的帖子。它节省了我的时间。【参考方案2】:Xcode 9 (rdar://33903950
) 的早期 beta 版本中存在此错误,并且显然已解决(请参阅 this SO question)。它在 GM 版本中也归还给我。我正在就这个问题提交rdar ://34412264
。希望它很快得到解决,并且与另一个 GM 版本相关;在那之前,我可以继续使用 Xcode 9 的早期 beta 版本工作,但无法发布该工作。这对我的应用来说是一个完美的展示。
编辑:我还要提到与AVCapturePhotoSettings
的预览属性(previewPhotoFormat
、kCVPixelBufferPixelFormatTypeKey
、kCVPixelBufferWidthKey
等)相关的注释行允许您构建项目。如果您可以在项目中省略这些,这可能是目前一个很好的解决方法。
【讨论】:
哇。没有办法解决这个问题?就是不对! @Gizmodo 我建议复制新的错误报告以引起人们的注意。 @JohnWickham 请参阅***.com/a/45861760/333733 以参考我的错误报告,我正在更新我的错误报告以参考您的。【参考方案3】:我变了:
if cameraOutput.supportedFlashModes.contains(NSNumber(value: flashMode.rawValue))
到:
if cameraOutput.__supportedFlashModes.contains(NSNumber(value: flashMode.rawValue))
和
let previewPixelType = settings.availablePreviewPhotoPixelFormatTypes.first!
到
let previewPixelType = settings.__availablePreviewPhotoPixelFormatTypes.first!
应用程序启动了。
【讨论】:
以上是关于带有 Swift 3 和 Xcode 9 GM 的 Apple Mach-O 链接器 (ld) 错误组的主要内容,如果未能解决你的问题,请参考以下文章
SWIFT - 改变 UITextView 的高度,xcode 6 GM
Swift:GM Xcode 6.1 和 AFNetworking AFJSONResponseSerializer
苹果向开发者发布 Xcode 6.3.2 GM 版,修复 Bug
是否可以使用 Xcode 9 GM 上传到 App Store?