2012-11-07 14 views
20

Điều này dành cho Xcode 4.5.x iOS armv7 armv7 và mô phỏng và thiết kế dự án Xcode:Xcode với iOS - Tạo thư viện theo cách dễ dàng chạy trong chế độ gỡ lỗi, phân phối, lặp lại

Tôi có một dự án "A" là một ứng dụng trong cửa hàng ứng dụng. Tôi có một dự án "B" là thư viện sẽ được sử dụng trong A làm phụ thuộc, nhưng cũng được phân phối dưới dạng thư viện của bên thứ ba cho các công ty khác để sử dụng trong ứng dụng của họ. (ứng dụng bên thứ 3 của các công ty khác được thể hiện trong trường hợp này là "Y").

Dưới đây là các yêu cầu:

  • Phải có khả năng chạy "A" trong chế độ gỡ lỗi, và tất nhiên debug lồng dự án "B" đồng thời, trong việc xây dựng tương tự/phiên.
  • Từ "A" tôi có thể CMD + Nhấp vào chữ ký phương thức từ "B" và chuyển ngay vào tệp src đó, nơi tôi tự do chỉnh sửa và sau đó biên dịch lại, như thể nó là từ cùng một dự án.
  • Dấu "X" tại một số công ty khác phải có khả năng dễ dàng kéo thư viện "B" của chúng tôi vào dự án "Y", trong đó "B" là thư viện tĩnh. "Y" tất nhiên gọi các phương thức từ một tập con của các tệp tiêu đề thực sự của "B". Chỉ các tệp từ tập hợp con này mới được đưa vào phân phối cho Dev "X". Không phải sửa đổi bất kỳ thứ gì trong dự án Xcode của mình, chỉ cần kéo thư mục cho "B" (chứa lib tĩnh và tập con của tệp tiêu đề) vào dự án của mình và bấm vào "Sao chép tài nguyên, tạo tài liệu tham khảo, v.v. "
  • Tôi cần có khả năng tạo thư viện tĩnh "B" dễ dàng, dựa trên cùng một tệp tôi đã chỉnh sửa toàn bộ thời gian này khi tôi lặp lại và gỡ lỗi dự án "B" bên trong dự án phụ thuộc "A" của nó .
  • "B" không có tài nguyên ngoài mã nguồn - không có tài sản hình ảnh, xib hoặc bất kỳ thứ gì như thế.
  • Từ "B", tôi nhấp vào "Lưu trữ" và Poof! có một lib tĩnh (phải là nhị phân chất béo, do đó tôi có nghĩa là nó hoạt động trên các mô phỏng + armv7 + armv7s, xin vui lòng !!) với các tập tin tiêu đề cần thiết đã sẵn sàng để được phân phối.
  • Tất cả điều này phải là phê duyệt cửa hàng ứng dụng -friendly
  • Điều này cũng phải đáng tin cậy. Sẽ không tốt nếu tôi phải tiếp tục quay lại để thực hiện nhiều thay đổi về cấu hình mỗi khi tôi thêm một tệp.

UPDATE:
*QUAN TRỌNG NHẤT: Đây cần phải được một repo tôi có thể kiểm tra đó là một end-to-end mẫu đầy đủ về những gì đang tìm kiếm, và tôi cần để có thể mở Xcode 4.5.2+ và nhấp vào chơi và xem điều này xây dựng, không đau.

500 điểm cho bất cứ ai có thể cung cấp cho tôi một dự án mẫu thể hiện tất cả những gì tôi đã trình bày ở trên, "A", "B", và "Y" (với "B" lib tĩnh sử dụng như một dep) . Tất cả những gì tôi cần là tập hợp các dự án bộ xương ("A", "B" (lồng vào bên trong "A") và "Y") cho biết cách thực hiện điều này. Xin vui lòng không giữ lại câu trả lời cho đến khi tiền thưởng được đăng. Nếu nó đáp ứng yêu cầu của tôi, tôi sẽ đảm bảo rằng bạn nhận được điểm thưởng của tôi.

