Hello,

Sign in to find your next job.

Blog IT

Cách tạo CocoaPod trong Swift

Cách tạo CocoaPod trong Swift

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ị.

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 Podfile

Sau đó 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'
end

Sau đó tắt đi và bật Terminal. Gõ đoạn mã sau để cài đặt Alamofire và MBProgressHUD.

pod install

Sau 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 CocoaPods

Tiếp theo ở thư mục dự án bạn mở RWPickFlavor.xcworkspace

open RWPickflavor.xcworkspace

Bê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 Infoist 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.podspec

Sau 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
  satform = :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}"
end

Cũng giống như Podfile, podspec được viết trong Ruby.

Giải thích các bước:

  1. 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.
  2. 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.
  3. 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 đó.
  4. Đây là nơi điền thông tin tác giả.
  5. 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.
  6. 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.
  7. Đây là nơi chỉ rõ ra framework và các như viện các pod file dụng.
  8. Ở đây ví dụ chúng ta sử dụng phần mở rộng là “.swift”
  9. 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 --tags

Nế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'
end

Bạ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.podspec

Tiế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

nguồn bài viết

Nguồn: Techmaster

Similar blogs