cocoapods相关的知识点

安装和卸载cocoapods

安装

#升级系统ruby环境
sudo gem update --system
#默认安装
sudo gem install cocoapods
#或指定版本安装
sudo gem install -n /usr/local/bin cocoapods -v 1.11.3
#或安装最新版本
sudo gem install -n /usr/local/bin cocoapods --pre 
#建立本地索引 
pod setup 
# 1.8.0以后支持CDN 大可不必如此 只需在Podfile文件头部加上一句 source 'https://cdn.cocoapods.org'
source 'https://cdn.cocoapods.org'

卸载

sudo gem list --local | grep cocoapods
sudo gem uninstall cocoapods
sudo gem uninstall cocoapods-core
sudo gem uninstall cocoapods-downloader
sudo gem uninstall cocoapods-plugins
sudo gem uninstall cocoapods-search
sudo gem uninstall cocoapods-stats
sudo gem uninstall cocoapods-trunk
sudo gem uninstall cocoapods-try
sudo gem uninstall cocoapods-deintegrate

常规问题解决思路

50%报错问题可以通过 pod install或者pod update解决

pod install #有时可能需要删除pods或者Podfile.lock 协作开发的时候最好是使用统一版本配置 避免删除Podfile.lock来解决问题
或者
pod update
或者
pod repo update
或者
pod install --repo-update

指定swift编译版本

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |configuration|
            configuration.build_settings['SWIFT_VERSION'] = "3.0"
            # Objective-C 跟 Swift 混编的项目, 想要引入 OC 的第三方库的话, 还需要添加另一项参数
            configuration.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'NO'
        end
    end
end

由于墙的原因,可能会install失败,Gem换淘宝的源

gem sources --remove https://rubygems.org/ #删除默认源
gem sources -a https://ruby.taobao.org/ #添加淘宝源
gem sources -l #查看源

BitCode一般来说是选择关闭的,如果有类似报错,pod也可以加上这一设置,排查问题

post_install do |installer| 
  installer.pods_project.targets.each do |target| 
    target.build_configurations.each do |config| 
      config.build_settings['ENABLE_BITCODE'] = 'NO' 
    end 
  end 
end 

添加Podfile

国内可能有墙项目依赖有时拉不下来, 可以用镜像源

source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
source 'http://cooder.linkdoc.com:9999/iOS/linkdoc_pods.git'

在项目根目录下pod init会生成一个Podfile文件此时vim Podfile进入编辑模式编辑内容

platform :ios, '9.0'
use_frameworks!

target "DemoProj" do
#私有库链接
source 'git@gitblit.local.com:XXX/iOSLibs.git'
#公有库源 1.8.0之后支持CDN 本来应该默认是source 'https://github.com/CocoaPods/Specs.git' 可省略不写
source 'https://cdn.cocoapods.org'
#默认是使用最新版本 
pod 'YYModel'
# 指定版本号避免升级不兼容api 
pod 'ReactiveObjC','~>3.1.1'
# 指定链接地址 可能是fork的库
pod 'YYText' , :git => 'https://github.com/ibireme/YYText.git'
#本地库
pod 'WGBSelectPhotoView',:path=> './LocalLibs/WGBSelectPhotoView' 
end

创建自己组件

克隆远程库

git clone git@gitblit.local.com:XXX/iOSLibs.git

创建组件

pod lib create HelloWorldLib
# 执行之后 一步一步陆续出现以下几个提问
1.What platform do you want to use? [ iOS / macOS ]
选择平台 输入iOS即可
2.What language do you want to use? [ Swift / ObjC ]
选择语言
3.Would you like to include a demo application with your library? [ Yes / No ]
是否包含demo
4.Which testing frameworks will you use? [ Specta / Kiwi / None ]
测试框架选择
5.Would you like to do view based testing? [ Yes / No ]
是否查看测试过程
6.What is your class prefix?
设置类前缀 

查看目录结构 需安装brew install tree插件

tree -L 2 #查看2级目录结构

├── Example
│   ├── Podfile
│   ├── Podfile.lock
│   ├── Pods
│   ├── Tests
│   ├── HelloWorldLib
│   ├── HelloWorldLib.xcodeproj
│   └── HelloWorldLib.xcworkspace
├── LICENSE
├── README.md
├── HelloWorldLib
│   ├── Assets
│   └── Classes
├── HelloWorldLib.podspec
└── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj
以上 HelloWorldLib 目录下的 Classes 里替换你的库文件, Assets 放资源文件  

编辑 HelloWorldLib.podspec文件

Pod::Spec.new do |s|
s.name             = 'HelloWorldLib'
s.version          = '1.0.0' #版本号与git tag 保持一致
s.summary          = 'xxxxx的功能组件.' #组件描述
s.description      = <<-DESC
TODO: Add long description of the pod here.
        DESC
