Mas_Tan

Site blog for Tan

No Praise For Colorful


Welcome To My Blog

CocoaPods 私有库详解

前言

现在的项目完全是用组件化的思路开发的,也是借此机会亲自实现了一把。 项目里的每个业务模块都是使用cocoapods 私有库开发,依赖下层开发或者二次封装的私有库。这里先介绍一下我的私有库使用案例。

私有库创建

我项目里的功能模块都是用的官方的私有库模版。跑如下命令

pod lib create __ProjectName__

然后根据一系列提示定制你的私有库配置.

编辑 .podspec 文件

  • s.name 就是你私有库的名称
  • s.version 你的私有库版本
  • s.summary 简单的介绍
  • s.description 描述,要比上面一项文字长一点哦
  • s.source 代码, git 地址,以及版本(或指定分支)
  • s.ios.deployment_target 支持iOS 版本
  • s.source_files 私有库的源文件 'Pods/Classes/**/*' , ** 表示匹配一层或多层目录,*匹配任何类型文件.
  • s.public_header_files 暴露的头文件
  • s.resource_bundles 资源文件存放路径
  • s.frameworks 私有库所需要引用的系统库
  • s.vendored_libraries 引用第三方静态库 , 自己引入的.a文件
  • s.dependency 依赖的其他第三方pod
  • s.pod_target_xcconfig 指定target 添加配置

下面给出我的一个 podspec 文件样例

Pod::Spec.new do |s|
  s.name             = 'musicXML'
  s.version          = '0.1.6'
  s.summary          = 'musicxml for piano to play'
  s.description      = 'draw music sheet and play sound according to musicXML'
  s.homepage         = 'https://gitlab.oneitfarm.com/SpecPods/MusicXML'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'yourName' => 'your@email.com' }
  s.source           = { :git => 'your git address', :tag => s.version.to_s } #指定version
  s.ios.deployment_target = '8.0'
  s.source_files = ['Pod/Classes/**/*','Pod/musicFramework/**/*.{cpp}']
  s.resource_bundles = {
    'musicXML' => ['Pod/Assets/*.xib','Pod/Assets/*.png',
                   'Pod/Assets/*.dls','Pod/Assets/*.xcassets'
                  ]
  }
  s.xcconfig = { 'HEADER_SEARCH_PATHS' => 'Pod/MusicFramework/**/*.h'}
  s.public_header_files = 'Pod/Classes/**/*.h'
#  s.vendored_frameworks = 'Pod/MusicFramwork.framework'
  s.frameworks = 'UIKit', 'MapKit','AVFoundation','AudioToolbox','CoreAudio','CoreBluetooth'
  s.vendored_libraries = 'Pod/libraries/*.a'
  s.dependency 'MBProgressHUD'
  s.dependency 'CIRouter','0.0.3'
  s.dependency 'CIProgressHUD','0.2.0'
  s.dependency 'Moya','8.0.5'
  s.dependency 'Moya/RxSwift','8.0.5'
  s.dependency 'RxSwift','3.6.1'
  s.dependency 'SwiftyJSON','3.1.4'
  s.dependency 'CIUtilS'
  s.pod_target_xcconfig = { 'SWIFT_VERSION' => '3.2' }
end

添加该项目到你的仓库

pod repo add __ProjectName__ Project_Git_Address

验证私有库

pod lib lint ProjectName.podspec

跑上面的命令时可能会遇到各种报错

  • warning 导致失败,添加 --allow-warnings
  • SomePod not Found 依赖的其他私有库未找到,添加 --sources="SomePod's Git Address,https://github.com/CocoaPods/Specs.git"
  • --verbose 添加这个选项会有更多的打印,主要是为了看错误

推送

当本地lint成功后,就可以将该版本推到的你仓库中

pod repo push __PodName__ --allow-warnings --allow-warnings

注意,lint 命令中添加的参数,push 时也要添加

最近的文章

CentOS 下搭建 shadowsocks 服务

之前买的ss账号都不能用了,决定自己买一个海外服务器搭建ss服务。1. 选择服务器我这里服务器选的 DigitalOcean ,选它不是因为他家速度快,价格便宜,而是因为注册送了我 10 刀,可以免费先用两个月。配置是最低配的啦,完全足够用了。系统用的 centos6.9 .创建好vps (Droplet)后,root用户的密码会发到你邮箱你。2. 登录vps服务器选好了以后,登录到你的服务器。Linux/Unix 下面可以直接用ssh从终端登录ssh root@you_real_ip当然...…

继续阅读
更早的文章

C++ (OC) 内存管理 & 智能指针

前言现在开发的项目中用到了大部分 C++ 代码,由于 Swift 和 C++ 混编不是很方便, 依然选择用 OC 混编, 只需要将 .m 文件 修改为 .mm 文件即可。OC 里的对象大部分都会加入自动释放池中,所以这些都不用手动释放,但是 C++ 对象不会被加入自动释放池,必须要手动释放,否则会造成内存泄漏。 .mm 文件中可以随意的 new CppObject(), 但是要记得 delete 。当cpp指针被当前对象引用时,当前对象的 dealloc 方法里要记得释放该资源。借助这个机...…

继续阅读