iOS--創(chuàng)建私有庫(kù)

以創(chuàng)建一個(gè)名為 MAMonitor 的庫(kù)為準(zhǔn)没佑。

一褐奴、創(chuàng)建兩個(gè) git 庫(kù)

  1. MAMonitor(私有庫(kù)項(xiàng)目名稱:https://github.com/xxx/MAMonitor

  2. MAMonitorSpec(私有庫(kù)索引庫(kù)名稱:https://github.com/mayuee/MAMonitorSpec
    這個(gè)庫(kù)用來保存私有庫(kù)的 podspec文件桩盲,一般起名xxxSpec。這個(gè)庫(kù)不存放代碼述雾,而是包名驳庭、版本號(hào)分門別類的存放所有的有關(guān)私有庫(kù)的配置。

復(fù)制倉(cāng)庫(kù) git 地址 執(zhí)行命令:
pod repo add MAMonitorSpec https://github.com/xxx/MAMonitorSpec
查看是否添加成功:
pod repo list

image.png

二柔纵、創(chuàng)建本地私有庫(kù)

cd xxx/MAMonitor         //自定義要?jiǎng)?chuàng)建的(本地存放)私有庫(kù)的文件夾
pod lib create MAMonitor      //MAMonitor :私有庫(kù)項(xiàng)目名稱

執(zhí)行如下缔杉,按需選擇

 Press return to continue.
1.平臺(tái)
What platform do you want to use?? [ iOS / macOS ]
 > iOS

2.語(yǔ)言
What language do you want to use?? [ Swift / ObjC ]
 > ObjC

3. 是否集成Demo為自己的模塊庫(kù)?
Would you like to include a demo application with your library? [ Yes / No ]
 > Yes

4. 是否集成測(cè)試框架?
Which testing frameworks will you use? [ Specta / Kiwi / None ]
 > None

5. 是否基于View的做測(cè)試?
Would you like to do view based testing? [ Yes / No ]
 > Yes

6. 類的前綴
What is your class prefix?
 > M

執(zhí)行完畢后創(chuàng)建了一個(gè)工程


image.png

將Classes文件夾下面的ReplaceMe.m文件刪除掉,替換成自己要上傳的私有庫(kù)的代碼搁料,然后更新一下這個(gè)工程的pod庫(kù)

  1. cd到Example文件下
  2. 執(zhí)行 pod install

修改podspec文件
這里是:MAMonitor項(xiàng)目下的MAMonitorSpec.podspec 文件

#
# Be sure to run `pod lib lint MAMonitor.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             = 'MAMonitor'
  s.version          = '0.1.0'
  s.summary          = 'A short description of MAMonitor.'

# 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/xxx/MAMonitor'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'xxx' => 'xxx@163.com' }
  s.source           = { :git => 'https://github.com/xxx/MAMonitor.git', :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.ios.deployment_target = '10.0'

#  “*” 表示匹配所有文件或详,“**” 表示匹配所有子目錄
  s.source_files = 'MAMonitor/Classes/**/*'
  
  # s.resource_bundles = {
  #   'MAMonitor' => ['MAMonitor/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
  # s.dependency 'AFNetworking', '~> 2.3'
end

需要修改的項(xiàng)

  1. 修改版本號(hào)
  2. 修改項(xiàng)目的簡(jiǎn)單概述和詳細(xì)描述
  3. 修改homepage
    s.homepage = 'https://github.com/xxx/MAMonitor'
    改為
    s.homepage = 'https://github.com/gitxxx/MAMonitor.git'
    注意:s.homepage需要設(shè)置剛創(chuàng)建的私有代碼倉(cāng)庫(kù)的地址, 不是私有索引庫(kù)的地址!9啤霸琴!
  4. 修改source地址
    s.source = { :git => 'https://github.com/xxx/MAMonitor.git', :tag => s.version.to_s }
    改為
    s.source = { :git => 'https://github.com/gitxxx/MAMonitor.git', :tag => s.version.to_s }
    注意:s.source 需要設(shè)置的是私有代碼倉(cāng)庫(kù)的源地址(選擇使用HTTPS地址)!U焉臁梧乘!
  5. 添加依賴庫(kù),這里添加 UIKit
    s.frameworks = 'UIKit'

三、將私有庫(kù)push到遠(yuǎn)程倉(cāng)庫(kù)

編譯通過后选调,提交代碼到私有庫(kù)的git倉(cāng)庫(kù)地址 并打tag

git status -- 查看當(dāng)前git存了什么文件
git add . -- 將所有文件緩存到待提交文件區(qū)域
git commit -m "上傳組件" -- 提交文件夹供,寫上備注
git remote add origin <私有庫(kù)git倉(cāng)庫(kù)地址(https://github.com/gitxxx/MAMonitor.git)>
git pull origin master // 把遠(yuǎn)程倉(cāng)庫(kù)的文件更新到本地
git push -u origin master -- 將代碼推送到遠(yuǎn)程私有庫(kù)git倉(cāng)庫(kù)的master分支
git tag <版本號(hào)(例如git tag 0.1.0)> --這里的版本號(hào)必須和podspec里面寫的版本號(hào)一致)
git push -- tags

四、本地校驗(yàn)

到本地私有庫(kù)目錄下:cd <本地私有庫(kù)目錄下(例如:cd MAMonitor)>
執(zhí)行驗(yàn)證:pod lib lint --allow-warnings

若組件依賴第三方庫(kù)仁堪,需要將第三方庫(kù)索引地址寫上
pod lib lint --sources="cocoapods庫(kù)地址哮洽,私有庫(kù)遠(yuǎn)程地址" --allow-warnings

若組件依賴的第三方庫(kù)又依賴了其他的庫(kù),需要命令如下
pod lib lint --sources="cocoapods庫(kù)地址弦聂,私有庫(kù)遠(yuǎn)程地址" --use-libraries --allow-warnings

@localhost MAMonitor % pod lib lint --allow-warnings

 -> MAMonitor (0.1.0)
    - WARN  | summary: The summary is not meaningful.
    - WARN  | url: There was a problem validating the URL https://github.com/mayuee/MAMonitor.git.
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | xcodebuild:  note: Building targets in parallel
    - NOTE  | xcodebuild:  note: Using codesigning identity override: -
    - NOTE  | [iOS] xcodebuild:  note: Planning build
    - NOTE  | [iOS] xcodebuild:  note: Constructing build description
MAMonitor passed validation.

到這里鸟辅,本地校驗(yàn)通過。

五莺葫、遠(yuǎn)程校驗(yàn)

先創(chuàng)建一個(gè) Release版本剔桨,基于前面創(chuàng)建的 tag 0.1.0。


image.png
image.png

最后點(diǎn)擊 · Publish·


image.png

遠(yuǎn)程校驗(yàn)和本地校驗(yàn)類似徙融,只要把lib字段改成spec

pod spec lint --sources="cocoapods庫(kù)地址,私有庫(kù)遠(yuǎn)程地址" --use-libraries --allow-warnings

例如:

pod spec lint --sources="https://github.com/gitxxx/MAMonitor.git" --use-libraries --allow-warnings

如下則表示驗(yàn)證通過了瑰谜。

 % pod spec lint --sources="https://github.com/xxxx/MAMonitor.git" --use-libraries --allow-warnings
 -> MAMonitor (0.1.0)
    - WARN  | summary: The summary is not meaningful.
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | xcodebuild:  note: Building targets in parallel
    - NOTE  | xcodebuild:  note: Using codesigning identity override: -
    - NOTE  | [iOS] xcodebuild:  note: Planning build
    - NOTE  | [iOS] xcodebuild:  note: Constructing build description
Analyzed 1 podspec.
MAMonitor.podspec passed validation.

其間有幾次報(bào)錯(cuò)

fatal: unable to access 'https://github.com/mayuee/MAMonitor.git/': LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443 

試了幾個(gè)網(wǎng)絡(luò)上的方案欺冀,最靠譜的方案是 多試幾次。萨脑。隐轩。。

六渤早、提交索引文件到遠(yuǎn)程索引庫(kù)

所有驗(yàn)證通過之后职车,要將spec文件推送到最開始創(chuàng)建的私有庫(kù)索引庫(kù)當(dāng)中

cd 到私有庫(kù)項(xiàng)目目錄(例如:cd MAMonitor)

pod repo push <本地索引庫(kù)名稱> <索引文件名> --verbose --allow-warnings

例如:pod repo push MAMonitorSpec MAMonitor.podspec --verbose --allow-warnings

注意:<本地索引庫(kù)名稱>是 /Users/XXX/.cocoapods/repos下的私有庫(kù)索引項(xiàng)目名稱
<索引文件名> 就是以 podspec 結(jié)尾的

推送成功后,在本地索引庫(kù)中如下圖


image.png

添加成功后鹊杖,索引庫(kù) MAMonitorSpec 中會(huì)自動(dòng)出現(xiàn) MAMonitor悴灵,MAMonitor 中只包含 MAMonitor.podspec 文件。

image.png

七骂蓖、驗(yàn)證私有庫(kù)

  1. pod repo update 先更新一下pod庫(kù)
    這一步報(bào)錯(cuò):
[!] CDN: trunk Repo update failed - 123 error(s):
CDN: trunk URL couldn't be downloaded: https://cdn.cocoapods.org/AlgoliaSearch.yml Response: Timeout was reached
  1. 解決報(bào)錯(cuò)權(quán)宜方法

//移除了文件夾 /Users/user/.cocoapods/repos/trunk
pod repo remove trunk
重新安裝 //或更新
pod install // or pod update

這樣改了之后积瞒, 工程的 Podfile 里需要添加一句話
source 'https://github.com/CocoaPods/Specs.git'

  1. 搜索私有庫(kù) pod search MAMonitor
-> MAMonitor (0.1.0)
   A short description of MAMonitor.
   pod 'MAMonitor', '~> 0.1.0'
   - Homepage: https://github.com/xxxx/MAMonitor.git
   - Source:   https://github.com/gitxxx/MAMonitor.git
   - Versions: 0.1.0 [MAMonitorSpec repo]
(END)

八、其他項(xiàng)目使用私有庫(kù)

新建 demo 工程登下,使用pod安裝 MAMonitor 庫(kù)

source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/gitxxx/MAMonitor.git'

target 'demo' do
  use_frameworks!

pod 'MAMonitor'

end

執(zhí)行 pod install(pod update)報(bào)錯(cuò)

[!] Unable to add a source with url `https://github.com/CocoaPods/Specs.git` named `cocoapods`.
You can try adding it manually in `/Users/mazhibao/.cocoapods/repos` or via `pod repo add`.

這是因?yàn)榍懊嬉瞥?repos目錄下的原本默認(rèn)的 trunk茫孔,但是master 沒有,后面需要手動(dòng)添加被芳,解決方案:
1缰贝、cd ~/.cocoapods/repos
2、git clone https://github.com/CocoaPods/Specs.git master

移除項(xiàng)目下的 pods(如果已經(jīng)生成的話) 文件夾畔濒,重新 pod install

九剩晴、更新

對(duì)已有庫(kù)進(jìn)行更新,需要?jiǎng)?chuàng)建新的 Release 版本侵状,更改 MAMonitor.podspec 文件版本號(hào)李破,重新執(zhí)行 pod repo push MAMonitorSpec MAMonitor.podspec --verbose --allow-warnings 即可宠哄。

