2010-07-16 36 views
7

Tôi muốn hỏi về các thực tiễn của bạn để giữ cho thư viện của bên thứ ba được cập nhật dễ dàng.iphone: Thực hành tốt để giữ thư viện của bên thứ ba của tôi luôn cập nhật?

Trong dự án iPhone của tôi, tôi sử dụng khá nhiều thư viện của bên thứ ba (như TouchXML, JSON, RegexKit, YAJL, MGTwitterEngine ...). Hầu hết chúng được lưu trữ trong GitHub và phiên bản của chúng, đặc biệt là MGTwitterEngine, thay đổi khá nhanh (vì thêm tính năng mới, sửa lỗi, thay đổi định dạng phản hồi của máy chủ (như Twitter) ...).

Thỉnh thoảng, tôi quên cập nhật (cũng không muốn thay đổi phiên bản ổn định) khi đó dự án của tôi gặp lỗi vì các thư viện lỗi thời.

Khi tôi gặp lỗi vì các thư viện cũ. Tôi thường đi đến Github, tải về phiên bản mới, sau đó cần phải thay đổi rất nhiều mã. Bởi vì việc tải xuống phiên bản mới có nghĩa là tôi tiến nhanh từ phiên bản cũ sang phiên bản mới nhất. Tôi nghĩ rằng nó sẽ ít đau đớn hơn nếu tôi cập nhật thư viện thường xuyên hơn.

Cách tiếp cận của bạn cho tác vụ này là gì?

+0

Ba phiếu bầu không có bất kỳ câu trả lời nào. Tại sao? Bạn có thể đưa ra một số bình luận? – KONG

+1

Đó là bởi vì những người khác (kể cả tôi) cũng quan tâm đến câu hỏi của bạn, nhưng chưa có ai trả lời. – Calvin

+0

Nếu chúng ta không có câu trả lời, chỉ cần nêu ý tưởng và thảo luận bằng cách bình luận :) Chúng ta có thể viết một kịch bản để làm điều này? – KONG

Trả lời

4

Bạn đã xem xét git submodules?

Tôi sử dụng chúng cho tác vụ này. Chúng tôi có một kho lưu trữ các lớp trợ giúp. Tuy nhiên, bất cứ khi nào chúng tôi thực hiện các cải tiến &, chúng tôi muốn những cải tiến đó được xếp vào tất cả các dự án của chúng tôi - vì vậy, chúng tôi thiết lập kho lưu trữ trợ giúp đó dưới dạng mô-đun con trong mỗi kho dự án.

Hãy thử lệnh sau từ bên trong thư mục gốc của kho lưu trữ của bạn:

git submodule add ssh://url/to/external/library.git local/path 

này nên làm theo các bước sau (lấy nguyên văn từ URL ở trên):

  • nhái các submodule dưới thư mục hiện tại và theo mặc định sẽ kiểm tra nhánh chính.
  • Thêm đường dẫn nhân bản của mô-đun con vào tệp .gitmodules và thêm tệp này vào chỉ mục, sẵn sàng để được cam kết.
  • Thêm ID cam kết hiện tại của mô-đun vào chỉ mục, sẵn sàng để được cam kết.

Sau đó bạn có thể sử dụng lệnh

git submodule update 

để giữ cho mọi thứ up-to-date. Ngoài ra, như một lưu ý phụ, nếu bạn đang làm những gì tôi đang làm (ví dụ thay đổi trực tiếp kho lưu trữ con), bạn cần vào thư mục gốc của submodule và cam kết những thay đổi này trước khi cam kết siêu dự án . Điều này là do git theo dõi các phiên bản của các mô-đun con (thông minh), vì vậy nếu bạn cam kết siêu dự án trước, bạn sẽ lưu trữ một tham chiếu đến các thay đổi chưa được cam kết trên kho lưu trữ con. Bất cứ ai cố gắng để sao chép siêu dự án của bạn sẽ nhận được một lỗi.

+0

Tôi sẽ thử phương pháp này. Cảm ơn bạn rất nhiều, phooze. – KONG

+0

+1 git submodules chắc chắn là con đường để đi. Chúng tôi sử dụng phương pháp này rất nhiều. – Till

5

Bây giờ là năm 2012 và do câu hỏi này được yêu cầu, hai dự án đã xuất hiện nhằm giúp quản lý phụ thuộc dự án dễ dàng hơn trong mã iOS: CocoaPodsVendorKit. Cả hai đều được lấy cảm hứng từ trình quản lý phụ thuộc Ruby Bundler. CocoaPods có lẽ là dự án trưởng thành và năng động nhất, nhưng cả hai đều đạt được lực kéo.

submodules Git giúp rất nhiều trong việc tổ chức dự án và phụ thuộc của bạn, nhưng nó vẫn có thể là một rắc rối để có được những con đường tìm kiếm và cờ mối liên kết đúng, chưa kể đến việc tìm ra những gì sai nếu phụ thuộc phá vỡ. Cũng khó để đối phó với tình huống mà A và B đều phụ thuộc vào C, trong đó A là dự án của riêng bạn và B và C là phụ thuộc. Vì vậy, lời khuyên của tôi, vào thời điểm này, sẽ là sử dụng một trong những dự án này và hỗ trợ họ bằng cách viết thông số kỹ thuật cho các thư viện khác nhau.

Ngoài ra còn có ít được biết đến Kit, được triển khai trong Haskell. Worth kiểm tra ra.

+0

Để đảm bảo tất cả các cài đặt được thiết lập đúng (đường dẫn tìm kiếm, ...), chúng tôi sử dụng khung tùy chỉnh theo đề xuất của [câu trả lời này] (http://stackoverflow.com/questions/8343242/objective-c-how-to -make-a-framework/8343513 # 8343513). – Till

Các vấn đề liên quan