iOS---如何在CocoaPods上發(fā)布自己的項目

目前, 在iOS開發(fā)中, CocoaPods應該算是使用最為頻繁的包管理工具了.

使用CocoaPods管理iOS項目中的第三方類庫

CocoaPods的安裝如下:

sudo gem install cocoapods # 會被墻掉。
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/
gem sources -l
sudo gem install cocoapods

在項目所在目錄下執(zhí)行*** pod init *** , 生成Podfile文件, 我們需要對其進行相應的配置, Podfile文件如下:

# Uncomment this line to define a global platform for your project
platform :ios, '8.0'

# Uncomment this line if you're using Swift
use_frameworks!

pod 'CSSwiftExtension'

pod 'Reachability'
pod 'Alamofire'
pod 'SwiftyJSON'

target 'myProject' do

end

target 'myProjectTests' do

end

然后, 執(zhí)行*** pod install *** 或 *** pod update *** ,
即可安裝這些第三方類庫. 然后在項目中導入即可使用:

import Alamofire

// xxx

Alamofire.request(.GET, url, parameters: nil).validate()
    .responseJSON { response in
        // xxx
    }

怎么樣, 非常方便吧?
看到這里, 是不是也想將自己的一些代碼在CocoaPods上發(fā)布呢!
接著往下看!

Swift中常見的extension方法

這里, 將以CSSwiftExtension為例, 簡單介紹下如何在CocoaPods上發(fā)布自己的代碼.
CSSwiftExtension是一個Swift的extension集合, 包含了一些常見的方法:
如Foundation的一些基本extension方法:

extension String {
    public func cs_trim() -> String
    public func cs_intValue() -> Int?
    public func cs_stringValue() -> String?
}

extension NSData {
    public func cs_jsonObjectFromNSData() -> AnyObject
}

extension NSFileManager {
    public func cs_homeDirectory() -> String
    public func cs_tempDirectory() -> String
    public func cs_documentsDirectory() -> String
    public func cs_libraryDirectory() -> String
    public func cs_cacheDirectory() -> String
}

以及, UIImage的縮放cs_imageScaledToSize, 以及不會引起離屏渲染的圖片圓角cs_imageWithCornerRadius.

extension UIImage {
    public func cs_saveImageToFile(filePath: String, compressionFactor: CGFloat) -> Bool
    public func cs_imageScaledToSize(size: CGSize, withOriginalRatio: Bool) -> UIImage
    public func cs_imageRotatedByDegrees(degrees: CGFloat) -> UIImage
    public func cs_imageWithCornerRadius(cornerRadius: CGFloat) -> UIImage
}

UIDevice的一些常見方法, 以及UIApplication的cs_currentViewController可用于獲取當前的ViewController,
cs_isRunningAppVersionReleased方法接收當前App在AppStore中的id, 即可查詢當前版本是否已經(jīng)release.

extension UIDevice {
    public func cs_screenSize() -> CGSize
    public func cs_isIPhone4s() -> Bool
    public func cs_isIPhone5() -> Bool
    public func cs_isIPhone6() -> Bool
    public func cs_isIPhone6Plus() -> Bool
    public func cs_isIPhone6PlusBigMode() -> Bool
    public func cs_isIPadAir2() -> Bool
    public func cs_isIPadPro() -> Bool
}

extension UIDevice {
    public func cs_currentLanguage() -> String
    public func cs_isCurrentLanguage_en() -> Bool
    public func cs_isCurrentLanguage_zh_Hans() -> Bool
    public func cs_isCurrentLanguage_zh_Hant() -> Bool
    public func cs_isCurrentLanguage_ja() -> Bool
    public func cs_isCurrentLanguage_ko() -> Bool
}

extension UIApplication {
    public func cs_appDelegate() -> UIApplicationDelegate
    public func cs_currentViewController() -> UIViewController
}

extension UIApplication {
    public func cs_appVersion() -> String
    public func cs_appVersionInAppStore(appId: String) -> String
    public func cs_isRunningAppVersionReleased(appId: String) -> Bool
}

extension UIApplication {
    public func cs_snapShot(inView: UIView) -> UIImage
}

另外, 其中的CSNetworkManager可用于同步獲取網(wǎng)絡請求的JSON數(shù)據(jù).

