Xcode中如何为不同Scheme使用不同的Plist文件?
针对Flutter iOS多Scheme配置Facebook-Info.plist的解决方案
这种分文件夹存放不同环境Facebook-Info.plist的方式完全可行,但需要在Xcode 15.2中做一些Scheme关联配置,确保编译时自动加载对应环境的文件,具体步骤如下:
1. 准备环境专属的Facebook配置文件
- 在
config/uat和config/prod目录下分别创建Facebook-Info.plist,填入对应环境的Facebook参数(比如App ID、客户端令牌等)。
2. 配置文件的Target归属
- 打开iOS工程(
ios/Runner.xcworkspace),在左侧文件树找到两个Facebook-Info.plist。 - 选中文件后,在右侧File Inspector面板中,确保Target Membership只勾选
Runner即可,无需单独绑定Scheme。
3. 确认Scheme与Build Configuration的绑定
你的项目应该已经有对应uat/prod的Build Configuration(毕竟已经在用不同的GoogleService-Info.plist),如果需要调整:
- 点击Xcode顶部
Product > Scheme > Edit Scheme,选中目标Scheme(比如uat),在Run标签页的Build Configuration下拉菜单选择对应配置(比如UAT),prod Scheme同理设置为Prod配置。
4. 添加自定义Build Phase自动拷贝对应文件
为了让不同环境编译时自动替换Facebook-Info.plist,需要添加一个Run Script:
- 选中
RunnerTarget,切换到Build Phases标签页。 - 点击左上角
+号,选择New Run Script Phase。 - 替换脚本内容为:
# 根据当前Build Configuration匹配对应环境的plist文件 if [ "${CONFIGURATION}" = "UAT" ]; then SOURCE_PLIST="${PROJECT_DIR}/../config/uat/Facebook-Info.plist" elif [ "${CONFIGURATION}" = "Prod" ]; then SOURCE_PLIST="${PROJECT_DIR}/../config/prod/Facebook-Info.plist" fi # 将文件拷贝到App包的主目录 cp "${SOURCE_PLIST}" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Facebook-Info.plist"
- 把这个Run Script拖到
Copy Bundle Resources阶段之前,保证拷贝动作在资源打包前完成。
5. 验证配置
- 切换到uat Scheme编译运行,查看App包内的
Facebook-Info.plist是否为uat环境配置; - 切换到prod Scheme重复验证即可。
另外,Flutter代码中读取该文件时,直接读取主Bundle中的Facebook-Info.plist即可,脚本已经完成了对应环境文件的替换。
内容的提问来源于stack exchange,提问作者Martin Edlman
相关产品推荐
相关产品推荐

