美文网首页
iOS 创建私有pod库,并添加第三方

iOS 创建私有pod库,并添加第三方

作者: 木菀 | 来源:发表于2019-05-09 18:59 被阅读0次

2020.5.5修改:
1、首先创建私有索引库
2、有了私有索引库后再创建私有仓库
这里写的有点乱糟糟的,后面将重新整理,把私有索引库和私有仓库分两章写一下

我是分割线


https://www.jianshu.com/p/e5d3c7a7335a
https://www.jianshu.com/p/d6a592d6fced
https://blog.csdn.net/overstep1024/article/details/84543770

缘起

最近一系列996的呐喊,让很多公司确实稍微消停了一下,终于没那么忙了。还么松下来两天,bilibili、大疆先后爆出了程序员私自开源公司代码,一下子各大公司又紧张起来,包括我司。这不,前两天刚刚上了oa首页,即日起,公司内网停止访问github、gitlab、oschina等第三方开源软件托管平台,整个人都凉凉了。首先想到的就是我的cocoapods第三方怎么办,虽然有自己的私有库,但是还是有不少第三方直接用的pods,于是这次想着把第三方的也悉数迁移到私有库。

开始

首先,在自己的远程git仓库新建一个项目,这一块就不多说了。建好后,在本地

cd YourProjict
git clone git@yougitaddress.git

代码克隆下来后,在本地repo添加自己的私有库,回到上面clone下来的文件夹,创建你自己的pods和demo。

pod repo add mypods(私有库名称) https://github.com/xxxxx/xxxxx.git(私有库远程地址)
cd YourProjict
pod lib create mypods

这个命令会在你刚才的目录下,根据 cocoapods的 pods模板生成一个 pods工程,包含 pods以及 demo工程,并且命令执行完毕会打开 example里面的 xcworkspace。在工程中找到replaceme.m文件,并替换成你自己的,同时找到 podspec 文件,编辑你所需要的信息,操作完成后,到你的 podfile目录下执行 pod install
这个操作会把你的demo项目和pods进行链接,编译无误后,便可以进行校验。

校验

#import "你的pods文件"
首先import你项目中的文件,如果没有报错,说明基本路径没有问题了,接着就可以进行pod的校验,执行命令

pod lib lint

校验遇到麻烦
如果很不幸,你校验出了问题,比如我在执行的时候就遇到了如下问题

- WARN  | summary: The summary is not meaningful.
- ERROR | [iOS] unknown: Encountered an unknown error (Could not find a `ios` simulator (valid values: com.apple.coresimulator.simruntime.ios-10-0, com.apple.coresimulator.simruntime.ios-11-1, com.apple.coresimulator.simruntime.ios-12-2, com.apple.coresimulator.simruntime.tvos-12-2, com.apple.coresimulator.simruntime.watchos-5-2). Ensure that Xcode -> Window -> Devices has at least one `ios` simulator listed or otherwise add one.) during validation.

这个比较好解决,如果你和我一样是Xcode10以上的版本,可能就需要更新下 cocoapods

sudo gem install cocoapods

更新完成cocoapods后,再次进行校验,如果出现如下提示,那么就成功了

HenlyToolKit passed validation.

检查远程spec

pod spec lint

由于我们没有推送上去,此时远程肯定是没有的,检查必然报错

➜  xxxxx git:(master) ✗ pod spec lint

Username for 'http://xxxxx.xxx.com': xxxx
Password for 'http://xxxx@xxxx.xxx.com':
 -> xxxxxKit (0.1.1)
    - ERROR | [iOS] unknown: Encountered an unknown error ([!] /usr/bin/git clone http://xxxxx.xxx.com /var/folders/s7/nxsncldcnklcnkwdcn_cjsncjdcndjcn_njkdbchdbc/T/s2e923949r-e8r948r-e9i9re --template= --single-branch --depth 1 --branch 0.1.1

Cloning into '/var/folders/s7/cndjcndjcndwjkcn/T/xnjscnjdcnjd-cndkcndjcn-ncjdncjldwnc'...
remote: HTTP Basic: Access denied
fatal: Authentication failed for 'http://http://xxxxx.xxx.com.git/'
) during validation.

