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之类的文件。

iOS开发之通过Framework建立项目依赖的更多相关文章
- iOS开发拓展篇——如何把项目托管到GitHub
iOS开发拓展篇——如何把项目托管到GitHub 说明:本文主要介绍如何把一个OC项目托管到Github,重操作轻理论. 第一步:先注册一个Github的账号,这是必须的 注册地址:Github官网注 ...
- iOS 开发 旧版 framework
0. 参考 http://www.cocoachina.com/ios/20150127/11022.html http://www.cnblogs.com/gcb999/p/3296414.html ...
- MVC5 网站开发实践 1、建立项目
目录 MVC5 网站开发实践 概述 一.建立项目 1.建立团队项目 在办公室和家里使用不同的电脑,为了方便代码的共享将项目建立为团队项目. 如图打开vs2013→新建→团队项目(图1),会自动 ...
- iOS开发——实用篇Swift篇&项目开发常用实用技术
项目开发常用实用技术 实现拨打电话 要实现打电话功能,最简单最直接的方式便是:直接跳到拨号界面 (注意:这个需要真机调试,模拟器无效果) UIApplication.sharedApplica ...
- IOS开发实战-Xcode创建HelloWorld项目
一.创建工程打开Xcode开发工具,在Welcome界面选择”Create a new Xcode project”选项 在选择模板窗口,选择”Single View Application” 确定模 ...
- iOS开发之——制作framework静态库教程
环境: 硬件:macbook air 系统:OSX EI Capitan 版本:10.11.3 xcode : Version 7.2.1 (7C1002) 最近在做ios的静态库(据说framewo ...
- ios开发——实战Swift篇&简单项目的实现
学了这么久的swift语法和相关技术,今天忍不住手痒痒就写了一个swift的小项目,这个项目非常简单(只是使用一个UITableView),但是里面的功能却非常有用. 我们要实现的功能是这样的: 程序 ...
- iOS开发小技巧--即时通讯项目:消息发送框(UITextView)高度的变化; 以及UITextView光标复位的小技巧
1.即时通讯项目中输入框(UITextView)跟随输入文字的增多,高度变化的实现 最主要的方法就是监听UITextView的文字变化的方法- (void)textViewDidChange:(UIT ...
- iOS开发小技巧--即时通讯项目:使用富文本在UILabel中显示图片和文字;使用富文本占位显示图片
Label借助富文本显示图片 1.即时通讯项目中语音消息UI的实现,样式如图: 借助富文本在UILabel中显示图片和文字 // 1.创建一个可变的富文本 NSMutableAttributedStr ...
随机推荐
- 2019-08-01 纪中NOIP模拟B组
T1 [JZOJ2642] 游戏 题目描述 Alice和Bob在玩一个游戏,游戏是在一个N*N的矩阵上进行的,每个格子上都有一个正整数.当轮到Alice/Bob时,他/她可以选择最后一列或最后一行,并 ...
- sql server和eclipse连接问题
最近学习java,需要用的数据库sql sever,这就有一个连接问题需要设置 首先需要下载sql server,可查看我的博客sql sever下载教程: 连接教程:eclipse连接sql ser ...
- opencv学习之颜色空间转换cvtColor()
我们生活中大多数看到的彩色图片都是RGB类型,但是在进行图像处理时,需要用到灰度图.二值图.HSV.HSI等颜色制式,opencv提供了cvtColor()函数来实现这些功能.首先看一下cvtColo ...
- ubuntu18.04双卡机安装ubidia驱动遇到的坑
在ubuntu 18的软件更新中选择英伟达驱动进行安装,输入nvidia-smi总是提示缺少驱动,未驱动之类的报错. 何解? 最初以为安装系统的问题,重装ubuntu也未果. 最后查了很多资料,找到一 ...
- SSH通道 Xshell
SSH是每一台Linux电脑的标准配置. SSH是一种网络协议,用于计算机之间的加密登录(安全的). 1. 登录远程主机 $ ssh user@host 2. SSH的默认端口是22, ...
- IntelliJ IDEA如何导入jar包
转自:https://jingyan.baidu.com/article/0f5fb0993e9e1f6d8334ead2.html 通过这种方式导入jar包,idea就能百分百识别到,如果是那种直接 ...
- 牛客1080D tokitsukaze and Event (双向最短路)
题目链接:https://ac.nowcoder.com/acm/contest/1080/D 首先建两个图,一个是权值为a的图,一个是权值为b的图. 从s起点以spfa算法跑权值为ai的最短路到t点 ...
- docker删除镜像时报错解决办法
报错信息 [root@kvm ~]# docker rmi 4950a54ede5a Error response from daemon: conflict: unable to delete 49 ...
- 【网易官方】极客战记(codecombat)攻略-地牢-高举之剑
关卡连接: https://codecombat.163.com/play/level/the-raised-sword 为了战斗,学会武装你自己. 简介 依照名字攻击每个食人魔.记住,每个食人魔需要 ...
- win10 superfetch 使系统变慢
win10 superfetch是干什么的? 时间:2018-12-28 来源:莫回首系统 作者:win7 很多用户喜欢关注CPU的运行状态,来保障系统的运行速度不受影响,今早,有ghost win1 ...