从Crashlytics迁移到Firebase时,如何在一个iOS应用中处理多个方案/目标?

时间:2018-11-30 12:12:40

标签: ios firebase crashlytics

根据Fabric的指南,我目前正在将我的应用程序从Crashlytics迁移到Firebase Crashlytics。

我的情况是,在我的应用程序中,我有四个不同的方案(四个目标),具有四个不同的包标识符,分别对应于我的开发人员,内部质量保证,客户端质量保证和实时服务器。

我为四个“应用程序”创建了四个不同的项目,就像在Fabric Crashlytics中所做的一样。

现在,下一步是在我的项目中添加由Firebase生成的“ GoogleService-Info.plist”。我的四个应用程序(实际上是同一应用程序的不同方案)的所有四个Firebase项目生成了一个具有相同名称的plist。当前看起来像这样:

<?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>

我该怎么做?只需在我的项目中用不同的名称添加全部四个?还是只添加全部四个,但修改每个的目标成员资格?绑定器中的捆绑软件ID,应用程序密钥毕竟是不同的。我们应该如何在一个iOS App中处理多种方案的情况?

1 个答案:

答案 0 :(得分:3)

这就是我在项目中处理相同事情的方式。我用不同的名称保留了4个GoogleService-Info.Plist文件,并将其保留在项目的文件夹中。但是请确保不要在项目导航器中添加相同的文件。(因此,这4个文件将位于我的项目文件夹中,而不是我的项目中。总之,它们将不会自动编译。)

现在,您必须在每个4个目标中添加运行脚本,以便以编程方式将每个plist文件的名称更改为所需名称,然后以编程方式将其添加到bundle中,以便只有4个文件中的单个文件具有所需名称。添加。

这是上述步骤的操作方法。

  1. 选择Target1(无论您的目标名称是什么)
  2. 现在,在顶部可用标签中选择“构建阶段”。
  3. 在这里,您会在左上角看到“ +”按钮。点击它。
  4. 会有多个选项,现在从那里选择New Run Script Phase。它将在列表中添加一个名称为Run Script的新运行脚本。如果需要,可以通过双击名称来更改名称。就我而言,我的名字是RunScriptForGooglePlist
  5. 将有Shell,值为/bin/sh。在其下方,将有textview,您必须在其中编写以下代码。确保根据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个不同的名称保存。

然后,在第二行中,我将此文件复制到应用程序的应用程序捆绑包中,并带有必需的名称。(正如我前面已经提到的那样,因为我们没有将所有这四个文件都添加到捆绑包中,所以它们将不会被编译。而且,该应用程序捆绑包中将没有此文件。在此脚本中,您将此必需文件添加到其所需位置,名称为google / firebase的sdk所需的名称。

您必须对所有4个目标重复上述相同过程,并且在上述代码的第二行中,只需根据给定目标的要求更改名称即可。

如果您没有采取上述任何步骤,或者仍然无法使用,请发表评论,我一定会为您提供帮助。