Xcode多Target项目下Shared Framework异常链接问题咨询
Xcode多Target意外链接未依赖框架问题解决方案
方案1:关闭隐式依赖并校验构建配置(优先推荐)
- 选中Target B,进入「Build Settings」页面:
- 搜索
Always Search User Paths,设置为NO - 搜索
Other Linker Flags,确认没有-ObjC、-all_load这类会强制加载所有可识别符号的全局参数,若必须保留这类参数,可追加-no_load Airship参数指定不对该框架做强制加载
- 搜索
- 进入Target B的「Build Phases」页面:
- 确认「Link Binary With Libraries」列表中不存在Airship框架
- 确认「Dependencies」列表中没有关联Airship对应的构建Target,也没有关联Target A
- 编辑Target B对应的编译Scheme,进入「Build」选项卡,取消勾选「Find Implicit Dependencies」,关闭Xcode自动查找同工作区隐式依赖的逻辑
方案2:隔离不同Target的构建输出目录
该方案直接解决共用Derived Data导致的中间产物复用问题:
- 打开Xcode偏好设置「Preferences」→「Locations」,点击Derived Data旁的「Advanced」按钮
- 选择构建输出规则为「Custom」→「Relative to Workspace」,让不同Target的构建产物按Target维度分开存储
- 也可通过xcconfig配置文件为不同Target单独指定
OBJROOT、SYMROOT、DSTROOT三个构建输出根路径,彻底隔离两个Target的构建中间产物
方案3:构建后主动删除无效链接项(兜底方案)
如果上述配置都无法阻止Xcode插入无效链接,可在Target B的「Build Phases」中新增一个最后执行的Run Script构建阶段,写入以下脚本直接删除二进制中的无效链接记录:
install_name_tool -delete @rpath/Airship.framework/Airship "${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}"
该方案直接修改最终生成的二进制文件,不会出现可选链接带来的App Store提交警告,也能彻底解决运行时查找不存在框架的崩溃问题。
内容的提问来源于stack exchange,提问作者blackjacx
相关产品推荐
相关产品推荐

