Chắc bạn cũng quen thuộc với một số các thư viện mã nguồn mở trên CocoaPods như Alamofire hoặc MBProgessHUD. Nhưng đôi khi bạn không thể tìm thấy một thư viện có những chức năng mà bạn đang cần, hoặc bạn muốn chia nhỏ một project lớn ra để sau này có thể tái sử dụng lại các chức năng thì việc tạo một CocoaPods là một sự lựa chọn tốt.
Cũng may việc tạo CocoaPods khá đơn giản.
Nếu bạn chưa sử dụng CocoaPods thì bạn cần tìm hiểu kỹ trước khi đọc bài này.
Nhập môn
Bạn có thể download project sau đó mở file IceCreamShop.xcworkspace/IceCreamShop /Views/Storybpards & Nibs/ Main.storyboard.
Khái quát qua về view này:
PickFlavorViewController: Sử lý tương tác người dùng, ví dụ như khi người dùng chọn một loại kem yêu thích.
PickFlavorDataSource: Là dữ liệu để đưa lên hiển thị colletion view.
IceCreamView: Custom view hiển thị một loại kem với kiểu là Flavor.
ScoopCell: Custom collectionview cell nó chưa một ScoopView nó cũng sử dụng một instance của class Flavor để hiển thị.
.png)
Thiết lập Pod
Tạo mới một dự án Xcode iOS/Framework & Library/Cocoa Touch Framework/Next

Đặt tên là RWPickFlavor chọn ngôn ngữ là Swift và chọn Next.
Bình thường khi bạn sử dụng CocoaPods, bạn sử dụng thư viện CocoaPods giống như sau:
pod 'PodName', '~> 1.0'Nhưng khi bạn tự viết CocoaPod thì bạn thay đường dẫn đến thư viện của bạn như sau:
pod 'MyPodName', :path => '~/Path/To/Folder/Containing/My/Pod'Có 2 lợi ích:
Nó sử dụng file cục bộ trên thiết bị của bạn hay vì việc phải tìm kiếm trên kho lưu trữ ở Internet.
Khi bạn sử dụng một pod, bạn không nên thay đổi bất kỳ các lớp vì nó sẽ bị ghi đè lại khi bạn ghi lại khi bạn sử dụng lại lệnh pod install. Vì vậy khi bạn sử dụng cú pháp “:path” thì CocoaPod sẽ tìm theo đường dẫn cục bộ nên tất cả những thay đổi của bạn sẽ không bị ghi đè lại.
Bạn nên để thư viện bạn tạo vào Documents/Libraries. Vì nếu bạn làm việc nhóm thì có nhiều người cùng sử dụng, CocoaPods tự động thêm dấu “~” như là như mục home của người dùng.
Cũng giống như khi bạn sử dụng bất kỳ một thư viện nào với CocoaPods bạn cũng sẽ phải tạo một Pod file. Vậy khi chúng ta tự viết một thư viện thì cũng vậy:
cd ~/Documents/Libraries/RWPickFlavor
pod init
open -a Xcode PodfileSau đó bạn mở Podfile và thay đổi toàn bộ nội dung như sau:
platform :ios, '8.0'
use_frameworks!
target 'RWPickFlavor' do
pod 'Alamofire', '~> 2.0'
pod 'MBProgressHUD', '~> 0.9.0'
endSau đó tắt đi và bật Terminal. Gõ đoạn mã sau để cài đặt Alamofire và MBProgressHUD.
pod installSau khi quá trình cài đặt thì bạn sẽ thấy RWPickFlavor.xcworkspace
Nếu trong quá trình cài đặt có bất kỳ cảnh báo nào thì có thể bạn đang sử dụng phiên bản cũ của CocoaPods. Kiểm tra version bằng cách:
pod --versionĐể cài đặt lại CocoaPods:
sudo gem install CocoaPodsTiếp theo ở thư mục dự án bạn mở RWPickFlavor.xcworkspace
open RWPickflavor.xcworkspaceBên thanh điều thướng bên trái giống như sau:

