You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Xcode Scheme为Flutter环境链接不同的.xcframework?

基于Xcode Scheme为Flutter Flavors链接不同XCFramework

因为两个XCFramework类名完全一致,同时链接必然触发符号冲突,核心思路是让每个Scheme在构建时仅加载对应环境的框架,具体操作如下:

1. 存放框架到指定目录

在iOS项目根目录(ios/)下新建Frameworks文件夹,分别将SDKStaging.xcframework和SDKProduction.xcframework放入其中,不要直接拖入Xcode项目导航栏(避免自动全局链接)。

2. 为Scheme单独配置框架搜索路径

  • 打开Xcode项目,选中Runner target,切换到Build Settings标签
  • 搜索Framework Search Paths,点击右侧+添加两个路径:
    • $(SRCROOT)/Frameworks/SDKStaging.xcframework
    • $(SRCROOT)/Frameworks/SDKProduction.xcframework
  • 关键操作:展开每个路径的设置范围(点击路径旁的All下拉菜单),将staging路径的范围设为staging Scheme,production路径设为production Scheme。这样每个Scheme构建时只会读取自己对应的框架路径。

3. 添加构建脚本控制框架链接

通过脚本在构建前复制对应环境的框架,保证链接阶段仅存在一个框架:

  • 切换到Build Phases标签,点击+选择New Run Script Phase
  • 将脚本内容替换为:
# 清除换行符避免Scheme名称异常
SCHEME_NAME=$(echo "$SCHEME_NAME" | tr -d '\r')

# 定义框架路径
STAGING_FRAMEWORK="${SRCROOT}/Frameworks/SDKStaging.xcframework"
PRODUCTION_FRAMEWORK="${SRCROOT}/Frameworks/SDKProduction.xcframework"

# 清理之前的残留框架
rm -rf "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDK*.xcframework"

# 根据Scheme复制对应框架到构建目录
if [ "$SCHEME_NAME" = "staging" ]; then
    cp -R "$STAGING_FRAMEWORK" "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/"
elif [ "$SCHEME_NAME" = "production" ]; then
    cp -R "$PRODUCTION_FRAMEWORK" "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/"
fi
  • 将这个脚本拖到Link Binary With Libraries阶段之前,确保先完成框架复制再执行链接。

4. 配置条件导入(可选)

在Flutter原生桥接文件(如AppDelegate.swift或自定义Channel文件)中,用编译标记控制SDK导入:

#if STAGING
import SDKStaging
#elseif PRODUCTION
import SDKProduction
#endif
  • 给对应Scheme添加编译标记:回到Build Settings,搜索Other Swift Flags,为staging Scheme添加-D STAGING,production Scheme添加-D PRODUCTION,同样要设置对应的Scheme范围。

5. 验证配置

  • 切换到staging Scheme执行构建,检查Products目录下的.app包内,仅存在SDKStaging.xcframework
  • 切换到production Scheme重复构建,确认包内为SDKProduction.xcframework

内容的提问来源于stack exchange,提问作者Dread Boy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:26:00