部分参考了使用 CocoaPods 打包

1 工具安装

//安装
sudo gem install cocoapods-packager//更新
sudo gem update --system
sudo gem install cocoapods
sudo gem install cocospods-trunk
复制代码

2 pod仓库账号管理

//注册(要去邮箱里点击确认,流程才算完。)
pod trunk register xxx@163.com 'Yang' --description='Yang's xhzy mac'//查看这个设备上的账号、相关设备信息、相关仓库信息。
pod trunk me//换台电脑,需要登录(注册一个session)cocoapod仓库. (一样要去邮箱确认身份)
//一个账号可以有多台设备。
pod trunk register xxx@163.com//给pod仓库添加owner, 相当于github上,添加开发者。
pod trunk add-owner SHWChatRobotNOUI xxx@gmail.com
复制代码

3 创建lib项目

  • 创建结构 Making a CocoaPod
pod lib create [pod name]
复制代码

3.1 podspec文件名,podspec中s.name保持一致,决定打出来的包是什么名字

比较好的做法是,

项目 git项目名 工程名 podspec name
源码 shw-voice-sdk-sourcecode SHWVoice SHWVoice
sdk shw-voice-sdk SHWVoiceSDK SHWVoiceSDK,spec文件中指定的framework是SHWVoice.framework
  1. 源码项目:看不到SDK字样
  2. 实际推送framework的项目:项目名带SDK,实际framework不带SDK

3.2 修改.gitignore以适应自己的打包情况

上一步操作,.gitignore已经自动生成。

4 lib包管理

4.1 校验

无论源码打包,framework提交,都要先校验。

//有静态库依赖时,需要加上选项 --use-libraries
pod lib lint SHWAccount.podspec --allow-warnings --use-libraries
//对于有私有库依赖的库,校验时需要加上--source
pod lib lint SHWAccount.podspec --allow-warnings --use-libraries --sources="https://code.aliyun.com/xhzy-ios/frameworkplatform.git,https://github.com/CocoaPods/Specs.git"
复制代码

4.2 打包,即源码打包,和framework无关。如果开源,也不用打包,直接推送。

打包时注意s.version的版本号。

  1. 如果使用本地源码打包,不要求git仓库有对应的tag。
  2. 如果使用git地址打包,并且spec的source中里面写了tag,需要打tag。
//--no-mangle,表示不把第三方源码、framework打进去
//--exclude-deps,解决pod-numm冲突,不包含依赖的符号表
//--force,强制覆盖之前已经生成过的二进制库
pod package SHWAccount.podspec --force --no-mangle --exclude-deps
//对于有私有库依赖的库,打包时需要加上--spec-sources
$ pod package SHWAccount.podspec --force --no-mangle --exclude-deps --spec-sources="https://code.aliyun.com/xhzy-ios/frameworkplatform.git,https://github.com/CocoaPods/Specs.git"
复制代码

4.3 推送

4.3.1 到自己的仓库

4.3.1.1 添加仓库

pod repo add REPO_NAME SOURCE_URL
复制代码

4.3.1.2 推送到仓库

pod repo push platform XYiOSComponent.podspec
//--use-libraries 如果有.a就需要添加这个选项
复制代码

4.3.2 推送到公网仓库

pod trunk push xx.podspec --allow-warnings --use-libraries    //--use-libraries 如果有.a就需要添加这个选项
复制代码

4.4 删除已提交的版本(不好用)

pod_trunk_delete

pod trunk deprecate xxx
pod trunk delete xxx 0.5.8
复制代码

4.5 其他参数

Pod二进制化,可以参考,但一些参数的描述和项目实际使用中不太一样。

