Несколько лет назад, при компиляции с GCC, в файле #include.h можно было предварительно обработать для использования в info.plist:
#define MAJORVERSION 2
#define MINORVERSION 6
#define MAINTVERSION 4
<key>CFBundleShortVersionString</key> <string>MAJORVERSION.MINORVERSION.MAINTVERSION</string>
..., который превратился бы в "2.6.4". Это сработало, потому что GCC поддерживал флаг "-traditional". (см. Техническое примечание TN2175 Файлы Info.plist в Xcode Использование препроцессора C в разделе "Устранение пробелов между токенами в процессе макрообработки" )
Однако ускоренная перемотка вперед до 2016 года и Clang 7.0.2 (Xcode 7.2.1), по-видимому, не поддерживает "-traditional" или "-traditional-cpp" (или поддерживает ее правильно), давая эту строку:
"2 . 6 . 4"
(см. Ошибка 12035 - Препроцессор вставляет пробелы в расширения макросов, комментарий 4)
Поскольку существует так много разных вариантов (CFBundleShortVersionString, CFBundleVersion, CFBundleGetInfoString), было бы неплохо обойти эту проблему с кланом и определить их один раз, а также объединить/объединить фрагменты. Какова общепринятая модель для этого? (Я сейчас строю на MacOS, но тот же шаблон будет работать для IOS)