Bây giờ bạn cần copy vài files từ IceCreamShop vào RWPickFlavor:
· Categories
· Controllers
· Factories
· Models
· Views
· Ice Cream
· Storyboards & Nibs
Khi bạn kéo vào thì nó sẽ hiện lên hộp thoại thì bạn nhớ chọn Copy items if needed.
Sau khi kéo xong thì:

Bạn hãy xoá các files dưới đây nếu kéo nhầm:
· AppDelegate.swift
· LaunchScreen.xib
· Images.xcassets
Ở file Info.plist nếu có dòng Main storyboard file base name thì xoá đi.
Chuyển ảnh vào RWPickFlavor
Bạn vào IceCreamShop/images.xcassets chuột phải vào background và chọn Show In Finder. Tiếp theo kéo background.jpg vào RWPickFlavor.

Thay đổi file ảnh thành background.jpg.

CocoaPods và Git
Hầu như các thư viện tốt nhất hiện nay đều trên kho lưu trữ Git bạn có thể sử dụng Git để lưu trữ thư viện của bạn. Ngoài ra có thể sử dụng Bitbucket.
Ví dụ này sử dụng GitHub.
Thiết lập GitHub Repo
Đầu tiên đăng ký và đăng nhập tài khoản GitHub.
Ấn dấu “+” -> chọn New repository

Đặt tên RWPickFlavor -> Create repository.
GitHub sẽ tạo một kho lưu trữ. Tiếp theo bạn sẽ thấy màn hình như sau:

