Workspace,Static Library,Framework,Objective-C,Swift

iOS Workspace项目管理

1、创建Workspace工作空间
Runoob 属性文本
2、在桌面新建文件夹做为根目录,命名为School。将步骤1创建的工作空间命名为School.xcworkspace,并保存到School文件夹里面。
Runoob 属性文本
3、创建第一个工程命名为Student,并将工程添加到School工作空间。
Runoob 属性文本
Runoob 属性文本
4、重复步骤3,创建第二个工程命名为Teacher,并将工程添加到School工作空间。
5、重复步骤3,创建第三个工程命名为Parent,并将工程添加到School工作空间。
6、创建完成后,School目录和School.xcworkspace工程结构如下图所示
Runoob 属性文本
Runoob 属性文本
7、创建Static Library,命名为SchoolLib,同上步骤添加到School.xcworkspace里,具体步骤如下:
Runoob 属性文本
Runoob 属性文本
Runoob 属性文本
Runoob 属性文本
8、创建Framework静态库,命名为SchoolFramwork,图示步骤如下:
Runoob 属性文本
Runoob 属性文本
Runoob 属性文本
Runoob 属性文本
9、至此,我们创建完成了三个工程(Student,Teacher,Parents)和两个静态库(SchoolLib,SchoolFramework)。
10、最终School文件目录结构如下图:
Runoob 属性文本

11、工程中引用Static Library库

12、首先在SchoolLib.h文件中写一个类方法,我们希望这个方法可以在Parent工程里调用。
Runoob 属性文本
13、如果想要在Parent工程里调用,我们首先需要把SchoolLib静态库和Parent工程进行关联,步骤如下:
Runoob 属性文本
Runoob 属性文本
Runoob 属性文本
14、如果此时引入静态库后,编译代码仍旧是不能够通过的,我们需要将静态库的目录引用进来
15、在Teacher工程的Target/Build Settings/User Header SearchPaths中添加$(BUILT_PRODUCTS_DIR),并选择递归引用
Runoob 属性文本
16、此时我们就可以在Parent工程中引用SchoolLib静态库了,图示如下:
Runoob 属性文本
Runoob 属性文本

17、工程中引用SchoolFramework库

18、在SchoolFramework中新建一个测试类,并且公开一个测试方法:
Runoob 属性文本
19、在SchoolFramework.h文件中公开测试类的.h文件
Runoob 属性文本
20、此时,我们还不能在具体的工程中去引用,我们还需要在Teacher/Targets/Build Phases/Link Binary with Libraries里面添加自定义的framework:
Runoob 属性文本
21、在Teacher/Targets/General/Embedded Binaries这里添加自定义的framework
Runoob 属性文本
22、SchoolFramework里写的类如果需要在Teacher工程中只引入框架就可以使用,需要在SchoolFramework/Targets/Build Phases里将Project里的头文件移动到Public里的分组中。
Runoob 属性文本
Runoob 属性文本
23、至此、我们可以在Teacher工程中测试调用SchoolFramework库中定义的方法
Runoob 属性文本

24、工程中引入CocoaPods管理

25、终端进入工程根目录下,创建Podfile文件
Runoob 属性文本
Runoob 属性文本
26、用Vim打开Podfile文件,输入如下结构的内容。
Runoob 属性文本
27、执行pod install 命令,引入指定的第三方库。
Runoob 属性文本
28、最终的School.xcworkspace工程结构如下图所示:
Runoob 属性文本

29、Student工程和Teacher工程的相互引用

30、如果要在项目Studnet中引用Teacher中的内容,那么我们需要修改路径
31、在Student的Build Settings里找到Header Search Paths,添加一项Teacher工程的路径。可以直接将Teacher工程拖过来,Xcode会自动生成路径,并且设置为recursive。
Runoob 属性文本
Runoob 属性文本
32、在Teacher中创建一个测试类,并添加一个测试方法
33、在Student工程中的ViewController.m中需要同时引入在Teacher工程中创建测试类的.h文件和.m文件
Runoob 属性文本
34、最终在Student工程中成功的调用了Teacher工程中测试类的类方法,如下图所示
Runoob 属性文本

35、Objective-C和Swift混编:Objective-C调用Swift函数

36、在一个Objective-C项目中第一次创建一个Swift文件的时候,Xcode会提示是否需要创建一个桥接头文件,点击是之后Xcode会自动创建一个桥接文件,文件名为xxxx-Bridging-Header.h
Runoob 属性文本
37、需要在OC类中引入头文件,文件格式为 Parent-Swift.h
Runoob 属性文本
38、新建一个测试类SecondVC.swift,在SeconVC.swift中定义一个测试方法,如下图所示。然后进行调用。
Runoob 属性文本
39、运行代码,会发现调用成功。
Runoob 属性文本

40、Objective-C和Swift混编:Swift调用Objective-C方法

41、新建测试类FirstVC,如下图所示,定义一个测试方法
Runoob 属性文本
42、在桥接文件中引入FirstVC.h头文件
Runoob 属性文本
43、运行代码,会发现调用成功
Runoob 属性文本
44、注意事项如下图
Runoob 属性文本
完。