Compilation 如何使用同一应用程序(Xamarin表单)瞄准多个客户?
=>Xamarin形式 =>在Mac上使用Xamarin Studio(但我也可以访问visual Studio)Compilation 如何使用同一应用程序(Xamarin表单)瞄准多个客户?,compilation,xamarin.forms,targets,dynamic-compilation,Compilation,Xamarin.forms,Targets,Dynamic Compilation,=>Xamarin形式 =>在Mac上使用Xamarin Studio(但我也可以访问visual Studio) 想象一下一个普通的登录应用程序,带有图像(客户徽标)、登录(入口控制)、密码(入口控制)和登录按钮 我想建立这个非常相同的应用程序,以多个客户(从1到99)。 每个应用程序将在以下方面有所不同: 名称(应用程序名称和应用程序中的多个标签) 徽标(应用程序中访问web上图像地址的图像控件) 连接字符串(这将是应用程序中的常量) 应用程序的主颜色 我考虑使用资源(.resx)来完
想象一下一个普通的登录应用程序,带有图像(客户徽标)、登录(入口控制)、密码(入口控制)和登录按钮 我想建立这个非常相同的应用程序,以多个客户(从1到99)。 每个应用程序将在以下方面有所不同:
- 名称(应用程序名称和应用程序中的多个标签)
- 徽标(应用程序中访问web上图像地址的图像控件)
- 连接字符串(这将是应用程序中的常量)
- 应用程序的主颜色
提前谢谢你 我假设您希望为不同的客户构建不同的apk/ipa。如果没有,请更新您的问题 您可以为每个客户端设置生成配置。在每个配置中,定义适当的符号。例如,配置“DebugClientA”和“ReleaseClientA”可能有符号
CLIENT\u A
然后在代码中,首先声明属性/字段,包括字符串文字、图像路径、颜色等。将赋值放在其他位置。我将它们放在App()
constructor调用的方法调用中
对于作业,将它们放入#if
和#elif
块()。代码应该如下所示:
#if CLIENT_A
MyString = "ClientA";
// Following is for ImageSource.FromResource()
MyPathToImage = "MyAssembly.images.clienta.image.png";
MyColor = Color.FromHex("012345");
#elif CLIENT_B
MyString = "ClientB";
MyPathToImage = "MyAssembly.images.clientb.image.png";
MyColor = Color.FromHex("6789AB");
// repeat as needed
#endif
ProjectName.Common.Forms
ProjectName.Common.iOS
ProjectName.Common.Android
ProjectName.Client1.Forms
ProjectName.Client1.iOS
ProjectName.Client1.Android
ProjectName.Client2.Forms
ProjectNAme.Client2.iOS
ProjectName.Client2.Android.
您的应用程序现在应该为每个客户端提供特定的文字、图像和颜色
定制应用程序名称是一个棘手的部分:定制的Android AndroidManifest.xml和iOS Info.plist。我的做法涉及一些(依我看)讨厌的黑客。这两种平台的方法都是相同的,所以我将只编写Android版本
编辑Android项目的属性。将占位符放入要为每个客户端自定义的字段中,例如“AppNameCustomized”和“package.name.customized”
仍然在项目属性中,添加预构建事件以修改properties/AndroidManifest.xml
,并将输出保存到properties/AndroidManifest\u ClientA.xml
(不更改原始文件)。您希望对其进行修改,以便将“AppNameCustomized”替换为客户端A的应用程序名称。与“package.name.customized”等相同。在Mac上就应该做到这一点。对其他客户重复上述步骤
使用文本编辑器(不是从XS)打开Android project.csproj
文件。在最后一个属性组
之后和第一个项目组
之前,为每个客户端添加以下属性组
:
属性/AndroidManifest\u ClientA.xml
对于应用程序名和包名,这基本上归结为:为每个客户端生成一个定制的AndroidManifest,其中包含所需的应用程序/包名。然后根据构建配置使用正确的AndroidManifest
你完了!只需使用DebugClientA进行测试,并使用ReleaseClientA发布即可。我假设您希望为不同的客户端构建不同的apk/ipa。如果没有,请更新您的问题 您可以为每个客户端设置生成配置。在每个配置中,定义适当的符号。例如,配置“DebugClientA”和“ReleaseClientA”可能有符号
CLIENT\u A
然后在代码中,首先声明属性/字段,包括字符串文字、图像路径、颜色等。将赋值放在其他位置。我将它们放在App()
constructor调用的方法调用中
对于作业,将它们放入#if
和#elif
块()。代码应该如下所示:
#if CLIENT_A
MyString = "ClientA";
// Following is for ImageSource.FromResource()
MyPathToImage = "MyAssembly.images.clienta.image.png";
MyColor = Color.FromHex("012345");
#elif CLIENT_B
MyString = "ClientB";
MyPathToImage = "MyAssembly.images.clientb.image.png";
MyColor = Color.FromHex("6789AB");
// repeat as needed
#endif
ProjectName.Common.Forms
ProjectName.Common.iOS
ProjectName.Common.Android
ProjectName.Client1.Forms
ProjectName.Client1.iOS
ProjectName.Client1.Android
ProjectName.Client2.Forms
ProjectNAme.Client2.iOS
ProjectName.Client2.Android.
您的应用程序现在应该为每个客户端提供特定的文字、图像和颜色
定制应用程序名称是一个棘手的部分:定制的Android AndroidManifest.xml和iOS Info.plist。我的做法涉及一些(依我看)讨厌的黑客。这两种平台的方法都是相同的,所以我将只编写Android版本
编辑Android项目的属性。将占位符放入要为每个客户端自定义的字段中,例如“AppNameCustomized”和“package.name.customized”
仍然在项目属性中,添加预构建事件以修改properties/AndroidManifest.xml
,并将输出保存到properties/AndroidManifest\u ClientA.xml
(不更改原始文件)。您希望对其进行修改,以便将“AppNameCustomized”替换为客户端A的应用程序名称。与“package.name.customized”等相同。在Mac上就应该做到这一点。对其他客户重复上述步骤
使用文本编辑器(不是从XS)打开Android project.csproj
文件。在最后一个属性组
之后和第一个项目组
之前,为每个客户端添加以下属性组
:
属性/AndroidManifest\u ClientA.xml
对于应用程序名和包名,这基本上归结为:为每个客户端生成一个定制的AndroidManifest,其中包含所需的应用程序/包名。然后根据构建配置使用正确的AndroidManifest
你完了!只需使用DebugClientA进行测试,并使用ReleaseClientA发布即可。我不建议使用这种方法,因为当您需要签署iOS时,由于mtouch编译的限制,它将无法工作 我建议使用所有资源创建一个公共项目。并且,由客户创建所需的项目 我认为我们可以有这样的解决方案:
#if CLIENT_A
MyString = "ClientA";
// Following is for ImageSource.FromResource()
MyPathToImage = "MyAssembly.images.clienta.image.png";
MyColor = Color.FromHex("012345");
#elif CLIENT_B
MyString = "ClientB";
MyPathToImage = "MyAssembly.images.clientb.image.png";
MyColor = Color.FromHex("6789AB");
// repeat as needed
#endif
ProjectName.Common.Forms
ProjectName.Common.iOS
ProjectName.Common.Android
ProjectName.Client1.Forms
ProjectName.Client1.iOS
ProjectName.Client1.Android
ProjectName.Client2.Forms
ProjectNAme.Client2.iOS
ProjectName.Client2.Android.
您可以通过客户端获得许多解决方案。或者为所有客户提供一个解决方案
当您想要构建时,您需要更改项目目标。通过这种方式,您将能够为所有客户端支持不同的签名证书。我不建议使用这种方式,因为当您需要对iOS进行签名时,由于mtouch compile的限制,它将无法工作