2014-10-01 16 views
6

Tôi đang sử dụng CocoaPods trên một ứng dụng nơi không gian làm việc, bao gồm một dự án ứng dụng chính và một số thư viện tĩnh như các dự án phụ. Các thư viện tĩnh được liên kết vào dự án chính tại thời gian biên dịch và tồn tại chủ yếu như một phương tiện để đóng gói và sắp xếp mã.Quản lý các phụ thuộc trong các thư viện tĩnh với cocoapods

Một vấn đề nảy sinh khi CocoaPods liên kết các phụ thuộc vào các thư viện tĩnh của các tiểu dự án. Nếu hai hoặc nhiều thư viện tĩnh có cùng phụ thuộc, chúng không thể được liên kết với nhau trong dự án chính, vì làm như vậy sẽ dẫn đến các biểu tượng trùng lặp.

Cách giải quyết hiện tại của tôi là tạo mục tiêu "giả" trong mỗi tiểu dự án và đặt mục tiêu đó làm mục tiêu liên kết trong tệp pod. Mục tiêu thực sự sử dụng tệp xcconfig được tạo bởi CocoaPods, không có bất kỳ phụ thuộc nào được liên kết.

Trong khi điều này thực sự hiệu quả và id là giải pháp đơn giản nhất tôi có thể tìm thấy, nó vẫn mang gánh nặng không cần thiết mục tiêu trong mỗi dự án, ví dụ:

xcodeproj 'MyApp/MyApp.xcodeproj' 
target :'MyApp' do 
    xcodeproj 'MyApp/MyApp.xcodeproj' 

    pod 'MBProgressHUD',   '0.9' 

    link_with 'PodDummy' 
end 

Một bất lợi nữa là tất cả các phụ thuộc vẫn cần được chỉ định trong dự án chính để chúng được liên kết với tệp thực thi cuối cùng.


Vì vậy, câu hỏi của tôi là: Làm thế nào tôi có thể sử dụng CocoaPod trong dự án thư viện tĩnh mà không liên kết phụ thuộc vào nhị phân? Hoặc là tốt hơn: Tôi có thể chỉ định phụ thuộc chỉ trong các tiểu dự án thư viện tĩnh, và có CocoaPods tìm ra những gì cần phải được liên kết trong dự án chính, giải quyết các bản sao trong quá trình này không? Không.

Tôi đang nghĩ đến việc chỉ bao gồm dự án chính trong tệp pod và việc các dự án con theo cách thủ công tham chiếu đến thư mục "Pods" cho tiêu đề.

Dường như đã có một số cuộc thảo luận về vấn đề này trong quá khứ, nhưng tôi không thể thấy điều gì, nếu có, đến từ nó. các cuộc thảo luận liên quan là:

  1. https://github.com/CocoaPods/CocoaPods/issues/1335
  2. https://github.com/CocoaPods/CocoaPods/issues/840
  3. iOS Static Library + CocoaPods and the duplicate symbols error
  4. Kiwi and CocoaPods with a static shared library

Trả lời

0

CocoaPods hoạt động tốt cho người sử dụng vỏ. Sẽ khó sử dụng nó nhiều hơn khi bạn phát triển các quả, hoặc tệ hơn, khi bạn phát triển một ứng dụng cùng với (a) librar (y) ies, tất cả đều là pods… (cũng có thể phụ thuộc vào nhóm).

Điều bạn phải biết là CocoaPods ở đây để giải quyết các phụ thuộc. Vấn đề của bạn dường như với tôi rằng bạn hoàn toàn bỏ qua tính năng đó bằng cách để các nhóm của bạn trong dev đã có trong không gian làm việc của bạn! Tất nhiên, nếu bạn thực hiện “cài đặt nhóm” bên trong thư mục dự án của mình, bạn sẽ chỉ nhận được một loạt các phụ thuộc, giữa những gì Pod sẽ cài đặt theo Podfile và các codebases pod của riêng bạn ngay trong cùng một cây thư mục.

Điều tôi làm là phát triển các nhóm (có thể hoặc không phụ thuộc vào các nhóm khác) được tách riêng. Nó cũng là thực hành tốt để không được trong cùng một "không gian làm việc" của một ứng dụng. Và bạn có thể phát triển nhóm của mình bằng ứng dụng demo.

Và trong thư mục của ứng dụng chính, tôi cho biết nhánh “phát triển” của nhóm của riêng tôi, trong Podfile. Do đó, các ứng dụng đang được phát triển với depdencies trên vỏ, như thể những vỏ đã được xuất bản chính thức. Ngoại trừ việc họ chỉ đơn giản là trong dev là tốt.

Nó buộc bạn tất nhiên phải có những thứ riêng biệt, điều đó không quá đẹp khi bạn cần thay đổi điều gì đó trong mã của nhóm cho ứng dụng của bạn.

Hai khả năng (không có khả năng nào thực sự tốt đẹp). Đầu tiên, thay đổi nhóm của bạn, sau đó thực hiện “cập nhật nhóm” bên trong thư mục ứng dụng của bạn.

Thứ hai, phát với mã pod ngay trong không gian làm việc của ứng dụng (mã pod đã được nhập bằng lệnh cập nhật nhóm). Và một khi đã hài lòng, hãy quay lại các sửa đổi đối với mã nhóm gốc để cam kết.

Rất nhiều lần quay lại, nhưng tôi không thấy tốt hơn thế.

+0

Cảm ơn hoặc câu trả lời. Tôi không phát triển các nhóm, chỉ đơn thuần cố gắng sử dụng các nhóm với một dự án sử dụng nhiều tiểu dự án liên kết thành một tệp thực thi duy nhất. Các tiểu dự án có các phụ thuộc riêng của họ - một số là duy nhất cho mỗi dự án và một số dự án khác được sử dụng trong nhiều dự án phụ. Vấn đề là sử dụng cocoapods để quản lý các phụ thuộc này, đồng thời tránh các ký tự trùng lặp phát sinh khi các phụ thuộc được liên kết vào tệp thực thi. –

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