内容简介:比较好的做法是,上一步操作,.gitignore已经自动生成。无论源码打包,framework提交,都要先校验。
//安装 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 |
- 源码项目:看不到
SDK
字样 - 实际推送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的版本号。
- 如果使用本地源码打包,不要求git仓库有对应的tag。
- 如果使用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 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' do inherit! :search_paths pod '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
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 source s.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' #第三方.a s.ios.vendored_library = 'SHWNLSClient/Classes/3rd/Opus/lib/libopus.a' # subspec s.subspec 'NlsClientSDK' do |nls| nls.name = 'NlsClientSDK' nls.frameworks = 'CoreLocation', 'SystemConfiguration', 'CoreFoundation', 'JavaScriptcore', 'CoreTelephony', 'Security', 'AudioToolbox', 'CoreMotion', 'OpenGLES', 'CoreGraphics', 'AVFoundation' nls.libraries = 'icucore' #第三方framework nls.ios.vendored_frameworks = 'SHWAIConversation/Frameworks/NlsClientSDK.framework' end # dependencys s.dependency 'Masonry', '~> 1.1.0' end 复制代码
7.2 使用本地源码打包
目的:为了提前发现问题,可以在不提交的情况下进行测试。 实现方式:有两种
- 第一种方式,只需要在原工程上修改podspec
- 第二种方式,需要两个工程,原工程不修改,另一个工程修改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.6 pod 'SHWRecommendUI', :path => '/Users/yangyang/Documents/code/workspace/test6/YangTest1Resource' target 'SHWRecommendUI_Tests' do inherit! :search_paths pod '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 其他问题
- 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 复制代码
- 有些git源,只支持git@code.aliyun.com/xxx形式地址
也可能是,没有配好本地的https用户名密码。或阿里云阶段性抽风
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。