Tôi phần nào lo lắng rằng với những hạn chế của Xcode, điều này thậm chí không thể theo cách không phải là một rắc rối hoàn chỉnh. Hãy chứng minh tôi sai.

CẬP NHẬT: Tôi quyết định không quan tâm đến armv6 nữa. Tạm biệt, armv6. Tín dụng bổ sung nếu bạn có thể lấy armv6 được cuộn vào đầu ra dist cùng với armv7, armv7, i386/simulator.

P.S. Tôi hứa rằng tôi sẽ được giải thưởng hợp lý các điểm. Tôi không muốn giữ lại chúng về mặt kỹ thuật. Nếu bạn làm cho cuộc sống của tôi ít đau đớn hơn trong khu vực này, tôi sẽ sẵn sàng trao cho bạn những điểm.

Trả lời

6

Điều này sẽ không thể thực hiện được trong Xcode. Bạn sẽ cần một số Scripts xây dựng (mà bạn có thể gọi từ bên trong Xcode của khóa học) vì chuyển đổi mục tiêu biên dịch (trình mô phỏng, thiết bị, v.v.).

Tôi nghĩ bạn sẽ phải thêm các tiêu đề phân phối bổ sung vào bước xây dựng "Sao chép tệp" ít nhất. Nhưng các thay đổi khác không cần thiết nếu bạn thay đổi một cái gì đó.

Tôi đã làm một cái gì đó như thế này cho libturbojpeg, xem https://github.com/dunkelstern/libturbojpeg-ios để tham khảo. Nó hiện đang đặt một thư viện chất béo vào "lib" nếu bạn gọi tệp "build.sh" từ thiết bị đầu cuối, nhưng bỏ qua các tiêu đề phân phối. Trong trường hợp libturbojpeg, tôi cần 2 tệp dự án vì mỗi mục tiêu biên dịch một tập hợp con khác nhau của tệp lắp ráp vào thư viện (tốt hơn là không nhìn vào các công cụ makefile của trình lắp ráp). Để biên dịch, bạn sẽ cần một phiên bản NASM gần đây vì các phiên bản của tàu táo là cổ xưa (có được bia). Tôi sẽ đăng một mẫu cho dự án xây dựng thư viện như vậy trên cùng một tài khoản ngay. (Sẽ sửa hoặc nhận xét nếu được thực hiện ở đây với các liên kết thích hợp)

Về cơ bản nó hoạt động như thế này:

  1. Tạo một kịch bản xây dựng mà các cuộc gọi xcodebuild cho từng mục tiêu nền tảng cần thiết
  2. Dự án thư viện Xcode có chứa một kịch bản để thả các thư viện được xây dựng trong một thư mục kịch bản xây dựng có thể tìm thấy
  3. Các tiêu đề bổ sung phải được sao chép bằng hành động đích "Sao chép tệp"
  4. Tập lệnh xây dựng phải hợp nhất tất cả các thư viện xây dựng với lipo
  5. Thêm tập lệnh xây dựng dưới dạng mục tiêu "Chạy tập lệnh" vào bản dựng của bạn, nhưng lưu ý rằng bạn không tạo vòng lặp vô hạn (hoặc chỉ gọi nó từ đầu cuối để tạo bản phát hành)
  6. Trong dự án chính của bạn, hãy thêm thư viện tiểu dự án

sau đó bạn có thể phân phối các dir đầu ra với các tập tin tiêu đề sao chép và lipo sáp nhập thư viện phổ cập và sử dụng thư viện bình thường như tiểu dự án trong vùng làm việc của bạn như bạn sẽ làm như thường lệ (nó được xây dựng và liên kết chỉ libs cần thiết sau đó, không phải là thư viện phổ thông nhưng điều đó không có vấn đề gì)

Điều này không thực sự giải quyết được vấn đề tạo các tệp DSYM cho thư viện. Nhưng thông thường các biểu tượng gỡ lỗi phải ở trong chính thư viện khi xây dựng một bản dựng gỡ lỗi. Nó sẽ loại bỏ các biểu tượng gỡ lỗi khi xây dựng bản phát hành và sau đó bạn sẽ không có DSYM.

