Я предполагаю, что вы хотите создать разные apk/ipa для разных клиентов. Если нет, пожалуйста, обновите свой вопрос.
Вы можете настроить конфигурацию сборки для каждого клиента. В каждой конфигурации определите соответствующие символы. Например, конфигурации «DebugClientA» и «ReleaseClientA» могут иметь символ CLIENT_A
.
Затем в своем коде сначала объявите свои свойства/поля, включая строковые литералы, пути к изображениям, цветам и т. д. Поместите назначения в другом месте. Я помещаю их в вызов метода, вызываемый конструктором App()
.
Для задания поместите их в блоки #if
и #elif
(документ MSDN) . Код должен выглядеть так:
#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
Теперь ваше приложение должно иметь определенные литералы, изображения и цвета для каждого клиента.
Настройка имени приложения представляет собой сложную часть: настраиваемый Android AndroidManifest.xml и iOS Info.plist. Мой способ действий включает в себя некоторые (ИМО) неприятные хаки. Метод одинаков для обеих платформ, поэтому я напишу только версию для Android.
Отредактируйте свойства проекта Android. Поместите заполнители в поля, которые вы хотите настроить для каждого клиента, например. «AppNameCustomized» и «package.name.customized».
В свойствах проекта добавьте событие предварительной сборки, чтобы изменить Properties/AndroidManifest.xml
и сохранить вывод в Properties/AndroidManifest_ClientA.xml
(без изменения исходного файла). Вы хотите изменить его так, чтобы «AppNameCustomized» было заменено именем приложения клиента A. То же самое для «package.name.customized» и т.п. На Mac sed
следует делать Хитрость. Повторите для других клиентов.
Откройте файл проекта Android .csproj
с помощью текстового редактора (не из XS). После последнего PropertyGroup
и перед первым ItemGroup
добавьте следующие PropertyGroup
для каждого клиента:
<PropertyGroup Condition=" '$(Configuration)' == 'DebugClientA' Or '$(Configuration)' == 'ReleaseClientA' ">
<AndroidManifest>Properties/AndroidManifest_ClientA.xml</AndroidManifest>
</PropertyGroup>
Для имени приложения и имени пакета это в основном сводится к следующему: Создайте настраиваемый AndroidManifest для каждого клиента, который содержит желаемое имя приложения/пакета. Затем используйте правильный AndroidManifest в соответствии с конфигурацией сборки.
И вы сделали! Просто протестируйте с помощью DebugClientA и опубликуйте с помощью ReleaseClientA.
person
Link Ng
schedule
14.09.2016