Xcode 4.3 - предварительный процесс plist больше не работает для #define с "http://"? - PullRequest
6 голосов
/ 18 февраля 2012

Я только что обновился до последней версии Xcode 4.3.У меня есть мой plist. который предварительно обработан и по сравнению с 4.2 больше не работает.

Я установил Info.plist other pre-processor флаг -traditional (чтобы пропустить //, рассматриваемый как комментарий).

Я установил

 #define MYSERVER  http://127.0.0.1:1234/

и в моем списке

    <key>myhost</key>
    <string>MYSERVER</string>

Когда я проверяю новый Xcode 4.3, я вижу внутри NSDictionary *bundle = [[NSBundle mainBundle] infoDictionary];

 myhost = "http:/ /127.0.0.1:1234/"

У меня есть быстрый взлом для этого.

    NSString *hack = [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"myhost"] stringByReplacingOccurrencesOfString:@" " withString:@""];
    url = [NSURL URLWithString:hack];

Это заставляет мое приложение снова работать, но я хотел бы иметь чистое решение.Есть идеи?

Ответы [ 2 ]

3 голосов
/ 19 февраля 2012

Это на самом деле ошибка в препроцессоре clang, который поставляется с Xcode 4.3 (clang 3.1) и влияет на всю предварительную обработку, а не только на Info.plists.Я подал ошибку ( LLVM bug 12035 , rdar: // 10883862).

Обходной путь для этого - заставить Xcode 4.3 использовать llvm-gcc для предварительной обработки Info.plist вместолязгЕдинственный способ, который я нашел, - переписать символическую ссылку "cc", которая используется на этапе предварительной обработки Info.plist:

sudo ln -fs /usr/bin/llvm-gcc /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc

Чтобы отменить этот хак, просто переписать еговернуться к лязгу: sudo ln -fs /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc

0 голосов
/ 18 февраля 2012

Вы можете пропустить препроцессор и использовать PlistBuddy.

Что-то вроде этого на этапе сценария сборки должно работать:

#!/bin/sh

MYSERVER = 'http://127.0.0.1:1234/'

/usr/libexec/PlistBuddy -c "Set :myhost ${MYSERVER}" path/to/Info.plist

Обратите внимание, что если вы сделаете это в ProejctName-Info.plist в стандартной настройке XCode, файл будет помечен как измененный svn / github каждый раз, когда вы создаете, и в зависимости от ваших потребностей, которые могут быть не идеальными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...