1. 程式人生 > >製作Cocoapods管理自己的類庫

製作Cocoapods管理自己的類庫

前言:

     在我們使用Cocoapods來管理我們的庫時,我們需要建立一個podspec檔案,並把這個檔案提交到Cocoapods維護的specs倉庫和自己維護的specs倉庫中,Cocoapods管理的庫倉庫地址:https://github.com/CocoaPods/Specs

第一章、註冊Cocoapods使用者

1、檢視是否註冊了Cocoapods

➜  ~ pod trunk me

[!] You need to register a session first.

Usage:

    $ pod trunk me COMMAND

      Includes information about your registration, followed by all your  sessions.

      These are your current session, other valid sessions, unverified sessions,

      and expired sessions.

Commands:

    + clean-sessions   Remove sessions

Options:

    --silent           Show nothing

    --verbose          Show more debugging information

    --no-ansi          Show output without ANSI codes

    --help             Show help banner of specified command

說明還沒有註冊

➜  ~ pod trunk me                                 

  - Name:    你註冊的名稱

  - Email:     你註冊的郵箱  

  - Since:    October 30th, 22:36

  - Pods:     None

  - Sessions:

    - October 30th, 22:36 - March 7th, 2019 22:51. 

說明已經註冊

2、註冊

➜  ~ pod trunk register emailAddress 'name'

[!] Please verify the session by clicking the link in the verification email that has been sent to emailAddress

這樣你會收到一封郵件,點選就可以激活了

第二章、對現有庫進行Cocoapods管理

1、建立podspec檔案

在已有的專案中建立podspec檔案

pod spec create podspec名稱

根據自己的類庫編輯podspec檔案

2、驗證podspec

pod spec lint podspec名稱.podspec  --allow-warnings

 -> podspec名稱 (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')

    - WARN  | xcodebuild:  xxxxxxx.swift:25:34: warning: 'global(priority:)' was deprecated in iOS 8.0

    - WARN  | xcodebuild:  xxxxxxx.swift:25:52: warning: 'default' was deprecated in iOS 8.0: Use qos attributes instead

    - WARN  | xcodebuild:  xxxxxxx.swift:33:34: warning: 'global(priority:)' was deprecated in iOS 8.0

    - WARN  | xcodebuild:  xxxxxxx.swift:33:52: warning: 'low' was deprecated in iOS 8.0: Use qos attributes instead

Analyzed 1 podspec.

podspec名稱.podspec passed validation.

3、提交你的podspec到Cocoapods的Trunk

pod trunk push podspec名稱.podspec

解決後重新執行提交步驟即可

第三章、對建立自己的類庫並提交到Cocoapods維護的spec倉庫
1、建立自己的類庫

pod lib create MyLibrary

2、驗證庫

pod lib lint MyLibrary

3、編輯podspec檔案,驗證並提交到CocoaPods trunk

以上Podfile中的使用

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

platform :ios, '8.0'

inhibit_all_warnings!

use_frameworks!

第四章、對自己的類庫提交到自己維護spec倉庫

也可以自己搭建一個git的伺服器,並建立一個spec倉庫

2、使用pod repo可以檢視,本地的庫源

➜  ~ pod repo

artsy

- Type: git (master)

- URL:  https://github.com/Artsy/Specs.git

- Path: /Users/wzkj/.cocoapods/repos/artsy

DZSpace   #自己維護的spec倉庫

- Type: git (master)

- URL:  https://github.com/dbk1985/DZSpace.git

- Path: /Users/wzkj/.cocoapods/repos/DZSpace

master     #Cocoapods維護的spec倉庫

- Type: git (master)

- URL:  https://github.com/CocoaPods/Specs.git

- Path: /Users/wzkj/.cocoapods/repos/master

3、對現有的庫只需建立一個podspec檔案,並編輯、驗證spec檔案

pod spec create podspec名稱

pod spec lint podspec名稱.podspec  --allow-warnings

4、沒有庫,使用pod命令建立類庫,並編輯、驗證spec檔案

4.1 建立並驗證類庫

pod lib create MyLibrary

pod lib lint MyLibrary

4.2 編輯並驗證podspec檔案

pod spec lint MyLibrary.podspec  --allow-warnings

5、建立一個spec倉庫,可以在github上建立一個spec倉庫,也可以在自己搭建的git伺服器上建立一個spec倉庫 或者使用Cocoapods的spec倉庫:https://github.com/CocoaPods/Specs.git

使用Cocoapods的spec倉庫只需要使用pod setup就可以了

檢視spec倉庫 pod repo

使用自己建立的倉庫,需要使用

pod repo add spec名稱 自己建立的spec倉庫地址

檢視spec倉庫 使用命令 pod repo

就可以看到有一個自己的spec倉庫,叫(spec名稱)

5、提交到自己spec倉庫

pod repo push spec名稱 MyLibrary.podspec --allow-warnings

spec名稱為使用pod spec add spec名稱 spec伺服器地址

6、使用pod repo push xxx 提交到spec倉庫時報錯:

-> 

    - ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code.

    - 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')

    - ERROR | [iOS] xcodebuild:  xxxxx.swift:9:12: error: overriding declaration requires an 'override' keyword

    - NOTE  | xcodebuild:  ObjectiveC.NSObject:6:12: note: overridden declaration is here

    - ERROR | [iOS] xcodebuild:  xxxxxx.swift:21:12: error: overriding declaration requires an 'override' keyword

    - WARN  | [iOS] xcodebuild:  xxxxxx.swift:25:34: warning: 'global(priority:)' was deprecated in iOS 8.0

    - WARN  | [iOS] xcodebuild:  xxxxxx.swift:25:52: warning: 'default' was deprecated in iOS 8.0: Use qos attributes instead

    - WARN  | [iOS] xcodebuild:  xxxxxx.swift:33:34: warning: 'global(priority:)' was deprecated in iOS 8.0

    - WARN  | [iOS] xcodebuild:  xxxxxx.swift:33:52: warning: 'low' was deprecated in iOS 8.0: Use qos attributes instead

[!] The `MyLibrary.podspec` specification does not validate.

這個時候我們使用 pod repo push DZSpace MyLibrary.podspec --allow-warnings --verbose 來檢視具體問題出來哪裡,

修改還是報錯,這個時候我們修改清除pod的快取,因為使用pod repo push的使用,pod會從快取中複製工程,然後在編譯驗證

細節如下:

-> Installing  xxxxxxx(podspec名稱) (1.1)

  > Copying xxxxxxx(podspec名稱) from `/Users/aaaaa/Library/Caches/CocoaPods/Pods/External/xxxxxxx(podspec名稱)/7e5edc35e9cd0c2294b8629a9b1ed283-a04a3` to

  `../../../../private/var/folders/35/7_wtqrpd54d_npk6l9j9ty8r0000gn/T/CocoaPods-Lint-20181101-30234-17i1jtl-xxxxxxx(podspec名稱)/Pods/xxxxxxx(podspec名稱)`

  - Running pre install hooks

所以修改後總是報錯,清除快取或直接刪除重新執行就OK,

pod 檢視快取命令

使用 pod cache list 檢視看快取

使用 pod cache clean --all 清除快取 

7、自己建立的spec庫使用時,podfile中需要新增庫源:spec倉庫地址

source 'https://github.com/CocoaPods/Specs.git'       // Cocoapods 倉庫源

source "https://github.com/xxxx/xxxxxxx.git"     // 自己建立的spec倉庫源

platform :ios, '8.0'

inhibit_all_warnings!

use_frameworks!