Liên kết với dự án ví dụ: https://github.com/dunkelstern/StaticLibraryTemplate

+0

Cảm ơn bạn đã trả lời, có vẻ đầy hứa hẹn ngay từ cái nhìn đầu tiên. Tôi sẽ đi sâu vào nó sau ngày hôm nay sau khi tôi có một khoảnh khắc miễn phí. Nếu điều này giải quyết được vấn đề của tôi, tôi sẽ trao cho bạn những điểm. Nó nói "12 giờ nữa" cho đến khi tôi có thể cung cấp tiền thưởng. Cảm ơn!! – jpswain

+0

Vì vậy, tôi đã đi qua các dự án libturbojpeg của bạn. Có vẻ như một số mã C-baller. Tôi biết cách sử dụng lipo để kết hợp các bản dựng, nhưng trên thực tế mọi thứ khác đều muốn một cách dễ dàng chạy dự án lib tĩnh của tôi như là mã nguồn bình thường bên trong dự án phụ thuộc và như một thư viện tĩnh bằng nhau và dễ dàng hoán đổi. Bạn có xảy ra một ví dụ kết hợp libturbojepg theo cách đó không? Cảm ơn!! Jamie – jpswain

+0

Chỉ cần thả tệp dự án để xây dựng thư viện của bạn vào dự án của bạn, không tạo vùng làm việc nhưng thả nó vào cây dự án của bạn. Nó sẽ không hoạt động với dự án libturbojpeg vì nó có 2 kiến ​​trúc riêng biệt. Sau đó tạo một phụ thuộc trong giai đoạn xây dựng dự án chính của bạn và chèn tệp * .a vào bước liên kết. Như thế này: http://media.dunkelstern.de/images/Xcode_library_project.png – Dunkelstern

3

Tôi đang sử dụng https://github.com/jverkoey/iOS-Framework để đạt được một cái gì đó khá giống với nhu cầu của bạn. Cho anh ta tất cả tín dụng, tôi chỉ tóm tắt cách tôi làm điều đó.

Tạo một thư viện tĩnh như bình thường cộng với những tinh chỉnh:

  • Thêm một giai đoạn sao chép tập tin để sao chép các tiêu đề. Tôi không sử dụng giai đoạn "Sao chép tiêu đề" thích hợp vì tôi đọc ở đâu đó không được đề xuất cho các thư viện tĩnh của iOS.
    • Destination: Sản phẩm mục
    • Subpath: ${PROJECT_NAME}/Headers
  • Thay đổi một vài thiết lập:
    • "Chết Mã Tước" => Không (cho tất cả các thiết lập)
    • "Strip gỡ lỗi biểu tượng Trong Sao chép "=> Không (đối với tất cả các cài đặt)
    • " Kiểu dải "=> Ký hiệu không phải toàn cầu (cho tất cả các cài đặt)
  • Thêm tập lệnh chạy để chuẩn bị khuôn khổ với thư viện:
    • Sử dụng tập lệnh prepare_framework.sh.

Bạn có thể sử dụng các dự án thư viện tĩnh trong ứng dụng của bạn: kéo nó vào dự án ứng dụng của bạn, thêm thư viện .a như phụ thuộc và liên kết với nó. Bạn có thể gỡ lỗi thư viện cùng với ứng dụng của bạn, bước vào phương pháp, điều hướng đến các định nghĩa biểu tượng, vv

Khung chuẩn bị sẽ được sử dụng để phân phối một phiên bản nhị phân:

Trong cùng một dự án thư viện tĩnh thêm một tổng hợp mục tiêu:

  • Thêm thư viện tĩnh làm phụ thuộc.
  • Thêm giai đoạn chạy tập lệnh để tạo kiến ​​trúc bị thiếu. Sử dụng tập lệnh build_framework.sh.