————————————————

其他

  1. 驗(yàn)證 podspec :執(zhí)行:pod spec lint --allow-warnings
  2. 刪除原來的tag 0.0.1
git tag -d 0.0.1  //刪除本地 tag
git push origin :refs/tags/0.0.1    //刪除遠(yuǎn)程 tag
  1. 清理pod緩存:pod cache clean MAMonitor

  2. 如果私有庫(kù)組件庫(kù)過多,需要分層文件夾顯示嗤攻,則需要使用 subspec

  #spec.source_files     = "Classes", "Classes/**/*" 
  #spec.resources        = "Resources/*.png"

  #spec.source_files  = "Classes", "Classes/**/*.{h,m}"
  #spec.exclude_files = "Classes/Exclude"

  spec.subspec 'GOImagesCarouselView' do |s|
     s.source_files = "Classes/GOImagesCarouselView/**/*"
     s.resources    = "Resources/GOImagesCarouselView/*.png"
  end

毛嫉??妇菱?


  1. git push 承粤,在輸入 Username 和 Password 之后,Github 返回如下一個(gè)錯(cuò)誤
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/xxxx/MAMonitor.git/'

查資料闯团,大概意思就是辛臊,以前的密碼認(rèn)證從2021年8月13日開始就不能用了,必須使用個(gè)人訪問令牌(personal access token)房交,即就是把密碼替換成token彻舰。

