Подтвердить что ты не робот

Использование определений препроцессора в iOS App info.plist

У меня есть приложение iOS, которое использует SSO с Facebook в качестве части вашего приложения для работы с Facebook SSO, вам нужно указать URL-адрес FacebookAppId и обратного вызова в info.plist. У меня есть две разные группы Facebook для тестирования и одна для производства. Я хочу иметь значения двух указанных выше ключей, установленных на основе директив препроцессора.

В моем MessageBomb-Prefix.pch у меня есть следующее, которое отлично работает:

#ifdef TEST
    //Development environments
    #define PARSE_APP_ID "dev parse app id"
    #define PARSE_CLIENT_ID "dev parse client id"
    #define FB_APP_ID "dev facebook id"
#else
    //Production environments
    #define PARSE_APP_ID "prod parse app id"
    #define PARSE_CLIENT_ID "prod parse client id"
    #define FB_APP_ID "prod facebook id"
#endif

Однако в моем info.plist я сделал следующее, но он не работает:

<key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>fb${FB_APP_ID}</string>
            </array>
        </dict>
    </array>
    <key>FacebookAppID</key>
    <string>${FB_APP_ID}</string>

Можно ли даже делать то, что я пытаюсь сделать. Я установил проект для предварительной обработки info.plist.

Спасибо Питер

4b9b3361

Ответ 1

Если вы перейдете в "Настройки сборки", вы можете установить Preprocess Info.plist File в YES, а затем установить Info.plist Preprocessor Prefix File в файл .h, который вы разместили в своем проекте, с помощью директив #define.

Так, например, если я добавлю ключ к моему файлу Info.plist: testKey со значением TEST_VALUE. Затем я помещаю test.h в свой проект с помощью:

#define TEST_VALUE hello_world

И затем я установил Preprocess Info.plist File в YES и Info.plist Preprocessor Prefix File в test.h

Значение этого ключа при восстановлении теперь "hello_world". Если вы измените значение макроса, вы можете обнаружить, что вам нужно сделать Product/Clean, чтобы увидеть изменения, поскольку XCode, похоже, кэширует скомпилированное значение.

Ответ 2

Препроцессор Info.plist позволит вам использовать настройки сборки в вашем Info.plist, а не #define s. Таким образом, вы можете определить FB_APP_ID как настраиваемую настройку пользовательской сборки в своей целевой (и дать ей переопределения для разных схем), и это значение будет доступно для Info.plist. Тем не менее, настройки пользовательской сборки не подвергаются воздействию вашего кода. То есть, если вы не ошиблись с настройкой сборки определений препроцессора и добавьте запись, которая выглядит как

[email protected]\"$(FB_APP_ID)\"

(обратные косые черты необходимы для получения двойных кавычек после вызова оболочки)

Если ваш идентификатор приложения может содержать пробелы, вам нужно будет добавить кавычки, чтобы пройти через вызов оболочки:

FB_APP_ID="@\"$(FB_APP_ID)\""

В итоге у вас будут настройки сборки, которые выглядят примерно так:

Build settings

Ответ 3

Для доступа в plist:

Создать новую переменную
enter image description here


Определить его
enter image description here


Используйте его в своем информационном планке
enter image description here