Ну, это возможно :)
Я закончил тем, что написал упомянутый Singleton, который имеет общедоступные свойства только для чтения и доступ для чтения и записи из класса (для этого использовались категории, см. пример частного установщика ).
Переменные класса заполняются значениями из файла .plist во время инициализации. Я использовал API времени выполнения, чтобы получить список переменных (просто поиск «список переменных target-c» в Stackoverflow) и получить значение из словаряloaded.plist, используя имя переменной в качестве ключа.
Значения можно использовать почти как константы:
MyConstants* testConstants = [MyConstants sharedInstance];
NSLog(testConstants.PARAM1);