Ich habe ein Projekt eingerichtet, damit ich für jeden unserer Kunden eine andere gestylte App verwenden kann und versuche, unser Design zu streamen. Derzeit ist es eingerichtet, so dass wir unsere PCL und dann ein Android- und ein iOS-Projekt für jeden Client haben. Dies bedeutet, dass wir, wenn wir Änderungen am App-Seitencode vornehmen, diese manuell über jedes Projekt ändern müssen.Xamarin Gemeinsame Nutzung eines Android- und iOS-Basisprojekts mit mehreren Android- und iOS-Apps
Ich habe versucht, es zu ändern, so haben wir unsere PCL und ein Basis-Android und iOS-Projekt, das die plattformspezifische Schnittstelle Code, den jedes der anderen Projekte mit ihren individuellen Farbenstyling, Bilder und Bundle-IDs dann erben kann.
z.B.
- PCL Poject (Shared Code, Formulare, etc.)
- Android.Shared (gemeinsam genutzter Ressourcen/Lokalisierungen für android apps/Plattform-spezifischen Code)
- Android.Client1Theme (kundenspezifische Ressourcen (Logos, Farben, Android.Client2Theme usw.) für Client1)
(kundenspezifische Ressourcen (Logos, Farben, etc.) für Client2)
iOS.Shared (gemeinsam genutzter Ressourcen/Lokalisierungen für die android apps/Plattform-spezifischen Code)
- iOS.Client1Theme (kundenspezifische Ressourcen (Logos, Farben, etc.) für Client1)
- iOS.Client2Theme (kundenspezifische Ressourcen (Logos, Farben, etc.) für Client2)
Ich habe dies gelernt Arbeiten Sie für Android, indem Sie einfach ein neues Android-Projekt erstellen und einen Verweis auf das freigegebene Android-Projekt und PCL hinzufügen.
Ich habe Probleme, für iOS auf die gleiche Weise zu arbeiten. Es ist nah dran, die iOS-App kompiliert als eine neue App mit dem richtigen Styling, aber der DependencyService stürzt ab, wenn er versucht, auf eine Interface-Methode zuzugreifen.
DependencyService.Get<ISystemFunctions>().ToggleTorch();
exception thrown on iOS interface access
Unten ist der Code meiner Schnittstelle in meinem gemeinsamen Projekt, ich aber glaube nicht, dass dies das Problem ist, sondern die DependencyService kann es nicht finden.
[assembly: Dependency(typeof(SystemFunctions_iOS))]
namespace SharedApp.iOS.iOS_Interfaces
{
public class SystemFunctions_iOS : ISystemFunctions
{
public SystemFunctions_iOS()
{ }
public void ToggleTorch()
{
var device = AVCaptureDevice.GetDefaultDevice(AVMediaTypes.Video);
if (device == null)
return;
device.LockForConfiguration(out NSError error);
if (error != null)
{
device.UnlockForConfiguration();
return;
}
else
{
device.TorchMode = device.TorchMode == AVCaptureTorchMode.On ? AVCaptureTorchMode.Off : AVCaptureTorchMode.On;
device.UnlockForConfiguration();
}
}
}
}
Lassen Sie mich wissen, wenn es noch etwas gibt, das ich teilen kann, um damit zu helfen.
Die gleiche 'DependencyService.Get() 'Methode hat in Ihrem Android-Projekt funktioniert? –
Ja, es funktioniert gut auf iOS. Ich habe die Lösung für mein Problem gefunden, die ich unter – LPQ
posten * Es funktioniert gut auf Android ich meine. – LPQ