Использование определений препроцессора в 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.
Спасибо
Питер
Ответы
Ответ 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]()