Как обрабатывать несколько схем / целей в одном приложении iOS при переходе с Crashlytics на Firebase? - PullRequest
0 голосов
/ 30 ноября 2018

В настоящее время я перевожу свои приложения из Crashlytics в Firebase Crashlytics в соответствии с рекомендациями Fabric.

Мой сценарий состоит в том, что в моем приложении у меня есть четыре разные схемы (четыре цели) с четырьмя различными пакетами.идентификаторы, которые соответствуют моим dev, internal-qa, client-qa и live серверам.

Я создал четыре разных проекта для четырех «приложений», как в Fabric Crashlytics.

Теперь следующим шагом было бы добавление "GoogleService-Info.plist", созданного Firebase, в моем проекте.Все четыре проекта Firebase для моих четырех приложений (которые на самом деле являются разными схемами одного и того же приложения) сгенерировали список с одинаковым именем.В настоящее время это выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>AD_UNIT_ID_FOR_BANNER_TEST</key>
    <string>XXXXXXXX</string>
    <key>AD_UNIT_ID_FOR_INTERSTITIAL_TEST</key>
    <string>XXXXXXXXX</string>
    <key>CLIENT_ID</key>
    <string>XXXXXXXXXX</string>
    <key>REVERSED_CLIENT_ID</key>
    <string>XXXXX</string>
    <key>API_KEY</key>
    <string>XXXXXX</string>
    <key>GCM_SENDER_ID</key>
    <string>XXXXXXX</string>
    <key>PLIST_VERSION</key>
    <string>1</string>
    <key>BUNDLE_ID</key>
    <string>[MY SCHEME BUNDLE ID]</string>
    <key>PROJECT_ID</key>
    <string>[MY PROJECT ID]</string>
    <key>STORAGE_BUCKET</key>
    <string>XXXXXXXXX</string>
    <key>IS_ADS_ENABLED</key>
    <true></true>
    <key>IS_ANALYTICS_ENABLED</key>
    <false></false>
    <key>IS_APPINVITE_ENABLED</key>
    <false></false>
    <key>IS_GCM_ENABLED</key>
    <true></true>
    <key>IS_SIGNIN_ENABLED</key>
    <true></true>
    <key>GOOGLE_APP_ID</key>
    <string>XXXXXXXXX</string>
    <key>DATABASE_URL</key>
    <string>XXXXXXXXXXX</string>
</dict>
</plist>

Как мне это сделать?Просто добавить все четыре в моем проекте с разными именами?Или просто добавить все четыре, но изменить целевое членство каждого?Идентификаторы пакета, ключи приложения в списках отличаются в конце концов.Как мы должны обрабатывать несколько схем в одном приложении для iOS?

1 Ответ

0 голосов
/ 30 ноября 2018

Вот как я обработал то же самое в своем проекте.Я сохранил 4 файла GoogleService-Info.Plist с другим именем и сохранил их в папке в моем проекте.Но убедитесь, что вы не добавляете то же самое в навигатор проекта. (Таким образом, эти 4 файла будут находиться в папке моего проекта, но не в моем проекте. Короче говоря, он не будет автоматически скомпилирован.)

Теперь вам нужно добавить скрипт запуска в каждой из 4 целей, чтобы программно изменить имя каждого файла plist на требуемое имя, а затем добавить его в пакет для программного обеспечения, так что будет добавлен только один файл из 4 с требуемым именем..

Вот как это сделать выше.

  1. Выберите Target1 (независимо от того, какое у вас имя цели)
  2. Теперь выберите «Фазы сборки» вверху.доступные вкладки.
  3. Здесь вы увидите кнопку «+» в левом верхнем углу.Нажмите на него.
  4. Будет несколько опций, теперь выберите New Run Script Phase оттуда.В ваш список будет добавлен один новый скрипт запуска с именем Run Script.Если вы хотите, то вы можете изменить его имя, дважды щелкнув имя.В моем случае я сохранил имя RunScriptForGooglePlist.
  5. Там будет Shell со значением /bin/sh.И чуть ниже будет текстовое представление, где вы должны написать следующий код.Убедитесь, что вы меняете необходимые изменения имен файлов, основываясь на ваших именах plist-файлов.

Вот код для того же.

PATH_TO_GOOGLE_PLISTS="${PROJECT_DIR}/MyProjectFolder/GooglePlists"

cp -r "$PATH_TO_GOOGLE_PLISTS/GoogleService-Info-dev.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"

Здесь,В первой строке кода я беру путь к папке, в которой хранятся все 4 файла Google Plist с 4 разными именами.

И, во второй строке, я копирую этот файл в новое место, которое является пакетом приложения моего приложения, с требуемым именем. (Как я уже упоминал сверху, поскольку мы не добавляем все эти 4 файла вbundle, поэтому они не будут скомпилированы. И пакет приложения не будет иметь этого файла. В этом сценарии вы добавляете этот требуемый файл в его требуемое местоположение с именем, которое требуется для sdk google / firebase).

Вы должны повторить выше, та же процедура для всех 4 целей, а во второй строке кода выше, просто измените имя, как требуется для данной цели.

Если вы не получили какой-либо из вышеперечисленных шагов ИЛИ он все еще не работает, просто прокомментируйте, я обязательно вам помогу.

...