背景是近年來,GitHub 客戶受益于 GitHub.com 的多項(xiàng)安全增強(qiáng)功能候味,例如雙重身份驗(yàn)證刃唤、登錄警報(bào)、驗(yàn)證設(shè)備白群、防止使用泄露密碼和WebAuthn 支持尚胞。這些功能使攻擊者更難獲取在多個(gè)網(wǎng)站上重復(fù)使用的密碼并使用它來嘗試訪問您的 GitHub 帳戶。盡管有這些改進(jìn)帜慢,但由于歷史原因笼裳,未啟用雙因素身份驗(yàn)證的客戶仍然能夠僅使用其 GitHub 用戶名和密碼繼續(xù)對(duì) Git 和 API 操作進(jìn)行身份驗(yàn)證。

從 2021 年 8 月 13 日開始粱玲,在對(duì) Git 操作進(jìn)行身份驗(yàn)證時(shí)將不再接受帳戶密碼躬柬,并將要求使用基于令牌的身份驗(yàn)證,例如個(gè)人訪問令牌(針對(duì)開發(fā)人員)或 OAuth 或 GitHub 應(yīng)用程序安裝令牌(針對(duì)集成商)適用于 GitHub.com 上所有經(jīng)過身份驗(yàn)證的 Git 操作抽减。您也可以在您喜歡的地方繼續(xù)使用 SSH 密鑰楔脯。

