私有库搭建(随手记,给同组同事参考)

注:此文章是为了给我们同组同事参考使用,因为我们项目目前已经配置好了faselane脚本,可以自动更新上传私有库,其余人想建私有库的话参考第二大步或私我探讨,其余步骤只做参考。

timg.jpeg

一、准备工作

1、保证本地CocoapodsSpec目录名称正确,查看命令:pod repo

(等下私有库脚本、主工程脚本自动更新本地私有库CocoapodsSpec时会用)

屏幕快照 2020-05-18 下午4.04.48.png
如果私有库文件名称不对的话需要调整一下:

① 删除repos目录下私有库

屏幕快照 2020-05-18 下午4.23.53.png

② 添加私有库的CocoapodsSpec,执行命令:

pod repo add CocoapodsSpec https://。。。CocoapodsSpec.git # 我们项目CocoapodsSpec地址

2、安装一下fastlane:sudo gem install fastlane 或 sudo gem install fastlane -NV

二、搭建私有库

1、开始搭建私有库

① 进到常用路径,比如:cd desktop
② 创建私有库:pod lib create 私有库名称

2578906-fa0c8dc853b573fb.png

2、回答几个问题

2578906-b91e27c1961d2962.png

3、安装cocoapods

① 上一步做完就会自动创建一个工程并打开,先cd 到新建项目的example文件下
② 安装cocoapods:pod install --no-repo-update

2578906-6a844e2445ebbf66.png

4、添加文件和资源文件到私有库下的assets和classes目录下

2578906-b49949eefaafee0f.png

5、开始编写私有库的podspec文件:

网上参考写法:

2578906-8a917883d234a3c9.png
2578906-88345a521b9cffb9.png
我们项目里注意一下:

① 注意:s.summary改成项目名称,不然可能会验证警告,参考:s.summary = 'QQingThemeColorLib'

② 设置默认使用source还是framewrok:

 s.default_subspec = 'source' 

③ souce和framework请按下面目录结构(framework这个时候先注释掉,后续跑fastlane时才真正用上,按照这种目录结构写,便于后续项目中运行脚本,可以直接切源码修改,并使用脚本更新上传私有库):

参考写法:

 s.default_subspec = 'source' 

  s.subspec 'source' do |source|
      source.source_files = 'QQingThemeColorLib/Classes/**/*.{h,m}'
  end
    
#  s.subspec 'framework' do |framework|
#      framework.vendored_frameworks = 'QQingThemeColorLib/framework/QQingThemeColorLib.framework'
#  end

④ 配置完成了之后,还是在example文件下更新pods:pod update --no-repo-update

2578906-50090fb5d57b7d9d.png

6、如果要依赖其他私有库(没有依赖库跳过此步骤),podspec可以参考QQingThemeColorLib库:

  s.default_subspec = 'source'
  
  s.static_framework = true
  
  s.dependency 'QQingJRSwizzleLib'

  s.frameworks   = "UIKit"
  s.subspec 'source' do |source|
      source.source_files = 'QQingThemeColorLib/Classes/**/*.{h,m}'
  end
    
  s.subspec 'framework' do |framework|
      framework.vendored_frameworks = 'QQingThemeColorLib/framework/QQingThemeColorLib.framework'

① 增加相关依赖

  # 依赖QQingJRSwizzleLib
  s.dependency 'QQingJRSwizzleLib'

② 添加:s.static_framework = true(不加的话不支持动、静态库共存,后面更新私有库可能会报错)

屏幕快照 2020-04-26 下午3.56.17.png

解读:意思QQingThemeColorLib只有souce没有framework,不能和QQingReachabilityLib的framework共存

③ 放开framework的注释,不放开等下验证本地私有库时可能验证不过

  s.subspec 'source' do |source|
      source.source_files = 'QQingThemeColorLib/Classes/**/*.{h,m}'
  end
    
  s.subspec 'framework' do |framework|
      framework.vendored_frameworks = 'QQingThemeColorLib/framework/QQingThemeColorLib.framework'
  end

④ 在Podfile里面增加source:

source 'https://...CocoapodsSpec.git'  # 我们项目CocoapodsSpec地址
source 'https://github.com/CocoaPods/Specs.git'

use_frameworks!

platform :ios, '8.0'

target 'QQingThemeColorLib_Example' do
  pod 'QQingThemeColorLib', :path => '../'

  target 'QQingThemeColorLib_Tests' do
    inherit! :search_paths

    
  end
end

⑤ 执行命令:pod repo update CocoapodsSpec
(更新本地CocoapodsSpec文件)

⑥ 然后安装pods依赖库,执行:pod install

7、跑一下私有库看能否运行,不能运行就解决相应报错(可能podspec文件写法有问题、依赖的库没有导入等,解决完报错在运行:pod update --no-repo-update)没有报错就继续下一步

8、运行通过之后,回到私有库根目录!回到私有库根目录!回到私有库根目录!开始本地验证私有库

