CocoaPods创建静态库

创建静态库方式

1. Xcode自带项目模板

2. 使用CocoaPods创建

使用CocoaPods最大的好处是解决第三库问题。OC的命名空间是硬伤,所以在开发SDK时假如用的第三方库别人的App也用到了就会文件等冲突。也许全部重命名是个解决办法,但是一旦多了就比较麻烦了。

使用CocoaPods自动创建方式

1. 终端执行命令,以YMinSDK为例:

pod lib create YMinSDK

2. 确认输入5个问题选项

image.png

第二个demo application请务必YES,帮助极大!
第三个问题是问用哪个测试框架,或者不用
第四个问题是问是否需要基于界面的测试,CocoaPods推荐的是FBSnapShotTestCase
详细文档参考:Using Pod Lib Create

3. 如果CocoaPods环境没有问题的话应该已经创建成功以及目录:

image.png

image.png

4. 打开YMinSDK.podspec文件编辑

Pod::Spec.new do |s|
  s.name             = 'YMinSDK'
  s.version          = '0.1.0'
  s.summary          = 'A short description of YMinSDK.'
# This description is used to generate tags and improve search results.
#   * Think: What does it do? Why did you write it? What is the focus?
#   * Try to keep it short, snappy and to the point.
#   * Write the description between the DESC delimiters below.
#   * Finally, don't worry about the indent, CocoaPods strips it!

  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC

  s.homepage         = 'https://github.com/andy90s/YMinSDK'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { '梁先华' => '909901234@qq.com' }
  s.source           = { :git => 'https://github.com/andy90s/YMinSDK.git', :tag => '0.1.0' }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.ios.deployment_target = '8.0'

  s.source_files = 'YMinSDK/Classes/**/*'
  
  # s.resource_bundles = {
  #   'YMinSDK' => ['YMinSDK/Assets/*.png']
  # }

  s.public_header_files = 'YMinSDK/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
  s.dependency 'AFNetworking' 

需要注意的几个:

  • s.source 资源地址,可以填写本地git仓库地址(pod 创建的工程本身就在git的管理之中)
  • s.source_files 类库的源文件位置
  • s.resource_bundles 资源文件
  • s.public_header_files 头文件
  • s.dependency 依赖库
  • s.source 写本地git仓库地址即可

5.到Classes目录下创建测试类

image.png

image.png

17.7.11补充,写其他项目遇到一个问题无论我怎么pod install,demo工程始终无法引用自己的库文件,我是各种尝试:降cocoapods版本(1.3.2beta),路径修改,重新创建工程都无法解决。最后是想起demo中也是有podfile文件,稍作修改解决问题!注意:需要在example目录下再次执行pod install或者pod update,修改如下(注释掉部分):

# use_frameworks!
target 'TestLib_Example' do
  pod 'TestLib', :path => '../'
# target 'TestLib_Tests' do
#  inherit! :search_paths  
# end
end

6.到Example文件夹下执行pod install

每次测试如果引入了第三方的依赖或者修改了Classes下面的代码都需要pod install或者pod update
到demo中测试:

image.png

7.提交代码

为了方便我是直接使用Github Desktop创建仓库并提交,推到GitHub之后,可以看到readme的模板内容

8.验证

到项目目录下

pod lib lint

这里我遇到了一个错误验证没有通过,提示我public_header_files没有找到匹配的头文件,仔细检查了下发现默认是Pod/Classes/**/*.h 。同理如果遇到source_files路径错误大家仔细检查下是否正确。
验证通过提示passed validation,忽略警告加上--allow-warnings

9.使用CocoaPods-Packager打包

sudo gem install cocoapods-packager
  • 打包lib
    注意需要到包含YMinSDK.podspec文件的根目录下执行命令:
    默认打包成.framework
pod package YMinSDK.podspec --force

打包.a

pod package YMinSDK.podspec --library --force

关于两者区别
打包成功会出现个YMinSDK-0.1.0文件夹,这就是cocoapods帮我们打包完毕文件存放位置,找到ios文件,就可以看到打包好的.framework文件。
至此打包完成。

目前遇到的问题与解决办法:

1. 写代码的时候提示各种not found xxx

到demo目录下执行 pod install

2. 资源访问问题

这个不能用mainbundle,下面可参考

+ (NSString*)pathForFilename:(NSString*)filename pod:(NSString*)podName
{
    NSString* bundlePath  = [self bundlePathForPod:podName];
    if (!bundlePath) { return nil; }
    NSBundle* bundle = [NSBundle bundleWithPath:bundlePath];
    NSString* extension = [filename pathExtension];
    NSString* withoutExtension = [[filename lastPathComponent] stringByDeletingPathExtension];
    NSString* path = [bundle pathForResource:withoutExtension ofType:extension];
    return path;
}
+ (NSString*)bundlePathForPod:(NSString*)podName
{
  // search all bundles
  for (NSBundle* bundle in [NSBundle allBundles]) {
  NSString* bundlePath = [bundle pathForResource:podName ofType:@"bundle"];
  if (bundlePath) { return bundlePath; }
}

3. 打包之前一定要git commit

确定好提交的版本号,提交到仓库。实例:

git add .
git commit -a -m '0.1.0'
git tag -a 0.1.0 -m '0.1.0'

做完这些再去打包静态库。(注意podsepc中的版本号一定要一致)

4. 注意第三方库引用其他的第三方以及系统库

应该把所有需要的库都在podspec文件中的s.dependency标识出来,如果少了库打出来的包会报错。

5. 打包生成的新podspec文件需要修改

s.ios.vendored_framework   = 'xxx.framework'

注意默认路径是ios/xxx.framework 把ios路径去掉
补上s.dependencys.frameworks等依赖(自动生成的podsepc文件没有)

6. 应该需要两个git仓库

一个用于存放你开发库的源代码仓库(私有)
一个用于存放打包出来的静态库和podspec文件的仓库(可公开/私有)
其他人引用静态库用的是第二个仓库地址

7. 在开发过程中,每引用第三方库最好先检查第三放库的podspec文件,检查所有的依赖,并打包测试。

8. 测试打出的静态库

每次打包上传仓库之后,应该在本地清理pod缓存 再pod install

  1. 缓存信息
pod cache list
  1. 清理所有
pod cache clean --all
  1. 清理指定
pod cache clean xxx

9.如果时间充足人手足够,最好还是自己实现第三方的功能

待补充...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • 项目组件化、平台化是技术公司的共同目标,越来越多的技术公司推崇使用pod管理第三方库以及私有组件,一方面使项目架构...
    swu_luo阅读 21,208评论 0 39
  • 一、创建的github仓库原文地址 1 进入Github网站www.github.com登陆自己的账号后 2 建立...
    freesan44阅读 3,908评论 2 12
  • Cocoapods是非常好用的一个iOS依赖管理工具,使用它可以方便的管理和更新项目中所使用到的第三方库,以及将自...
    Nash33阅读 2,077评论 0 50
  • Ruby 安装 要安装cocospods 首先需要安装ruby,可以先安装xcode,再安装macport ,最后...
    山天大畜阅读 1,820评论 0 1
  • 如果我不能了解,那也许不去了解才是最好的选择,如果我不能了解,那也许是因为我不想去了解,如果我不能了解,那么也是会...
    Eskmous阅读 296评论 0 1