native icon indicating copy to clipboard operation
native copied to clipboard

[ffigen] Crash while evaluating a policy

Open matiasleyba opened this issue 4 months ago • 0 comments

Hi, I'm a beginner with ffigen but I'm trying to create an example using LocalAuthentication, I was able to generate the bindings and have created an implementation using them, everything works fine until I call evaluatePolicy and the app crashes.

Here is my implementation, I am assuming I have to call evaluatePolicy inside the platform thread as evaluatePolicy will do some ui stuff.

try {

      await runOnPlatformThread(() {
        final lib = DynamicLibrary.process();
        final localAuthentication = LocalAuthentication(lib);

        final context = LAContext.new1(localAuthentication);

        final error = NSError.new1(localAuthentication);

        final canEvaluate = context.canEvaluatePolicy_error_(
          LAPolicy.LAPolicyDeviceOwnerAuthentication,
          Pointer.fromAddress(error.pointer.address),
        );

        final completion = ObjCBlock_ffiVoid_bool_NSError.listener(
          localAuthentication,
          (result, nsError) {
            if (result) {
              return onSuccess();
            } else if (nsError != null) {
              onError();
            }
          },
        );

        final reason = NSString(localAuthentication, '');

        if (canEvaluate) {
          context.evaluatePolicy_localizedReason_reply_(
            LAPolicy.LAPolicyDeviceOwnerAuthentication,
            reason,
            completion,
          );
        }

        return;
      });
    } catch (e) {
      print(e);
    }

ffigen.yaml:

name: LocalAuthentication
description: Bindings for LocalAuthentication.
language: objc
output: 'lib/src/ffigen/local_auth_bindings.dart'
exclude-all-by-default: true
objc-interfaces:
  include:
    - 'LAContext'
headers:
  entry-points:
    - '/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/LocalAuthentication.framework/Headers/LocalAuthentication.h'

Am I doing something wrong, does my use case make sense?

Let me know if you need more details, thanks in advance!

matiasleyba avatar Oct 11 '24 13:10 matiasleyba