小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
通过问题看本质!!!
CocoaPod库添加依赖
1.依赖自己的私有库
在podspec文件中添加
s.dependency 'CTLUIKit', '~> 0.2.0'
验证的时候记得加上如下代码:
pod lib lint --sources=master,CTLSpecs
CTLSpecs是自己的私有库,master是GitHub公共仓库,如果有无关警告加上--allow-warnings
2.添加第三方依赖、系统Framework、libraries和静态.a文件
在podspec中做以下修改
......
#第三方.a文件: 添加.a静态库的依赖
s.source_files='CTLFoundation/Classes/*.{h,m}','CTLFoundation/Classes/ThirdParty/*.{h}'
#第三方.a文件: 添加.a静态库的依赖
s.vendored_libraries = 'CTLFoundation/Classes/ThirdParty/*.{a}'
# 该pod依赖的系统framework: 添加.a依赖的系统framework
s.frameworks='SystemConfiguration','CoreGraphics','CoreTelephony','Security','CoreLocation','JavaScriptCore'
# 该pod依赖的系统library: 添加.a依赖的系统library
s.libraries = 'iconv','sqlite3','stdc++','z'
# 添加第三方依赖
s.dependency 'AFNetworking'
......
Framework的依赖见高德的集成。
3.制作subspec
subspec就是如下所示:
SDWebImage (4.4.1)
......
- Subspecs:
- SDWebImage/Core (4.4.1)
- SDWebImage/MapKit (4.4.1)
- SDWebImage/GIF (4.4.1)
- SDWebImage/WebP (4.4.1)
在podspec中做以下修改
#制作subspec
s.subspec 'CTLSub' do |hs|
hs.source_files = 'CTLFoundation/Classes/CTLSub/*.{h,m}'
end
建议,每一个subspec都是一个能够独立运行的项目 到podfile目录执行
pod install
4.升级pods的版本
将podspec的version 改为0.2.0 然后验证执行
pod lib lint
有警告的话加上 --allow-warnings 将CTLFoudation push至远程仓库并新建0.2.0的tag 远程验证通过,将podspec push至私有的spec仓库中搜索 pod search CTLFoudation
5.对高德等含第三方.framework静态库封装
这类操作主要在于.podspec文件的配置上,以及在pod使用的时候要注意到相关问题(在下面的问题中有说道)。下面附上对高德地图的配置:
5.1使用手动集成的高德Framework:
s.source_files = 'TAMapLib/Classes/*.{h,m}'
#关联高德地图Framework
s.vendored_frameworks=['CTLAMapLib/Classes/AMap_iOS_Lib/AMapFoundationKit.framework','CTLAMapLib/Classes/AMap_iOS_Lib/AMapLocationKit.framework','CTLAMapLib/Classes/AMap_iOS_Lib/AMapSearchKit.framework','CTLAMapLib/Classes/AMap_iOS_Lib/MAMapKit.framework']
#系统的Framework
s.frameworks=['GLKit','OpenGLES','CoreGraphics','QuartzCore','CoreLocation','CoreTelephony','SystemConfiguration','Security','AdSupport','JavaScriptCore','AMapFoundationKit', 'AMapSearchKit', 'MAMapKit', 'AMapLocationKit']
#系统的Libraries
s.libraries = ['z','stdc++','c++']
使用了第三方.a或.framework的,验证时需要加上:
--use-libraries
5.2依赖高德地图自动集成的pod
s.source_files = 'TAMapLib/Classes/*.{h,m}'
#系统的Framework
s.frameworks=['GLKit','OpenGLES','CoreGraphics','QuartzCore','CoreLocation','CoreTelephony','SystemConfiguration','Security','AdSupport','JavaScriptCore','AMapFoundationKit', 'AMapSearchKit', 'MAMapKit', 'AMapLocationKit']
#系统的Libraries
s.libraries = ['z','stdc++','c++']
s.dependency 'AMap3DMap'
s.dependency 'AMapSearch'
s.dependency 'AMapLocation'
注意:如果制作的这个高德地图库,被其他库所依赖,其他库也因该实现这些配置,否则,用到某些类会报Undefined symbols for architecture x86_64等错误。