iOS 使用.xcworkspace文件管理代码和工程依赖(实现项目模块化)

时间:2021-10-11 20:50:53

一、创建xcworkspace文件。

在cocoapods安装后,项目文件里都会多一个后缀为.xcworkspace的文件。打开这个文件就相当打开最初创建的项目了。那么这个文件也就是用来管理项目的,它包含你创建的项目和cocoapods的项目。

如果手动创建.xcworkspace文件怎么创建,很简单。打开Xcode 点击file  -> new -> workspace。

iOS 使用.xcworkspace文件管理代码和工程依赖(实现项目模块化)
创建workspace

二、添加文件到.xcworkspace

创建好之后打开,现在里面没有任何工程,那就要添加工程。添加方法有很多 ,可以把之前的工程文件后戳为.xcodeproj文件直接拖进去,也可以右键选择Add files to "XXXX.xcworkspace",选择你要加入的文件。

iOS 使用.xcworkspace文件管理代码和工程依赖(实现项目模块化)
添加工程到workspace

或者创建新的工程,在选择存储路径的地方选择刚刚创建.workspace文件。

iOS 使用.xcworkspace文件管理代码和工程依赖(实现项目模块化)
自动添加到workspace文件

这样添加多个就可以在一个文件里面管理多个工程的文件了。操作的也是直接操作的其他工程里的文件。

三、建立工程依赖(模块化)

如果你的工程在之前的设计模式是mvc的话,在一个工程里面肯定有很多文件和子文件来区分那个文件代表那个模块的代码。那么模块化就是把这些文件转为一个一个工程放在里面只要运行一个工程来调用其他工程的代码。首先要创建子工程,创建framework工程文件。

iOS 使用.xcworkspace文件管理代码和工程依赖(实现项目模块化)
创建framework文件

在存储路径的时候也是选择.xcworkspace文件目录。

iOS 使用.xcworkspace文件管理代码和工程依赖(实现项目模块化)
创建好的文件

大家应该都知道framework文件的作用,就是封装好的类,可以放到其他工程进行使用。但不能直接进行修改,在外部也看不到framework里面的代码。建立工程依赖就是利用这样的方法来实现模块化的项目框架。下面就是怎么把框架引入工程里。点击工程文件进入TARGETS ->Build Phases -> Link binary With Libraries 在里面添加framework库文件。

iOS 使用.xcworkspace文件管理代码和工程依赖(实现项目模块化)
添加framework

在添加文件的页面第一个文件夹下就有之前创建的framework文件,直接选择就好了。

iOS 使用.xcworkspace文件管理代码和工程依赖(实现项目模块化)
选择framework文件

这样就把创建framework文件添加到了第一个工程里面。现在我们在framework文件里面添加一个继承自NSObject的文件。在里面写一个“sayhello”的方法。

iOS 使用.xcworkspace文件管理代码和工程依赖(实现项目模块化)
在framework里面创建类

创建方法之后就是要把这个类的头文件写到“header”文件里面。否在在运行时生成的文件不能被引用。在一块创建framework的时候打开里面会会发现只有一个.h文件,这个文件是“header”文件,把刚刚创建的类的头文件import到里面。

iOS 使用.xcworkspace文件管理代码和工程依赖(实现项目模块化)
把要引用的文件写在头文件里

虽然添加好了头文件但是还是不能引用,如果现在去工程运用这个类,在编译时会报找不到该文件,因为还少一步。点击framework工程选择TARGETS ->Build Phases -> Headers 打开之后发现有Pubilc,Pravte,project三项,把Project里的文件拖到Pubilc里面。这样就完成了 。现在去第一个工程里面引用刚刚创建的类来执行“sayhello”方法。

iOS 使用.xcworkspace文件管理代码和工程依赖(实现项目模块化)
调用‘sayhello’方法

到此为止就全部结束了 。如果有运行又崩溃的信息有两个解决方法。

四、解决运行时崩溃的现象。

看看在工程中引入framework文件时后面的status选项是Required 还是Optional

如果是Required就换成Optional  或者在framework文件里面设置库文件的类型。

iOS 使用.xcworkspace文件管理代码和工程依赖(实现项目模块化)
选择framework类型

在这个类型选择上Required 对应的是Dynamic Library   Optional对应Static Libary  选择好之后运行就可以了。


到此为止全部结束

此贴给初学者看的,大神们如果有任何指正,欢迎评论思密达!

作者:绝版灬懒小孩
链接:https://www.jianshu.com/p/4a0841618726
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。