Showing posts with label reactiveui. Show all posts
Showing posts with label reactiveui. Show all posts

Monday, September 4, 2017

iOS launch error when referencing ReactiveUI 7.4

Leave a Comment

I have a Xamarin Forms project with a .Net Standard 1.4 core library which holds all the code. I have a reference to ReactiveUI 7.4 in both the core and iOS projects. But when I compile and run on an iOS emulator, I get the following error when the app launches:

2017-08-24 13:39:39.040 TestProject.iOS[25074:307385] Could not register the assembly 'ReactiveUI': System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.   at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (System.Reflection.Assembly,bool)   at System.Reflection.Assembly.GetTypes () [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.12.0.20/src/mono/mcs/class/corlib/System.Reflection/Assembly.cs:410    at Registrar.DynamicRegistrar.CollectTypes (System.Reflection.Assembly assembly) [0x00000] in /Users/builder/data/lanes/4991/80b8487d/source/xamarin-macios/src/ObjCRuntime/DynamicRegistrar.cs:237    at Registrar.Registrar.RegisterAssembly (System.Reflection.Assembly assembly) [0x00056] in /Users/builder/data/lanes/4991/80b8487d/source/xamarin-macios/src/ObjCRuntime/Registrar.cs:1978    Loaded assembly: /Library/Frameworks/Xamarin.Interactive.framework/Versions/Current/Agents/iOS/Xamarin.Interactive.iOS.dll [External] Loaded assembly: /Library/Frameworks/Xamarin.Interactive.framework/Versions/Current/Agents/iOS/Xamarin.Interactive.dll [External] Unhandled Exception:  System.BadImageFormatException: <Timeout exceeded getting exception details> 

and

Unhandled Exception: System.BadImageFormatException: Could not resolve field token 0x040000fd File name: 'ReactiveUI'   at TestProject.iOS.AppDelegate..ctor () [0x00008] in C:\TestProject\TestProject.iOS\AppDelegate.cs:24    at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)   at UIKit.UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate) [0x00005] in /Users/builder/data/lanes/4991/80b8487d/source/xamarin-macios/src/UIKit/UIApplication.cs:79    at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00038] in /Users/builder/data/lanes/4991/80b8487d/source/xamarin-macios/src/UIKit/UIApplication.cs:63    at TestProject.iOS.Application.Main (System.String[] args) [0x00001] in C:\TestProject\TestProject.iOS\Main.cs:17  2017-08-24 13:39:46.074 TestProject.iOS[25074:307385] Unhandled managed exception: 

Anyone ever receive this error??

UPDATE:

Here is a link to the error being reproduced on iOS:

https://github.com/assassin316/ReactiveUIError

1 Answers

Answers 1

So I think there are a few things going on and the project wasn't quite setup right

1) You need to install reactiveui nuget into all the platform projects

Right now you only have reactiveui-core installed into the iOS project you also need to install ReactiveUI

https://github.com/assassin316/ReactiveUIError/blob/master/ReactiveUIErrorTest/ReactiveUIErrorTest.iOS/packages.config

2) The System.Reactive Libraries aren't being referenced at all from the iOS project itself https://github.com/assassin316/ReactiveUIError/blob/master/ReactiveUIErrorTest/ReactiveUIErrorTest.iOS/ReactiveUIErrorTest.iOS.csproj

So they only exist in the packages.config file Remove the Rx-* entries from the packages.config file and use the Package Manager Console to install them back in manually

Install-Package Rx-Main -Version 2.2.5 Install-Package Rx-PlatformServices -Version 2.2.5 Install-Package Rx-Core -Version 2.2.5 

or just add this in the csproj file for the iOS project

<Reference Include="System.Reactive.Core, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">   <HintPath>..\..\packages\Rx-Core.2.2.5\lib\portable-windows8+net45+wp8\System.Reactive.Core.dll</HintPath> </Reference> <Reference Include="System.Reactive.Interfaces, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">   <HintPath>..\..\packages\Rx-Interfaces.2.2.5\lib\portable-windows8+net45+wp8\System.Reactive.Interfaces.dll</HintPath> </Reference> <Reference Include="System.Reactive.Linq, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">   <HintPath>..\..\packages\Rx-Linq.2.2.5\lib\portable-windows8+net45+wp8\System.Reactive.Linq.dll</HintPath> </Reference> <Reference Include="System.Reactive.PlatformServices, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">   <HintPath>..\..\packages\Rx-PlatformServices.2.2.5\lib\portable-windows8+net45+wp8\System.Reactive.PlatformServices.dll</HintPath> </Reference> 

or convert the iOS project over to using PackageReferences instead

3) Reactiveui-xamforms needs to be installed into the platform projects as well

At this point I was able to run your project

Your best hint for the issue was above the exception you posted

2017-09-02 12:57:43.983 Sekuence.iOS[86898:37039424] Could not find System.Reactive.Core referenced by assembly ReactiveUI,Version=7.4.0.0, Culture=neutral, PublicKeyToken=null.

2017-09-02 12:57:43.985 Sekuence.iOS[86898:37039424] Could not find System.Reactive.Interfaces referenced by assembly ReactiveUI, Version=7.4.0.0, Culture=neutral, PublicKeyToken=null.

2017-09-02 12:57:43.986 Sekuence.iOS[86898:37039424] Could not find System.Reactive.Linq referenced by assembly ReactiveUI, Version=7.4.0.0, Culture=neutral, PublicKeyToken=null.

2017-09-02 12:57:43.986 Sekuence.iOS[86898:37039424] Could not find System.Reactive.PlatformServices referenced by assembly ReactiveUI, Version=7.4.0.0, Culture=neutral, PublicKeyToken=null.

2017-09-02 12:57:44.029 Sekuence.iOS[86898:37039424] Could not find System.Reactive.Core referenced by assembly ReactiveUIErrorTest.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.

2017-09-02 12:57:44.030 Sekuence.iOS[86898:37039424] Could not find ReactiveUI.XamForms referenced by assembly ReactiveUIErrorTest.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.

So basically it's saying it can't find any of these DLLs. I looked in the bin folder of the iOS project and sure enough none of them were there. So I just reinstalled all these packages and then everything worked

Read More

Tuesday, April 19, 2016

WhenActivated is called twice when used in Views and ViewModels hosted in ViewModelViewHost control

Leave a Comment

My app uses views, which implement IViewFor<T> interface. The views are registered with the dependency resolver in AppBootstrapper. The app displays the views using ViewModelViewHost control by assigning a corresponding view model to control's ViewModel property. All the view models implement ISupportsActivation interface.

I noticed that WhenActivated is called twice. First it's called when a view and view model get activated. Then on deactivation all disposables are disposed and WhenActivated is called again immediately followed by disposing the disposables.

I am testing with the following code both in view and view model:

this.WhenActivated(disposables => {     Debug.WriteLine("ViewModel activated.");      Disposable         .Create(() =>         {             Debug.WriteLine("ViewModel deactivated.");         })         .AddTo(disposables); }); 

As a result the output looks like this:

// App displays the view:  ViewModel activated. View activated.  // App hides the view:  ViewModel deactivated. View deactivated. ViewModel activated. View activated. ViewModel deactivated. View deactivated. 

The view is hidden by setting ViewModel property of ViewModelViewHost control to null.

Am I doing something wrong?

1 Answers

Answers 1

You can check this link. There is a very good explenation of everything. This is all I can offer without the knowledge of what you did in the "View" itself.

It is possible that the "ViewModel and View" are called twice because you are creating two LoadingViewModels.

Read More