iOS开发笔记--使用CocoaPods遇见的一次动态库引入的坑

版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/iDivines/article/details/88666576

一、我遇见的问题

我的工程依赖一个组件testPkg,在组件中包含了动态库testFramework(testPkg中的一个静态库依赖了这个testFramework),一般情况下在 spec 文件中配置
spec.ios.vendored_frameworks = 'Frameworks/testFramework.framework' 引入动态库是不会有问题的。但是我的工程中有一个静态库和 testFramework 拥有相同的函数但实现不一样,导致我工程中的代码跑起来后最终执行到了动态库中的代码 (这不是我的本意),最终导致APP闪退。

二、解决问题

分析:testFramework 不应该参与到工程的链接过程,testPkg里面的代码已经和testFramework链接好了的,所以我的目标是让testFramework不要参与到工程的链接过程。具体Framework是如何参与工程链接的可以参考我另外一篇文章iOS开发笔记–使用CocoaPods引入FrameWork的原理

1. 在podfile中定义方法fixTestFramework
#将文件中的 -framework "testFramework" 替换为空字符串
def fixTestFramework (filePath)
    File.open(filePath,"r:utf-8") do |lines|
        buffer = lines.read.gsub("-framework \"testFramework\"","") 
        File.open(filePath,"w"){|l|
            l.write(buffer)
        }
    end
end
2. 在 pod install 完成后执行 fixTestFramework
post_install do |installer|
    workDir = Dir.pwd
    xcconfigFilename = "#{workDir}/Pods/Target\ Support\ Files/Pods-xxx/Pods-xxx.debug.xcconfig"
    fixTestFramework xcconfigFilename
end
参考

CocoaPods官网
Framework Programming Guide

猜你喜欢

转载自blog.csdn.net/iDivines/article/details/88666576