Laerdal.Dfu
Laerdal.Dfu copied to clipboard
DfuInstallation.Start throws Cannot access a disposed object on iOS
Describe the bug
Device firmware update works for android but fails for iOS as soon as I call Start()
method on Laerdal.Dfu.DfuInstallation
instance.
To Reproduce
Steps to reproduce the behavior:
- Add
Laerdal.Dfu 1.25.2
in shared project, android project and iOS project - Call StartDfu which is implemented as:
public async Task StartDfu()
{
var updater = new Laerdal.Dfu.DfuInstallation(_deviceId, _embeddedDfuFile);
updater.Start();
}
Expected behavior The device firmware process should start successfully as it does in android.
Call stack
[0:] An error occurred: 'Cannot access a disposed object.
Object name: 'Laerdal.Dfu.iOS.DFUFirmware'.'. Callstack: ' at ObjCRuntime.ThrowHelper.ThrowObjectDisposedException (System.Object o) [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/16.0.0.92/src/Xamarin.iOS/ObjCRuntime/ThrowHelper.cs:52
at ObjCRuntime.NativeObjectExtensions.GetNonNullHandle (ObjCRuntime.INativeObject self, System.String argumentName) [0x0001b] in /Library/Frameworks/Xamarin.iOS.framework/Versions/16.0.0.92/src/Xamarin.iOS/ObjCRuntime/INativeObject.cs:35
at Laerdal.Dfu.iOS.DFUServiceInitiator.WithFirmware (Laerdal.Dfu.iOS.DFUFirmware file) [0x00000] in /_/Laerdal.Dfu/obj/Release/xamarin.ios10/iOS/Laerdal.Dfu.iOS/DFUServiceInitiator.g.cs:139
at Laerdal.Dfu.DfuInstallation.SetInitiator () [0x00094] in /_/Laerdal.Dfu/iOS/DfuInstallation.cs:38
at Laerdal.Dfu.DfuInstallation.Start () [0x00013] in /_/Laerdal.Dfu/iOS/DfuInstallation.cs:102
at Config.Views.DfuTest.StartDfu () [0x000d5] in C:\sportident\six\config_app\Config\Views\DfuTest.xaml.cs:39
at Config.Views.DfuTest.Button_Clicked (System.Object sender, System.EventArgs e) [0x00020] in C:\sportident\six\config_app\Config\Views\DfuTest.xaml.cs:72
at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/Current/src/Xamarin.iOS/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/AsyncMethodBuilder.cs:1021
at (wrapper delegate-invoke) <Module>.invoke_void_object(object)
at Foundation.NSAsyncSynchronizationContextDispatcher.Apply () [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/16.0.0.92/src/Xamarin.iOS/Foundation/NSAction.cs:178
--- End of stack trace from previous location where exception was thrown ---
at (wrapper managed-to-native) UIKit.UIApplication.xamarin_UIApplicationMain(int,string[],intptr,intptr,intptr&)
at UIKit.UIApplication.UIApplicationMain (System.Int32 argc, System.String[] argv, System.IntPtr principalClassName, System.IntPtr delegateClassName) [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/16.0.0.92/src/Xamarin.iOS/UIKit/UIApplication.cs:57
at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00013] in /Library/Frameworks/Xamarin.iOS.framework/Versions/16.0.0.92/src/Xamarin.iOS/UIKit/UIApplication.cs:82
at Config.iOS.Application.Main (System.String[] args) [0x00001] in C:\sportident\six\config_app\Config.iOS\Main.cs:12
at (wrapper managed-to-native) System.Reflection.RuntimeMethodInfo.InternalInvoke(System.Reflection.RuntimeMethodInfo,object,object[],System.Exception&)
at System.Reflection.RuntimeMethodInfo.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x0006a] in /Library/Frameworks/Xamarin.iOS.framework/Versions/Current/src/Xamarin.iOS/mcs/class/corlib/System.Reflection/RuntimeMethodInfo.cs:395 '
The app has been terminated.
Smartphone (please complete the following information):
- Device: iPhone 11
- OS: iOS15.6.1
Additional context The exception does not seem to depend on what I pass as device id and dfu file path.