0

Ich habe eine Xamarin PCL-Lösung in Visual Studio Community 2015.Wie zielen Sie eine Xamarin PCL-Anwendung für mehrere Kunden?

Ich bin daran interessiert, die gleiche Anwendung für Android und iOS für zwei verschiedene Kunden bereitzustellen. Das einzige, was sich ändern wird, wäre das Splash-Bild und das Anwendungssymbol.

Ich habe daran gedacht, verschiedene Zweige in meinem Git Repository, jede Filiale für einen Kunden. Aber ich denke, dass es keine geeignete Lösung ist.

Auch habe ich gedacht, verschiedene Konfigurationslösungen zu haben, zum Beispiel in iOS:

Configuration: [Ad-Hoc customer 1] - Platform: iPhone 
Configuration: [Ad-Hoc customer 2] - Platform: iPhone 

Und dann die params für jede Konfiguration auf die Projekteigenschaften ändern. Aber wenn ich die Parameter für eine bestimmte Konfiguration ändern, wechseln Sie zu einer anderen Konfiguration, und dann komme ich wieder die erste Konfiguration der Parameter, gibt es die Parameter der zweiten Konfiguration.

Wenn ich nicht falsch liege, muss ich für jeden Build andere Paketnamen angeben, sonst akzeptieren Google Play und Apple Store meine Apps nicht.

In Xcode ist das Konzept Ziel/Targeting.

Was ist die richtige Form, um mein Ziel in Visual Studio 2015 zu erreichen?

Antwort

0

Ich habe eine Lösung mit folgenden Schritten erreicht:

  1. In meiner Visual Studio-Lösung, in Droid Projekt, ich habe einen Ordner „Kunden“ erstellt und in diesen Ordner mich zwei untergeordnete Ordner erstellt hat (jeweils für einen Kunden "CustomerA" und "CustomerB")
  2. In Kundenordner habe ich die Bilder, Resx, ... Dateien, die ich für jeden Kunden ändern möchte.
  3. In der Wurzelstruktur des Projekts, Ich habe ein Powershell-Skript (PS1) erstellt, und ich habe diesen Code geschrieben:

    param ([string] $ProjectDir, [string] $SolutionDir, [string] $SolutionName) 
    
    Write-Host "ProjectDir --> " $ProjectDir 
    Write-Host "SolutionDir -->" $SolutionDir 
    Write-Host "SolutionName --> " $SolutionName 
    
    $PathCustomerFileName = $SolutionDir + $SolutionName + "\" + $SolutionName + "\CustomerTarget.txt" 
    
    Write-Host "PathCustomerFileName --> " $PathCustomerFileName 
    
    $ConfigurationName = Get-Content $SolutionDir$SolutionName"\"$SolutionName"\CustomerTarget.txt" 
    
    $CorrectCustomerName = "CustomerA","CustomerB" -Contains $ConfigurationName 
    
    If ($ConfigurationName.length -gt 0 -And $CorrectCustomerName) { 
    
        $Origin = $ProjectDir + "\Customers\" + $ConfigurationName + "" 
        $Destination = $ProjectDir + "\Resources" 
    
        robocopy $Origin $Destination /S 
    
    } else { 
        Write-Host "[ERROR] Error copying customer resources. Check ShellScript params and " $PathCustomerFileName " content file." 
    } 
    

Es kopiert die Dateien von spezifischen Kundenordner „Ressourcen“ Ordnerprojekt.

  1. Ich habe Eigenschaften auf Projekt gegangen: Doppelklicken Sie über "Eigenschaften" -> Compilation Events -> Pre-Build und ich habe diesen Aufruf gesetzt:

    Powershell -Datei "$ (ProjectDir) GetCustomerResources.ps1" $ (ProjectDir) $ (SolutionDir) $ (Solution) enter image description here

  2. Diese vorhergehenden Schritte, ich sie in jedem Plattform-Projekt getan haben (Android, iOS, ...).

  3. Dann ich habe eine „CustomerTarget.txt“ Datei im „Portable“ Projekt hinzugefügt, wo sein Inhalt würde „CustomerA“ oder „CustomerB“ sein.

  4. die Lösung neu erstellen, und das ist alles!
1

Leider wird dies von Visual Studio nicht unterstützt.

Aber es gibt eine dritte Lösung. Sie könnten ein anderes Projekt erstellen und alle (statischen) Dateien als Verknüpfung zum Projekt hinzufügen. Damit müssen Sie nicht zwischen Konfigurationen oder Verzweigungen wechseln, sondern nur das Projekt auswählen.

Um eine Datei als Link hinzuzufügen, müssen Sie mit der rechten Maustaste auf den Ordner -> hinzufügen -> vorhandene Dateien -> wählen Sie die Dateien aus dem ursprünglichen Projekt -> auf "Hinzufügen" klicken Sie auf den Pfeil und wählen Sie "als Link hinzufügen" (oder irgendwie ähnlich)

Wenn Sie es lieber durch Konfiguration tun möchten, würde ich empfehlen, diese question zu lesen.

+0

Danke @ Matt. Dein Vorschlag hat mir sehr geholfen! – stivex

Verwandte Themen