Symbol Not Found Error in VNFaceLandmarkRegion2D with MacCatalyst on macOS 14.6.1 (Xcode 16)

We have updated our cross-platform applications to support iOS 18 and are in the final stages of releasing versions built with MacCatalyst. After merging the MacCatalyst changes with those for iOS 18, we are now required to build the app using Xcode 16. However, since transitioning to Xcode 16, the app builds successfully but crashes immediately on startup with the following error:

dyld[45279]: Symbol not found: _$sSo22VNFaceLandmarkRegion2DC6VisionE16normalizedPointsSaySo7CGPointVGvg
  Referenced from: <211097A0-6612-3A9A-80B5-AE12915EBA2A> /Users/***/Library/Developer/Xcode/DerivedData/DM_iOS_Apps-gzpzdsacfldxxwclyngreqkbhtey/Build/Products/Debug-maccatalyst/MyApp.app/Contents/Frameworks/Filters_MyApp.framework/Versions/A/Filters_MyApp
  Expected in:     <50DB755E-C83C-3FC7-A0BB-9C4DF9FEA374> /System/Library/Frameworks/Vision.framework/Versions/A/Vision

This crash occurs only when building the app with Xcode 16 for MacCatalyst on macOS 14.6.1. On iOS and macOS 15, it functions as expected, and it also worked prior to the iOS 18 changes, which are independent of the Vision framework code, when building with Xcode 15.

Here are the environment details where the error occurs:

Xcode Version: Xcode 16.0 (16A242d)
macOS Version: macOS Sonoma 14.6.1

And the setup where it works:

Xcode Version: Xcode 16.0 (16A242d)
macOS Version: macOS Sequoia 15.0

Additionally, attempting to implement a workaround using pointsInImage(imageSize:) resulted in a similar issue, where the symbol for this method is also missing.

Is this a known issue? Are there any workarounds or fixes available?

We have already submitted this issue as feedback (FB15164375), along with a demo project to illustrate the problem.

Answered by Frameworks Engineer in 804244022

Thank you for filing a bug report via the Feedback Assistant. There is a temporary workaround available, which is to use .__normalizedPoints instead. This gives a pointer to the landmark points buffer, which can then be converted into a point array:

func getNormalizedPoints(of region: VNFaceLandmarkRegion2D) -> [CGPoint] {
    let bufferPointer = UnsafeBufferPointer(start: region.__normalizedPoints, count: region.pointCount)
    return Array(bufferPointer)
}
Accepted Answer

Thank you for filing a bug report via the Feedback Assistant. There is a temporary workaround available, which is to use .__normalizedPoints instead. This gives a pointer to the landmark points buffer, which can then be converted into a point array:

func getNormalizedPoints(of region: VNFaceLandmarkRegion2D) -> [CGPoint] {
    let bufferPointer = UnsafeBufferPointer(start: region.__normalizedPoints, count: region.pointCount)
    return Array(bufferPointer)
}

Thank you for the prompt reply and also the workaround. I assume that, although the property appears to be internal, we are allowed to submit the app using this?

Symbol Not Found Error in VNFaceLandmarkRegion2D with MacCatalyst on macOS 14.6.1 (Xcode 16)
 
 
Q