#添加一大段的描述 一般为更新说明
s.homepage         = 'https://github.com/xxx/HelloWorldLib' #项目主页 一般是github pages 或者 文档博客
# s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license          = { :type => 'MIT', :file => 'LICENSE' } #开源证书类型
s.author           = { 'XXX' => 'xxxxxxx@qq.com' } #作者用户名和邮箱
s.source           = { :git => 'https://github.com/XXXX/HelloWorldLib.git', :tag => s.version.to_s }#公有库写法
#s.source           = { :git => 'git@gitblit.local.com:XXX/iOSLibs.git', :tag => s.version.to_s }#私有库一般放在自己服务器上  

# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>' #社交媒体 

s.ios.deployment_target = '8.0'

s.source_files = 'HelloWorldLib/Classes/**/*' 
#这一步很关键 如果是使用命令模板`pod lib create HelloWorldLib`生成的 直接把库文件放进HelloWorldLib/Classes目录下即可,要是自己创建的则需要匹配库文件的路径,能访问到即可

# s.resource_bundles = {
#   'HelloWorldLib' => ['HelloWorldLib/Assets/*.png']
# } #资源文件 

# s.public_header_files = 'Pod/Classes/**/*.h' #类库头文件
# s.frameworks = 'UIKit', 'MapKit' #依赖系统框架
# s.dependency 'AFNetworking', '~> 2.3' #依赖库
end

使用本地库调试

使用本地库调试,直接编辑Podfile,pod本地库的相对路径访问即可

 pod 'HelloWorldLib', :path => '../' # 使用`pod lib create HelloWorldLib`生成的工程自带本地库调试  其他工程取决于本地库相对于工程根目录所在的相对路径
 #这个 :path => '../' 路径只是访问HelloWorldLib.podspec文件的所在,如果路径正确,使用 `pod install` 即可安装正确

发布远程库

若是尚未关联远程库,则需加一下关联操作

#若是没有关联远程库 可以执行以下操作
git remote add origin https://gitlab.com/xxx.git #(替换为自己的实际git地址)
git push --set-upstream origin master

发布私有库如下流程:

git add .
git commit -am  "commit HelloWorldLib v1.0.0"
git tag  1.0.0 #版本号映射
git push origin master --tags
pod repo push git@gitblit.local.com:XXX/iOSLibSpecs.git HelloWorldLib.podspec # 需要自己创建一个索引库iOSLibSpecs存储 .podspec

发布远程公有库

HelloWorldLib.podspec所在目录下

git add .
git commit -am  "commit HelloWorldLib v1.0.0 "
git tag  1.0.0 #版本号映射
git push origin master --tags
pod trunk push HelloWorldLib.podspec --allow-warnings --verbose #发布推送

校验

本地修改好.podspec文件时可以尝试lint一下看看能否成功,然后再提交避免误操作造成来回提交

pod lib lint HelloWorldLib.podspec --no-clean --verbose --allow-warnings
pod trunk push HelloWorldLib.podspec --allow-warnings

podpacker 打包排除不需要的架构和指定架构

pod会加入一些默认的架构,会导致打包失败

s.pod_target_xcconfig = {
    'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64',
    'EXCLUDED_ARCHS[sdk=iphoneos*]' => 'armv7',
    'VALID_ARCHS' => ‘arm64 arm64e'
  }
  s.user_target_xcconfig = {
    'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64',
    'EXCLUDED_ARCHS[sdk=iphoneos*]' => 'armv7',
    'VALID_ARCHS' => ‘arm64 arm64e'
  }

使用 pod packager 打包

#生成 .framework
pod package xxx.podspec --force  
#生成 .a
pod package xxx.podspec --library --force  

经过验证: packagerxcode14无论怎么打都会失败,所以建议直接用xccodebuild,貌似作者也不维护了(弃坑了)

error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: no files specified
Usage: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool -static [-] file [...] [-filelist listfile[,dirname]] [-arch_only arch] [-sacLT] [-no_warning_for_no_symbols]
Usage: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool -dynamic [-] file [...] [-filelist listfile[,dirname]] [-arch_only arch] [-o output] [-install_name name] [-compatibility_version #] [-current_version #] [-seg1addr 0x#] [-segs_read_only_addr 0x#] [-segs_read_write_addr 0x#] [-seg_addr_table <filename>] [-seg_addr_table_filename <file_system_path>] [-all_load] [-noall_load]
fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: can't open input file: Pods/build-sim/package.a (No such file or directory)

Xcode14 pods里的bundle资源需要签名?

  1. 使用开发者账号进行认证,校验通过则已
  2. Podfile加上如下配置,重新install即可
post_install do |installer|
	installer.generated_projects.each do |project|
		project.targets.each do |target|
			target.build_configurations.each do |config|
				config.build_settings['CODE_SIGN_IDENTITY'] = ''
			end
		end
	end
end
posted @ 2020-03-06 13:45  CoderWGB  阅读(564)  评论(0编辑  收藏  举报