如何针对多个客户定位Xamarin PCL应用程序?

时间:2016-04-26 15:40:00

标签: visual-studio deployment xamarin portable-class-library targeting

我在Visual Studio Community 2015中有一个Xamarin PCL解决方案。

我有兴趣为两个不同的客户部署Android和iOS的相同应用程序。它唯一会改变的是启动图像和应用程序图标。

我曾想过在我的git存储库中有不同的分支,每个分支都有一个客户。但我认为这不是一个合适的解决方案。

另外,我认为有不同的配置解决方案,例如,在iOS中:

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

然后更改每个配置的项目属性的参数。但是,如果我更改特定配置的参数,切换到其他配置,然后我回来第一个配置params,有第二个配置的参数。

如果我没错,我必须为每个版本指定不同的软件包名称,在其他情况下,Google Play和Apple Store将不接受我的应用。

在Xcode中,概念是目标/定位。

在Visual Studio 2015中实现我的目标的正确形式是什么?

2 个答案:

答案 0 :(得分:1)

不幸的是,Visual Studio不支持此功能。

但还有第三种解决方案。您可以创建另一个项目并将所有(静态)文件添加为项目的链接。这样,您不必在配置或分支之间切换,只需选择项目即可。

要将文件添加为链接,您必须右键单击该文件夹 - >添加 - >现有文件 - >从原始项目中选择文件 - >在“添加”上单击箭头并选择“添加为链接”(或以某种方式类似)

如果你想通过配置来做,我建议你阅读question

答案 1 :(得分:0)

我已经通过以下步骤实现了解决方案:

  1. 在我的Visual Studio解决方案中,在Droid项目中,我创建了一个文件夹“Customers”,并在此文件夹中创建了两个子文件夹(每个文件夹对应一个客户“CustomerA”和“CustomerB”)
  2. 进入客户文件夹我已经为每个客户提供了我想要更改的图像,resx,...文件。
  3. 在项目的根结构中,我创建了一个PowerShell脚本(.ps1)并编写了这段代码:

    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."
    }
    
  4. 它将文件从特定客户文件夹复制到“Resources”文件夹项目。

    1. 我已经去了项目的属性:双击“属性” - >编译事件 - >预构建,我已设置此调用:

      PowerShell -File“$(ProjectDir)GetCustomerResources.ps1”$(ProjectDir)$(SolutionDir)$(SolutionName) enter image description here

    2. 之前的步骤,我已经在每个平台项目(Android,iOS,...)中完成了它们。

    3. 然后,我在“Portable”项目中添加了一个“CustomerTarget.txt”文件,其中的内容将是“CustomerA”或“CustomerB”。

    4. 重建解决方案,就是这样!