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后面必须跟一个只想静态库的路径。
就这样测试通过了.