iOS创建子工程

实际开发中,我们可能会同时开发好几个端,比如楼主目前开发的家教平台,需要老师端,家长端,助教端三个端。有很多工具方法,或者封装的自定义控件都是可以复用的。我们就可以把公用的代码抽取出去,新建一个工程,统一管理。同步维护一份代码,不需要在各个端各自维护。

创建子工程很简单:

1 假设你已经有了自己的工程demo.xcodeproj,首先我们需要创建一个子工程,(File->new->project),我们要选择静态库。如图

点击下一步,给子工程起名字:subProject

点击下一步:选择Add to自己的工程

到此,第一步就结束了,我们创建了一个子工程,而且也添加到了自己的工程里面,但是,这样在自己工程中还是无法引用子工程的类。我们还需要设置一下自己工程的环境变量。

2 设置环境变量:

自己的工程demo下,选择Bulid Settings ,找到User Header Search Paths。设置自己工程的绝对路径,然后设置递归查找文件夹。

3.添加target的依赖关系

我们要保证编译demo的时候先编译subProject。

选中demo Target,然后选中其Build phases选项,添加subProject target

还有生成的.a文件也得添加进来。选择Link Binary With Libraries

这时候一些基本的方法已经可以用起来了。

4、如果子工程中有图片或者依赖文件怎么办?

要把相关的依赖图片copy出去:选中subProject target,进入Build phases选项,找到最下面的copy file栏,添加相关的文件:

5 如果存在category的时候,在demo工程Other Linker Flags里面添加编译的命令:

注意:在ios5以及以上版本中,引入别的工程(如上)或者静态库, 并且StoryBoards中使用了【引入的外部类(外部工程或者静态库里面的类)】, 那么Other Linker Flags 里面必须加上-ObjC,否则,会console会报错 error:Unknown class <外部的类名> in Interface Builder file.

引用:http://developer.apple.com/library/mac/#qa/qa1490/_index.html

-ObjC,This flag causes the linker to load every object file in the library that defines an Objective-C class or category

意思是,使用这个标识,会把静态库中,定义了Objective-C class的文件或者定义了category类别的文件,全部加载进来。

因为你的静态库里面扩展了一个已存在的类的category,那么这个category是不会加载进来的。

在程序运行中,调用此类别的方法,就会报错“selector not recognized”。

Important: For 64-bit and iPhone OS applications, there is a linker bug that prevents -ObjC from loading objects files from static libraries that contain only categories and no classes. The workaround is to use the -all_load or -force_load flags. 

上面的意思是说

对于64位操作系统或者ios系统,-Objc存在一个bug,就是只包含categories ,而没有任何class的静态库,是不会被加载进来。

拮据额这个bug:使用标识符:-all_load 或者 -force_load

子工程导入完成。整个框架瞬间高大上起来了。参考文章:https://www.ganlvji.com/xcode_subproject_project_dependency/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序猿DD

使用Spring StateMachine框架实现状态机

Spring StateMachine框架可能对于大部分使用Spring的开发者来说还比较生僻,该框架目前差不多也才刚满一岁多。它的主要功能是帮助开发者简化状态...

64590
来自专栏Theo Tsao

Linux用户和文件权限管理

本文包含: 用户管理、用户组管理、基本权限及管理命令、POSIX ACL 权限系统及其管理命令。

14740
来自专栏SpringBoot 核心技术

第四十一章: 基于SpringBoot & RabbitMQ完成DirectExchange分布式消息消费

25750
来自专栏Jerry的SAP技术分享

使用describe命令进行Kubernetes pod错误排查

我有一个pod名叫another,用kubectl create创建后发现过了29分钟,状态还是处于ContainerCreating阶段。

18200
来自专栏王启航的专栏

【腾讯云的1001种玩法】wordpress发送邮件设置

关于wordpress的搭建在我的另一篇文章&quot;【腾讯云的1001种玩法】一个小白的自学建站史(菜鸟建站入门)&quot;的文末已经有了较为详细的解答,...

1.1K00
来自专栏雪胖纸的玩蛇日常

django2+uwsgi+nginx上线部署到服务器Ubuntu16.04(最新最详细版)

36160
来自专栏菩提树下的杨过

vmware安装cent os 6.5 + oracle 11g xe + jboss eap 6.2 + weblogic 12c+ webshpere mq 7.5

mac系统发展速度确实很快,短短数年,mac os上已经能网银支付(中行、招行、工商、支付宝等均已全面支持mac os了),windows上的经典常用软件:qq...

15020
来自专栏生信技能树

Centos 下非 Root 安装 Microsoft R Open

Centos 下非 Root 安装 Microsoft R Open 作者: Hyacz hyacinth.hao@foxmail.com 2017年8月30...

519120
来自专栏Java架构沉思录

揭秘JDBC超时机制

在遭到DDos攻击后,整个服务都垮掉了。由于第四层交换机不堪重负,网络变得无法连接,从而导致业务系统也无法正常运转。安全组很快屏蔽了所有的DDos攻击,并恢复了...

20530
来自专栏FreeBuf

渗透测试TIPS之删除、伪造Linux系统登录日志

0x00. 引言 擦除日志在渗透测试中是非常重要的一个阶段,这样可以更好地隐藏入侵痕迹,做到不被系统管理人员察觉,实现长期潜伏的目的。 前段时间NSA泄露的渗透...

54060

扫码关注云+社区

领取腾讯云代金券