Skip to content

[ffigen] Crash while evaluating a policy  #1651

Open
@matiasleyba

Description

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!

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions