在自定义.plist文件中使用用户定义的构建设置

Kli*_*akM 20 xcode plist ios google-signin

我为我的应用程序定义了不同的构建配置(Debug,Stage,Prod),并使用用户定义的构建设置:

在此输入图像描述

Info.plist文件中设置Facebook登录和其他内容:

在此输入图像描述

在这种情况下,$(USER_DEFINED_SETTINGS)符号确实有效.

当我尝试设置Google SignIn时,需要使用其他.plist文件(GoogleService-Info.plist),并且我使用与文件相同的方式使用用户自定义设置Info.plist,但它不起作用.

如何在自定义文件中使用用户定义的设置.plist?如果我不能,我该如何解决这个问题?

Kli*_*akM 38

这是不是可以使用用户定义的设置,定制的.plist文件,所以你必须在其他的方式来处理这个问题.

虽然,您可以将自定义.plist文件复制到正确的位置:

  1. 创建一个新文件夹(例如:GoogleServiceInfoPlists).
  2. 复制每个环境的所有.plist文件(例如:GoogleService-Info-Debug.plist, GoogleService-Info-Stage.plistGoogleService-Info-Prod.plist).
  3. 添加新的src/Resources/GoogleServiceInfoPlists(Xcode:Target-> Build Phases - >"+"按钮).
  4. 使用下面的脚本将给定环境的.plist文件复制(替换)到主目录(GoogleService-Info-Debug.plist在我的情况下):

    cp "${SRCROOT}/src/Resources/GoogleServiceInfoPlists/GoogleService-Info-$CONFIGURATION.plist" "${SRCROOT}/src/GoogleService-Info.plist"
    
    Run Code Online (Sandbox Code Playgroud)

GoogleService-Info-Stage.plist - 预定义,它指向您的项目位置.

GoogleService-Info-Prod.plist-预定义的,这是你的构建配置,在我的情况:Run Script Phase,src,src/Resources/GoogleServiceInfoPlists/GoogleService-Info-Stage.plist.您可以在Xcode:Project(不是目标!) - > Info中更改此设置.

请注意,src/GoogleService-Info.plist文件必须添加到Xcode项目(Build Phases-> Copy Bundle Resource s),而${SRCROOT}文件不一定.

更新:

请记住,您的新Run Script必须放在Copy Bundle Resources构建阶段之前.否则,它将无法工作,因为它将被复制得太晚,并且将使用默认版本的.plist文件.

  • +1尽管我不喜欢该解决方案本身,但是我找不到其他解决方案。Google应该至少提供通过API更改跟踪标识符的方式(而不是自己修改.plist)。 (2认同)
  • @howly 我的存储库“GoogleService-Info.plist”中有 4 个文件,我的回答中提到了这 3 个文件。`GoogleService-Info.plist` **替换**(不仅仅是复制)其中 1 个,因此 Xcode 不会抱怨它。 (2认同)
  • @pixelfreak,您是否尝试过单击并拖动构建阶段以确保在链接文件之前进行复制? (2认同)

小智 5

  1. 创建一个新文件夹(例如:GoogleServiceInfoPlists)。

  2. .plist将每个配置的所有文件复制到那里

例如:

GoogleService-Info-Debug.plist, 
GoogleService-Info-Alpha.plist,
GoogleService-Info-Beta.plist,
GoogleService-Info-Release.plist
Run Code Online (Sandbox Code Playgroud)
  1. Run Script Phase最后添加新的(Xcode:目标 - >构建阶段 - >“+”按钮)。

  2. 使用下面的脚本将给定环境的文件复制.plist到构建目录。

脚本:

RESOURCE_PATH=${SRCROOT}/${PRODUCT_NAME}/GoogleServiceInfoPlists/GoogleService-Info-$CONFIGURATION.plist

BUILD_APP_DIR=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app

echo "Copying ${RESOURCE_PATH} to ${BUILD_APP_DIR}"
cp "${RESOURCE_PATH}" "${BUILD_APP_DIR}/GoogleService-Info.plist"
Run Code Online (Sandbox Code Playgroud)

PS:您不需要将文件添加到项目中。只需在主目录中创建一个新文件夹即可。

在此输入图像描述