2014-05-21 20 views
6

Tôi đang làm việc trên một thư viện tĩnh, được gọi là Silicon, mà tôi sử dụng cho tất cả các ứng dụng iOS của mình.Quy trình chính xác để liên kết các thư viện tĩnh có các thư viện tĩnh phổ biến là gì?

Vì tôi không muốn tạo một thư viện tĩnh lớn có thể trở nên khó khăn để duy trì, tôi tạo nhiều thư viện tĩnh nhỏ hơn mà tôi đính kèm dưới dạng mô-đun con.

Tính đến thời điểm này bằng văn bản cho cây phụ thuộc cho Silicon là như sau:

Silicon
|
| ==>FDKeychain
| ==>FDDataClient
                |
                | =>FDRequestClient
                                |
                                | =>FDFoundationKit
| ==>FDSQLiteDatabase
                |
                | =>FDFoundationKit

Như bạn có thể nhìn thấy cả hai FDRequestClient và FDSQLiteDatabase có FDFoundationKit như một thư viện tĩnh chung.

Điều có vẻ xảy ra là khi một dự án sử dụng Silicon được xây dựng, nó xây dựng tất cả các phụ thuộc mục tiêu của Silicon vào thư mục xây dựng dự án. Điều tương tự cũng xảy ra đối với FDDataClient và FDSQLiteDatabase. Vì vậy, tại một số điểm FDFoundationKit từ FDRequestClient được xây dựng và sao chép vào thư mục xây dựng cũng như FDFoundationKit từ FDSQLiteDatabase. Cho dù ai được xây dựng cuối cùng chỉ cần ghi đè lên trước đó.

Chỉ cần bởi may mắn FDFoundationKit đã không được thay đổi trong bất kỳ cách nghiêm trọng như vậy mà FDRequestClient và FDSQLiteDatabase không thể luôn luôn được sử dụng cùng một phiên bản nhưng tôi không thể đảm bảo nó sẽ như thế này mãi mãi.

Tôi đang cố gắng tìm hiểu xem có cách nào để Silicon chỉ định phiên bản FDFoundationKit nào sử dụng để đảm bảo rằng phiên bản được sử dụng sẽ hoạt động cho cả FDRequestClient, FDSQLiteDatabase và bất kỳ phụ thuộc nào khác thêm trong tương lai.

Tôi biết CocoaPods cố gắng giải quyết vấn đề này nhưng tôi không muốn khiến ai đó phải thiết lập tất cả những điều đó chỉ để thư viện của tôi hoạt động. Nếu tôi chỉ có thể tìm thấy một cách nào đó có Silicon xác định phiên bản của FDFoundationKit để sử dụng tất cả mọi thứ sẽ làm việc hoàn hảo.

+0

Bạn không muốn sử dụng CocoasPods vì bạn "không muốn làm cho ai đó phải thiết lập tất cả điều đó chỉ để làm cho thư viện của tôi hoạt động". Tôi khá chắc chắn rằng hầu hết các gợi ý mà người dùng khác sẽ thực hiện ở đây sẽ đưa bạn nhiều thời gian hơn để thiết lập và quản lý điều đó nếu bạn thực hiện thiết lập một lần của một CocoaPods riêng. – Emilie

+2

Nhưng đối với người dùng Silicon sẽ không có thiết lập. Họ chỉ liên kết thư viện tĩnh và mọi thứ hoạt động. Nếu tôi chuyển sang CocoaPods thì mọi người muốn sử dụng thư viện này sẽ cần phải có nó. Tôi đang cố gắng làm việc với thư viện này để đảm bảo rằng nếu bạn liên kết nó, nó sẽ xây dựng chính xác. –

Trả lời

0

Có vẻ là chỉ có hai câu trả lời cho vấn đề này:

1) Sử dụng một người quản lý phụ thuộc như CocoaPods hoặc Carthage.

2) Bất kỳ thư viện tĩnh hoặc khung công tác nào mà bạn phát hành không được có bất kỳ phụ thuộc mục tiêu nào. Họ nên liên kết với bất kỳ phụ thuộc nào bạn có và đó là trách nhiệm của người tích hợp thư viện của bạn cũng để tích hợp các phụ thuộc bắt buộc.

0

Bạn có thể (như chúng tôi làm) đặt tất cả thư viện của bạn vào khung công tác, vì khung hỗ trợ phiên bản. Khung chỉ là một cây thư mục được cấu hình theo cách thông thường. Xcode không hỗ trợ trực tiếp việc tạo các khung công tác, do đó bạn phải tạo chúng trong một kịch bản, thường là phần cuối của các giai đoạn xây dựng của bạn. Một ví dụ (nhờ jverkoey) có thể được tìm thấy tại IOS- framework

Trong khuôn khổ bạn có thể lưu trữ tất cả các phiên bản của mỗi thư viện tĩnh trong

myLibrary.framework->Versions->n.n folders. 

Các myLibary.framework->Versions->Current là một liên kết đến các thư mục của phiên bản mới nhất.

Vì bạn đang sử dụng thư viện tĩnh, bản thân Silicon không thể chỉ định phiên bản (yêu cầu thư viện động), tuy nhiên cờ xây dựng, liên kết hoặc môi trường được sử dụng cho việc xây dựng Silicon chắc chắn có thể.

Theo cách này, theo mặc định, Ứng dụng sẽ luôn sử dụng phiên bản thư viện mới nhất, nhưng phiên bản thực tế được liên kết có thể dễ dàng bị ghi đè bởi cờ liên kết khi xây dựng. Ngoài ra, tất cả người dùng sẽ chỉ bao gồm khung công tác Silicon trong dự án của họ theo cách tương tự như bất kỳ khung công tác nào khác, vì vậy nó rất đơn giản cho các nhà phát triển.

+2

Tôi nghĩ rằng, vấn đề không phải là phiên bản, nhưng các biểu tượng trùng lặp khi biểu tượng giống nhau được hiển thị trong nhiều thư viện tĩnh (lưu trữ), bất kể bạn cấu trúc lưu trữ như thế nào. Thư viện liên kết động không có vấn đề này. – CouchDeveloper

+0

OP chỉ đề cập đến phiên bản là sự cố. –

+0

Tôi thực sự đã chuyển Silicon từ thư viện tĩnh sang khung công tác và @CouchDeveloper là đúng trong đó tôi muốn đảm bảo không có biểu tượng trùng lặp. Kịch bản lý tưởng của tôi với bất kỳ dự án nguồn mở nào của tôi là tôi có thể làm cho một người phụ thuộc vào người khác nhưng nếu ai đó sử dụng hai khung công tác của tôi mà cả hai đều có cùng sự phụ thuộc thì họ sẽ không bị va chạm. –

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