iOS开发之通过Framework建立项目依赖
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文件夹下
2.2 在Xcode中将这两个Project添加到Workspace
3.添加Target到FrameworkProject
3.1 FrameworkProject -> Targets -> [+]
选择Cocoa Touch Framework
命名为TestFW,先不要选Embed in App
可以看到Targets下面新增了一个Framework
4.添加Framework到TestProject
4.1 TestProject ->Targets -> General -> Embedded Binaries -> [+]
可以看到刚刚生Target的Products已经列了出来,选择TestFW.frameworkiOS
framework嵌入成功
可以看到在Project中也显示出来了,不要在意红色,因为在编译TestProject时会先编译它依赖的framework,这也是这种方法建立项目依赖的方便之处,不需要额外手动编译framework。
如果看着不舒服,可以移动到项目的Frameworks文件夹(Tips:看不到Frameworks文件夹可以先随便嵌入一个系统库,比如UIKit.framework,然后再删掉,就可以看到Frameworks文件夹了)。
4.2 添加测试方法
这里举例添加方法到ViewController中,注意这是错误演示,下面会说明。
当然不要忘了在暴露的.h中#import "ViewController"
运行,发现报错,提示找不到ViewController,导致无法编译framework模块
原来是新增的Target中不包含ViewController这个类。
解决方法:选择ViewController.h -> TargetMembership -> 勾选TestFW
再次运行,发现helloFramework方法并没有调用,并且控制台输出提示ViewController这个class被两个类文件同时生成了,一个是TestProject项目,一个是TestFW这个framework。
解决方法:把两个ViewController其中一个改下名字就可以了,这里我把framework中的ViewController改名为TestViewController(当然里面的类名也一定要改啊)。
可以看到输出正常了。
[重点] 所以说,自己生成的framework一定要一个特殊的类名前缀,否则很容易和项目中某个类冲突。
4.3 添加测试类
当然实际使用时基本不会使用默认的ViewController类,都会自己新建一个或几个类来实现。注意新建类时一定要选择对应的Target,否则就会出现无法编译的问题。
自己添加类后,运行,依然报错?找不到helloFramework方法,什么鬼?
解决方法:FrameworkProject -> Targets -> TestFW -> Build Phases -> Headers,将Project中新增的方法,拖到Public下。否则编译器将新增的方法视为私有的,无法被TestFW.h引用。
移动后
至此,就大功告成了。
当然,这种方法适用于将现有项目简单的打包,如果想从0完全新建framework,那在新建项目时直接选择Cocoa Touch Framework就好,这样会少生成很多AppDelegate之类的文件。
最新文章
- Struts2+Spring+Hibernate框架整合总结详细教程
- 指定eclipse启动使用的JVM
- js中十进制数转换为16进制
- iisnode托管node
- 爱上MVC~为DisplayNameFor添加扩展,支持PagedList集合
- JavaWeb学习总结(五十)——文件上传和下载
- h264 profile &; level
- visual studio code + Nodejs + Typescritpt + angularjs2 + bootstrap 环境搭建/Elementary os
- wenti
- boa安装
- 【风马一族_Android】Android学习
- Delphi XE5教程9:基本语法元素
- VS2010 ReportViewer导出文件下载保存不能识别文件类型
- Linux环境Eclipse + Tomcat + MySQL 构造J2EE方法开发环境
- UWP锁、解屏后无法响应操作
- 第 16 章 MySQL Cluster
- Django Haystack 全文检索与关键词高亮
- LeetCode(53)-Binary Tree Paths
- 【转】GB2312、GBK和UTF-8三种编码的简要说明
- [原]Universal Windows问题:winapifamily问题:WINAPI_PARTITION_DESKTOP问题:WINAPI_PARTITION_APP问题:WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)问题
热门文章
- OpenCV——仿射变换
- sql sever登录问题
- C语言 fgets
- Go初始化结构体数组/切片
- Codeforces 1204D2. Kirk and a Binary String (hard version) (dp思路)
- 如何将mongo查询结果导出到文件中
- IntelliJ IDEA 2017.3尚硅谷-----设置自动编译
- Java 动态代理实现
- SpringMvc中文件的上传
- Bug搬运工-Forerunner CRC error on 54SG/53SG3 triggers watchdog timeout crash