iOS 深度好文

iOS podspec 常用语法和子目录

2020-06-24  本文已影响0人  水中的蓝天

本文源自本人的学习记录整理与理解,其中参考阅读了部分优秀的博客和书籍,尽量以通俗简单的语句转述。引用到的地方如有遗漏或未能一一列举原文出处还望见谅与指出,另文章内容如有不妥之处还望指教,万分感谢。

podspec文件基本操作

  Pod::Spec.new do |s|
  # 名称
  s.name             = 'XXEncryptKit' 
  #版本号
  s.version          = '0.1.0'     
  #简短介绍
  s.summary          = '简介'   
  #详细介绍
  s.description      = <<-DESC
                       XXEncryptKit description
                       DESC
  #主页,这里要填写可以访问到的地址,不然验证不通过
  s.homepage         = 'https://www.baidu.com'   
  #截图
  # s.screenshots     = "www.example.com/screenshots_1", "www.example.com/screenshots_2" 
  #开源协议
  s.license          = 'MIT' 
  #作者信息
  s.author           = { 'dingyuping' => 'dingyuping@51nbapi.com' }  
  #项目地址,不支持ssh的地址,验证不通过,只支持HTTP和HTTPS,最好使用HTTPS,这里用的码云(免费的)
  s.source           = { :git => 'https://gitee.com/xingxingstyle/MZFTestModule.git',  :tag => s.version.to_s  }   
  #多媒体介绍地址
  # s.social_media_url = 'https://twitter.com/<twitter_username>'                       
  #支持的平台及版本
  s.ios.deployment_target     = '8.0'     
  #是否使用ARC,如果指定具体文件,则具体的文件使用ARC
  #s.requires_arc = true                   
  #代码源文件地址,**/*表示Classes目录及其子目录下所有文件,如果有多个目录下则用逗号分开,如果需要在项目中分组显示,这里也要做相应的设置
  s.source_files = 'XXEncryptKit/Classes/**/*'     
  #资源文件地址
  s.resource_bundles = {
      'XXEncryptKit' => ['XXEncryptKit/Assets/*.png']
   } 
  #公开头文件地
  #s.public_header_files = 'XXEncryptKit/Classes/**/*.h'  

  #  buildsetting相关设置, 这里讲bitcode设置为NO, C++ Standard Library设置为libstdc++
  #s.xcconfig = {
  #  'ENABLE_BITCODE' => 'NO',
  #  'CLANG_CXX_LIBRARY' => 'libstdc++'
  #  }

  #该pod依赖的系统framework,多个用逗号隔开
  #s.frameworks = 'UIKit','CoreGraphics'

  #该pod依赖的系统library,多个用逗号隔开
  #s.libraries  = 'iconv','sqlite3','stdc++','z'

  #第三方.a文件
  #s.vendored_libraries = 'XXEncryptKit/Classes/ThirdParty/*.a'

  #第三方frameworks文件
  #s.vendored_frameworks = 'XXEncryptKit/Classes/ThirdParty/*.framework'

  #依赖关系,该项目所依赖的其他库,如果有多个需要填写多个s.dependency
  #s.dependency 'AFNetworking', '~> 2.3'   
  end

podspec验证相关参数的作用:

Options:

--allow-warnings : 忽略警告,即可以允许有警告也可以通过验证
--use-libraries: 使用静态库安装规范,当包含依赖的第三方或自定义的静态库需要添加此规范
--use-modular-headers: 如果是OC和swift 的混编需要加上
--sources=https://cdn.cocoapods.org/: 指定索引库的源,多个源必须用逗号分隔
--local-only: 不执行将回购推到其远程服务器的步骤
--no-private: 包括仅适用于公共回购的检查
--skip-import-validation: 跳过验证pod是否可以导入
--skip-tests: 在验证期间跳过构建和运行测试
--commit-message="Fix bug in pod": 添加自定义提交消息。如果没有指定提交消息,则打开默认编辑器
--use-json: 在将其推送到repo之前,将podspec转换为JSON
--swift-version=VERSION: 在标记规范时应该使用的SWIFT_VERSION。这优先于规范中指定的Swift版本或. Swift版本文件
--no-overwrite: 不允许将覆盖现有规范的推送

