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

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

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

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

  • Скопируйте исходный файл 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.

  • 3D-модель не появляется при рендеринге
  • Есть ли способ изменить положение текста в UITabBar или UITabBarItem?
  • Удалить указанный файл из каталога документов
  • Xcode 6 beta и изменяемый размер Iphone: как получить текущие размеры экрана
  • Как «скрыть» UIRefreshControl?
  • Непредсказуемая задержка до появления UIPopoverController под iOS 8.1
  • uifont 'Impact' не работает для iOS
  • расширенный просмотр списка в iOS
  • Как отменить выбор сегмента в Сегментированной кнопке управления до тех пор, пока не будет снова нажата
  • Apple Pay Detective Wallet не имеет кредитных карт
  • Отключить автокоррекцию для UITextField в целом приложении
  • Interesting Posts

    Синтаксис синтаксиса iOS

    Увеличение размера приложения после использования SDK Google Maps для iOS

    Где я могу найти код iOS Obj-C для сканирования и подключения к Wi-Fi (частный API)

    Отслеживание местоположений прекращается через некоторое время, когда приложение находится в фоновом режиме

    Реализованный в реальном времени OSM-рендеринг в iOS (с использованием OpenGL ES)

    Как правильно нажать на другой контроллер навигации

    Как программно создавать NSArray локализованных имен календаря?

    Не удалось проверить работоспособность приложения iOS 9

    removeObserver не работает

    Включить файл «.framework» в cocoapods

    Может ли реализация источника данных быть моделью просмотра?

    Swift: println () ничего не показывает в «Просмотр журналов устройств» на вкладке «Устройства»

    Xcode 4 сбой при открытии проекта

    Удалено NSManagedObject, правильно удаленное из таблицы, затем появляется при сохранении

    Задание ios 7, но поддержка ios 5+ monotouch

    Давайте будем гением компьютера.