Xcode 中 App 项目与 Framework 项目的区别及使用优势是什么
Xcode App 项目与 Framework 项目相关问题解答
1. App 项目与 Framework 项目的区别
- 产物属性差异:App 项目编译生成
.app可执行包,自带@main标记的程序入口,具备独立的应用配置(应用图标、启动页、权限配置等),可直接安装到模拟器或真机独立运行;Framework 项目编译生成.framework二进制封装包,无独立程序入口,本身无法直接运行,仅作为依赖库供其他 App 或 Framework 引入调用。 - 访问控制规则不同:App 项目内部代码默认是
internal权限,项目内全局可访问;Framework 项目代码默认仅内部可访问,若要对外暴露给依赖方使用,需要显式将类、方法、属性标记为public/open权限。 - 配置项侧重点不同:App 项目配置围绕终端应用的运行需求配置,包括 Bundle ID、版本号、设备适配规则等应用专属配置;Framework 项目配置围绕代码编译架构、对外暴露接口、依赖项管理为主,不需要配置应用相关的专属属性。
2. 将项目转为 Framework 形式的优势
- 代码复用:封装为 Framework 后,同一套 SwiftUI 组件和业务逻辑可以被多个 App 项目同时依赖,不需要在多个工程中重复拷贝代码,只需维护一份代码即可实现多端复用。
- 模块化隔离:将独立功能模块封装为 Framework 后,不同模块之间仅通过暴露的公共接口交互,降低代码耦合度,方便多团队并行开发、问题定位和功能迭代。
- 分发便捷:如果需要对外提供这套组件,封装为 Framework 后可以直接通过 CocoaPods、Swift Package Manager 等包管理工具分发,使用者只需在依赖配置中添加对应条目即可快速集成,不需要手动导入大量代码文件。
- 编译效率提升:预编译的 Framework 不会在主项目每次编译时重复编译,大幅提升大型项目的整体编译速度。
补充:Framework 项目实现模拟器运行的方案
你可以在当前 Framework 工程中新增一个 App 类型的 Target,设置该 App Target 依赖你的 Framework Target,将需要测试交互的 SwiftUI 页面放到该 App Target 的入口文件中调用,即可正常在模拟器中运行调试交互逻辑,不会影响原有 Framework 的封装逻辑。
内容的提问来源于stack exchange,提问作者Joshua Maza
相关产品推荐
相关产品推荐

