2016-11-21 19 views
7

Tôi đang tạo CocoaPod, nói MyPod, phụ thuộc vào một Cocoapod khác, nói RxSwift.Sử dụng sự phụ thuộc CocoaPod trong khi phát triển CocoaPod

Vì vậy, tôi có điều này trong MyPod.podspec:

s.dependency "RxSwift", "~> 3.0.1" 

Tuy nhiên, trong khi phát triển MyPod, làm thế nào tôi có thể thực sự sử dụng phụ thuộc?

import RxSwift 
// ^
// No such module 'RxSwift' 

public class MyClass { //... 

Tôi có bước nào bị thiếu hoặc một số quy ước chung không? Có vẻ như một số dự án khác như Moya đang sử dụng Carthage để xây dựng các phụ thuộc trong khi phát triển. Tôi có nên làm điều đó hoặc có thể thêm Podfile không?

Tôi biết rằng đây không phải là vấn đề đối với Ứng dụng mẫu nằm trong repo, có Podfile riêng. Tuy nhiên, tôi vẫn muốn có các bài kiểm tra ở cấp cao nhất, bên ngoài Ứng dụng mẫu và để có thể thực sự tạo khung trong khi làm việc trên nó, một lần nữa, bên ngoài Ứng dụng mẫu.

Trả lời

1

Tôi đã sử dụng Carthage để xây dựng các phụ thuộc khung. Tôi tưởng tượng tôi có thể đã sử dụng CocoaPods để làm điều đó là tốt. Tuy nhiên, điều đó sẽ yêu cầu tôi bắt đầu sử dụng không gian làm việc và tôi không muốn phải làm điều đó để giữ cho các thay đổi càng nhỏ càng tốt.

Ngoài ra, với Carthage, tôi không yêu cầu thêm Podfile/Podfile.lock mới vì Carthage sẽ sử dụng Cartfile/Cartfile.resolved hiện có đã có sẵn. Đó là bởi vì Carthage sử dụng Cartfile.resolved khi sử dụng khung trong một dự án khác khi tự xây dựng khung. Trong khi đó, với CocoaPods, *.podspec được sử dụng khi sử dụng khung trong một dự án khác nhưngPodfile.lock (nếu bạn đã thêm Podfile) là bắt buộc để cài đặt nhóm phụ thuộc trong khung chính.

6

Tôi không thể nói có hay không sử dụng CocoaPods hoặc Carthage. Cả hai đều có điểm mạnh và điểm yếu. Thêm vào đó, quyết định nên được xem xét nhiều yếu tố, một số trong đó bạn có thể không kiểm soát được (giống như một khách hàng khẳng định bạn sử dụng CocoaPods!) Vì vậy, tôi sẽ bỏ qua phần đó.

Tuy nhiên, đối với câu hỏi của bạn, quả thực là một nhóm bạn đang phát triển có thể phụ thuộc vào nhóm khác. Bạn đã có đúng dòng s.dependency. Điều đó là cần thiết. Tuy nhiên, tôi nghi ngờ rằng lý do tại sao bạn không thể tham khảo nhóm phụ thuộc có thể là do bạn không có Podfile trong dự án 'thử nghiệm/ví dụ' của bạn và/hoặc bạn không thực hiện pod install sau khi thêm phụ thuộc vào Podspec của bạn.

Lý do cho điều này là yêu cầu tôi nghi ngờ là vì Podspec không thực sự được xử lý ở tất cả bởi Xcode, bạn không thực sự tải xuống (hoặc biên dịch) sự phụ thuộc. Thay vào đó, khi bạn thực hiện cài đặt pod (thông qua dòng lệnh), CocoaPods sẽ tạo ra một dự án Pods với pod phát triển của bạn, nhóm bạn phụ thuộc vào (trong Podspec) cũng như bất kỳ nhóm nào khác trong Podfile của bạn.

Để kiểm tra giả thuyết này, tôi:

