CocoaPods và nĩa GitHub


108

Đây là lần đầu tiên tôi thực hiện dự án GitHub và tôi cũng không quá giỏi với CocoaPods, vì vậy hãy chịu khó với tôi.

Về cơ bản, tôi đã tách một dự án trên GitHub bằng cách sử dụng phần sau trong Podfile:

pod 'REActivityViewController', '~> 1.6.7', :git => 'https://github.com/<username>/REActivityViewController.git'

Sau đó, tôi đã thực hiện một số thay đổi đối với fork và tất nhiên khi tôi pod installcài đặt một pod khác, nó đã cài đặt lại bản gốc REActivityViewControllervà xóa các thay đổi của tôi.

Tôi nhận ra rằng tôi cần phải đẩy các thay đổi của mình vào fork của mình trước một fork khác pod install, nhưng làm cách nào để biết đó là fork đang được cài đặt, vì đây là một repo được cài đặt bởi CocoaPods? Tôi đã tìm trong REActivityViewControllerthư mục được cài đặt trong Podsthư mục và không có bất kỳ tệp git nào.

Tôi có cần làm việc trên fork bên ngoài dự án của mình và sau đó sử dụng CocoaPods để cài đặt các thay đổi không? Quy trình làm việc quá cồng kềnh.

Hay tôi cần làm gì đó với mô-đun con?

Câu trả lời:


185

Tôi sẽ trả lời câu hỏi này bằng cách sử dụng một ví dụ. Tôi có một nhánh của TTTAttributedLabel với một số chức năng bổ sung mà tôi đã thêm vào đây:

https://github.com/getaaron/TTTAttributedLabel

Để sử dụng điều này trong dự án Cocoapods, tôi:

  1. Đẩy các thay đổi của tôi vào ngã ba của tôi
  2. Định cấu hình Podfile của tôi để nhận các thay đổi và cập nhật

Khi bạn đã đẩy các thay đổi của mình sang đợt fork, hãy nhận SHA của lần cam kết cuối cùng của bạn. Bạn có thể thực hiện việc này bằng cách sử dụng git rev-parse origin/master | pbcopyhoặc trên trang cam kết GitHub cho dự án của mình: Ảnh chụp màn hình sao chép SHA của cam kết trên GitHub

Sau đó, bạn có thể chỉ định cam kết cụ thể trên fork của mình trong Podfile như sau:

pod 'TTTAttributedLabel', :git => 'https://github.com/getaaron/TTTAttributedLabel.git', :commit => 'd358791c7f593d6ea7d6f8c2cac2cf8fae582bc1'

Sau đó, pod updatesẽ cập nhật cam kết cụ thể này từ fork của bạn. Nếu muốn, bạn cũng có thể thực hiện một đợt podspecfork của mình, nhưng tôi thấy cách tiếp cận này đơn giản hơn và tôi không thực hiện các thay đổi đủ thường xuyên để biện minh cho một quy trình làm việc mới.

Tôi có cần làm việc trên fork bên ngoài dự án của mình và sau đó sử dụng Cocoapods để cài đặt các thay đổi không? Đó là cách để rườm rà của một quy trình làm việc.

Bạn có thể làm theo cách này, nhưng tôi thường:

  1. Chỉnh sửa mã bên trong dự án của tôi và đảm bảo rằng nó hoạt động
  2. Sao chép các thay đổi vào ngã ba của tôi, bằng cách
    • xuất một bản vá, hoặc
    • sao chép toàn bộ tệp mã nguồn
  3. Cam kết và đẩy lên GitHub
  4. Cập nhật Podfile bằng SHA mới
  5. Chạy đi pod update.

Hay tôi cần làm gì đó với mô-đun con?

Không, bạn không cần phải làm vậy.


Câu hỏi tiếp theo: Vậy việc cập nhật Podfile với SHA mới có thực sự cần thiết? pod installsẽ không chỉ tự động sao chép phiên bản cập nhật nhất với cam kết mới nhất?
Ramsel

Nếu bạn đổi tên dự án của mình thành một thứ gì đó khác và tạo tệp podspec của riêng bạn, bạn có thể trỏ nó vào repo của riêng bạn và sử dụng pod 'MyForkName', :headthay thế.
Aaron Brager

1
:head:trỏ đến cam kết mới nhất, nhưng bạn không thể sử dụng :git:headtrong cùng một dòng.
Aaron Brager

4
Đây là một bản sửa lỗi hoàn hảo cho việc sử dụng fork tùy chỉnh của một dự án công cộng. Trong trường hợp của tôi, tôi đã chia nhỏ và sửa đổi một dự án và có một PR mở cho người bảo trì để hợp nhất những thay đổi đó, nhưng muốn cập nhật Podfile của dự án của tôi để sử dụng những thay đổi đó ngay lập tức. Điều này làm việc tuyệt vời!
cbowns

2
@AaronBrager nó hiển thị "Không thể tìm thấy thông số kỹ thuật cho '<pod name>'" bạn có biết cách giải quyết không?
Susim Samanta

34

Một tùy chọn khác là để dự án của bạn tham chiếu nhóm trực tiếp chứ không phải qua github. Bằng cách này, bạn không phải tiếp tục thực hiện fork hoặc sao chép / dán mã chỉ để kiểm tra các thay đổi của mình. Bạn có thể làm việc với hai dự án Xcode khác nhau đồng thời và cam kết riêng vào các dự án tương ứng của chúng.

pod 'AFNetworking', :path => '~/Documents/AFNetworking'

Tài liệu về CocoaPods: http://guides.cocoapods.org/using/the-podfile.html#using-the-files-from-a-folder-local-to-the-machine

nhập mô tả hình ảnh ở đây


1
Làm thế nào để giải quyết vấn đề này? Pod sẽ kéo các nguồn này và đặt chúng dưới dạng dự án Pods trong dự án nguồn. Bất kỳ thay đổi nào đối với các tệp này (hiện được bao gồm thông qua Pods) không được theo dõi bởi Git của '~ / Documents / AFNetworking', phải không?
Raj Pawan Gumdal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.