Xamarin Android and “–no-version-vectors”

TLDR: An error containing “–no-version-vectors” is probably fixed by updating your Android SDK Build Tools to at least 23.

I recently upgraded a project to the latest version of Xamarin Forms and got the following error:

/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets: Error: Tool exited with code: 2. Output: ERROR: Unknown option '--no-version-vectors'

A quick $ grep -ri "no-version" . on the project revealed it was being used in a dependency brought in by the Forms update:

./packages/Xamarin.Android.Support.Vector.Drawable.23.3.0/build/Xamarin.Android.Support.Vector.Drawable.targets: $(AndroidResgenExtraArgs)--no-version-vectors

Long story short, this parameter is for the aapt tool in the Android SDK Build Tools from at least version 23. Updating through the Android SDK manager fixed it.

Betrayal at House on the Hill – Betrayal Character Cards for Android

Betrayal at House on the Hill is a board game published by Avalon Hill and designed by Bruce Glassco. The game is split into two parts. In the first, the players become trapped in a haunted house which they must explore, revealing rooms as they do. At some point the second part, the “haunt”, begins in which one player (generally) becomes a traitor and everyone plays out one of 50 scenarios pitting the traitor against the others.

An important part of the game involves tracking each of the player’s attributes (each character has a different range of possible values for each attribute). Since the included cardboard trackers can be loose and tend to slip out of place, a few different smartphone apps have appeared to help the situation.

The earliest Android version is Betrayal Character Cards. This app does the bare minimum needed. You can see a list of characters, see their attribute ranges and select the current value for each. As a small extra it also includes the birthday and hobbies of each character (which has a minor gameplay purpose).

Out of the apps available this is the simplest and has the least features. On the other hand this should run on the widest range of devices.

Elder Scrolls Online – Hearts of Darkness quest missing middle step “Stop Tanval”

TLDR: Go to Kragenmoor to the Grandmsters Palace and find Grandmaster Omin Dres to begin the quest Aggressive Engotiations.

Elder Scrolls Online on consoles has an achievement/trophy called Hero of Ebonheart which requires you to complete all the in game achievements relating to the Ebonheart Pact.

As I was checking through the list of ones I completed, I noticed that for the achievement Hearts of Darkness, the middle step – Stop Tanval from unleashing the second Brother of Strife – was incomplete. When I checked the map there were no black markers normally indicative of an incomplete area, nor did I have any incomplete quests in Stonefalls.

It turns out there is short series of side quests that are easy to miss in the Kragenmoor area starting with Aggressive Negotiations. This eventually leads to To the Tormented Spire which adds the Tormented Spire as a location to your map. Complete this quest line completes the middle part of the Hearts of Darkness achievement.

System.ExecutionEngineException: Attempting to JIT compile method

TLDR: Check multiple references to the same nuget package are all on the same version if you use the Mono linker.

Since my ability to post regularly on things I’m interested in is not great, I figured I could at least post stuff that might be useful.

I recently upgraded a Xamarin iOS app from the “classic” (32bit only) API to the Unified API. After doing so I got the error message:

System.ExecutionEngineException: Attempting to JIT compile method

.

This is caused by the Xamarin (Mono) linker removing code that is only referenced dynamically. The usual solution is to let the compiler know somehow that you are using the code (using a Preserve attribute if it’s your own code or something like MvvmCross’s LinkerPleaseInclude.cs otherwisr).

In my case, this did not fix the problem. It turns out the Unified API upgrade was a red herring. I had also updated a few nuget packages at the same time. One of them was used in several projects, but I’d missed updating one of them (so I had Project A using v1 of a package and Project B using v2 of a package). This meant my efforts to stop the linker from removing some stuff only worked on one version of the package.

Star Trek book reviews

Since I’ve now reached the point that I’m reading new Star Trek books as fast as they are being made, as well as slowly picking up older ones here and there, I figured I should start sharing the knowledge I have gained.

The first review I wrote is now available here (I actually wrote this several years ago – I just updated the formatting) and I intend to write more.

Of course, I’ve generally intended to write more before…