修改第三方库文件

修改第三方库文件

在我们平时写项目的时候,经常用到第三方库,而第三方库一般是用CocoaPods导入(当然还有Carthage),有的时候第三方库里的接口或者说功能并不能满足我们,需要自己动手加点东西,这就会出一大堆坑,我也是在坑里爬了一天才算爬出来.

起因

项目中使用到一个第三方库,但是需要往里面加点功能,但是需要import主工程里的文件和导入另一个第三方库,导入另一个第三方库还算简单,因为毕竟都是在同一个目录下,直接import </>就可以了,但是要import主工程的文件,就报错了,在网上查询了一下,是因为在build的时候,Xcode是先编译pods文件夹,然后在编译主工程,这就出问题了,pods里要import主工程文件,但是主工程文件要在pods后面才编译,不能提前,就会报错说找不到文件。

两种情况

子工程:这是把第三方库作为子工程导入,因为有pods导入oc库默认是静态库.a,要使用动态库一般都是作为子工程导入framework,这种情况下,默认子工程是无法直接importPods里的第三方库的.我在网上查询了些资料,解决办法如下,修改profile如下

xcodeproj 'Demo.xcodeproj'

platform :ios, "8.0"

def common_pods_for_target
pod 'AA', '0.0.1'
end

target "Demo" do
pod 'Demo-A', '3.1.1'
pod 'Demo-B', '1.0'
pod 'Demo-C', '> 1.9.0'
pod 'Demo-D', '> 1.1'
common_pods_for_target
end

target "Second" do
pod 'DemoTests-X', '3.1.1'
pod 'DemoTests-Y', '0.4.0'
pod 'DemoTests-Z', '4.1.1'
common_pods_for_target
end

我解释一下如上的代码,第一行是表示你的主工程是什么,AA是2个工程共用的库,写了一个def.
如上这样写了之后,在工程下pod install后,子工程就可以导入Pods的第三方库了,但是我在其中遇到了个问题,Build的时候会报错linker command failed with exit code 1 (use -vto see invocation)这个错误真不好解决,反正网上查询到的方法都试过,没有解决,不知道是不是我这个工程的特例,如果你们的没有遇到这种情况就可以直接用.

Pods导入:如果第三方库都是使用CocoaPods管理的,那么直接在Pods文件夹里面直接修改你要改的.h、.m或者.Swift文件即可

我跳的坑是,Pods里的第三方库需要使用到我主工程的文件,我在网上搜索了一阵,发现Xcode的编译顺序是先把Pods编译完成了再去编译主工程,但是这个问题就坑人了,Pods要调用主工程文件,但是主工程又比Pods后编译,反正我是没找到办法,希望有大神能指点下.
我的解决办法就是把Pods移除,全部使用子工程来导入,手动添加Path,这样就可以导入其他三方库,并且也可以添加主工程文件了.

期间还试了很多网上的方法,大多都是改podfile,这样依赖,那样依赖,直接弄晕了,索性全部收工来,就搞定了。

如果文中有不对的地方,还请指正,也希望有大神能指点一些新思路!

推荐阅读更多精彩内容