在一个目标 (GCM) 中有两个 GoogleService-Info.plist(或更多)
Posted
技术标签:
【中文标题】在一个目标 (GCM) 中有两个 GoogleService-Info.plist(或更多)【英文标题】:Have two GoogleService-Info.plist (or more) in one target (GCM) 【发布时间】:2016-07-24 06:24:19 【问题描述】:我正在将 GCM 集成到一个应用程序中,我们碰巧有多个针对同一目标的构建配置,其中一些使用不同的 Bundle Id(我们有不同的帐户、企业和应用商店),所以如果我们想启用 GCM 推送通知我们都需要两个不同的 GoogleService-Info.plist 文件(每个文件对应不同的 BundleID)。我找不到一种方法来告诉 GCM sdk 从一个不同的命名文件初始化,但默认文件。有谁知道这是否可能?
我可以想到两种解决方案,但我宁愿不这样做。 - 一旦应用程序启动(或之前),将捆绑 ID 写入 plist 文件 - 使用不同的 plist 文件创建不同的 Target
非常感谢。
问候, 哈维尔
【问题讨论】:
您是对的,您需要为 Enterprise 和 Appstore 帐户提供两个不同的GoogleService-Info.plist
文件。但我认为不可能在一个目标中有两个或多个 GoogleService-Info.plist。正如您所说,最好“使用不同的plist文件创建一个不同的目标”。因此,如果目标是企业,则使用一个 .plist 文件,如果另一个目标是发布版本,则使用另一个 plist 文件。检查这个相关的question。
谢谢,我决定最后我将在运行脚本构建阶段编辑 GoogleService-Info.plist 文件,为包标识符设置正确的值。
构建阶段的运行脚本是否有效?我认为这是唯一的选择,但似乎无法让我的脚本正常工作。你能分享你的答案吗?
【参考方案1】:
我也有类似的问题:Use User-Defined build settings in custom .plist file
您可以使用Build Phase Script
将正确的 .plist 文件复制到您的位置:
-
创建一个新文件夹(例如:GoogleServiceInfoPlists)。
复制所有 .plist 文件(例如:GoogleService-Info-Debug.plist、GoogleService-Info-Stage.plist 和 GoogleService-Info- Prod.plist)。
添加新的
Run Script Phase
(Xcode:Target->Build Phases->“+”按钮)
使用下面的脚本将给定环境的 .plist 文件复制(替换)到主目录(在我的例子中是 src
):
cp "$SRCROOT/src/Resources/GoogleServiceInfoPlists/GoogleService-Info-$CONFIGURATION.plist" "$SRCROOT/src/GoogleService-Info.plist"
请注意,src/GoogleService-Info.plist
文件必须添加到 Xcode 项目(构建阶段->复制捆绑资源),而 /src/Resources/GoogleServiceInfoPlists/GoogleService-Info-*
文件不一定。
【讨论】:
以上是关于在一个目标 (GCM) 中有两个 GoogleService-Info.plist(或更多)的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 agsXMPP 连接到 GCM(无法建立连接,因为目标机器主动拒绝它)
在 XCode 的一个目标中有两个 GoogleService-Info.plist
在具有两个 GCM 广播接收器的应用中偶尔出现 GCM 错误:INVALID_SENDER