Могу рассказать наш опыт. Наша тестовая система принимает на вход билд и параметр, релиз это или дебаг. Потом на этом билде выполняется какой-то сет из тестовый кейсов, при этом анализируются выходные данные, креши и логи (релиз или дебаг — это один и тот же тестовый код). Таким образом, при одинаковом коде тестовой системы, для разных билдов мы просто получаем немного разные отчёты (которые, кстати, полезно потом сравнить и сопоставить, если что-то пойдёт не так). Так же хочу заметить, что «дебажный» билд это не просто билд, который у девелоперов — это специально настроенный билд, построенный таким образом, что ассерты, эксепшены и прочая расширенная информация сбрасывается в лог, который удобно потом автоматически анализировать и формировать отчёт. Действительно, «дебажная» сборка является третим видом сборки, но она от обычной отличается только одним файлом .h с настройкой ассертов и эксепшенов. Весь этот кейс протянут через систему continious integration и проходит в автоматическом режиме. На самом деле это реализовать не так сложно, но при этом ещё проще поддерживать.