Xcode创建子工程以及工程依赖

Xcode创建子工程以及工程依赖

     背景:由于创建一个app的时候需要引入大量的依赖三方库或者自己写的工具类, 所以, 考虑新建一个公共工程, 每次新建项目, 只需要依赖这个工程就可以了, 其实说白了这个公共工程就是个静态库.

     开始开发

     1.创建iosLibs公共工程, 其实就是创建一个静态库

这里写图片描述

     1.1.创建方法

    随便创建一个简单的方法, 比如给创建一个继承自NSObject的Method, 里面创建一个简单的方法, - (void)test, 实现就在方法里面NSLog(@”hello world”);
    继续创建一个类别方法(为什么创建类别方法, 因为类别方法需要一些特殊的配置)
这里写图片描述

    1.3创建头文件

    把iosLibs工程中全部的文件头都放在这里面, 方便被外部调用,(这里当初碰到了问题, 傻乎乎的去创建了pch文件, pch中的文件头部是为了本工程可以引用的文件, 而header文件是为了让外部工程可以访问内部的文件)

    1.2编译一下, 能通过就行

2.创建实际开发需要的工程

    2.1创建工程,demo1

    简单的一笔带过, 一般在

3.关联两个工程

     3.1导入上面创建的iOSLibs工程

    我是先把上面创建的iOSLibs工程整个粘贴到demo1中.然后手动拖动iOSLibs.xcodeproj进入到demo1工程中,这个时候回提示创建新的xcworkspace工程, 点击save,
    如果已经使用cocoaPods引入过其他的第三方, 不会有这个提示的.
    简单编译一下, 没有error , 贴张效果图
这里写图片描述
    没有报错, 是因为两个程序没有关联, 哪里来的报错, 23333,
    怎么关联呢, 需要有两个关联?
    第一: 在demo1中引入iOSLibs创建的静态库
这里写图片描述
    第二:在demo1中Header Search Paths 里面引入iOSLibs的头文件的路径,
这里写图片描述

因为没有引用iOSLibs中的的方法, 所以暂时还不会报错., 继续下一步.

    3.2这里为了以后的拓展, 特意在demo1中创建了一个pch文件, 然后把在iOSLibs中创建的header.h文件引入到pch文件中

4.调用iOSLibs方法

工程已经关联, 文件已经引入, 现在在demo1的VC中使用一下, iOSLibs里面的文件吧.

     4.1 测试正常方法

    创建Method的对象, 然后调用Method里面的方法- test 方法, 完美输出. hello world

    4.2测试类别方法

    创建一个view, 然后调用类别方法, 发现直接crash,

这里写图片描述
这是因为category没有被正常引入,
    解决方法:在Other Linker Flags添加 -Objc和-all_load选项,保证category能够被正常的引入。
这里写图片描述
百度了一下, 为啥要加这两个字段

-ObjC

    这个flag告诉链接器把库中定义的Objective-C类和Category都加载进来。这样编译之后的app会变大(因为加载了其他的objc代码进来)。但是如果静态库中有类和category的话只有加入这个flag才行。

-all_load

    这个flag是专门处理-ObjC的一个bug的。用了-ObjC以后,如果类库中只有category没有类的时候这些category还是加载不进来。变通方法就是加入-all_load或者-force-load。-all_load会强制链接器把目标文件都加载进来,即使没有objc代码。-force_load在xcode3.2后可用。但是-force_load后面必须跟一个只想静态库的路径。
    就这样测试通过了.

     参考博客:https://www.ganlvji.com/xcode_subproject_project_dependency/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值