美文网首页iOS
Pod创建私库里及引用其它库

Pod创建私库里及引用其它库

作者: Jiangyouhua | 来源:发表于2021-10-20 11:31 被阅读0次

Hi,大家好,我是姜友华。
最近在整理私有库,特别整理一下以备不时之需。

一、使用Pod建立私有库

在Pod及Git环境部署完成的情形下,使用Pod建立私有库分四步:

  1. 在github.com里新建一个Repositorie,比如JYHWebImage。
  2. 在本地,使用终端,进入到放置工程的目录,运行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
......
  1. 添加github关联。
git remote add origin https://github.com/Jiangyouhua/JYHWebImage.git
  1. 进入到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里实现应用示例。

二、将私有库添加到私有库空间索引

  1. 在本地添加索引库,例如名为mySpecs:
pod repo add mySpecs https://github.com/leeyouth/mySpecs.git 
  1. 为已开发好的库添加tag,并提交:
$ git tag '0.1.0'
$ git push --tags
  1. 检查私有库是否合格,--verbose为显示细节。
$ pod lib lint 

显示XXX passed validation.即为合格。

  1. 添加到索引库,--allow-warnings为不显示警告。
 pod repo push source-specs XXX.podspec --allow-warnings

如成功,现在你可以在索引库中查看到该库;出错,我们看最后。

三、引用其它库

Pod创建私库里引用第三方库比较简单,分三步:

  1. 打开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库。
  1. 修改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'即是新添加的索引库的源。如果是私有库,也需要添加进来。

  1. 进行到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'
  }
  • 引用图片资源的错误。正确的引用图片资源需要四步。
  1. 需要在podspec里启用s.resource_bundles(文件内被注释),如下所示。
 s.resource_bundles = {
   'JYHWebImage' => ['JYHWebImage/Assets/*.png']
 }
  1. 将需要的图片添加到与Classes同一目录的Assets里,并且图片后缀与s.resource_bundles指定的后缀一致。
  2. 需要运行Pod install,这样你添加的图片文件会在工程目录里出错。
  3. 现在使用一个方法,你可以基于图片文件名使用该图片。注意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指出该位置有错,并显示旧代码内容。
    你需要做的是:

  1. 添加新tag,并提交;
  2. 修改podspec的s.version对应该tag;
  3. 运行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提交才有用

好吧,就这些吧。我是姜友华,下一次,再见。

相关文章

网友评论

    本文标题:Pod创建私库里及引用其它库

    本文链接:https://www.haomeiwen.com/subject/lfgloltx.html