2011-01-11 37 views
41

Tôi có một số lớp Objective-C mà tôi hiện đang sử dụng trong cả ứng dụng Cocoa (Mac OS X) và ứng dụng Cocoa-Touch (iOS). Hiện tại, khi tôi cập nhật các lớp đó, tôi phải sao chép các tệp được cập nhật .h.m đó cho cả hai dự án. Không phải là vấn đề lớn, nhưng tôi sẽ sử dụng chúng trong nhiều dự án khác.Làm thế nào để xây dựng một thư viện tĩnh Objective-C?

Vì vậy, tôi muốn xây dựng các lớp này thành thư viện tĩnh Objective-C. Và sau đó liên kết với thư viện đó trong tất cả các dự án khác.

Có cách nào để xây dựng một thư viện tĩnh sao cho nó hoạt động với cả ứng dụng Cocoa và ứng dụng ca cao?

Tôi đã thử xây dựng một thư viện tĩnh Cocoa với các lớp này, nhưng tôi gặp nhiều lỗi khi cố gắng liên kết với thư viện đó trong ứng dụng Cocoa của mình và tôi chắc chắn rằng chúng đến từ thực tế là tôi không làm đúng.

Vì vậy, làm cách nào để tạo một thư viện tĩnh Objective-C theo cách phải? Tôi có phải xây dựng cả thư viện tĩnh Cocoa-Touch và Cocoa không? Hay tôi có thể làm một cái? Làm thế nào được thực hiện?

Có hướng dẫn nào được thực hiện tốt về chủ đề này không?

Tôi đã tìm kiếm trên web và dường như không tìm thấy hướng dẫn toàn diện về chủ đề này, vì vậy tôi đã đặt câu hỏi ở đây, với hy vọng rằng câu trả lời tuyệt vời sẽ được đăng và câu hỏi này có thể phục vụ như một tài nguyên cho tôi và cho những người hỏi trong tương lai.

+0

Câu hỏi hay và tôi muốn có nhiều ví dụ hơn về cách làm tốt điều này. Tôi sẽ xem xét hướng dẫn bạn đã liên kết và xem có bất kỳ điều gì tôi có thể thêm vào hay không. là mục tiêu của bạn để xây dựng một lib tĩnh phổ quát, bạn có thể chia sẻ với các ứng dụng khác dưới dạng tài nguyên nhị phân hoặc bạn muốn tạo phụ thuộc dự án trên một số sản phẩm xây dựng của dự án được chia sẻ? – Jonah

+0

thư viện tĩnh phổ dụng. :) – Alex

+0

Kiểm tra tài liệu apple này: https://developer.apple.com/library/ios/technotes/iOSStaticLibraries/Articles/configuration.html –

Trả lời

25

Đối với XCode 5. Các câu trả lời này có vẻ hơi lỗi thời. Bạn có thể xem các bước chính tại đây http://www.raywenderlich.com/41377/creating-a-status-library-in-ios-tutorial. Nhưng Xcode 5 có nhiều công việc hơn cho bạn và bây giờ hoạt động gần như bạn muốn.

1.Create mới Static Library App trong Xcode New Static Library in Xcode

2.You thể xóa bất kỳ file nó tạo ra và thêm của riêng bạn. Thêm các phương thức của bạn, v.v. Code Code Code

3.Mỗi vấn đề với Thư viện tĩnh, bạn chỉ có thể xây dựng cho thiết bị hoặc chạy trong trình mô phỏng. Vì vậy, chúng ta cần phải tạo một thư viện hỗ trợ kiến ​​trúc ARM và i386, để làm điều này, chúng ta cần tạo một binary nhị phân (vì vậy nó sẽ hỗ trợ mô phỏng và xây dựng thiết bị).

Tạo mục tiêu mới (Tệp> Mới> Mục tiêu). New Target

