私有库

git.oschina.net 上创建两个私有库
ZJWFoundatinZJWFoundatinSpec,不选择语言,选择swift忽略文件,不要创建readme

终端操作

  • cd 到 ~/.cocoapods/repos 路径下
    ~$ cd ~/.cocoapods/repos
  • 本地创建 ZJWFoundationSpec 并关联远程的地址
    repos$ pod repo add ZJWFoundationSpec https://gitee.com/***/ZJWFoundationSpec.git
  • 输出
    Cloning spec repo ZJWFoundationSpec from https://gitee.com/***/ZJWFoundationSpec.git
    执行成功后如下图
    Snip20190729_3.png
  • 找到合适的路径
    repos$ cd ~/.
    ~$ cd Desktop/
  • 创建工程文件
    Desktop$ pod lib create ZJWFoundation
  • 输出
    Cloning https://github.com/CocoaPods/pod-template.git into ZJWFoundation . Configuring ZJWFoundation template.
...
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 ]
 > none

Would you like to do view based testing? [ Yes / No ]
 > yes
...
  • 删除classes文件夹下的ReplaceMe文件
    ~$ cd /Users/***/Desktop/ZJWFoundation/ZJWFoundation/Classes
    Classes$ rm -f ReplaceMe.swift
  • 创建一个文件夹 将需要的文件复制到文件夹中
    Classes$ mkdir Extension
    Classes$ cp /Users/***/Desktop/Bool+Extension.swift /Users/***/Desktop/ZJWFoundation/ZJWFoundation/Classes/Extension/
  • cd 到Example 文件夹下,执行pod install
    Classes$ cd /Users/***/Desktop/ZJWFoundation/Example
    Example$ pod install
  • 输出
Analyzing dependencies
····
[!] Automatically assigning platform `ios` with version `9.3` on target `ZJWFoundation_Example` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.
  • 打开 ZJWFoundation.podspec 文件,如下图修改


    Snip20190729_5.png
  • 切换到项目主路径下
    ZJWFoundation$ cd /Users/***/Desktop/ZJWFoundation
  • 校验本地文件的有效性
    ZJWFoundation$ pod lib lint --allow-warnings
  • 输出
 -> ZJWFoundation (0.1.0)
···
ZJWFoundation passed validation.
  • 给本地仓库添加远程(会有如下报错)
    ZJWFoundation$ git remote add origin https://gitee.com/***/ZJWFoundation.git
    ZJWFoundation$ git push origin master
  • 输出
To https://gitee.com/***/ZJWFoundation.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://gitee.com/***/ZJWFoundation.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
  • 拉远程(会有如下报错,提示.gitignore有冲突)
    ZJWFoundation$ git pull origin master
warning: no common commits
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://gitee.com/***/ZJWFoundation
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> origin/master
fatal: refusing to merge unrelated histories
ZJWFoundation$ git pull origin master --allow-unrelated-histories
From https://gitee.com/***/ZJWFoundation
 * branch            master     -> FETCH_HEAD
Auto-merging .gitignore
CONFLICT (add/add): Merge conflict in .gitignore
Automatic merge failed; fix conflicts and then commit the result.
  • 找到冲突文件,解决冲突
  • 解决完冲突再次提交
    ZJWFoundation$ git add .
    ZJWFoundation$ git commit -m "resloved conflict"
  • 再次拉取远程
    ZJWFoundation$ git pull origin master
  • 推送到远程
    ZJWFoundation$ git push origin master
  • 打标签并推送到远程,此处的标签号要和.podspec文件中的版本号一致
    git tag -m "0.1.0标签" -a 0.1.0
    ZJWFoundation$ git push --tags
  • 查看标签
    ZJWFoundation$ git tag
  • 输出
    0.1.0
  • 再次校验本地与远程文件的有效性
    ZJWFoundation$ pod spec lint --allow-warnings
  • 输出
 -> ZJWFoundation (0.1.0)
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | [iOS] xcodebuild:  note: Planning build
    - NOTE  | [iOS] xcodebuild:  note: Constructing build description
    - NOTE  | [iOS] xcodebuild:  warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App')
Analyzed 1 podspec.
`ZJWFoundation.podspec passed validation.`
  • 向私有的spec Repo远程仓库中提交podspec
    ZJWFoundation$ pod repo push ZJWFoundationSpec ZJWFoundation.podspec --allow-warnings
  • 输出
Validating spec
 -> ZJWFoundation (0.1.0)
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | [iOS] xcodebuild:  note: Planning build
    - NOTE  | [iOS] xcodebuild:  note: Constructing build description
    - NOTE  | [iOS] xcodebuild:  warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App')
Updating the `ZJWFoundationSpec' repo
Adding the spec to the `ZJWFoundationSpec' repo
 - [Add] ZJWFoundation (0.1.0)