Kịch bản đoán số nền tảng khác và sử dụng xcodebuild để biên dịch nó là gì. Sau đó sử dụng lipo để tạo ra một nhị phân chất béo với tất cả các kiến ​​trúc. Điểm đến của thư viện tĩnh chất béo sẽ là cây khung mà chúng ta đã tạo trước đây. Khung cuối cùng được sao chép vào thư mục sản phẩm trong thư mục build.

Với phương pháp này bạn có thể:

  • Xây dựng và debug ứng dụng của bạn với thư viện tĩnh như dự án lồng nhau.
  • Tạo một phiên bản phân phối của thư viện trong một bước với các tiêu đề được nhúng trong một gói giống như khung. Khung được xây dựng nằm trong thư mục Products của dự án.
  • Sử dụng chức năng Lưu trữ Xcode. Đối với một số lý do tập tin cuối cùng không được sao chép vào vị trí lưu trữ. Bạn có thể sử dụng nó để xây dựng một phiên bản bị loại bỏ của khung công tác.

Vui lòng sao chép dự án bằng kỹ thuật này để đóng gói thư viện: json-framework fork. Tôi đã sửa đổi một chút các tập lệnh, kiểm tra ngã ba của tôi iOS-framework.

Liên quan đến armv6, tôi đoán bạn cần và iOS SDK 4.3 cũ và thêm thủ công armv6 chữ vào danh sách kiến ​​trúc hợp lệ và kiến ​​trúc thực tế. Tôi không có và SDK cũ để kiểm tra nó ngay bây giờ.

+0

Cảm ơn người đàn ông!Tôi rất mong được thử cả giải pháp của bạn và giải pháp của @ Dunkelstern tối nay sau giờ làm việc. Đối với armv6, tôi không thực sự quan tâm đến nó để làm thêm bất kỳ tổn thương não nào ở đó. Apple là khá nhiều buộc mọi người từ bỏ anyways arch bằng cách loại bỏ nó từ Xcode. – jpswain

+0

Điều này khá thú vị, không chắc tôi đã sẵn sàng chuyển nó sang một khung chưa, nhưng tôi thực sự thích nó cùng một lúc. Tôi đặc biệt có thể thấy nó sẽ tuyệt vời như thế nào đối với các dự án sử dụng nhiều tài nguyên như Xibs, hình ảnh, v.v. – jpswain

+1

Tôi không bao gồm một nhóm tài nguyên (xibs, pngs, v.v.) trong câu trả lời của tôi, chỉ là 'giả mạo 'Khung công tác iOS. Trong thực tế, khung công tác này có chính xác thư viện * * * tĩnh được tạo bằng công cụ * cùng một công cụ lipo và chạy tập lệnh (không có cách nào khác). Nó có lợi thế là tự động cấu hình đường dẫn tiêu đề và hiển thị như một gói trong Xcode và Finder. Đó là một IMHO không có trí tuệ. – djromero

2

Cocoapods bao gồm nhu cầu của bạn. Mặc dù cách tiêu chuẩn để sử dụng nó là gửi thông số kỹ thuật nhóm đến một repo git trung tâm. Nó hỗ trợ thêm repos thay thế để phân phối, hoặc tự tạo chúng, xem here. Ưu điểm của việc sử dụng cocoapods là cả hai đều đáp ứng mọi yêu cầu của bạn và nó đang trở thành một cách phân phối thư viện rất chuẩn (ví dụ: các công ty như facebook & stackmob) và nguồn mở (ví dụ: afnetworking). Vì vậy, nếu bạn phụ thuộc vào thư viện của bên thứ ba hiện tại hoặc trong tương lai, rất có thể là cocoapods sẽ giúp bạn xử lý sự phụ thuộc đó.

+0

Thật không may, sự cần thiết cho CocoaPods không phải là một cái gì đó tôi muốn áp đặt khi khách hàng của bên thứ ba. Cá nhân tôi chưa thử nó, nhưng nó có vẻ như là một ý tưởng hay. – jpswain