  • Tạo một pod mới (sử dụng riêng CocoaPod của 'pod lib tạo ra' (https://guides.cocoapods.org/making/using-pod-lib-create.html)
  • Khai trương không gian làm việc mà CocoaPod tạo cho tôi và chỉnh sửa Podspec tới. thêm phụ thuộc s.dependency 'RxSwift', '~> 3.0.1'.
  • gia tăng khác pod trong Podfile Ví dụ App của tôi (để chứng minh sự khác biệt giữa Podfile phụ thuộc và Podspec phụ thuộc.)
  • Thực hiện pod install trong folde các ví dụ ứng dụng của r.
  • Đã chỉnh sửa lớp của Pod của tôi để làm điều gì đó hữu ích VÀ để thêm dòng import RxSwift.
  • Đã thêm nhãn vào Ứng dụng mẫu của tôi ("Hello World").
  • đã qua sử dụng PureLayout để làm tất cả những hạn chế bố trí tự động cho nhãn (và để chứng minh như thế nào dự án Ví dụ có thể sử dụng cả vỏ -. Pod phát triển cũng như các pod tham chiếu PureLayout)

Bạn có thể kiểm tra ra bản demo tôi tạo ra trên GitHub công cộng của tôi: https://github.com/ericwastaken/CocoaPod-Dependency-Demo

Thành thực mà nói, tôi đã tạo ra nhiều kén sử dụng pod lib create và nó thực sự tạo ra một cấu trúc tốt đẹp mà đã luôn luôn làm việc cho tôi. Vì lý do này, tôi khuyên bạn nên luôn sử dụng nó để tạo bộ xương của nhóm.

Xcode 8 chú thích: pod lib create dường như vẫn tạo dự án Swift 1.x. Vì vậy, ngay sau khi bạn sử dụng công cụ này, khi bạn mở Xcode, bạn sẽ được cung cấp "chuyển đổi" sang phiên bản Swift mới hơn. Tôi sẽ cho phép chuyển đổi đó xảy ra ngay sau đó và ở đó (lần đầu tiên) để bạn có thể ở trong cú pháp Swift 2.x hoặc 3.x (bạn chọn).

+0

Cảm ơn bạn đã trả lời kỹ lưỡng. Tuy nhiên, tôi nghĩ rằng bạn đã bỏ lỡ phần cuối của câu hỏi của tôi, nơi tôi nói tôi không muốn phát triển thông qua ExampleApp (hoặc thậm chí có một chút) và tôi muốn có các bài kiểm tra ở cấp cao nhất trong khuôn khổ chinh no. Tôi muốn ExampleApp của tôi (nếu tôi thậm chí có một) để có được chỉ đơn giản để hiển thị như thế nào khuôn khổ có thể được sử dụng. Nó không nên chứa bất cứ thứ gì cần thiết, như kiểm tra. Nó sẽ có thể được gỡ bỏ mà không cần lo lắng. – solidcell

+0

Tôi khuyến khích bạn sao chép bản ghi nhớ mà tôi đã tạo. Bạn sẽ nhận thấy rằng ứng dụng ví dụ là không cần thiết cho bất cứ điều gì ở tất cả và nó thực sự có thể được gỡ bỏ. Bạn làm tất cả phát triển trong 'Pod phát triển' giống như bạn nhà nước. Ngoài ra, bạn thực sự có thể viết các bài kiểm tra đơn vị đối với nhóm. Mục tiêu thử nghiệm đơn vị có thể chỉ đơn giản là có pod là phụ thuộc và bạn có thể sử dụng TESTABLE để trưng ra các phương thức riêng tư vào các thử nghiệm. Vui lòng sao chép và thử nghiệm với việc xóa Ví dụ. Lưu ý, bạn vẫn cần một Podfile nhưng có thể là chính nó. – ericWasTaken

+0

Vì vậy, cuối cùng, việc lấy đi chính là bạn vẫn cần thêm một 'Podfile' để khung có thể tự xây dựng. Đối với repo của bạn, tôi đã cố gắng xây dựng nó, nhưng tôi nhận được một tấn các vấn đề Xcode với nó. Không tìm thấy tệp (màu đỏ), sau đó thêm thư mục xây dựng tại '../ build' khi tôi cố gắng tạo. Nếu tôi đóng và mở lại nó, nó sẽ tạo một lược đồ sao chép cho mọi lược đồ: "___ 2" cho mỗi lược đồ. Nó là tốt, mặc dù, kể từ khi tôi đã đến cùng một giải pháp như bạn ('Podfile'), thiết lập dự án khác biệt sang một bên. – solidcell

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