Я использую схему сборки для prod и одну для постановки (с двумя разными идентификаторами пакетов), и я пытаюсь использовать отдельный GoogleService-Info.plist для каждой схемы. Есть ли способ вручную выбрать файл plist для использования при инициализации GCM (и входа в систему goole)? Или можно не использовать plist и выполнить настройку вручную?
Спасибо!
Ответы:
подробности
Проверено на:
Решение
Код
источник
configure(options:)
. github.com/firebase/quickstart-ios/issues/5-r
, подробнее: команда cp в Linux / UnixОтвет @inidona сработал для меня. После того, как я преобразовал его в Swift
для Swift 2.3:
для Swift 3.0:
для Swift 4.0:
источник
GoogleService-Info.plist
файла в разных местах или два файла с разными именами. Не могли бы вы предоставить дополнительную информацию о том, каковы настоящие имена файлов и где они находятся?Проверьте эту статью: https://medium.com/@brunolemos/how-to-setup-a-different-firebase-project-for-debug-and-release-environments-157b40512164
В Xcode создайте внутри вашего проекта два каталога:
Debug
иRelease
. ПоложитеGoogleService-Info.plist
туда каждый файл.На
AppDelegate.m
внутриdidFinishLaunchingWithOptions
метода, поместите код:Цель-C
Swift 4
Перетащите обе папки
Debug
и вRelease
папкуBuild Phases > Copy Bundle Resources
:Это оно :)
источник
Analytics
фреймворка, вы не можете сказать, какой.plist
именно загружается.Debug
&Release
? Потому что, когда я пытаюсь это сделать, я всегдаalready configured crash.
получаю, что следую последней инструкции из официального документа Firebase. СпасибоЯ думаю, вы можете использовать этот способ для динамической настройки вашего GoogleService-Info.plist и использовать разные имена для разных идентификаторов пакетов.
чао Андреас
источник
Could not locate configuration file: 'GoogleService-Info.plist'
Я заметил, что Google ожидает, что имя файла будет GoogleServiceInfo.plist в коде:
ключевая фраза эта
Поэтому я просто скопировал один и тот же файл, поместил его в разные каталоги и привязал его к разным целям:
источник
Если у
GoogleService-Info.plist
него другое имя, это повлияет на результаты вашей аналитики. Firebase предупредит вас об этом. https://github.com/firebase/firebase-ios-sdk/issues/230#issuecomment-327138180 . По этой причине ни одно из этих runtime-решений не обеспечит наилучших результатов аналитики.Есть два решения, которые не повлияют на Google Analytics.
Используйте разные цели для каждой схемы и свяжите каждую версию
GoogleService-Info.plist
с собственной целью. См. Целевое членство в инспекторе файлов справа в Xcode. Для получения дополнительной информации см. Этот вопрос .Использование фазы сборки сценария , чтобы скопировать правильную версию из
GoogleService-Info.plist
в каталог сборки. Я использую другой идентификатор пакета для постановки и производства. Это позволяет мне устанавливать обе версии приложения параллельно. Это также означает, что с помощью приведенного ниже сценария я могу называть свои различныеGoogleService-Info.plist
файлы идентификатором пакета. Например:GoogleService-Info-com.example.app.plist
GoogleService-Info-com.example.app.staging.plist
Скрипт этапа сборки
Примечание. Вам нужно будет изменить
PATH_TO_CONFIG
настройки в соответствии с вашими требованиями.источник
Поздно, но я думаю, что должен опубликовать этот ответ, чтобы помочь новым разработчикам, я нашел очень хорошую статью, которая решила мою проблему, и я обещаю, что она также может помочь вам :)
Проверьте эту статью, которая также решит вашу проблему.
Шаг 1.
Скопируйте GoogleService-Info.plist, соответствующий вашей среде разработки Firebase, в каталог Dev . Точно так же скопируйте GoogleService-Info.plist, соответствующий вашей производственной среде Firebase, в каталог Prod . Обязательно снимите флажок «Копировать элементы, если необходимо» и все цели в разделе «Добавить в цели» .
Шаг 2.
В навигаторе проекта Xcode выберите цель приложения. Переключитесь на вкладку Build Phases вверху, затем добавьте New Run Script Phase . Назовите этап «Настройка Firebase Environment GoogleService-Info.plist» или что-нибудь в этом роде и поместите его перед этапом «Копировать ресурсы пакета» .
Шаг 3. Реализуйте
сценарий оболочки, который скопирует соответствующий GoogleService-Info.plist в пакет приложения на основе конфигурации сборки. Скопируйте и вставьте следующий сценарий оболочки в только что созданный этап сценария выполнения:
источник
Вы не можете избежать использования plist с Firebase. Лучшее решение, которое я нашел для вас, - это добавить оба файла и назвать его
и
Затем из вашего кода вы можете вызвать правильный файл. Это не приведет к сбою вашего приложения, если у вас нет файла. Просто замените FILENAME на GoogleService-Info_prod или GoogleService-Info_stage.
источник
Это моё решение!
И это все!
источник
Этот ответ очень вдохновлен @abbood , но немного более конкретным о том, как это сделать.
Для каждой из ваших целей, например dev, stg, prod:
GoogleService-Info.plist
файл в отдельную папку с именем вашей целиAdd files to "your app"
GoogleService-Info.plist
, убедитесь, чтоCopy items if needed
иCreate groups
выбраны, отметьте только соответствующую цель в списке целей и нажмитеAdd
Вот и все. Теперь у вас должно получиться что-то похожее на эту структуру
При построении мишени
GoogleService-Info.plist
будет использоваться правильный .источник
Вот как это сделать в Xamarin C #:
Не забудьте включить пространство имен Firebase:
источник
Я думаю, что этого невозможно достичь без использования
GoogleService-Info.plist.
Потому что, прежде чем вы сможете начать интеграцию своего приложения iOS с компонентами входа в Google, вы должны загрузить зависимости и настроить свой проект Xcode. И этот процесс показывает, чтоGoogleService-Info.plist
имеет большое значение.Итак, решения и идея здесь, в этом вопросе SO, могут помочь вам с вашей проблемой. Просто переместили основную копию
GoogleService-Info plist
из приложения в 2 отдельные папки, а затем использовал этапы сборки «Копировать файлы» для каждой цели, чтобы импортировать целевой файл plist в папку «Ресурсы».Также проверьте этот вопрос SO , он может дать вам дополнительную информацию / идею по вашей проблеме.
источник
В Xcode 9.2 мне нужны файлы для обеих целей, которые должны называться "googleServiceInfo.plist", но размещаться в разных каталогах, причем каталог / файл для каждой цели указан в "Фазы сборки", "Копировать ресурсы пакета".
Вышеупомянутое не было моим предпочтительным решением, но я ранее пробовал использовать разные имена файлов в строках ответа @inidona, преобразованного в Swift 4:
К сожалению, это не помогло исправить сообщения об ошибках Firebase. В этом вопросе: Firebase iOS SDK - использование файла конфигурации, отличного от GoogleService-Info.plist, генерирует предупреждение консоли, которое, похоже, исправлено исходным плакатом путем обновления Firebase Pod, но я не подтвердил это.
источник
Я решил это следующим образом:
источник
Если кто-то из вас попадает в ошибку и Xcode жалуется
после применения ответа @Knight Fighter вы можете:
GoogleService-Info.plist
источник
Итак, я размышлял над тем же вопросом и использовал некоторые идеи из предыдущих сообщений, некоторые из которых публикуют приложения
GoogleServices-Info.plist
для всех сред во всех приложениях, и это немного беспокоит.Я придумал расширяемое решение, которое копирует
GoogleSerives-Info.plist
файл во время сборки. Более того, этот подход может поддерживать столько сред, сколько вам нужно, с возможностью настройки и соблюдением простых соглашений, что упрощает управление.Прежде всего, у меня есть три среды:
debug
(для работы в симуляторе и отладки устройства и активной резки кода),staging
(для развертывания в тестовом полете) иrelease
для производства.Шаг первый - создать вашу конфигурацию (ы):
Выберите «Продукт» -> «Схема» -> «Изменить схему» и продублируйте / создайте новую по мере необходимости. Просмотрите каждую схему и назначьте ей соответствующую конфигурацию из раскрывающегося списка «Конфигурация сборки» в каждой из категорий:
Я делаю еще один шаг и снимаю отметку с «запускать» для схем, которые необходимо распространить, т.е. выпуск и постановка, и, наоборот, снимаю отметку с «архив» для отладки. Вы должны делать то, что имеет для вас смысл.
На этапах сборки добавьте следующий сценарий запуска (
CONFIGURATIONS_FOLDER
переменную можно настроить по желанию - просто убедитесь, что вы используете то же имя папки на следующем шаге):В выбранной вами папке конфигураций («Firebase» в приведенном выше примере) вложите папки для каждой конфигурации, названной точно так же, как ее соответствующая конфигурация (с учетом регистра), внутри которых поместите соответствующие
GoogleServices-Info.plist
файлы следующим образом:И последнее, но не менее важное: я также хотел бы убедиться, что корневой уровень
GoogleServices-Info.plist
не добавлен в проект случайно, поэтому я добавляю следующее в свой .gitignore.источник
Предположим, у нас есть две конфигурации,
develop
иproduction
. Вам нужно сделать две вещи:Сценарий выполнения должен быть размещен перед
FirebaseCrashlytics
сценарием.Вы можете запустить firebase, как и раньше, для одной схемы:
FirebaseApp.configure()
источник