(如果做过上面第6步的,可以使用下面5或6方法验证,主要还是上面说的source和framework不共存的问题,后面使用fastlane时会自动打包framework,就不会有问题了)

//进入我们的pod库根目录中
wangpengdeiMac:~ wangpeng$ cd /Users/wangpeng/Desktop/MyPodsTest 
//执行本地验证的命令
wangpengdeiMac:MyPodsTest wangpeng$ pod lib lint
这里说明一下,本地验证的命令有几个推荐的:
1、本地验证
pod lib lint
2、本地验证+打印详细信息
pod lib lint --verbose
3、本地验证+允许使用静态库
pod lib lint --use-libraries
4、本地验证+允许警告
pod lib lint --allow-warnings
5、本地验证+快速验证
pod lib lint --quick
6、本地验证+三方库验证
pod lib lint --sources=[https://gitlab.changingedu.com/ios/CocoapodsSpec.git,https://github.com/CocoaPods/Specs.git](https://gitlab.changingedu.com/ios/CocoapodsSpec.git,https://github.com/CocoaPods/Specs.git) --use-libraries --allow-warnings --verbose

验证通过:

屏幕快照 2020-04-26 上午10.13.56.png

9、发布项目:

1、添加远程地址,即在github上创建的私有库的地址QQingThemeColorLib
git remote add origin http://gitlab。。。/QQingThemeColorLib.git
2、添加文件 
git add .
3、提交本地,并添加描述
git commit -m "第一次提交"
4、拉取远程的代码
git pull origin master
如果打印:fatal: couldn't find remote ref master(不需要管,因为我们是第一次推送到远端,远端是没有master的)
如果打印:fatal: refusing to merge unrelated histories# 原因是远程仓库origin上的分支master和本地分支master被Git认为是不同的仓库,所以不能直接合并,使用下面命令:
git pull origin master --allow-unrelated-histories
5、推送本地代码到远程
git push origin master
6、打tag
git tag 0.1.0
7、推送tag到远程
git push origin 0.1.0
8、设置master分支(不设置后面可能会报错)
git branch --set-upstream-to=origin/master master

10、这个时候看看远端仓库,应该已经成功了(没成功的话请自行调试以上步骤,看哪里有问题)

(网上介绍到这一步之后,会让上传podspec文件,我们项目不需要手动做,通过下面的fastlane,里面有我们自己写好的脚本,会自动上传)

三、通过fastlane打tag、上传代码、打包静态库、上传podspec

1、将现有私有库项目中的fastlane文件拷贝过来,放在新建的私有库根路径下

(可以使用QQingThemeColorLib,有些私有库的fastlane中没有设置打包package和push spec文件的source,可能会报错,这份经过测试ok)

2578906-fd529abd900ed004.png

2、修改fastlane相应文件:(注意下面第3步)

1、fastlane_push.h里面的库名改成新建的私有库名称(改动一处)
2、fastlane文件下actions里面的三个文件,里面作者改成自己(每个文件改动一处,也可不改)
3、Fastfile里面的库名改成新建的私有库名称(改动三处)
  注意:如果最终制作的私有库不需要打包framework的,请去掉这个文件里打包静态库的脚本代码:
  # pod_package 从远端分支-打包静态库(所以需要先提交源代码)
  pod_package(tName:targetName, v:tagName)
4、README.md里面的库名改成新建的私有库名称(改动一处)
2578906-87b038d855a4cfe2.png

3、一切改完之后,打开podspec文件下面framework的注释(不需要打包静态库的,这里就不需要了)

  s.default_subspec = 'framework'

  s.static_framework = true

  s.subspec 'source' do |source|
      source.source_files = 'QQingThemeColorLib/Classes/**/*.{h,m}'
  end
    
  s.subspec 'framework' do |framework|
      framework.vendored_frameworks = 'QQingThemeColorLib/framework/QQingThemeColorLib.framework'
  end

4、通过脚本打tag、上传源码、静态库、以及podspec文件等

cd到私有库根目录下,开始执行fastlane命令::fastlane 私有库名称
(例如:fastlane QQingThemeColorLib)

截屏2020-04-26 下午10.08.12.png

这个时候会看到终端会执行Fastfile里面的各种命令,最终终端执行成功,自动上传源码、上传静态库、打tag、上传podspec文件,搞定。(中间产生的report.xml只是记录性的文件,可以忽略或直接上传)

4.1、我遇到有个报错:(意思说没有master分支,那就设置一下master,所以上面第二步第9项中,发布项目时,我提前加了这一句):

git branch --set-upstream-to=origin/master master

Exit status of command 'git pull && git fetch --tags' was 1 instead of 0.
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> master

4.2、 还遇到报错,podspec文件推不上去,一堆报错,看不懂,直到看到了

[!] Please close any current Xcode sessions and use App.xcworkspace for this project from now on.
我就关闭了Xcode的私有库项目,然后重新打开,重新编译,再次fastlane命令,神奇的推送成功了!

[11:20:42]: Exit status of command 'pod repo push CocoapodsSpec 'QQingUIImageBlurLib.podspec' --allow-warnings --verbose' was 1 instead of 0.

Validating spec
  QQingUIImageBlurLib (0.1.1) - Analyzing on iOS 8.0 platform.
  Preparing

Analyzing dependencies

Inspecting targets to integrate
  Using `ARCHS` setting to build architectures of target `Pods-App`: (``)

Fetching external sources
-> Fetching podspec for `QQingUIImageBlurLib` from `/Volumes/DiskTwo/工作空间 - 勿删/Demo/私有库/QQingUIImageBlurLib/QQingUIImageBlurLib.podspec`

Resolving dependencies of 

Comparing resolved specification to the sandbox manifest
  A QQingUIImageBlurLib
.
.
.

[!] Please close any current Xcode sessions and use `App.xcworkspace` for this project from now on.

Integrating target `Pods-App` (`../../../../../../var/folders/h1/b8hf90hn5fxfb48wg6p45fk80000gp/T/CocoaPods-Lint-20200426-6111-164htof-QQingUIImageBlurLib/App.xcodeproj` project)
  Adding Build Phase '[CP] Embed Pods Frameworks' to project.
  Adding Build Phase '[CP] Check Pods Manifest.lock' to project.

-> Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
  Building with `xcodebuild`.
    $ /usr/bin/xcodebuild clean build -workspace /var/folders/h1/b8hf90hn5fxfb48wg6p45fk80000gp/T/CocoaPods-Lint-20200426-6111-164htof-QQingUIImageBlurLib/App.xcworkspace -scheme App -configuration Release CODE_SIGN_IDENTITY=- -sdk iphonesimulator -destination id=6903BB69-F933-4698-8836-99A3B7CC79FE
    2020-04-26 11:20:34.012 xcodebuild[6122:13757919] [MT] PluginLoading: Required plug-in compatibility UUID BAB79788-ACEE-4291-826B-EC4667A6BEC5 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/SimplePlugin.xcplugin' not present in DVTPlugInCompatibilityUUIDs
    2020-04-26 11:20:34.012 xcodebuild[6122:13757919] [MT] PluginLoading: Required plug-in compatibility UUID BAB79788-ACEE-4291-826B-EC4667A6BEC5 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/SimplePlugin-9.0.xcplugin' not present in DVTPlugInCompatibilityUUIDs
    2020-04-26 11:20:34.013 xcodebuild[6122:13757919] [MT] PluginLoading: Required plug-in compatibility UUID BAB79788-ACEE-4291-826B-EC4667A6BEC5 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/SimplePlugin-8.2.xcplugin' not present in DVTPlugInCompatibilityUUIDs
    Build settings from command line:
        CODE_SIGN_IDENTITY = -
        SDKROOT = iphonesimulator13.2
    
    note: Using new build system
.
.
.

四、私有库的维护

1、以后在私有库里面继续改文件的话,分四步:

① 更新本地私有库:pod repo update CocoapodsSpec

② cd到Example文件下,更新当前私有库:pod update --no-repo-update

③ 开始修改私有库文件

④ 等改完之后执行fastlane命令:fatstlane 私有库名称
(会再次自动上传源码、上传静态库、打tag、上传podspec文件)

五、主工程内使用、更新上传私有库

1、主工程内使用私有库

① pofile里面增加依赖:

    pod 'QQingThemeColorLib'

② 安装,执行命令:pod install

2、主工程内更改私有库代码,并自动更新私有库,分三步:

① 将私有库改为源码格式,例如:pod 'QQingThemeColorLib/source',然后运行:fastlane pull(拉取源码)

② 调整要更改的私有库代码

③ 通过脚本更新上传私有库代码:

  • 工程内私有库使用framework的话运行:fastlane push
  • 工程内私有库使用源码的话运行:fastlane push_source

六、注意问题

① 私有库名称必须按QQing...Lib的规则命名(因为脚本中是按此命名规则匹配私有库的)

② 私有库podspec里面默认使用source还是framework,在设计的最初要考虑好,未来所有依赖它的地方都使用这种默认格的,不统一的话就可能导致项目里面source和frmework共存。

  # 就是这一句
  s.default_subspec = 'source'

③ 私有库的文件夹格式必须按照source和framework的格式(便于脚本切换源码和framework)如下:

  s.subspec 'source' do |source|
      source.source_files = 'QQingThemeColorLib/Classes/**/*.{h,m}'
  end
    
  s.subspec 'framework' do |framework|
      framework.vendored_frameworks = 'QQingThemeColorLib/framework/QQingThemeColorLib.framework'
  end

④ 对于包含.a文件的私有库,可以参考QQingRobotPenLib库

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

推荐阅读更多精彩内容