本帖最后由 Simpon 于 2016-10-19 13:34 编辑
一、如何制作自己的Cocopods库1.在github上新建一个工程
github上新建pod工程
license类型 正规的仓库都应该有一个license文件,Pods依赖库对这个文件的要求更严,是必须要有的。因此最好在这里让github创建一个,也可以自己后续再创建。我使用的license类型是MIT。 把项目clone到本地然后在根目录下新建MyPodDemo.podspec 或使用命令 - $ pod spec create MyPodDemo
复制代码Spec文件编写:
- Pod::Spec.new do |s|
- s.name = "MyPodDemo"
- s.version = "0.0.1"
- s.summary = "A short description of MyPodDemo."
- s.description = <<-DESC
- A longer description of MyPodDemo in Markdown format.
- * Think: Why did you write this? What is the focus? What does it do?
- * CocoaPods will be using this to generate tags, and improve search results.
- * Try to keep it short, snappy and to the point.
- * Finally, don't worry about the indent, CocoaPods strips it!
- DESC
- s.homepage = "https://github.com/goingta/MyPodDemo"
- s.license = "MIT"
- s.author = { "goingta" => "tangle1128@gmail.com" }
- s.source = { :git => "https://github.com/goingta/MyPodDemo.git", :tag => "0.0.1" }
- s.source_files = "MyPodDemo/Src", "MyPodDemo/Src/**/*.{h,m}"
- s.requires_arc = true
- # s.framework = "SomeFramework"
- # s.frameworks = "SomeFramework", "AnotherFramework"
- # s.library = "iconv"
- # s.libraries = "iconv", "xml2"
- # s.dependency "JSONKit", "~> 1.4"
- # s.dependency "AFNetworking", "~> 2.2.4"
- end
复制代码
自解析: - name: 导入pod后的目录名
- version: 当前版本号
- deployment_target: 配置的target
- prefix_header_file: 预编译头文件路径,将该文件的内容插入到Pod的pch文件内
- source: 来源的具体路径,是http链接还是本地路径
- requires_arc: 是否需要arc
- source_files: 指定该目录下包含哪些文件
- 其他可选参数还包括:
- dependency: 指定依赖,如果依赖的库不存在或者依赖库的版本不符合要求将会报错
- libraries: 指定导入的库,比如sqlite3
- frameworks: 指定导入的framework
- weak_frameworks: 弱链接,比如说一个项目同时兼容iOS6和iOS7,但某一个framework只在iOS7上有,这时候如果用强链接,那么在iOS7上运行就会crash,使用weak_frameworks可以避免这种情况。
复制代码
通配符说明
- a{bb,bc}def.{h,m}表示四个文件abbdef.h abbdef.m abcdef.h abcdef.m
- *.{h,m,mm}表示所有的.h .m .mm文件
Class/**/*.{h,m}表示Class目录下的所有.h .m文件
复制代码
写完podspec文件后使用pod spec lint验证spec是否合格,有error则需要修改
spec文件验证
二、上传代码至github
上传podspec文件到CocoaPods仓库(fork一下,修改完成后在push上去等待审核)
三、私有库实现,编写podfile
如果由于某些原因我们编写的库不能公开,但是又想使用pods来进行管理,要怎么办呢? 首先我们要将我们刚刚在github上建的仓库改为Private(不然还用Public搞毛啊) 然后修改我们项目的podfile,与已加入Cocopods仓库的公有库相比我们只需要指明私有库低git地址,如下: 四、版本控制和冲突(引用自http://objccn.io/issue-6-4/)
CocoaPods 使用语义版本控制 – Semantic Versioning 命名约定来解决对版本的依赖。由于冲突解决系统建立在非重大变更的补丁版本之间,这使得解决依赖关系变得容易很多。例如,两个不同的 pods 依赖于 CocoaLumberjack 的两个版本,假设一个依赖于2.3.1,另一个依赖于 2.3.3,此时冲突解决系统可以使用最新的版本 2.3.3,因为这个可以向后与 2.3.1 兼容。 但这并不总是有效。有许多第三方库并不使用这样的约定,这让解决方案变得非常复杂。 当然,总会有一些冲突需要手动解决。如果一个库依赖于 CocoaLumberjack 的 1.2.5,另外一个库则依赖于 2.3.1,那么只有最终用户通过明确指定使用某个版本来解决冲突。
五、配置非ARC文件
前几天项目中由于历史原因,导致有一个私有的pods库中某几个文件是在非ARC时代写的,如果要进行修改工程量浩大,于是乎要对这几个文件单独处理,这几个文件不使用arc其他文件使用arc,网上查了一些资料,只需要对source_file进行修改并排除那几个不使用ARC的文件就可以了,大致修改如下:
- Pod::Spec.new do |s|
- s.name = "MyPodDemo"
- s.version = "0.0.1"
- s.summary = "A short description of MyPodDemo.
- s.homepage = "https://github.com/goingta/MyPodDemo"
- s.license = "MIT"
- s.author = { "goingta" => "tangle1128@gmail.com" }
- s.source = { :git => "https://github.com/goingta/MyPodDemo.git", :tag => "0.0.1" }
- s.source_files = "MyPodDemo"
- non_arc_files = 'MyPodDemo/NoArcFile1.{h,m}','MyPodDemo/NoArcFile2.{h,m}'
- s.requires_arc = true
- s.exclude_files = non_arc_files
- s.subspec 'no-arc' do |sna|
- sna.requires_arc = false
- sna.source_files = non_arc_files
- end
- end
复制代码
六、回退Cocoapods历史版
先删除已经装过的版本(可能有几个,卸载的时候会让你输入1,2..n选择卸载那个版本 - sudo gem uninstall cocoapods
复制代码安装某一个版本 - sudo gem install cocoapods -v 0.35.0
复制代码
精华推荐:
|