Техническое примечание TN2175

Предварительная обработка файлов Info.plist в XCode Используя Препроцессор C

Этот документ предоставляет решения нескольких трудностей, с которыми сталкиваются при предварительной обработке файлов Info.plist с GCC C препроцессор в XCode. Это детализирует, как препятствовать URLs преобразовываться в комментарии, как к строкам формата для сохранения пробела в свойствах <string> и успешном методе для обработки макрорасширения.

Введение
Сохранение пробела в строках определяется в файле Info.plist
Препятствование тому, чтобы URLs был преобразован в комментарии и отброшен
Устранение пробела между маркерами в процессе макрорасширения
История версии документа

Введение

Существует несколько известных трудностей, с которыми сталкивается сообщество разработчиков, использующее 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 &#x20;. В примере драйвера устройства, Info.plist содержал бы свойство:

<string>DVD-R &#x20;&#x20;&#x20;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.