CocoaPods 使用小结

栏目: IOS · 发布时间: 6年前

内容简介:比较好的做法是,上一步操作,.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
  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中不要加这句,可能报错。

CocoaPods 使用小结

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

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 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 使用本地源码打包

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

  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.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 其他问题

  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用户名密码。或阿里云阶段性抽风


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Google's PageRank and Beyond

Google's PageRank and Beyond

Amy N. Langville、Carl D. Meyer / Princeton University Press / 2006-7-23 / USD 57.50

Why doesn't your home page appear on the first page of search results, even when you query your own name? How do other web pages always appear at the top? What creates these powerful rankings? And how......一起来看看 《Google's PageRank and Beyond》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具