public class CSNetworkManager : NSObject {
    public class func sharedInstance() -> CSSwiftExtension.CSNetworkManager
    public class func cs_GET(urlString: String, completionHandler: (jsonObject: AnyObject) -> Void)
    public class func cs_getJSONObjectSynchronously(urlString: String, completionHandler: (jsonObject: AnyObject) -> Void) -> AnyObject
}

下面, 介紹CSSwiftExtension的發(fā)布過程.

創(chuàng)建并正確配置項目的podspec文件

pod spec create CSSwiftExtension

生成的CSSwiftExtension.podspec文件如下:

Pod::Spec.new do |s|
  s.name         = "CSSwiftExtension"
  s.version      = "0.0.1"
  s.summary      = "Some useful extension for Swift."
  s.description  = <<-DESC
                    Some useful extension for Swift.
                    Including Foundation, UIKit and CSNetworkManager.
                   DESC
  s.homepage     = "https://github.com/icetime17/CSSwiftExtension"
  s.license      = { :type => "MIT", :file => "LICENSE.md" }
  s.author             = { "Chris Hu" => "xxxxx@126.com" }
  s.platform     = :ios, "8.0"
  s.source       = { :git => "https://github.com/icetime17/CSSwiftExtension.git", :tag => "#{s.version}" }
  s.source_files  = "CSSwiftExtension/**/*"
  s.requires_arc = true
end

其中, s.source_files指定源文件的路徑.

然后, 執(zhí)行*** pod lib lint *** 可以驗證podspec的正確性.
驗證通過后, 可以將podspec文件也添加到git管理中.

git add CSSwiftExtension.podspec
git commit -m'add podspec file'
git push

git tag -a 0.0.1 -m "Tag 0.0.1"
git push --tags

使用pod trunk命令上傳項目至Cocoapods

pod trunk命令是CocoaPods提供的用來管理個人提交的命令:
命令幫助可以參考getting-setup-with-trunk.
需要先注冊:

pod trunk register xxxxxx@gmail.com 'Chris Hu' --description='Chris Hu'

然后在郵箱中點擊確認之后, 就可以執(zhí)行下邊的命令, 將代碼push到CocoaPods官方了.

pod trunk push CSSwiftExtension.podspec

打印的log如下:

?  CSSwiftExtension [develop] pod trunk push CSSwiftExtension.podspec
Updating spec repo `master`
Validating podspec
 -> CSSwiftExtension (0.0.1)

Updating spec repo `master`
  - Data URL: https://raw.githubusercontent.com/CocoaPods/Specs/32d8166bff5e30508e565d1c76db980ab5de987f/Specs/CSSwiftExtension/0.1/CSSwiftExtension.podspec.json
  - Log messages:
    - June 25th, 13:51: Push for `CSSwiftExtension 0.0.1' initiated.
    - June 25th, 13:51: Push for `CSSwiftExtension 0.0.1' has been pushed (0.282206408 s).

成功之后即可通過*** pod search CSSwiftExtension *** 來搜索:

-> CSSwiftExtension (0.0.1)
   Some useful extension for Swift.
   pod 'CSSwiftExtension', '~> 0.0.1'
   - Homepage: https://github.com/icetime17/CSSwiftExtension
   - Source:   https://github.com/icetime17/CSSwiftExtension.git
   - Versions: 0.0.1 [master repo]

另外, 可使用*** pod trunk delete CSSwiftExtension 0.0.1 *** 來刪除該提交.
而*** pod trunk me *** 可用來查看相應的信息.
我們在CocoaPods的目錄中, 可以看到相關信息了.

?  CSSwiftExtension [master] pwd
/Users/chris/.cocoapods/repos/master/Specs/CSSwiftExtension
?  CSSwiftExtension [master] ls
0.0.1 0.0.2 0.0.3
?  CSSwiftExtension [master]

CocoaPods官方的類庫都是在master目錄下.
如果, 我們需要添加私人的pod庫, 在Podfile中加入

source 'http://xxxxx.com/iosmodules/specs.git' ***

然后, 執(zhí)行*** pod install *** 或者 *** pod udpate *** 的時候, 會將該source中所有pod庫的spec信息都拉取到本地, 在/Users/chris/.cocoapods/repos/目錄下單獨建立一個新的目錄用于存儲這些spec, 然后我們使用*** pod search *** 即可查詢到這些類庫.

Demo

做到了這些, 就能在CocoaPods上使用自己的代碼庫了.
Demo請參考
CSSwiftExtension.
如果覺得在Swift代碼中用得上, 請在github上給個star吧.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容