Hi,大家好,我是姜友华。
最近在整理私有库,特别整理一下以备不时之需。
一、使用Pod建立私有库
在Pod及Git环境部署完成的情形下,使用Pod建立私有库分四步:
- 在github.com里新建一个Repositorie,比如JYHWebImage。
- 在本地,使用终端,进入到放置工程的目录,运行
pod lib create JYHWebImage
。如下所示
pod lib create JYHWebImage
......
What platform do you want to use?? [ iOS / macOS ]
> iOS
What language do you want to use?? [ Swift / ObjC ]
> Swift
Would you like to include a demo application with your library? [ Yes / No ]
> Yes
Which testing frameworks will you use? [ Quick / None ]
> Quick
Would you like to do view based testing? [ Yes / No ]
> Yes
......
- 添加github关联。
git remote add origin https://github.com/Jiangyouhua/JYHWebImage.git
- 进入到Example,运行
pod install
。
pod install
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin20/rbconfig.rb:229: warning: Insecure world writable dir /usr/local/sbin in PATH, mode 040777
Analyzing dependencies
[!] CocoaPods could not find compatible versions for pod "Nimble-Snapshots":
In Podfile:
Nimble-Snapshots (~> 8.0.0)
Specs satisfying the `Nimble-Snapshots (~> 8.0.0)` dependency were found, but they required a higher minimum deployment target.
- 安装出错,Nimble-Snapshots支持的目标最低的iOS版本为10.0. 打开Podfile,修改为
platform :ios, '10.0'
,再运行pod installs
。 - 安装完成后,提交工程.
$ git add .
$ git commit -m '初始完成'
$ git push origin
-
到这里私有库建立完成。打开JYHWebImaage.xcworkspace,工程如下图:
工程图 - 我们将在ReplaceMe.swift里实现私有库内容。
- 并在Example for JYHWebImage里实现应用示例。
二、将私有库添加到私有库空间索引
- 在本地添加索引库,例如名为mySpecs:
pod repo add mySpecs https://github.com/leeyouth/mySpecs.git
- 为已开发好的库添加tag,并提交:
$ git tag '0.1.0'
$ git push --tags
- 检查私有库是否合格,
--verbose
为显示细节。
$ pod lib lint
显示XXX passed validation.
即为合格。
- 添加到索引库,
--allow-warnings
为不显示警告。
pod repo push source-specs XXX.podspec --allow-warnings
如成功,现在你可以在索引库中查看到该库;出错,我们看最后。
三、引用其它库
Pod创建私库里引用第三方库比较简单,分三步:
- 打开JYHWebImage.podspec文件,添加第三方库。
- 文件在:Pods → Development Pods → JYHWebImage → Pod → JYHWebImage.podspec。
- 打开后,文件内容如下:
#
# Be sure to run `pod lib lint JYHWebImage.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
s.name = 'JYHWebImage'
s.version = '0.1.0'
s.summary = 'A short description of JYHWebImage.'
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
s.homepage = 'https://github.com/3424079/JYHWebImage'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { '3424079' => 'jiangyouhua@daorealm.com' }
s.source = { :git => 'https://github.com/3424079/JYHWebImage.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '9.0'
s.source_files = 'JYHWebImage/Classes/**/*'
# s.resource_bundles = {
# 'JYHWebImage' => ['JYHWebImage/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
s.dependency 'AFNetworking', '~> 2.3'
end
- 倒数第二排,原来是
# s.dependency 'AFNetworking', '~> 2.3'
,删除了#
符号,即表示需要引用AFNetworking库。
- 修改Podfile,添加查找源:
use_frameworks!
platform :ios, '10.0'
source 'https://github.com/CocoaPods/Specs.git'
target 'JYHWebImage_Example' do
pod 'JYHWebImage', :path => '../'
target 'JYHWebImage_Tests' do
inherit! :search_paths
pod 'Quick', '~> 2.2.0'
pod 'Nimble', '~> 8.0.7'
pod 'FBSnapshotTestCase' , '~> 2.1.4'
pod 'Nimble-Snapshots' , '~> 8.0.0'
end
end
source 'https://github.com/CocoaPods/Specs.git'
即是新添加的索引库的源。如果是私有库,也需要添加进来。
- 进行到Example,运行
Pod install
。完成后,运行示例,成功后退出工程目录进行提交。
- 注意,私有库提交需要说明提交到哪里。
--sources=***/**.git
指定索引库的位置。
pod repo push source-specs JYHWebImage.podspec --sources='https://****/specs.git' --allow-warnings
四、一些常见错误。
- podspec文件里
s.name
与podspec文件名不相同的错误。 - 未设置git tag并提交的错误。下面是常用到的tag命令。
$ git tag 0.1.0 # 添加tag
$ git push --tags # 提交本地所标tag
$ git tag -d 0.1.0 # 删除本地tag 0.1.0
$ git push origin :refs/tags/0.1.0 # 删除远程tag 0.1.0
- 引用C类库,找不到头文件的错误。需要在podspec文件里添加
s.pod_target_xcconfig
的指定。这个是表示在pod的target里添加xcode配置项。
s.pod_target_xcconfig = {
'USER_HEADER_SEARCH_PATHS' => '$(inherited) $(SRCROOT)/libwebp/src ${PODS_ROOT}/libwebp/src'
}
- 引用图片资源的错误。正确的引用图片资源需要四步。
- 需要在podspec里启用
s.resource_bundles
(文件内被注释),如下所示。
s.resource_bundles = {
'JYHWebImage' => ['JYHWebImage/Assets/*.png']
}
- 将需要的图片添加到与Classes同一目录的Assets里,并且图片后缀与
s.resource_bundles
指定的后缀一致。 - 需要运行
Pod install
,这样你添加的图片文件会在工程目录里出错。 - 现在使用一个方法,你可以基于图片文件名使用该图片。注意named的值与
s.resource_bundles
的key相同。
let bundle = NSBundle(for: JYHWebImage.self)
let image = UIImage(named: "JYHWebImage", in: bundle, compatibleWith: nil)
如果图片比较小的话,当然你也可以使用base64.
let image = UIImage(data: Data(base64Encoded: "base64_string")!)
-
pod install后运行出错的
library not found for -lswiftXCTest
错误。
搜索-lswiftXCTest
, 在出错的文件里注释掉即可。 -
指出代码中错误位置与现有不符时,即该位置code已修改,但提交时使用
--verbose
指出该位置有错,并显示旧代码内容。
你需要做的是:
- 添加新tag,并提交;
- 修改podspec的
s.version
对应该tag; - 运行
pod install
; 现在可以提交了。
清缓存是没用的,一点用都没有
$ pod cache clean --all # 清除全部缓存,没用。
$ pod cache clean JYHWebImage # 清除指定缓存,也没用。
$ pod cache list # 查看缓存,都没了,还是没用。
$ rm -rf ~/Library/Caches/CocoaPods # 删除缓存,依然没用。
$ rm -rf ~/Library/Developer/Xcode/DerivedData/* # 再删除,当然没有。
$ pod deintegrate # 重构,
$ pod setup # 设置,
$ pod install # 安装,
$ pod update # 更新,统统没有。
只能以新tag提交才有用
好吧,就这些吧。我是姜友华,下一次,再见。
网友评论