带有 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 的预览属性(previewPhotoFormatkCVPixelBufferPixelFormatTypeKeykCVPixelBufferWidthKey 等)相关的注释行允许您构建项目。如果您可以在项目中省略这些,这可能是目前一个很好的解决方法。

【讨论】:

哇。没有办法解决这个问题?就是不对! @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?

SwiftUI 与 Firebase 使用 Xcode 11 GM 种子 2 - Swift UI Firestore

Xcode GM:OS X 命令行工具项目没有 swift 语言?