Analyzed 1 podspec.

[!] The spec did not pass validation, due to 1 error.

[!] 'xxxxxKit' uses the unencrypted 'http' protocol to transfer the Pod. Please be sure you're in a safe network with only trusted hosts. Otherwise, please reach out to the library author to notify them of this security issue.

此时我们在用git那所有的代码上传,在进行远程验证

pod repo lint
timg.jpeg

我枯辽,又双叒叕报错了

➜  xxxxxKit git:(master) pod spec lint

 -> xxxxKit (0.1.1)
    - ERROR | [iOS] file patterns: The `source_files` pattern did not match any file.
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | [iOS] xcodebuild:  note: Planning build
    - NOTE  | [iOS] xcodebuild:  note: Constructing build description

Analyzed 1 podspec.

[!] The spec did not pass validation, due to 1 error.

可是,明明本地检测没问题的啊,[iOS] file patterns: The `source_files` pattern did not match any file.这句就是说,source_files的路径和文件夹不一致,后来找了很久,发现一个捷径

open /Users/xxxxx/Library/Caches/CocoaPods/Pods/External

找到我们的pods,然后手动添加文件夹
当相应文件都做好后,我们在执行一遍指令 pod spec lint
谢天谢地,终于成功了,最后执行上传到我们远程仓库的repo

pod repo push 仓库名称 xxxxKit.podspec

这样,一份私有pod仓库就建立好了

----------更新下,这个操作好像不太稳妥-----------

pod会通过我们写的.podspec文件内的s.source 与 s.source_files两个地址目录去查找对应pod文件,看如下示例:

 s.version          = '0.1.2'
 s.source           = { :git => >'http://xxxKit', :tag => s.version.to_s }
 s.ios.deployment_target = '8.0'
 s.source_files = 'xxxKit/Classes/*.{c,h,hh,m,mm}','xxxKit/Classes/Third/*.{c,h,hh,m,mm}'

pod会去http://xxxKit这个地址的0.1.2 tag下的Classes和Third目录下找所有.h.m文件

解决办法:
每次更新version的时候,push到远程,并且添加tag,tag需要与version保持一致

git add -A && git commit -m "Release 2.0.0"  
git tag '2.0.0'  
git push --tags  
git push origin master

这两条命令是为pod添加版本号并打上tag:
set the new version to 2.0.0
set the new tag to 2.0.0

-------------- 还是失败,我又自闭了-------------
最后参考了大神的博客,终于找到原因

错误分析

s.source_files中描述的为相对路径,但在pod lib lint 与 pod spec lint 时,所用的参照不一样。pod lib lint 时,以podspec文件所在位置为参照;pod spec lint 时,以Git仓库的根目录为参照。

所以,在pod lib lint 时,该s.source_files的描述为源码相对于podspec文件的相对路径,该描述正确;在pod spec lint 时,该s.source_files的描述应为源码相对于Git根目录的相对路径,改描述错误,所以报错。

修复方案:

1、不同的验证方案,使用不同的s.source_files 描述。
pod lib lint 时:

 s.source_files  = "MWBase/BaseModule/**/*.{h,m}"

pod spec lint 时:

 s.source_files  = "MWBase/MWBase/BaseModule/**/*.{h,m}"

2、推荐方案:移动podspec文件至Git根目录下,并修改内容:

 s.source_files  = "MWBase/MWBase/BaseModule/**/*.{h,m}"

添加第三方

  s.dependency 'DoraemonKit/Core', '~> 1.1.7'
  s.dependency 'DoraemonKit/WithLogger', '~> 1.1.7'
  s.dependency 'DoraemonKit/WithGPS', '~> 1.1.7'
  s.dependency 'DoraemonKit/WithLoad', '~> 1.1.7'

制作完毕

相关文章

网友评论

      本文标题:iOS 创建私有pod库,并添加第三方

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