iOS开发之通过Framework建立项目依赖

时间:2022-03-30 18:50:04

https://www.jianshu.com/p/d146db167bf3

项目开发时经常会遇到个别模块想打包成framework的情况,传统的打包方式太繁琐,反复测试时很麻烦,不如一个项目管理来得方便。
这里记录一下用一个Workspace方式管理项目依赖的方式。由于图是两天前截的,按图码字,有疏漏之处还请见谅。

1.新建Workspace:

1.1 Xcode -> File -> New -> Workspace并放到Test文件夹下

2.新建TestProject和FrameworkProject:

2.1 Xcode -> File -> New -> Project,同样放在Test文件夹下

  iOS开发之通过Framework建立项目依赖 Test文件夹状态

2.2 在Xcode中将这两个Project添加到Workspace

 

  iOS开发之通过Framework建立项目依赖 Workspace状态

3.添加Target到FrameworkProject

3.1 FrameworkProject -> Targets -> [ ]

 

  iOS开发之通过Framework建立项目依赖 添加Target

选择Cocoa Touch Framework

 

  iOS开发之通过Framework建立项目依赖 选择最下面的Framework

命名为TestFW,先不要选Embed in App

 

  iOS开发之通过Framework建立项目依赖 命名为TestFW

可以看到Targets下面新增了一个Framework

 

  iOS开发之通过Framework建立项目依赖 Targets

4.添加Framework到TestProject

4.1 TestProject ->Targets -> General -> Embedded Binaries -> [ ]

 

  iOS开发之通过Framework建立项目依赖 添加Binaries

可以看到刚刚生Target的Products已经列了出来,选择TestFW.frameworkiOS

 

  iOS开发之通过Framework建立项目依赖 选择framework

framework嵌入成功

 

  iOS开发之通过Framework建立项目依赖 嵌入的framework

可以看到在Project中也显示出来了,不要在意红色,因为在编译TestProject时会先编译它依赖的framework,这也是这种方法建立项目依赖的方便之处,不需要额外手动编译framework。

 

  iOS开发之通过Framework建立项目依赖 嵌入的framework

如果看着不舒服,可以移动到项目的Frameworks文件夹(Tips:看不到Frameworks文件夹可以先随便嵌入一个系统库,比如UIKit.framework,然后再删掉,就可以看到Frameworks文件夹了)。

 

  iOS开发之通过Framework建立项目依赖 移动好的Framework

4.2 添加测试方法

这里举例添加方法到ViewController中,注意这是错误演示,下面会说明。

 

  iOS开发之通过Framework建立项目依赖 ViewController.h   iOS开发之通过Framework建立项目依赖 ViewController.m

当然不要忘了在暴露的.h中#import "ViewController"

 

  iOS开发之通过Framework建立项目依赖 23.png

运行,发现报错,提示找不到ViewController,导致无法编译framework模块

 

  iOS开发之通过Framework建立项目依赖 找不到ViewController

原来是新增的Target中不包含ViewController这个类。
解决方法:选择ViewController.h -> TargetMembership -> 勾选TestFW

 

  iOS开发之通过Framework建立项目依赖 勾选TestFW

再次运行,发现helloFramework方法并没有调用,并且控制台输出提示ViewController这个class被两个类文件同时生成了,一个是TestProject项目,一个是TestFW这个framework。

 

  iOS开发之通过Framework建立项目依赖 控制台输出

解决方法:把两个ViewController其中一个改下名字就可以了,这里我把framework中的ViewController改名为TestViewController(当然里面的类名也一定要改啊)。

 

  iOS开发之通过Framework建立项目依赖 ViewController改为TestViewController

可以看到输出正常了。

 

  iOS开发之通过Framework建立项目依赖 hello
[重点] 所以说,自己生成的framework一定要一个特殊的类名前缀,否则很容易和项目中某个类冲突。

4.3 添加测试类
当然实际使用时基本不会使用默认的ViewController类,都会自己新建一个或几个类来实现。注意新建类时一定要选择对应的Target,否则就会出现无法编译的问题。

 

  iOS开发之通过Framework建立项目依赖 选择TestFW

自己添加类后,运行,依然报错?找不到helloFramework方法,什么鬼?

 

  iOS开发之通过Framework建立项目依赖 找不到方法

解决方法:FrameworkProject -> Targets -> TestFW -> Build Phases -> Headers,将Project中新增的方法,拖到Public下。否则编译器将新增的方法视为私有的,无法被TestFW.h引用。

 

  iOS开发之通过Framework建立项目依赖 移动到Public

移动后

 

  iOS开发之通过Framework建立项目依赖 Public

至此,就大功告成了。
当然,这种方法适用于将现有项目简单的打包,如果想从0完全新建framework,那在新建项目时直接选择Cocoa Touch Framework就好,这样会少生成很多AppDelegate之类的文件。

 

  iOS开发之通过Framework建立项目依赖 新建framework