Я использовал клиент-серверный подход, при котором все данные, относящиеся к одному клиенту, загружаются или настраиваются с удаленного сервера. Вам по-прежнему нужны клиенты с перекрывающимися требованиями, но вы можете включать и выключать модули в зависимости от потребностей конкретного клиента.
Низкотехнологичный подход: захватите данные, файлы конфигурации и изображения из другого места в файловой системе. Или в том же месте, но поместите новые данные о клиентах в каталог и заархивируйте старые. Plist, текстовый файл, серия #defines и т. Д. Могут включать или отключать поведение. Напишите свой код, чтобы он не знал, сколько изображений, какие модули, какого цвета кнопки и т. Д., Пока он не проверит конфигурацию и не получит необходимые данные и изображения из вашего каталога.