Inherited options:

--silent : 显示所有信息
--verbose : 显示更多调试信息
--no-ansi : 显示没有ANSI代码的输出
--help : 显示指定命令的帮助横幅

podspec目录分层

使用subspec来实现目录分层。
目录分层的好处:

目录分层,结构清晰;
使用pod引入一个三方库时,可以只引入一个subspec而不用将整个三方库引入。

例如AFNetworking:

AFNetworking目录结构.png 目录结构.png
├── XYHStoreKit
│   
│   └── Classes
│          └── XYHStoreKit.h
│          └── XYHFMDB
│              ├──XYHFMDB.h
│              └── FMDB
│                   ├──  FMDatabase.h
│                   ├── FMDatabase.m
│              └── XYH
│                   ├──  XYHDB.h
│                   ├──  XYHDB.h
│         └── XYHKeyChainStore
│                   ├──  XYHKeyChainStore.h
│                   ├──  XYHKeyChainStore.m
│         └── XYHKeyedArchiverStore
│                   ├──  XYHKeyedArchiverStore.h
│                   ├──  XYHKeyedArchiverStore.m
├── README.md

写法如下:

#头文件~XYHStoreKit.h 在最外层
 s.source_files = 'XYHStoreKit/Classes/XYHStoreKit.h'
 s.public_header_files = 'XYHStoreKit/Classes/XYHStoreKit.h'
  
#XYHFMDB
s.subspec 'XYHFMDB' do |ss|

  #XYHFMDB.h头文件
    ss.source_files = 'XYHStoreKit/Classes/XYHFMDB/XYHFMDB.h'
 #公开头文件
    ss.public_header_files = 'XYHStoreKit/Classes/XYHFMDB/XYHFMDB.h'
    
    ss.subspec 'FMDB' do |sss|
       sss.source_files = 'XYHStoreKit/Classes/XYHFMDB/FMDB/**/*'
       sss.public_header_files = 'XYHStoreKit/Classes/XYHFMDB/FMDB/*.h'
        #配置依赖的系统库
       sss.libraries = 'sqlite3'
    end
    
    ss.subspec 'XYH' do |sss|
       sss.source_files = 'XYHStoreKit/Classes/XYHStoreKit/XYH/**/*'
       #配置依赖的系统框架
       sss.frameworks = 'UIKit','CoreData'
       #XYH中依赖了XYH之外的模块FMDB
       sss.dependency 'XYHStoreKit/XYHFMDB/FMDB'
    end
    
  end

#XYHKeyChainStore
s.subspec 'XYHKeyChainStore' do |ss|
      #引入XYHKeyChainStore中所有资源文件
       ss.source_files = 'XYHStoreKit/Classes/XYHKeyChainStore/**/*'
     #公开XYHKeyChainStore模块中的头文件
       ss.public_header_files = 'XYHStoreKit/Classes/XYHKeyChainStore/*.h'
  end

#XYHKeyedArchiverStore

  s.subspec 'XYHKeyedArchiverStore' do |ss|
         ss.source_files = 'XYHStoreKit/Classes/XYHKeyedArchiverStore/**/*'
         ss.public_header_files = 'XYHStoreKit/Classes/XYHKeyedArchiverStore/XYHKeyedArchiverStore.h'

         #依赖的三方库,pod库或者可以是自身的subspec
         ss.dependency 'XYHStoreKit/XYHFMDB'
         ss.dependency 'XYHStoreKit/XYHKeyChainStore'
  end
 

效果:

效果图.png
上一篇下一篇

猜你喜欢

热点阅读