2009-12-10 42 views
8

(Có lẽ những câu dưới đây không phải là iPhone cụ thể, ngoài việc thực tế rằng chúng tôi sẽ có khả năng sử dụng một khung hoặc thư viện động khác.)tĩnh (iPhone) thư viện, phân phối, và phụ thuộc

Tôi đang xây dựng một iPhone độc ​​quyền SDK cho một khách hàng, để tích hợp với trang web của họ back-end. Vì chúng tôi không muốn phân phối mã nguồn cho khách hàng, chúng tôi cần phân phối SDK dưới dạng thư viện tĩnh. Tất cả điều này hoạt động tốt, và tôi đã xác minh rằng tôi có thể liên kết các ứng dụng iPhone mới với thư viện và cài đặt chúng trên thiết bị.

Mối quan tâm của tôi là về các thư viện của bên thứ ba mà SDK của chúng tôi phụ thuộc vào. Ví dụ, chúng tôi hiện đang sử dụng HTTPRiot và Three20 (các thư viện chính xác có thể thay đổi, nhưng đó không phải là điểm). Tôi lo lắng rằng điều này có thể dẫn đến xung đột nếu khách hàng cũng đang sử dụng bất kỳ thư viện nào trong số này (và thậm chí có cả các phiên bản khác nhau) trong ứng dụng của họ.

Thực tiễn tốt nhất về điều này là gì? Có cách nào để loại trừ các ký hiệu của thư viện phụ thuộc khỏi thư viện tĩnh của chúng ta hay không (trong trường hợp nào khách hàng sẽ phải liên kết thủ công với cả SDK của chúng tôi cũng như HTTPRiot và Three20)? Hay có một số cơ chế khác được thiết lập?

Tôi đang cố gắng cân bằng giữa tính dễ sử dụng và tính linh hoạt/tính tương thích. Lý tưởng nhất là khách hàng sẽ chỉ phải bỏ SDK của chúng tôi vào dự án của họ và thực hiện một số thay đổi cài đặt xây dựng tối thiểu, nhưng nếu nó làm cho mọi thứ trở nên mạnh mẽ hơn, có thể có ý nghĩa hơn để khách hàng liên kết với nhiều thư viện riêng lẻ. Hoặc tôi cho rằng chúng tôi có thể phân phối nhiều phiên bản SDK, có và không có sự phụ thuộc của bên thứ ba, để bao gồm cả hai trường hợp.

Tôi hy vọng câu hỏi của tôi có ý nghĩa ... Coming chủ yếu đến từ một nền Ruby và Java, tôi đã không phải đối phó với các thư viện biên dịch (theo nghĩa truyền thống) trong một thời gian dài ...;)

Trả lời

1

Nếu đó là tôi, tôi sẽ chỉ định chính xác phiên bản của thư viện của bên thứ ba mà thư viện của tôi tương tác với. Sau đó tôi sẽ kiểm tra chúng, ghi lại chúng, và có thể phân phối với những phiên bản cụ thể có trong bản phát hành.

Hai điều tôi sẽ lo lắng:
-Tôi muốn chắc chắn rằng nó 'hoạt động' khi khách hàng của tôi cài đặt.
-Tôi sẽ không muốn đảm bảo hỗ trợ cho các phiên bản tương lai tùy ý của các thư viện của bên thứ ba đó. Nó là tốt để bao gồm một quá trình cho khách hàng để di chuyển đến phiên bản mới hơn, nhưng nếu bất cứ điều gì không làm việc thì tôi sẽ mong đợi khách hàng trả tiền cho công việc phát triển đó như là một nâng cao, chứ không phải là một lỗi miễn phí sửa chữa (trừ khi bạn bao gồm điều đó trong bản thỏa thuận cấp phép/hỗ trợ gốc).

Tại thời điểm đó, nó trở thành vấn đề đảm bảo các phiên bản cụ thể của thư viện của bên thứ ba có thể làm việc vui vẻ cùng với bất kỳ điều gì khác mà khách hàng cần (trong trường hợp của bạn là web back-end). Theo kinh nghiệm của tôi thường là một chức năng của thư viện, ví dụ: một số không được thiết kế để nhiều phiên bản có thể chạy song song.

+0

Nghe như một cách tiếp cận hợp lý. Phiên bản này hơi phức tạp, vì một số thư viện của bên thứ ba được phân phối ở dạng nguồn và không có phiên bản rõ ràng. Nhưng tôi cho rằng tôi có thể chỉ ra một cam kết hoặc ngày Github cụ thể. Bạn đã đề cập đến khả năng bao gồm quy trình (không được hỗ trợ) cho khách hàng để nâng cấp thư viện của bên thứ ba. Làm thế nào tôi thực sự sẽ đi về điều này? Dường như điều này sẽ dẫn đến xung đột, vì biểu tượng của bên thứ 3 có hiệu quả trở thành một phần của SDK của chúng tôi. –

+1

Không có thời gian để suy nghĩ về điều này, nhưng "liên kết yếu" có giúp ích gì cho bạn không? http://developer.apple.com/iphone/news/archives/november2009/# adding3xto2x –

+0

Tôi đoán bạn có thể cung cấp cho họ một kịch bản để xây dựng lại sản phẩm tổng thể (bao gồm thư viện của bạn và các sản phẩm khác của bên thứ 3)? Miễn là họ có (> 2GB) iPhone SDK được cài đặt, bạn có thể cung cấp cho họ một kịch bản lệnh gọi xcodebuild cho một dự án Xcode đơn giản chứa tất cả mọi thứ cùng nhau? Bit của một mess mặc dù. Điều dễ nhất là ủy thác các phiên bản và yêu cầu họ liên lạc với bạn (và trả tiền) cho một bản phát hành mới chống lại các thư viện được nâng cấp. Bạn có thể bao gồm một chút thử nghiệm chấp nhận trong giá quá ... IMO nó là hoàn toàn hợp lý để bạn có thể làm điều đó. –

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