googlesamples / mlkit

A collection of sample apps to demonstrate how to use Google's ML Kit APIs on Android and iOS
Apache License 2.0
3.5k stars 2.92k forks source link

[Bug report] MLKitTextRecognition on IOS 12.5.7 (iPhone 6.0) crashed after migration to Xcode 15.0 #737

Open haksoy opened 11 months ago

haksoy commented 11 months ago

Describe the bug We use IOS MLKitTextRecognition 2.0 version on mobile devices after IOS 11.0 version. With the transition to iOS 17.0, the development environment has been switched to XCode 15.0. When the application tested on IOS 12.5.7 (IPhone 6) after the migration, the app crashed and exited at the "textRecognizer.process(visionImage)" stage. We do not encounter this problem in other IOS versions. Similarly, when switched back and built the same application on XCode 14.3, it worked smoothly on iOS 12.5.7. The problem only exists in XCode 15.0 and IOS 12.x versions and tested with different versions of MLKitTextRecognition (1.0 and.2.0) nothing changed.

To Reproduce

  1. Build the sample app on Xcode 15.0 with different MLKitTextRecognition versions
  2. Test on iPhone 6 (IOS 12.x)
  3. Recognize Latin based text image (either image or from camera capture)
  4. See following crash log on TextRecognition 1.0 version and app exited

    • thread #15, name = 'ocr_det_0', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
    • frame #0: 0x0000000000000000 frame #1: 0x0000000101121600 MLKitTextpixGenerateSelWithRuns + 10595392 frame #2: 0x0000000100f7d95c MLKitTextpixGenerateSelWithRuns + 8875932 frame #3: 0x00000001010e32fc MLKitTextpixGenerateSelWithRuns + 10340668 frame #4: 0x00000001c41312c0 libsystem_pthread.dylib_pthread_body + 128 frame #5: 0x00000001c4131220 libsystem_pthread.dylib_pthread_start + 44 frame #6: 0x00000001c4134cdc libsystem_pthread.dylibthread_start + 4

Installed Pods on sample app for MLKitTextRecognition 1.0 versions

Installing GTMSessionFetcher (1.7.2) Installing GoogleDataTransport (9.2.5) Installing GoogleMLKit (2.2.0) Installing GoogleToolboxForMac (2.3.2) Installing GoogleUtilities (7.11.5) Installing GoogleUtilitiesComponents (1.1.0) Installing MLImage (1.0.0-beta1) Installing MLKitCommon (3.0.0) Installing MLKitTextRecognition (1.3.0) Installing MLKitVision (1.3.0) Installing PromisesObjC (2.3.1) Installing Protobuf (3.24.3) Installing SnapKit (5.6.0) Installing nanopb (2.30909.0)

With MLKit TextRecognition 2.0, crash log stack changes, but the error same

Installed pods for MLKitTextRecognition 2.0 version

Installing GTMSessionFetcher (2.3.0) Installing GoogleDataTransport (9.2.5) Installing GoogleMLKit (4.0.0) Installing GoogleToolboxForMac (2.3.2) Installing GoogleUtilities (7.11.5) Installing GoogleUtilitiesComponents (1.1.0) Installing MLImage (1.0.0-beta4) Installing MLKitCommon (9.0.0) Installing MLKitTextRecognition (2.0.0) Installing MLKitTextRecognitionCommon (1.0.0) Installing MLKitVision (5.0.0) Installing PromisesObjC (2.3.1) Installing SnapKit (5.6.0) Installing nanopb (2.30909.0)

If applicable, please include code snippet and sample input(image, video, text, etc)

private lazy var textRecognizer = TextRecognizer.textRecognizer()

@objc func onStart(_ sender: UIButton) {
    let image = imageView.image!
    let visionImage = VisionImage(image: image)
    visionImage.orientation = image.imageOrientation
    textRecognizer.process(visionImage) { features, error in
      self.processResult(from: features, error: error)
    }
  }

SDK Info:

Smartphone:

Development Environment:

haksoy commented 11 months ago

I have found a workaround solution to run MLKitTextRecognition app built on Xcode 15.X to run on IOS 12.X. Sharing it here to help those who may encounter the problem.

With the transition to XCode 15 and IOS 17, Apple changed the static linker (ld64) that it had been using for a long time and created a static linker called ld_prime, which it said was more optimized. This linker is causing the crash on MLKitTextRecognition. You can add "-ld64" or "-ld_classic" to Other Linker Flags to force old linker usage and try to avoid this issue.