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

同一Xcode工作区下如何在项目B中调用项目A的自定义ViewController类

同工作区跨项目调用ViewController通用实现方案

一、项目A配置(暴露目标类)

  • 将项目A的打包类型设置为动态框架(Dynamic Framework),如果使用静态库需要确保编译时保留所有符号
  • 给SomeViewController类添加public(Swift)或public/open修饰符,需要对外暴露的属性、初始化方法也需要添加相同修饰符,确保外部模块可访问
  • 项目A的Build Settings中,可选将Dead Code Stripping设置为NO,避免类被编译优化移除;如果是OC项目,需要将SomeViewController.h添加到Build Phases > Headers的Public分组中,同时加入框架的伞头文件公开
  • 可在Build Settings中查看Product Module Name的值,后续项目B导入需要用到该模块名

二、项目B配置(添加依赖)

  • 打开工作区,进入项目B的General > Frameworks, Libraries, and Embedded Content配置项,点击+号选择项目A编译生成的.framework产物,嵌入方式选择Embed & Sign
  • 进入项目B的Build Phases > Dependencies,添加项目A作为依赖,确保编译时优先编译项目A
  • 在需要调用SomeViewController的文件顶部添加导入声明:import 项目A的模块名

三、跳转逻辑实现

项目B中OtherViewController的实现代码如下:

class OtherViewController: UIViewController {
  func navigateToSomeViewController() {
     // 初始化项目A中的目标控制器
     let someVC = SomeViewController()
     // 如需传参,直接给someVC的public属性赋值即可
     // 导航栏push跳转示例
     navigationController?.pushViewController(someVC, animated: true)
     // 模态跳转示例:
     // someVC.modalPresentationStyle = .fullScreen
     // present(someVC, animated: true)
  }
}

四、常见问题排查

  • 编译时报找不到SomeViewController:检查类修饰符是否为public、模块名导入是否正确、项目A是否已经添加到项目B的依赖列表
  • 运行时崩溃提示类不存在:检查项目A的framework是否正确嵌入到项目B的安装包中、项目A的Dead Code Stripping配置是否正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:45:00