podspec文件的写法详解

原创 2017年02月19日 15:21:14

创建pod库的时候会用到podspec文件将lib中用到的包括资源、源码、需要引用的framework,以及第三库等等组织起来。这篇文章会详细的解释一下podspec的写法。


1、podspec文件的创建


(1)pod命令创建,pod spec create [文件名]

这种方式创建出的podspec文件会带有大量的注释



(2)linux命令创建文件,touch  **.podspec
这种方式创建出了一个空的podspec文件,熟练之后可以采用这种方式。

2、podspec内容编辑
下面是从新建成功的的podspec中复制过来的,pod升级到1.1之后在新建的podspec文件中加了详细的解释,几乎不用看另外的文档就能编写podspec文件。新建的文件中未被注释的是必填项,其他为非必填项。

#
#  Be sure to run `pod spec lint TestPodSpec.podspec' to ensure this is a
#  valid spec and to remove all comments including this before submitting the spec.
#
#  To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html
#  To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/
#

Pod::Spec.new do |s|

  # ―――  Spec Metadata  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  These will help people to find your library, and whilst it
  #  can feel like a chore to fill in it's definitely to your advantage. The
  #  summary should be tweet-length, and the description more in depth.
  #

  s.name         = "TestPodSpec"
  s.version      = "0.0.1"
  s.summary      = "A short description of TestPodSpec."

  # 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
                   DESC

  s.homepage     = "http://EXAMPLE/TestPodSpec"
  # s.screenshots  = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif"


  # ―――  Spec License  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  Licensing your code is important. See http://choosealicense.com for more info.
  #  CocoaPods will detect a license file if there is a named LICENSE*
  #  Popular ones are 'MIT', 'BSD' and 'Apache License, Version 2.0'.
  #

  s.license      = "MIT (example)"
  # s.license      = { :type => "MIT", :file => "FILE_LICENSE" }


  # ――― Author Metadata  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  Specify the authors of the library, with email addresses. Email addresses
  #  of the authors are extracted from the SCM log. E.g. $ git log. CocoaPods also
  #  accepts just a name if you'd rather not provide an email address.
  #
  #  Specify a social_media_url where others can refer to, for example a twitter
  #  profile URL.
  #

  s.author             = { "" => "" }
  # Or just: s.author    = ""
  # s.authors            = { "" => "" }
  # s.social_media_url   = "http://twitter.com/"

  # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  If this Pod runs only on iOS or OS X, then specify the platform and
  #  the deployment target. You can optionally include the target after the platform.
  #

  # s.platform     = :ios
  # s.platform     = :ios, "5.0"

  #  When using multiple platforms
  # s.ios.deployment_target = "5.0"
  # s.osx.deployment_target = "10.7"
  # s.watchos.deployment_target = "2.0"
  # s.tvos.deployment_target = "9.0"


  # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  Specify the location from where the source should be retrieved.
  #  Supports git, hg, bzr, svn and HTTP.
  #

  s.source       = { :git => "http://EXAMPLE/TestPodSpec.git", :tag => "#{s.version}" }


  # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  CocoaPods is smart about how it includes source code. For source files
  #  giving a folder will include any swift, h, m, mm, c & cpp files.
  #  For header files it will include any header in the folder.
  #  Not including the public_header_files will make all headers public.
  #

  s.source_files  = "Classes", "Classes/**/*.{h,m}"
  s.exclude_files = "Classes/Exclude"

  # s.public_header_files = "Classes/**/*.h"


  # ――― Resources ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  A list of resources included with the Pod. These are copied into the
  #  target bundle with a build phase script. Anything else will be cleaned.
  #  You can preserve files from being cleaned, please don't preserve
  #  non-essential files like tests, examples and documentation.
  #

  # s.resource  = "icon.png"
  # s.resources = "Resources/*.png"

  # s.preserve_paths = "FilesToSave", "MoreFilesToSave"


  # ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  Link your library with frameworks, or libraries. Libraries do not include
  #  the lib prefix of their name.
  #

  # s.framework  = "SomeFramework"
  # s.frameworks = "SomeFramework", "AnotherFramework"

  # s.library   = "iconv"
  # s.libraries = "iconv", "xml2"


  # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  If your library depends on compiler flags you can set them in the xcconfig hash
  #  where they will only apply to your library. If you depend on other Podspecs
  #  you can include multiple dependencies to ensure it works.

  # 
  # s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
  # s.dependency "JSONKit", "~> 1.4"

