同一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
相关产品推荐
相关产品推荐

