使用Googlelogin和两个目标

我有一个我无法弄清楚的问题,到处都是search。

我最近将Google Sign-in添加到了我的应用程序,而且它在主要目标上工作正常,但是,由于我使用多个目标来部署应用程序的辅助版本,因此无法将第二个包标识符添加到“GoogleService -Info.plist”。 Googlelogin代码是通过名称来引用这个文件,所以我不能简单地改变每个版本的应用程序的名称,就像我为其他plists所做的那样。

我已经尝试在每个scheme中添加环境variables,并在plist中使用$ {BUNDLE_ID}根据所选的scheme进行更改,但是它也不起作用。 有什么我失踪? 具有多个目标的工作空间应该如何为每个目标使用具有不同variables的同一个plist?

谢谢!

编辑:尝试使用XCConfig文件来replaceplist中的静态值与编译时variables。 没有运气,可能是因为我认为Googlelogin正在直接访问该文件。 我假设任何人使用Googlelogin与多个目标的应用程序(广告支持与付费溢价)必须有办法解决这个问题。 请帮忙。

我有同样的问题,我发现一个非常简单的解决scheme。

只需复制GoogleServices-Info.plist并将其放在不同的文件夹中即可。 该文件夹必须是物理上不同的文件夹,因为文件系统不会在同一文件夹中接受相同的文件名。 因此,在finder中创build一个真正的文件夹,并将其添加到XCode,不要使用XCode组。

然后根据每个plist文件更改目标成员资格。 而已!


我有同样的问题。 我有四个不同的目标需要使用相同的GoogleService-Info.plist文件,但具有不同的bundleID。 我偶然发现了这个来自Restless Thinker的优秀文章,它为这个确切的问题提供了一个解决scheme。

PlistBuddy是由Apple提供的免费工具,内置在OSX中。

PlistBuddy可以创build和修改plist文件。 这是Fotis的一个很好的教程 。 他使它看起来像一块蛋糕。

首先是检查每个目标的“构build阶段”>“复制包”资源下是否列出了GoogleService-Info.plist文件。 这应该已经到位,但重新检查不会受到伤害。 如果文件不存在,请添加文件。

接下来你需要做的是为每个目标创build一个新的构build阶段。 转到您的项目>目标>select您的目标>构build阶段检查构build阶段屏幕的左上angular区域+button。

添加一个新的自定义阶段。 (您可能已经有了“运行脚本”阶段,在这种情况下,只需在现有命令之后添加命令)

select新build运行脚本阶段,并在打开的新框中input您的PlistBuddy命令

 /usr/libexec/PlistBuddy -c "Set :BUNDLE_ID ${PRODUCT_BUNDLE_IDENTIFIER}" $BUILT_PRODUCTS_DIR/$TARGET_NAME.app/GoogleService-Info.plist 

确保您的.app(在Product下)文件名与您的目标名称相同,否则这将不起作用。 您可以使$ TARGET_NAME.app与您的project.app名称相同。

您可以通过这种方式更改更多值,只需在脚本中添加另一行。 您至less需要添加两行以更改CLIENT_ID和REVERSE_CLIENT_ID。

 /usr/libexec/PlistBuddy -c "Set :CLIENT_ID 123456789012-abcdefghijklmnopqrstuvwxyzabcdefghijklm.apps.googleusercontent.com" $BUILT_PRODUCTS_DIR/$TARGET_NAME.app/GoogleService-Info.plist /usr/libexec/PlistBuddy -c "Set :REVERSED_CLIENT_ID com.googleusercontent.apps.123456789012-abcdefghijklmnopqrstuvwxyzabcdefghijklm" $BUILT_PRODUCTS_DIR/$TARGET_NAME.app/GoogleService-Info.plist 

你可能需要清理它的工作。 在设备上构build并运行。 在安装到设备上时,您可能需要检查“运行脚本”下面的“运行脚本仅在安装时”的小框。 当我离开这个盒子时,XCode不停地提到我以前的派生数据。

使用PlistBuddy,您可以根据目标更改任何plist值。 希望这有助于。

为每个目标制作一个独立的plist文件并在它们之间dynamic切换。 要做到这一点,你可以在这里查看答案