4.Select New Target sau đó thêm một xây dựng giai đoạn mới (Editor> Thêm xây dựng giai đoạn> Add Run Script Xây dựng Giai đoạn New Build Phase

5.Select xây dựng giai đoạn và nhập kịch bản từ liên kết này vào chạy cửa sổ kịch bản. https://gist.github.com/sponno/7228256

Run Script Code

6.Now bạn cần phải xây dựng từng kiến ​​trúc (mô phỏng và thiết bị iOS)

6.2.Select THƯ VIỆN của chúng tôi và sau đó iOS Device, bấm xây dựng hoặc chạy (Command + B)

6.3.Then cho Simulator (chọn Thư viện Biểu tượng trên cùng bên trái của Xcode và sau đó là iOS Simulator) enter image description here

7.Bạn muốn xây dựng biểu tượng BullsEye> Thiết bị iOS. Đây sẽ là mục tiêu tổng hợp và sẽ kết hợp hai thư viện của chúng ta thành một tập tin phổ quát mới.

8.Để xem tất cả điều này có hiệu quả không. Mở rộng thư mục "Sản phẩm" ở cây bên trái, nhấp chuột phải vào tệp kết thúc bằng ".a" và "Hiển thị trong trình tìm kiếm"

9.Nếu tất cả hoạt động, bạn sẽ thấy các tệp sau trong công cụ tìm. Bạn sẽ thấy Library .a file and include files

10.The Bước cuối cùng là dễ dàng, chỉ cần kéo "tập tin library.a và bao gồm thư mục vào dự án Xcode mới của bạn. enter image description here

enter image description here

Trong của bạn dự án mới, bạn sẽ không phải làm bất cứ điều gì khác, ngoài việc nhập các tệp tiêu đề muốn sử dụng, nhưng bạn không phải thay đổi các cờ liên kết hoặc các đường dẫn tìm kiếm tiêu đề, nó sẽ chỉ hoạt động:

(bất kỳ phản hồi nào được đánh giá cao) hoặc vui lòng chỉnh sửa bài đăng của tôi để cải thiện sự rõ ràng.

** ĐIỂM THƯỞNG *** Cài đặt VVDocumenter https://github.com/onevcat/VVDocumenter-Xcode và sử dụng điều này để ghi lại bất kỳ tệp header.h nào mà bạn sẽ chia sẻ với thư viện.

Hiện bất kỳ ai đang sử dụng thư viện của bạn đều có thể chọn + nhấp để hiển thị trợ giúp nhận thức ngữ cảnh cho các lớp học của bạn.

Context Aware Help based on header file

+1

Điều này thật tuyệt vời! Xcode và Apple đã đi một chặng đường dài kể từ khi tôi hỏi câu hỏi ban đầu của tôi và đây là cách tôi làm điều đó ngay bây giờ. http://cocoapods.org/ cũng có vẻ đầy hứa hẹn nếu bạn tham gia vào cách làm đá quý ruby. – Alex

+1

dude trả lời tuyệt vời. Cảm ơn nhiều! – CalZone

12

Tôi đã kết thúc tìm kiếm this tutorial và nó thực sự hoạt động rất tốt. Nếu bất cứ ai vẫn muốn cung cấp hỗ trợ, xin vui lòng làm và tôi rất có thể sẽ upvote nó và đánh dấu nó như là câu trả lời được chấp nhận.

+2

Bạn có thể đánh dấu đây là câu trả lời được chấp nhận không? – FreeAsInBeer

+0

Có ai có thể tham khảo một hướng dẫn mới hơn không? – Stavash

+0

http://www.raywenderlich.com/41377/creating-a-status-library-in-ios-tutorial Là tài khoản tôi đang sử dụng. Cuối năm 2013 nhiều hơn hiện nay. –

11

(sử dụng hướng dẫn làm điểm xuất phát)

giờ đây tạo mục tiêu thứ hai trong thư viện xcodeproj cho hệ điều hành khác.

định cấu hình cài đặt sdk của mỗi mục tiêu bằng tệp xcconfig (một cho mỗi hệ điều hành). tái sử dụng các tệp xcconfig này trong các thư viện khác của bạn. điều này cũng cho phép kiểm soát cài đặt xây dựng toàn cầu dễ dàng.

định cấu hình tham chiếu liên kết và phụ thuộc trong mục tiêu (ứng dụng) của bạn như bình thường, nhưng chọn đúng thư viện đích.

thêm mục tiêu tổng hợp vào dự án thư viện để biên dịch meta đơn giản/bảo trì dễ dàng.

- hoặc -

làm tất cả bằng cách giới thiệu một lớp tập lệnh hoặc tạo công cụ tạo tùy chỉnh.

+1

+1, những suy nghĩ thú vị. – Alex

2

Tôi cũng tìm thấy điều này "Building a Static Library with Jenkins" điều đó thực sự tốt. Nói về cách thiết lập đúng một lib tĩnh, cách để Jenkins tự động xây dựng nó và sau đó đặt các tệp .a và .h kết quả vào một nơi nào đó mà bạn có thể lấy chúng từ đó.

Kết hợp điều đó với CocoaPods hoặc Maven (Tôi chưa làm điều này) và bạn có thể có một hệ sinh thái nhỏ xinh đẹp.

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