Как мы можем иметь разные файлы Info.plist для разных сред, таких как Dev, Test, Staging и Prod?

Как мы можем иметь разные файлы Info.plist для разных сред, таких как Dev, Test, Staging и Prod ?

У меня есть некоторые настройки и отдельное приложение Facebook для каждой среды, чтобы обеспечить, чтобы аналитика приложений не подвергалась предвзятости тестировщиками и т. Д. Так что действительно старайтесь не вручную обновлять настройки перед созданием для каждой среды.

3 Solutions collect form web for “Как мы можем иметь разные файлы Info.plist для разных сред, таких как Dev, Test, Staging и Prod?”

Вот что вам нужно сделать, чтобы добавить склейки, специфичные для окружающей среды.

  • Скопируйте исходный файл ProjectName.Info.plist в ProjectName_Dev.Info.plist , ProjectName_Test.Info.plist и ProjectName_Staging.Info.plist и добавьте их в проект.

  • Нажмите на название Project Navigator , выберите « Target , затем выберите вкладку « Build Phases ».

  • Введите Info.plist в строке поиска в правом верхнем углу, чтобы фильтровать Info.plist.

  • Из-под Copy Bundle Resources удалите все plists, кроме ProjectName.Info.plist

  • Теперь нажмите « Editor -> Add Build Phase -> Add Run Script Build Phase вариант Editor -> Add Build Phase -> Add Run Script Build Phase .

  • Наконец, скопируйте следующий сценарий оболочки в новую добавленную фазу сборки.

Обязательно замените ProjectName своим именем проекта!

 if [ "${CONFIGURATION}" == "Dev" ]; then cp -r "${PROJECT_DIR}/ProjectName/ProjectName-Info_Dev.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/ProjectName-Info.plist" echo "DEV plist copied" elif [ "${CONFIGURATION}" == "Test" ]; then cp -r "${PROJECT_DIR}/ProjectName/ProjectName-Info_Test.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/ProjectName-Info.plist" echo "Beta plist copied" elif [ "${CONFIGURATION}" == "Staging" ]; then cp -r "${PROJECT_DIR}/ProjectName/ProjectName-Info_Staging.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/ProjectName-Info.plist" echo "Beta plist copied" elif [ "${CONFIGURATION}" == "Prod" ]; then cp -r "${PROJECT_DIR}/ProjectName/ProjectName-Info_Prod.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/ProjectName-Info.plist" echo "Beta plist copied" fi 

Или просто:

cp -r "${PROJECT_DIR}/ProjectName/ProjectName-Info_${CONFIGURATION‌​}.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/ProjectName-Info.‌​plist"

ПРИМЕЧАНИЕ. Я предполагаю, что вы уже создали схемы сборки с переменными среды Dev, Test, Staging и Production.

Получил помощь из этой статьи. http://www.dosomethinghere.com/2013/09/21/different-settings-app-entries-for-debug-vs-release-builds/

Вы также можете создавать отдельные файлы xcconfig для каждой цели, использовать диспетчер проектов, чтобы назначить каждой цели правильный файл xcconfig, а затем просто определить переменную с тем же именем в каждом xcconfig и импортировать эту переменную в свой единственный слой. Например:

first xcconfig:

MY_VARIABLE = такой

второй xcconfig:

MY_VARIABLE = thisandthat

А затем в вашем plist установите ключ со значением $ (MY_VARIABLE)

Зависит от того, что именно вы делаете. Xcconfig хорош, потому что вы можете получить доступ к переменным, которые вы устанавливаете там, в местах, подобных настройкам сборки, в дополнение к plist.

Попробуйте этот вспомогательный класс:

https://github.com/premosystems/MyEnvironmentConfig

  1. Добавьте среду $ (КОНФИГУРАЦИЯ) в info.plist.

  2. Добавьте конфигурационный файл среды среды, заполняйте свою любимую переменную.

  3. Добавьте категорию удобства в класс MYEnvironmentConfig, демонстрируя строго типизированные значения конфигурации.

  4. Инициализировать MyEnvironmentConfig в appDidFinishLaunching.

  • Выход из приложения вызывает ошибку «Сообщение от отладчика: завершено из-за сигнала 9»
  • Не удается запустить модульные тесты в Xcode 8 с более ранней конфигурацией тестовых модулей
  • Xcode, структура привязки не работает при использовании пользовательской конфигурации сборки
  • Пользовательский UITextField iOS с инициализацией выхода
  • Специфический вид загрузки UILocalNotification для iPhone
  • Непрерывная интеграция Xcode не была выполнена, как ожидалось
  • Xcode 4.4, приложение для сборки с ARC для iOS 4.2
  • Xcode 9 бета новая система сборки с ошибкой «неспособность построить узел»
  • Как добавить массив изображений в UIImage программно в ios4?
  • Внутренняя ошибка сервера Xcode Непрерывная интеграция
  • Почему типы IBAction по умолчанию для AnyObject?
  • Interesting Posts

    Как отменить / повторить работу в основном на iPhone OS?

    Метод ios-Soap, вызывающий HTTP-запрос, но ответ пуст

    Настройки info.plist для iPad только для приложения

    iOS Simulator не удалось установить приложение

    iOS Core Audio: преобразование между kAudioFormatFlagsCanonical и kAudioFormatFlagsAudioUnitCanonical

    Можно ли установить цвет фона для хостинга в ядре?

    Добавление элемента панели к левому навигационному элементу

    Как получить номер страницы или ссылку на страницу для назначения контура в PDF на iOS?

    Сертификаты и положения для сборки iOS в {N}

    SKTextureAtlas textureNamed не автоматически находит суффиксы текстур @ 3x в XCode 6 GM Seed

    Невозможно установить cocoapods, сообщить о настройке pod

    Генерировать производный ключ из общего секретного (ECDH-ES) – ConcatKDF

    XCode 4.5, реализация SDK 3.1 в Facebook, в результате чего ошибка «… выбранная цель не поддерживает архитектуру …»

    Внимание: NSURLSession / NSURLConnection Ошибка загрузки HTTP (kCFStreamErrorDomainSSL, -9802)

    FBSDKShareDialog из Facebook SDK не работает на iOS9?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.