Howest.Prog.Xamarin.UriSourceExtensions
0.0.3-alpha
dotnet add package Howest.Prog.Xamarin.UriSourceExtensions --version 0.0.3-alpha
NuGet\Install-Package Howest.Prog.Xamarin.UriSourceExtensions -Version 0.0.3-alpha
<PackageReference Include="Howest.Prog.Xamarin.UriSourceExtensions" Version="0.0.3-alpha" />
paket add Howest.Prog.Xamarin.UriSourceExtensions --version 0.0.3-alpha
#r "nuget: Howest.Prog.Xamarin.UriSourceExtensions, 0.0.3-alpha"
// Install Howest.Prog.Xamarin.UriSourceExtensions as a Cake Addin #addin nuget:?package=Howest.Prog.Xamarin.UriSourceExtensions&version=0.0.3-alpha&prerelease // Install Howest.Prog.Xamarin.UriSourceExtensions as a Cake Tool #tool nuget:?package=Howest.Prog.Xamarin.UriSourceExtensions&version=0.0.3-alpha&prerelease
Xamarin Uri Source Extensions
Why
When developing a Xamarin Forms app you are likely debugging on your Android emulator or device. To provide data and online images to your app, you decide to run your own back-end HTTP API locally using a self-signed certificate.
But what's this? Your images fail to load on Android with the error:
java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
or
ImageLoaderSourceHandler: Could not retrieve image or image data was invalid
In this case, this is usually caused by Android preventing to download your images using a self-signed SSL/TLS certifcate.
What
This small library contains a Xamarin Forms behavior to add to your <Image> elements. It allows you to download images from an insecure HTTPS source when debugging.
It does this by using its own HttpClientHandler and downloading the image UriSource as a Stream.
Overview
Property | Type | Description |
---|---|---|
IgnoreCertificateErrors | bool |
Ignores any invalid or self-signed certficates when this image uses a UriSource. Only works during debugging. |
Token | string |
Bearer token to add to the header of the request when retrieving the resource |
Ignoring self-signed certificates
Add the namespace to your Xamarin Forms Page:
<ContentPage
...
xmlns:urisource="clr-namespace:Howest.Prog.Xamarin.UriSourceExtensions;assembly=Howest.Prog.Xamarin.UriSourceExtensions"
... >
Add the behavior to your <Image> element as follows:
<Image Source="{Binding Url}">
<Image.Behaviors>
<urisource:TlsSourceBehavior
IgnoreCertificateErrors="True" />
</Image.Behaviors>
</Image>
Note: For security reasons, the behavior will only work when a debugger is attached to prevent this insecure behavior to leak to production code.<br>
Add a Bearer Token
The behavior also allows you to add a Bearer token like so:
<Image Source="{Binding Url}">
<Image.Behaviors>
<urisource:TlsSourceBehavior
IgnoreCertificateErrors="True"
Token="{Binding BindingContext.AuthenticationToken, Source={x:Reference Name=myProtectedPage}}" />
</Image.Behaviors>
</Image>
Sample project
A sample project and REST API is provided in the GitHub repository.<br>
Attribution
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Xamarin.Forms (>= 5.0.0.1874)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
0.0.3-alpha | 299 | 4/22/2022 |
0.0.2-alpha | 147 | 4/14/2022 |
0.0.1-alpha | 132 | 4/14/2022 |