與基于密碼的身份驗(yàn)證相比,令牌提供了許多安全優(yōu)勢(shì):

  • 唯一 —— 令牌特定于 GitHub胯甩,可以按使用或按設(shè)備生成
  • 可撤銷 —— 令牌可以隨時(shí)單獨(dú)撤銷昧廷,無(wú)需更新未受影響的憑據(jù)
  • 有限 —— 令牌的范圍可以很窄,只允許用例所需的訪問權(quán)限
  • 隨機(jī) —— 令牌不受字典類型或暴力嘗試的影響偎箫,您需要記住或定期輸入的更簡(jiǎn)單的密碼可能是

問題解決

  1. 找到個(gè)人Settings頁(yè)面:
image.png
  1. 找到Developer settings木柬,選擇個(gè)人訪問令牌Personal access tokens,然后選中生成令牌Generate new token


    image.png
  1. 設(shè)置token的特性淹办,比如:標(biāo)題眉枕,有效期,token權(quán)限等等


    image.png
  1. 點(diǎn)擊最下面 生成令牌 Generate token
    image.png

把token復(fù)制下來
之后提交代碼的時(shí)候,在之前輸入密碼的地方輸入這個(gè)token就可以了速挑。

也可以 把token直接添加遠(yuǎn)程倉(cāng)庫(kù)鏈接中谤牡,這樣就可以避免同一個(gè)倉(cāng)庫(kù)每次提交代碼都要輸入token了:

git remote set-url origin https://<your_token>@github.com/<USERNAME>/<REPO>.git

  • <your_token>:換成你自己得到的token
  • <USERNAME>:是你自己github的用戶名
  • <REPO>:是你的倉(cāng)庫(kù)名稱

還有一點(diǎn),新創(chuàng)建的repo里面姥宝,默認(rèn)分支是 main 不是 master

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翅萤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子腊满,更是在濱河造成了極大的恐慌套么,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碳蛋,死亡現(xiàn)場(chǎng)離奇詭異胚泌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)肃弟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門玷室,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人笤受,你說我怎么就攤上這事穷缤。” “怎么了感论?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)紊册。 經(jīng)常有香客問我比肄,道長(zhǎng),這世上最難降的妖魔是什么囊陡? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任芳绩,我火速辦了婚禮,結(jié)果婚禮上撞反,老公的妹妹穿的比我還像新娘妥色。我一直安慰自己,他們只是感情好遏片,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布嘹害。 她就那樣靜靜地躺著,像睡著了一般吮便。 火紅的嫁衣襯著肌膚如雪笔呀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天髓需,我揣著相機(jī)與錄音许师,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛微渠,可吹牛的內(nèi)容都是我干的搭幻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼逞盆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼檀蹋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起纳击,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤续扔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后焕数,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纱昧,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年堡赔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了识脆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡善已,死狀恐怖灼捂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情换团,我是刑警寧澤悉稠,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站艘包,受9級(jí)特大地震影響的猛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜想虎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一卦尊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舌厨,春花似錦岂却、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至揉燃,卻和暖如春震庭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背你雌。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工器联, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留二汛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓拨拓,卻偏偏與公主長(zhǎng)得像肴颊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子渣磷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 我用的是碼云 一婿着、首先我們先在碼云上建一個(gè)遠(yuǎn)程私有索引倉(cāng)庫(kù) 創(chuàng)建后的頁(yè)面: 二、創(chuàng)建一個(gè)項(xiàng)目 創(chuàng)建后頁(yè)面: 三醋界、打...
    69a8e4612fc7閱讀 867評(píng)論 1 1
  • 參考鏈接:http://blog.csdn.net/qxuewei/article/details/5441211...
    海浪萌物閱讀 2,306評(píng)論 1 8
  • 一竟宋、創(chuàng)建私有的Spec Repo(git倉(cāng)庫(kù)1) 二、創(chuàng)建Pod項(xiàng)目工程形纺,并且又可以訪問的項(xiàng)目版本控制地址(git...
    一畝三分甜閱讀 2,429評(píng)論 2 2
  • 私有庫(kù)的是隨著公司在多個(gè)項(xiàng)目開展的時(shí)候丘侠,把一些常用的工具類制作成pod,方便在多個(gè)項(xiàng)目中使用逐样,避免了來回拖入代碼造...
    zl_xust閱讀 527評(píng)論 0 1
  • 1蜗字、在Git倉(cāng)庫(kù)分別創(chuàng)建2個(gè)私有庫(kù),一個(gè)索引庫(kù)脂新,一個(gè)是pod代碼庫(kù) 2挪捕、將遠(yuǎn)程索引庫(kù)添加到本地 a. 首先進(jìn)入本地...
    我是一根聰閱讀 533評(píng)論 0 1