5 缓存路径(同版本号打多次无效

~/Library/Caches/CocoaPods/Pods/Specs/External

6 Podfile

source 'https://github.com/CocoaPods/Specs.git'inhibit_all_warnings!platform :ios, "9.0"#use_frameworks!#可以对多个target设置不同的引用
target "WorkApp" do    pod 'Masonry'pod 'AFNetworking'
end
复制代码

use_frameworks! 把lib-Pod打成framework,而不是.a,用于swift中,oc中不要加这句,可能报错。

6.1 lib项目的Podfile

source 'https://github.com/CocoaPods/Specs.git'
inhibit_all_warnings!platform :ios, "8.0"
target 'SHWRecommendUI_Example' do
#这里可以改pod 'SHWRecommendUI', :path => '../'pod 'YYText'target 'SHWRecommendUI_Tests' doinherit! :search_pathspod 'Kiwi'end
end
复制代码

6.2 新特性,加快索引速度

//Podfile
install! 'cocoapods', generate_multiple_pod_projects: true
复制代码

之前Cocoapods把每个依赖作为 target 放到 Pods 项目里,由于 xcodeproj 编码原因,pod多的时候,解析的效率会急剧下降。 generate_multiple_pod_projects选项,让每个依赖都作为一个单独的项目引入,大大增加了解析速度.

系统升级后的一些问题提示 pod search 出错 pod search 找不到 s.source源引起的问题

7 podspec

Podspec 语法

友盟的subspec

MJRefresh的podspec

NewsFeedsUISDK的podspec

FFToast的podspec

Pod::Spec.new do |s|s.name = 'SHWAnalyticsSDK's.version = '1.2.2's.summary = 'Analytics framework.'s.description = "项目 iOS SDK 源码"s.homepage = 'https://code.aliyun.com/xhzy-ios/SHWAnalytics's.license = { :type => 'MIT', :file => 'LICENSE' }s.author = { "yangyang" => "xxx@xxx.com" }#s.source = { :git => 'git@code.aliyun.com:xhzy-ios/ios-account-sdk.git', :tag => s.version.to_s }# develop sources.source = { :git => 'git@code.aliyun.com:xhzy-ios/ios-analytics-sdk.git'}s.ios.deployment_target = '9.0's.source_files = 'SHWAnalyticsSDK/Classes/**/*'s.public_header_files = 'SHWAnalyticsSDK/Classes/Public/*.h's.frameworks = 'CoreLocation','CoreTelephony','Foundation','JavaScriptCore','UIKit','WebKit', 'SystemConfiguration','CoreFoundation','Security's.dependency 'UTDID', '~> 1.0.0'
end
复制代码

7.1 打包第三方静态库.a 动态库.framework, 以及subspec

Pod::Spec.new do |s|s.name = 'SHWAIConversation's.version = '1.52.0's.summary = 'xxx's.homepage = 'https://code.aliyun.com/xxx's.license = { :type => 'MIT', :file => 'LICENSE' }s.author = { 'yangyang' => 'youxiang' }s.ios.deployment_target = '9.0'# s.source = { :git => 'git@code.aliyun.com:xxx.git', :tag => s.version.to_s}s.source = { :git => '/Users/yayang/Desktop/SHWAIConversation'}s.source_files = 'SHWAIConversation/Classes/**/*'s.public_header_files = 'SHWAIConversation/Classes/public/*.h's.resources = 'SHWAIConversation/Resource/*'s.frameworks = 'CoreLocation', 'SystemConfiguration', 'CoreFoundation', 'JavaScriptcore', 'CoreTelephony', 'Security', 'AudioToolbox', 'CoreMotion', 'OpenGLES', 'CoreGraphics', 'AVFoundation's.libraries = 'icucore'#第三方.as.ios.vendored_library = 'SHWNLSClient/Classes/3rd/Opus/lib/libopus.a'# subspecs.subspec 'NlsClientSDK' do |nls|nls.name = 'NlsClientSDK'nls.frameworks = 'CoreLocation', 'SystemConfiguration', 'CoreFoundation', 'JavaScriptcore', 'CoreTelephony', 'Security', 'AudioToolbox', 'CoreMotion', 'OpenGLES', 'CoreGraphics', 'AVFoundation'nls.libraries = 'icucore'#第三方frameworknls.ios.vendored_frameworks = 'SHWAIConversation/Frameworks/NlsClientSDK.framework'end# dependencyss.dependency 'Masonry', '~> 1.1.0'
end
复制代码

7.2 使用本地源码打包

目的:为了提前发现问题,可以在不提交的情况下进行测试。 实现方式:有两种

  1. 第一种方式,只需要在原工程上修改podspec
  2. 第二种方式,需要两个工程,原工程不修改,另一个工程修改podspec和Podfile

两种方式各有利弊,总的来说,因为可以用多桌面,可能还是第二种稍好。

    s.source = { :git => '/Users/yayang/Desktop/SHWAIConversation'}
复制代码
source 'https://github.com/CocoaPods/Specs.git'inhibit_all_warnings!platform :ios, "8.0"target 'SHWRecommendUI_Example' do
#这里有个大坑,注意要依赖于实际源码,而不是打包出的源码,如/Users/yangyang/Documents/code/workspace/test6/YangTest1Resource/YangTest1Resource-0.2.6pod 'SHWRecommendUI', :path => '/Users/yangyang/Documents/code/workspace/test6/YangTest1Resource'target 'SHWRecommendUI_Tests' doinherit! :search_pathspod 'Kiwi'end
end
复制代码

7.3 framework中打包bundle文件

s.resource = 'NewsFeedsUISDK/NewsFeedsUISDK.framework/Versions/A/Resources/NFUIBundle.bundle'

8 一些问题

8.1 无法修改保存

The document could not be saved. The file doesn’t exist.

关掉Xcode,用Xcode单独打开这个文件,修改保存关闭。

再用Xcode打开项目。This issue is gone.

8.2 空文件夹不会自动放到Xcode中

在podspec文件创建好之后pod install。

但是源码根目录(Class目录下)的空文件夹,不会自动被放到Xcode中。

8.3 pod repo update + pod search 找不到/出错

//JSON::ParserError - A JSON text must at least contain two octets!
rm ~/Library/Caches/CocoaPods/search_index.json
复制代码

8.4 系统升级后,pod install失败

//错误1 RuntimeError - [Xcodeproj] Unknown object version.
sudo gem install cocoapods --pre//错误2 ERROR: While executing gem ... (Errno::EACCES)
// Permission denied @ rb_sysopen - /Library/Ruby/Gems/2.3.0/gems/xcodeproj-1.5.7/LICENSE
sudo chmod -R 777 /Library/Ruby/Gems///错误3 ERROR: While executing gem ... (Gem::FilePermissionError)
// You don't have write permissions for the /usr/bin directory.
sudo gem install -n /usr/local/bin cocoapods
复制代码

8.5 其他问题

  1. podspec.json的source iOS使用cocoapods 安装libwebp 0.6.0遇到Error installing libwebp
find /Users/yangyang/.cocoapods/repos/master -iname libwebp
cd /Users/yangyang/.cocoapods/repos/master/Specs/1/9/2/libwebp
cd 0.6.1
修改libwebp.podspec.json
"source": {
"git": "https://chromium.googlesource.com/webm/libwebp",
"tag": "v0.6.0"
},
将其中的"git"对应的url替换为https://github.com/webmproject/libwebp.git
复制代码
  1. 有些git源,只支持git@code.aliyun.com/xxx形式地址

也可能是,没有配好本地的https用户名密码。或阿里云阶段性抽风

转载于:https://juejin.im/post/5d17458be51d455070226fe4

CocoaPods 使用小结相关推荐

  1. [iOS]高德地图SDK开发--准备篇

    本文是对高德地图SDK使用的总结,对于高德地图不做过多介绍,可直接登录其官网开放平台进行了解; PS: 这里主要是讲解地图使用的准备工作,最后,以显示地图并定位到当前位置来验证;对于其他的使用,可参看 ...

  2. IOS--工具--使用CocoaPods管理依赖库

    声明:此文章内容引自cocoachina,原文地址:http://www.cocoachina.com/newbie/basic/2014/0107/7663.html. 这篇内容将介绍Mac和iOS ...

  3. 第一个 iOS 项目开发小结 - SwiftUI 学习资料、开源项目

    第一个 iOS 项目开发小结 SwiftUI 知识点小记 学习资料 开源项目 一些问题记录 项目预览 这段时间由于项目需要,我学习了一段时间 SwiftUI 并单独完成了一个系统的开发,耗时两个星期, ...

  4. 【阶段小结】协同开发——这学期的Git使用小结

    [阶段小结]协同开发--这学期的Git使用小结 一.Git简介 1. Git简单介绍 2. Git工作流程以及各个区域 3. Git文件状态变化 二.Git安装&Git基本配置 三.个人踩坑 ...

  5. 正则表达式(括号)、[中括号]、{大括号}的区别小结

    正则表达式(括号).[中括号].{大括号}的区别小结 </h1><div class="clear"></div><div class=& ...

  6. php中$_REQUEST、$_POST、$_GET的区别和联系小结

    php中$_REQUEST.$_POST.$_GET的区别和联系小结 作者: 字体:[增加 减小] 类型:转载 php中有$_request与$_post.$_get用于接受表单数据,当时他们有何种区 ...

  7. c cin.get()的用法小结_c语言中static 用法

    static在c里面可以用来修饰变量,也可以用来修饰函数. 先看用来修饰变量的时候.变量在c里面可分为存在全局数据区.栈和堆里.其实我们平时所说的堆栈是栈而不是堆,不要弄混. int a ; int ...

  8. linux 压缩文件夹格式,Linux下常见文件格式的压缩、解压小结

    Linux下常见文件格式的压缩.解压小结 .tar 解包: tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ...

  9. 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别

    简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式.其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性. 本文是本人对这三种模式学习后的一个小结以及对他 ...

  10. cocoapods更新

    使用sudo gem install cocoapods更新提示: ERROR: While executing gem ... (Errno::EPERM) Operation not permit ...

最新文章

  1. 日期在数据库的存储和取出
  2. IOS线程学习(一)
  3. git 安装包_Git、TortoiseGit的安装、使用说明
  4. Mounty for NTFS免费软件实现MAC OS X下对NTFS分区进行读写
  5. Spring自学日志00(Spring配置文件头及xsd文件版本浅析)
  6. 使用蓝图构建Flask项目目录
  7. Java和U3D比较,Unity热更方案 ILRuntime 和 toLua的比较
  8. django 1.8 官方文档翻译:13-12 验证器
  9. linux wkhtmltopdf换字体,ubuntu – 更新后Wkhtmltopdf字体大小增加
  10. 自定义binder架构的 client/ server组件
  11. linux挂载卸载美色商城,索尼爱立信LT18i
  12. 用QT操作数据库(本周学的)
  13. mysql5.5启动图解_MySQL5.5.19安装图解_MySQL
  14. 【windows】在控制面板卸载软件的时候,出现2502,2503的问题
  15. 【系统集成项目管理工程师】信息与信息化
  16. C 中的auto register static extern的使用
  17. surface pro5 matlab,surfacepro5怎么样微软surfacepro哪款好
  18. 算法刷题-哈希表-四数相加
  19. android 不能试用switch
  20. 七首爱情诗词:愿有岁月可回首,且以深情共白头

热门文章

  1. 产品经理知识体系专题
  2. dubbo中bugger集
  3. 运行zookeeper提供者报错:org.jboss.netty.util.internal.jzlib.ZStream scanned from multiple locations: jar:
  4. 分门别类刷leetcode——二叉树和图(C++实现)
  5. MinIO异常the region is wrong; expecting ‘us-east-1‘
  6. 计算机网络中常用的互联设备,计算机网络的互联技术
  7. 【报错】UnboundLocalError: local variable ‘xxx‘ referenced before assignment
  8. 每日一题【56】导数-公切线问题
  9. lae界面开发工具入门之介绍十四--《介绍lae在windows平台上如何打包编译》
  10. 小象学院 nlp 自然语言处理项目实战