假如你要做一个第三方库,但是你的代码引用了AF,除了使用cocoapods管理你的项目依赖还有没有别的方式?举个例子ShareSDK里面肯定用了微信和新浪的SDK的代码或者API,但是ShareSDK里面肯定没有新浪和微信的SDK源码,我们在引用ShareSDK的时候需要往工程里拖入微信和新浪的SDK,ShareSDK才能正常分享到微信和新浪上,那这个ShareSDK在编译成库的时候,对新浪和微信的依赖是怎么设置的,并且ShareSDK在开发的时候项目里还必须能调用到新浪或者微信的SDK的API不影响开发。
总结一下:主工程A依赖库B、C,库B、C同时依赖公共库D,那如何引用才能让主工程只要引用库D,B、C在A中就能正常工作,但是B、C在开发的时候都可以单独开发,正常引用D。
xcode项目中编译配置如下几种方式,在开发B、C的时候如何设置D的引用?直接引用D的源码是肯定不行的,B、C全部包含D的代码,到A中就冲突了~
有劳各位谁懂得不吝赐教
巴扎黑2017-04-18 09:51:09
对于第三方的一些库,例如AFN,可以直接在B、C中由cocoapods导入,进行管理。编译B、C的时候不要把AFN编译进去就可以了。有一点需要注意,在B、C中使用的AFN和A项目中AFN版本要一致,否则可能出现编译报错
怪我咯2017-04-18 09:51:09
只要搞明白动态库和静态库就可以了。
要注意的是,动态库和静态库的区分不是Framework和.a库的区分,Framework同样有静态和动态的区别,在编译设置里面可以调整,Mach-O Type这个选项决定的。
所以,A 使用 B和C, B和C都使用D, 则 D编译成动态库比较好,因为D是唯一要多次引用的库。动态和静态的一个区别就是静态库会被引用者一起编译,所以如果D为静态库,B和C中都会包含一份D的代码,在A编译的时候就会说有冲突,当D为动态库时候,A需要同时link BCD三个库,就可以正常调用了。
pods的podfile中加入
use_frameworks!
就可以编译成Framework了。
B,C如果是单独的项目,编译Framework时候,把Skip Install设为NO,才可以在Achieve以后,弹出Organizer窗口进行导出,导出的Framework才可以进行发布使用。