CocoaPod库制作流程(二)

586 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

通过问题看本质!!!

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等错误。