Предварительная обработка файлов Info.plist в XCode Используя Препроцессор C
Этот документ предоставляет решения нескольких трудностей, с которыми сталкиваются при предварительной обработке файлов Info.plist с GCC C препроцессор в XCode. Это детализирует, как препятствовать URLs преобразовываться в комментарии, как к строкам формата для сохранения пробела в свойствах <string> и успешном методе для обработки макрорасширения.
Введение
Существует несколько известных трудностей, с которыми сталкивается сообщество разработчиков, использующее GCC C препроцессор для предварительной обработки их списка свойств (Info.plist) файлы в XCode. Некоторые разработчики столкнулись с проблемами с пробелом в их определяемых пользователем строках, сжимаемых после предварительной обработки. Другие были обращенным к проблемам относительно URLs, превращаемого в комментарии, и отбросили, или неспособность для успешного расширения определяемых пользователем макросов в отношении Info.plist файлы. Этот документ представит обходные решения для каждой из этих проблем.
Сохранение пробела в строках определяется в файле Info.plist
В XCode a <string> свойство в Info.plist file когда plist будет скопирован в созданный продукт, будет иметь любые встроенные выполнения пробелов преобразованными в одиночный пробел. Это - проблема, когда свойства строки используются в случаях, где строки сравнены для соответствия целей.
Эта проблема часто замечается в разработке драйвера устройства. Например, IOSCSIPeripheralDeviceNub для определенной модели диска имеет свойство «Product Identification» со значением
"DVD-R TLF-313" |
- в этом значении существует три последовательных пробелов. По умолчанию, если та пара ключ/значение помещается в Info.plist из драйвера устройства значение в созданном KEXT изменяется на
"DVD-R TLF-313" |
- где три последовательных пробелов были сжаты в одиночный пробел. В результате свойство в Info.plist не соответствует устройство, и драйверу тихо не удается запуститься.
Сохранить пробел в <string> свойство, замените пробелы в строке со ссылкой символа XML  . В примере драйвера устройства, Info.plist содержал бы свойство:
<string>DVD-R    TLF-313</string> |
Препятствование тому, чтобы URLs был преобразован в комментарии и отброшен
Используя GCC C препроцессор для предварительной обработки Вашего Info.plist файлы могут иметь некоторые непреднамеренные побочные эффекты. Такой как использование URLs в Вашем файле. Т.е. препроцессор C обрабатывает текст таким же образом, это обработало бы исходный код - что-либо после «//», символы обрабатываются как комментарии и отбрасываются. Поэтому a <string> свойство, первоначально представленное как это:
<string>http://developer.apple.com</string> |
будет преобразован в это:
<string>http: |
Для работы вокруг этой функции препроцессора C мы можем передать -traditional отметьте к Info.plist Other Preprocessor Flags установка сборки в XCode. Это заставит препроцессор использовать традиционный ANSI C /* и */ символьные строки как маркеры, чтобы распознать и отбросить текст как комментарии.
Устранение пробела между маркерами в процессе макрорасширения
Много разработчиков хотят использовать макросы для представления определенных вещей об их программном обеспечении в Info.plist файл. Одно такое использование должно представлять значения для главных, незначительных и служебных версий их программного обеспечения. Например:
#define MAJORVERSION 2 #define MINORVERSION 4 #define MAINTVERSION 6 |
помещенный в Info.plist снабжают префиксом заголовок соответствие Info.plist файл, содержащий:
<key>CFBundleShortVersionString</key> <string>MAJORVERSION.MINORVERSION.MAINTVERSION</string> |
вызовет строку "1 . 2 . 3" появиться в About окно приложения. Пробелов между числами в процессе макрорасширения можно избежать путем передачи -traditional к Info.plist Other Preprocessor Flags установка сборки.
История версии документа
| Дата | Примечания |
|---|---|
| 07.05.2010 | Фиксированная опечатка. Передайте «-традиционный» флаг, а не «-CC» флаг для устранения пробела между маркерами в процессе макрорасширения. |
| 14.08.2007 | Новый документ, описывающий обходные решения для нескольких проблем относительно предварительной обработки файлов Info.plist в XCode с препроцессором C. |