Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Crashlytics迁移到Firebase时,如何在一个iOS应用程序中处理多个方案/目标?_Ios_Firebase_Crashlytics - Fatal编程技术网

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

从Crashlytics迁移到Firebase时,如何在一个iOS应用程序中处理多个方案/目标?,ios,firebase,crashlytics,Ios,Firebase,Crashlytics,我目前正在按照Fabric的指导原则将我的应用程序从Crashlytics移动到Firebase Crashlytics 我的场景是,在我的应用程序中,我有四个不同的方案(四个目标),四个不同的捆绑标识对应于我的开发人员、内部qa、客户端qa和实时服务器 我为这四个“应用程序”创建了四个不同的项目,就像我在Fabric Crashlytics中所做的那样 现在,下一步应该是在我的项目中添加Firebase生成的“GoogleService Info.plist”。我的四个应用程序(实际上是同一应

我目前正在按照Fabric的指导原则将我的应用程序从Crashlytics移动到Firebase Crashlytics

我的场景是,在我的应用程序中,我有四个不同的方案(四个目标),四个不同的捆绑标识对应于我的开发人员、内部qa、客户端qa和实时服务器

我为这四个“应用程序”创建了四个不同的项目,就像我在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
XXXXXXXX
用于间隙试验的AD单元ID
XXXXXXXXX
客户识别码
XXXXXXXXX
反向客户端ID
XXXXX
API_密钥
XXXXXX
GCM\u发送者\u ID
XXXXXXX
PLIST_版本
1.
捆绑标识
[我的方案包ID]
项目编号
[我的项目ID]
存储桶
XXXXXXXXX
是否启用了广告
是否启用了\u分析\u
_APPINVITE_是否已启用
_GCM_是否已启用
是否启用了登录
谷歌应用程序ID
XXXXXXXXX
数据库地址
XXXXXXXXXX

我该怎么做呢?只需在我的项目中用不同的名称添加所有四个?或者只添加所有四个,但修改每个的目标成员资格?plists中的bundle id和应用程序键毕竟是不同的。我们应该如何处理一个iOS应用程序中存在多个方案的情况

以下是我在项目中处理相同事情的方式。我用不同的名称保存了4个GoogleService-Info.Plist文件,并将它们保存在我项目的文件夹中。但请确保,您没有在project navigator中添加相同的文件。(因此,这4个文件将驻留在我的project文件夹中,但不在我的project中。简而言之,它不会自动编译。)

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

下面是如何完成上述步骤

  • 选择
    Target1
    (无论您的目标名称是什么)
  • 现在,选择顶部可用选项卡中的“构建阶段”
  • 在这里,您将看到左上角的“+”按钮。点击它
  • 将有多个选项,现在从那里选择
    newrunscriptphase
    。它将在您的列表中添加一个名为
    runscript
    的新运行脚本。如果需要,可以通过双击名称来更改其名称。在我的例子中,我保持name
    RunScriptForGooglePlist
  • 将有值为
    /bin/sh
    Shell
    。在它的下方是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个GooglePlist文件都有4个不同的名称

    在第二行,我将这个文件复制到新位置,这是我应用程序的应用程序包,具有所需的名称。(正如我在顶部已经提到的,因为我们没有将这4个文件全部添加到捆绑包中,所以不会对它们进行编译。而且,应用捆绑包中不会有此文件。在这个脚本中,您将使用google/firebase的sdk所需的名称将此所需文件添加到其所需位置)

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


    如果您没有执行上述任何步骤或该步骤仍不起作用,请发表评论,我一定会帮您解决。

    谢谢您的帮助Mehul。我将脚本放入并命名为“运行Firebase脚本”,它在生成时抛出此错误:
    命令阶段说明执行失败,退出代码为非零。
    。有什么想法吗?它说可能是“;;”的语法错误。是否需要分号?如果我删除分号,生成成功。是的,如果您取出分号,它会工作。谢谢抱歉。这是个错误