Bạn cần lấy URL(như là địa chỉ của kho lưu trữ). Bây giờ bạn cần một cái kho lưu trữ khác để làm host cho tất các yêu cầu của Pod.
Mở github.com bạn tạo thêm một kho lưu trữ mới như trên với tên là RWPodSpecs..
Thiết lập Podspec
Bây giờ bạn cần tạo file RWPickFlavor.podspec cho RWPickFlavor, file podspect bao gồm tên, phiên bản và đường dẫn download từ git.
Thêm các đoạn mã dưới đây
cd ~/Documents/Libraries/RWPickFlavor
pod spec create RWPickFlavor
open -a Xcode RWPickFlavor.podspecSau khi tạo được file spec thì nó sẽ mở file spec và chúng ta sẽ thay toàn bộ nội dung như sau:
Pod::Spec.new do |s|
# 1
s.platform = :ios
s.ios.deployment_target = '8.0'
s.name = "RWPickFlavor"
s.summary = "RWPickFlavor lets a user select an ice cream flavor."
s.requires_arc = true
# 2
s.version = "0.1.0"
# 3
s.license = { :type => "MIT", :file => "LICENSE" }
# 4 - Replace with your name and e-mail address
s.author = { "[Your Name Goes Here]" => "[Your_Email@Your_Email_Domain.com]" }
# For example,
# s.author = { "Joshua Greene" => "jrg.developer@gmail.com" }
# 5 - Replace this URL with your own Github page's URL (from the address bar)
s.homepage = "[Your RWPickFlavor Homepage URL Goes Here]"
# For example,
# s.homepage = "https://github.com/JRG-Developer/RWPickFlavor"
# 6 - Replace this URL with your own Git URL from "Quick Setup"
s.source = { :git => "[Your RWPickFlavor Git URL Goes Here]", :tag => "#{s.version}"}
# For example,
# s.source = { :git => "https://github.com/JRG-Developer/RWPickFlavor.git", :tag => "#{s.version}"}
# 7
s.framework = "UIKit"
s.dependency 'Alamofire', '~> 2.0'
s.dependency 'MBProgressHUD', '~> 0.9.0'
# 8
s.source_files = "RWPickFlavor/**/*.{swift}"
# 9
s.resources = "RWPickFlavor/**/*.{png,jpeg,jpg,storyboard,xib}"
endCũng giống như Podfile, podspec được viết trong Ruby.
Giải thích các bước:
- Các thông tin cơ bản nó chỉ rõ yêu cầu IOS 8.0 trở lên. Nếu thấp hơn thì cài đặt sẽ không chính xác.
- Khi cập nhật thư viện pod thì cần cập nhật phiên bản để khi người dùng cập nhật podfile thì nó sẽ quét xem phiên bản hiện tại đã là mới nhất chưa.
- Tất cả các pod đều cần chứng chỉ(license). Nếu không CocoaPods sẽ cảnh báo khi bạn cố gắng cài thư viện đó.
- Đây là nơi điền thông tin tác giả.
- Chỗ này là điền đường dẫn trang chủ của thư viện. Cũng có thể điền luôn đường dẫn của github.
- Thay đường dẫn bằng đường dẫn download từ cái kho lưu trữ đầu tiên tạo ở GIT, ngoài việc sử dụng http hoặc https thì cũng có thể sử dụng đường dẫn SSH những cần lưu ý phải dung public key nếu muốn mọi người sử dụng được thư viện.
- Đây là nơi chỉ rõ ra framework và các như viện các pod file dụng.
- Ở đây ví dụ chúng ta sử dụng phần mở rộng là “.swift”
- Cuối cùng cần ghi rõ các phần mở rộng như ảnh, text, xib, …
Cũng giống như các pod khác, bạn cần tạo file LICENSE
Chỉ cần copy và paste MIT license ở đây vào trong phần text editor, và sau đó lưu lại là “LICENSE” nhớ là không có phần mở rộng và để trong ~/Domuments/Libraries/RWPickFlavor, và thay đổi năm và tên cho đúng.
Choose a License là một web site tốt giúp bạn chọn lisence thích hợp cho dự án.
Push to Git
Làm theo các đoạn mã sau ở Terminal, thay thế [Your RWPickFlavor Git URL] bằng đường dẫn git bạn tạo ở trên:
cd ~/Documents/Libraries/RWPickFlavor
git init
git add .
git commit -m "Initial commit"
git tag 0.1.0
git remote add origin [Your RWPickFlavor Git URL]
git push -u origin master --tagsNếu có hộp thoại hiện lên thì hãy điền tài khoản và mật khảu của github.
Đó là cách đẩy toàn bộ các files trong RWPickFlavor với tag là 0.1.0 lên GitHub.
Sử dụng CocoaPod vừa tạo
Mở Podfile của IceCreamShop và thay đổi nội dung như sau:
platform :ios, '8.0'
source 'https://github.com/CocoaPods/Specs.git'
source '[Your RWPodSpecs Git URL Goes Here]'
use_frameworks!
target 'IceCreamShop' do
pod 'RWPickFlavor', :path => '~/Documents/Libraries/RWPickFlavor'
endBạn cần chắc chấn thay [Your RWPodSpecs Git URL Goes Here] thành đường dẫn GitHub chứa RWPodSpecs.
Sau đó chạy pod install ở Terminal.
Cuối cùng thay toàn bộ nội dung của AppDelegate.swift như sau:
import UIKit
import RWPickFlavor
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var rootViewController: UIViewController!
func application(application: UIApplication, didFinishLaunchingWithOptions
launchOptions: [NSObject : AnyObject]?) -> Bool {
setupRootViewController()
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.rootViewController = rootViewController
window?.makeKeyAndVisible()
return true
}
func setupRootViewController() {
let bundle = NSBundle(forClass: PickFlavorViewController.self)
let storyboard = UIStoryboard(name: "Main", bundle: bundle)
rootViewController = storyboard.instantiateInitialViewController()!
}
}Trong hàm setupRootViewController(), với bundle từ class PickFlavorViewController.Sau đó bạn chạy và sẽ được như sau.

Cập nhật code lên thư viện của bạn
Nếu bạn muốn thêm một số các chức năng và file sau đó đẩu lên thì bạn làm như sau:
cd ~/Documents/Libraries/RWPickFlavor
git add .
git commit -m "Added BetterBaseClasses dependency"
git tag 0.2.0
git push origin master --tags
pod repo push RWPodSpecs RWPickFlavor.podspecTiếp theo cần cập nhật lại Pod version đang sử dụng
pod 'RWPickFlavor', '~> 0.2.0'Sau đó chạy pod install

Bình luận