Se è multipiattaforma devi crearti delle interfacce poichè ogni sistema ha le sue peculiarità.
Inoltre l'accesso ai files è completamente diverso tra UWP e Android/iOS e quindi molti metodi che utilizzi ora sul File.IO potresti non trovarli.
Sul progetto portable ti crei una classe di interfaccia:
public interface ILocalFiles
{
}
All'interno di questa interfaccia vai a crearti tutti i metodi che ti serviranno specifici per ogni piattaforma. Ad esempio se devi accedere all'application path:
public interface ILocalFiles
{
string ApplicationPath();
}
Per ogni progetto piattaforma vai a creare una classe che eredita dall'interfaccia e vai ad implementare i metodi:
Esempio per Android:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System;
using System.IO;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using TuaApp.Interfacce;
using Xamarin.Forms;
[assembly: Dependency(typeof(TuaApp.Droid.Interfacce.LocalFiles))]
namespace TuaApp.Droid.Interfacce
{
public string ApplicationPath(string AppDirLight,string AppDir)
{
Android.Content.PM.ApplicationInfo application_info = Android.App.Application.Context.ApplicationContext.PackageManager.GetApplicationInfo(Android.App.Application.Context.ApplicationContext.PackageName, 0);
return application_info.DataDir;
}
}
Ogni qual volta hai la necessità di sfruttare l'ambiente nativo devi crearti delle interfacce.