end


3、上文中未涉及到的内容编写

(1)、部分文件非ARC

方案1:将require_arc设为false,同时指定需要arc的文件夹或者文件

spec.requires_arc = false
#spec.requires_arc = ['Classes/ARC/*', 'Classes/ARC1/*']
#spec.requires_arc = 'Classes/Arc'


方案2:将require_arc设为yes,同时指定除外的文件,不过使用这个方法,会导致非ARC文件被移除出原有的目录结构,不推荐使用。目前官方也是推荐采用方案1.


(2)、使用了第三方静态库,但提供方并未提供pod方案集成,需要手动导入,这个时候就需要加入vendored_lib、aries指定

  s.vendored_libraries = 'Classes/**.a', 'Classes/**.a'


(3)、lib比较大,由很多文件夹构成并且文件夹相互之间并不独立,如果用subspec实现文件夹区分,在后期lint的过程中无法通过验证,除非只在本地使用。当然如果只在本地使用也不用考虑文件夹,pod会把目录结构原原本本的导入到工程里面去。





CocoaPod代码库创建,配置Spec踩过的坑

1、代码中包含静态库 s.vendored_libraries = '/Pod/Classes/*.a' 2、ARC工程中部分文件为 MRC non_arc_files = 'Pod/Class...

如何编写一个CocoaPods的spec文件

CocoaPods命令介绍 在上一篇文章中,已经介绍过CocoaPods的几条基本命令。pod setup用于初始化本地第三方库的Spec描述文件,所有的spec文件存都存放在~/.cocoapod...

.podspec文件

前言本篇主要讲解组件化架构思想,从零教你如何组件化一个项目,当然组件化也遇上许多坑,这里非常感谢小码哥王顺子老师的帮助。如果喜欢我的文章,可以关注我微博:袁峥Seemygo,也可以来小码哥,了解下我们...

podSpec带资源包实践

podSpec
  • callzjy
  • callzjy
  • 2017年06月20日 04:19
  • 232

通过CocoaPods 将storyboards、xibs和资源文件打包到iOS framework

原文:点击打开链接 (本文可与上文一起观看) For the last month we have been working on creating Tapglue Elements, a fra...
  • Enter_
  • Enter_
  • 2016年11月16日 19:23
  • 2280

CocoaPods详解之----制作篇

CocoaPods详解之----制作篇 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/19178709 转载请注...

如何配置自己的开源项目,支持使用CocoaPods

目前我们越来越多的使用CocoaPods管理项目中使用到的第三方库,通过CocoaPods,我们可以单独的管理每一个第三方库,而不需要做太多配置,这种方便、高效的方式,已经成为“热门的开源项目”的必备...

[IOS] xcconfig 配置文件应用实战

首先说下 ,xcconfig 的作用 ,在xcode中多人协作时,很容易发生冲突,尤其是项目的配置文件,仅仅是在build settings 修改一点东西 就出现巨大的冲突,commit 时在proj...

如何编写一个CocoaPods的spec文件

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。 您需要 登录 才可以下载或查看,没有帐号?注册  x CocoaPods命令介绍 在 上一篇文章 中,已经介绍过C...

[CocoaPod]基于私有仓库的pod创建问题

问题列表 pod spec lint命令,校验pod的代码和配置时是从git上拉取的代码进行编译;所以如果未创建git,会报以下错误:...
  • jhq1990
  • jhq1990
  • 2016年09月21日 22:22
  • 4915
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:podspec文件的写法详解
举报原因:
原因补充:

(最多只允许输入30个字)