NiklasMerz / cordova-plugin-fingerprint-aio

Cordova Plugin for fingerprint sensors (and FaceID) with Android and iOS support
https://www.npmjs.com/package/cordova-plugin-fingerprint-aio
MIT License
321 stars 189 forks source link

XCode build error: Ambiguous use of 'subscript(_:)' #295

Open fabioz23 opened 3 years ago

fabioz23 commented 3 years ago

Bug report

Description

Environment

Capacitor:

Capacitor CLI : 2.4.3 @capacitor/core : 2.4.3

Utility:

cordova-res (update available: 0.15.2) : 0.15.1 native-run : 1.2.2

System:

NodeJS : v10.21.0 (/Users/fabio/.nvm/versions/node/v10.21.0/bin/node) npm : 6.14.4 OS : macOS Catalina



### Logs

![error](https://user-images.githubusercontent.com/729310/101287640-bc41b180-37f1-11eb-85c9-a98de9405ecb.JPG)
fabioz23 commented 3 years ago

error

fabioz23 commented 3 years ago

a valid fix can be changing AnyObject to a more fitted class on all occurrencies?

for example, at row 142 what kind of object is the 1st array element of commands.arguments[0] ?

NiklasMerz commented 3 years ago

Would you mind opening a pull request for that? This would help a lot for reviewing and testing.

fabioz23 commented 3 years ago

i've tried to debug in Xcode but placing some breakpoint inside the involved functions with swift errors (commenting rows with errors).

i've seen that in normal use (open app and unlock with touchID) these functions are not called.

And i don't know in which use case they are called.

jsBiztech commented 3 years ago

I am facing the same issue. Is there any update?

jsBiztech commented 3 years ago

Hi @fabioz23 , @NiklasMerz , I changed the following line

let data = command.arguments[0] as AnyObject?;

To

let args = command.arguments as? [[String: Any]];
let data  = args?[0];

I haven't tested it yet but seems to remove error for now.

Hope this helps.

fabioz23 commented 3 years ago

I've tried and it works, thanks.

BTW i don't know when these parts are involved on. until yesterday I had set the variables to a static value (false) and it worked the same

let data  = command.arguments[0] as AnyObject?;
        var pluginResult: CDVPluginResult
        do {
            let secret = Secret()
            try? secret.delete()
            let invalidateOnEnrollment = false
...
...