Pushing the `ZJWFoundationSpec' repo
  • 执行成功后如下图


    Snip20190729_6.png
  • 查看第三方框架仓库源
    ZJWFoundation$ pod repo
  • 输出
master
- Type: git (master)
- URL:  https://github.com/CocoaPods/Specs.git
- Path: /Users/***/.cocoapods/repos/master

ZJWFoundationSpec
- Type: git (master)
- URL:  https://gitee.com/***/ZJWFoundationSpec.git
- Path: /Users/***/.cocoapods/repos/ZJWFoundationSpec

ZJWUIKitSpec
- Type: git (master)
- URL:  https://gitee.com/***/ZJWUIKitSpec.git
- Path: /Users/***/.cocoapods/repos/ZJWUIKitSpec

使用

  • 创建一个新的工程编写podfile文件


    Snip20190814_12.png
  • 执行pod install 命令

遇到的坑一

  • SJLoginModule 是我在制作的一个登陆的私有库,这个私有库中需要用到一个基础的私有库SJTools,配置好spec文件后去校验本地文件是否合法的时候执行pod lib lint --allow-warnings后,出现了如下报错
-> SJLoginModule (0.1.3)
    - ERROR | [iOS] unknown: Encountered an unknown error (CocoaPods could not find compatible versions for pod "SJTools":
  In Podfile:
    SJLoginModule (from `/Users/***/Desktop/SJLoginModule`) was resolved to 0.1.3, which depends on
      SJTools (~> 0.1.9.4)

None of your spec sources contain a spec satisfying the dependency: `SJTools (~> 0.1.9.4)`.

You have either:
 * out-of-date source repos which you can update with `pod repo update` or with `pod install --repo-update`.
 * mistyped the name or version.
 * not added the source repo that hosts the Podspec to your Podfile.

Note: as of CocoaPods 1.0, `pod repo update` does not happen on `pod install` by default.) during validation.

[!] SJLoginModule did not pass validation, due to 1 error.
You can use the `--no-clean` option to inspect any issue.

这是在提示我找不到SJTools这个库,pod 在验证的时候默认是去公有库去找的,如果公有库找不到有没有添加私有库的源,就会提示找不到。所以这个时候我们再pod lib lint 的时候需要把私有库的spec仓库地址给加上
pod lib lint --sources=git@git.corp.***.cn:***iosgroup/***iospodspec.git,https://github.com/CocoaPods/Specs.git
如果你的库依赖多个私有库,那么就需要将所有私有库的地址都加上,每个地址之间用逗号分隔开,就像这样的形式
pod lib lint --sources=REPO_NAME1,REPO_NAME2,REPO_NAME3,https://github.com/CocoaPods/Specs.git --allow-warnings
其中https://github.com/CocoaPods/Specs.git是公有库repo的地址

遇到的坑二

制作的私有库中有一个第三方的SDK,这个sdk依赖系统的libresolv.9.tbd库,当时不知道,所以编译直接报错如下:

Snip20190823_7.png

然后百度得知需要添加libresolv.9.tbd库,然后便在demo中的target中添加了该库,可以编译还以报错,看到网上说的都是这个原因,以为自己添加错了。

Snip20190823_8.png

经过一番折腾之后才发现原来是要在SJLoginModule TARGET下添加,因为是在编译这个target的时候出现错误的
Snip20190823_9.png

注意: 每次pod install 后添加的依赖库都需要再重新添加

遇到的坑三

[!] The 'Pods-SJLoginModule_Example' target has transitive dependencies that include statically linked binaries: (LZNetwork and CleanJSON)

  • 解决方法:在podspec中加上这句 s.static_framework = true

遇到的坑四

error: linker command failed with exit code 1 (use -v to see invocation)
原因是在swift项目中依赖了一个oc 第三方库,导致链接的时候失败。
pod lib lint --sources=https://github.com/CocoaPods/Specs.git,git@git.***.cn:***iosgroup/***iospodspec.git --allow-warnings --skip-import-validation
在解决完上面的问题后,把本地的podspec文件推送到远程的时候同样会提示链接的错误

 SJLoginModule$ pod repo push plu-***iospodspec SJLoginModule.podspec --allow-warnings

Validating spec
 -> SJLoginModule (0.1.4)
    - WARN  | source: Git SSH URLs will NOT work for people behind firewalls configured to only allow HTTP, therefore HTTPS is preferred.
  ······
    - NOTE  | [iOS] xcodebuild:  clang: error: linker command failed with exit code 1 (use -v to see invocation)

这个时候我们同样需要加上 -skip-import-validation 命令
pod repo push ***-***iospodspec SJLoginModule.podspec --allow-warnings --skip-import-validation

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容