Apple Mach-O Linker (ld) Error Group with Swift 3 & Xcode 9 GM

寵の児 提交于 2019-11-30 08:25:33

问题


This was running fine till GM Xcode (and iOS 11). Now I get these errors:

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)

Some of the lines it's pointing at are:

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]

Also:

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:


Update 15 Sept 2017:

Official response from Apple:

Our apologies. For apps using Swift 3.2 or Swift 4.0, several AVFoundation capture APIs (public extensions on external protocol) were inadvertently marked private in Xcode 9. The following AVFoundation API are temporarily unavailable:

  • AVCaptureDevice.Format.supportedColorSpaces

  • AVCaptureDevice.supportedFlashModes

  • AVCapturePhotoOutput.availablePhotoPixelFormatTypes

  • AVCapturePhotoOutput.availableRawPhotoPixelFormatTypes

  • AVCapturePhotoSettings.availablePreviewPhotoPixelFormatTypes

    As a workaround you can use the SwiftPrivate versions of these API by prepending each API with double underscore (__). For example, change AVCaptureDevice.Format.supportedColorSpaces to AVCaptureDevice.Format.__supportedColorSpaces.

I can confirm using __availablePreviewPhotoPixelFormatTypes fixes the build errors.

E.g.

let settings = AVCapturePhotoSettings()
let previewPixelType = settings.__availablePreviewPhotoPixelFormatTypes.first!

Source: https://forums.developer.apple.com/thread/86810#259270




回答2:


This bug was present in earlier beta versions of Xcode 9 (rdar://33903950) and was apparently resolved (see this SO question). It's returned for me as well in the GM build. I'm filing rdar ://34412264 about this issue. Hopefully it's resolved soon and another GM build is related; until then, I you can continue working using earlier beta versions of Xcode 9, but won't be able to release that work. This is a total show-stopper for my app.

Edit: I'll also mention that commenting lines pertaining to AVCapturePhotoSettings' preview properties (previewPhotoFormat, kCVPixelBufferPixelFormatTypeKey, kCVPixelBufferWidthKey, etc.) allows your project to build. If it's possible for you to omit these in your project, this may be a good workaround for now.




回答3:


I've changed:

if cameraOutput.supportedFlashModes.contains(NSNumber(value: flashMode.rawValue)) {

to:

if cameraOutput.__supportedFlashModes.contains(NSNumber(value: flashMode.rawValue)) {

and

let previewPixelType = settings.availablePreviewPhotoPixelFormatTypes.first!

to

let previewPixelType = settings.__availablePreviewPhotoPixelFormatTypes.first!

and the app started.



来源:https://stackoverflow.com/questions/46202060/apple-mach-o-linker-ld-error-group-with-swift-3-xcode-9-gm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!