使用cocoapods系列 一

来源:互联网 发布:指南针全赢数据 编辑:程序博客网 时间:2024/06/17 22:09

前言:鉴于面对诸多需求并不能通过系统提供的方法实现,因此需要网上查阅资料。But!我们的需求是多种多样的,网络中各位前辈分享的blog只是针对于单一的需求,需要综合许多前辈blog经验才能完全的实现功能,为了记录以便后期复习,特此记录下来。也希望这一系列blog能够像前辈们一样,给大家提供方便。

做为本系列的第一篇,我并没有打算从头开始介绍cocoapods从安装到使用,这里我会根据自己遇到的需求一点一点介绍实现方法,以及遇到的坑和解决方法,后期会补充安装和使用。

需求:最近遇到一个需求,就是在多个项目中同时需要到一个功能模块,如果都重新开始做就加大了难度,而且也没有这个必要。因此公司提出是不是可以将这一模块封装成一个静态库或者动态库【通过Xcode制作动/静态库后期在讲解】,于是通过系统提供的方法制作了一个动态库,但是遇到了一个问题,由于抽出的模块需要使用到第三方的依赖库,而使用这个动态库的项目也需要使用这个第三方的依赖库,因为同时使用podfile方式添加依赖库,运行程序的时候就会报警告【1】虽然不影响运行,但是对于轻微强迫症的我开说,这个好像有点无法接受,于是开始想通过pod制作静态库,或者制作pod开源依赖库。出于这个目的开始长达一天半的pod研究。

本次讲解制作pod开源,由于pod制作静态库虽然成功但是还遗留诸多问题,放到下一期,将问题解决后再讲解。

工具:1.可以翻墙的VPN 2.Mac安装cocoapods 3.github账户

1.首先登陆github账户创建一个开源项目, LICENSE选项选择MIT,然后克隆下来【暂定名:PodTestKit】

git clone http://xxxx/PodTestKit.git

2.然后创建项目的podspec,并进行配置,这个是关键,一般制作pod开源就是通过这个配置文件。

3.打开终端,进入PodTestKit目录下,输入 touch PodTestKit.podspec 创建podspec文件

4.然后配置这个podspec文件,通过vim命令或者使用Xcode打开,然后输入以下信息

【vim PodTestKit.podspec】

Pod::Spec.new do |s|

  s.name         = "PodTestKit"

  s.version      = "1.0.0"

  s.summary      = "测试Pod开源"

  s.description  = <<-DESC

                    测试Pod开源 【注意:description不能短于summary】

                   DESC

  s.homepage     = "https://github.com/uergithubname/PodTestKit"

  s.license      = 'MIT' 

  s.author       = { "UserName" => "UserEmail" }

  # s.social_media_url = ""

  s.source       = { :git => "https://github.com/uergithubname/PodTestKit.git", :tag => s.version.to_s, :commit=>"4ff0422f5eed65c449ab81e087290c166a716359"} 【commit 是你最后一次提交】

  s.platform     = :ios, '8.0'  【这里填写最低支持版本】

  s.requires_arc = true 【是否使用ARC,如果使用MRC则这里填写false】


  s.source_files = 'PodTestKit/**/*.{h,m}'

  s.frameworks = 'Foundation', 'UIKit'

  #s.private_header_files = 'Classes/ios/private/*.h'

  s.frameworks = 'UIKit', 'MapKit', 'SystemConfiguration', 'Security', 'CoreGraphics', 'MobileCoreServices'


  s.libraries = 'xml2'

  s.xcconfig = { 'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2' }


  s.dependency 'AFNetworking', '~> 3.0.4'

  s.dependency 'WiFiKit', '~> 0.1.1'

  s.dependency 'GDataXML-HTML', '~> 1.3.0'

  s.dependency 'Reachability', '~> 3.2'

  #s.dependency 'FLKAutoLayout', '~> 0.1'

end


s.source_files是你要开源的文件夹,就是说这里面的文件就是你要开放给其他用户

s.frameworks是你要添加第三方依赖库时,这些依赖库必须要引用的系统Framework

s.libraries是你要添加第三方依赖库时,这些依赖库必须要引用的系统libraries,其中xml2是libxml2的简写,这里lib需要省略

s.xcconfig是你要添加第三方依赖库时,这些依赖库必须要添加的header_serach_paths【这里是GDataXML-HTML的一个范例】

s.dependency是你要添加的第三方依赖库的信息,需要多少个就要加多少个s.dependency


5.提交修改加入到github库中

5.1 git add . 【添加所有修改】

5.2 git commit -m ‘description’ 【提交修改】

5.3 git tag 1.0.0 【设置tag值,这里的1.0.0与你配置的podspec中的s.version版本要一样】

5.4 git push --tag 【将tag值推送到远程库】

5.5 git push origin master 【推送修改信息到远程库】

5.6 git log 【这里我们把最前面的commitID拷贝到podspec中的commit,以便pod精确版本,这里我曾遇到坑,由于没添加commit值,无法找到最新版本】

6.此时git提交部分就此结束,此时需要注册pod的trunk信息,这里大家伙感觉挂起VPN,防墙了。 【最后添加 --verbose 可以打印详细信息,诸如错误信息等】

6.1 pod trunk register youremail@xx.com 'Your Name' --description='Description' 【注册trunk,只有注册了trunk,才可以使用trunk方式开源pod项目

此时你注册的邮箱会接受一封邮件,点开邮件就可以激活pod trunk功能。

6.2 pod trunk me 【检测注册trunk信息是否成功】

注册流程这样就使用了,下面我们接着把git项目开源

6.3 set new version to 1.0.0

6.4 set new tag to 1.0.0 【这个照打就可以了,这个就是设置开源项目的版本和tag版本的,这个版本必须跟你git项目的版本和tag版本一致

6.5 pod trunk push PodTestKit.podspec --verbose 【最后一步,如果顺利的话,就算成功了】


然后我们测试下这个pod开源工程是否成功

pod search PodTestKit


如果出现1.0.0版本的PodTestKit就算是成功了。


问题总结【持续更新】:

1.DNS问题导致pod trunk push 失败。 解决方法:重新启动VPN

2.在ARC项目中使用MRC方法,目前有两种解决方法:1.将MRC方法文件单独出来打一个开源MRC项目,然后在ARC项目中添加这个第三方依赖。 2.使用spec的子spec方法,这个方法还没有测试,感觉原理一样,理论上说应该可以实现

3.开源项目中引用第三方依赖库,引入头文件要使用“”双引号,二不是<>一对尖括号


【1】objc[771]: Class AFCachedImage is implemented in both /private/var/containers/Bundle/Application/D4662248-1A28-4C46-A355-3F510B00088D/Cheche.app/Frameworks/CameraKit.framework/CameraKit and /var/containers/Bundle/Application/D4662248-1A28-4C46-A355-3F510B00088D/Cheche.app/Cheche. One of the two will be used. Which one is undefined.(意思是Framework中和项目中都有这个第三方依赖库,而程序不知道应该引用哪一个,目前一个比较傻的解决方法就是Framework和项目中只有一个里面使用pod)

0 0
原创粉丝点击