2013-04-30 50 views
8


Tôi đang tạo một Static Library cho iOS ứng dụng. Tôi gần như hoàn thành nó, nhưng có một vấn đề với các nguồn tài nguyên.Làm cách nào để chuyển các tệp tài nguyên bằng Thư viện tĩnh (Cách bọc tài nguyên trong gói)?

Thư viện tĩnh của tôi sử dụng nhiều tệp hình ảnh và âm thanh. Làm thế nào tôi có thể chuyển nó với Thư viện tĩnh của tôi?

Tôi biết chúng tôi có thể gói nó trên một bó và đưa nó dọc theo tệp .a. Nhưng tôi không biết làm thế nào để bọc hình ảnh và các tập tin âm thanh trong một tập tin bó.

Những gì tôi đã làm:

  • tôi đã tìm kiếm rất nhiều, nhưng không thể tìm thấy bất kỳ liên kết hữu ích.
  • Tôi nhận được tài liệu tham khảo Conceptual CFBundles nhưng không tìm thấy giải pháp nào cho sự cố của tôi.
  • Tôi đã kiểm tra các mẫu tập tin có sẵn cho XCode, nhưng không thấy bất kỳ loại bó khác hơn Settings Bundle.

Trả lời

9

Có nhiều lý do tốt để xây dựng một ứng dụng với nhiều bó và nhiều cách khác nhau để làm điều đó. Theo kinh nghiệm của tôi, cách tốt nhất là mở Xcode và tạo một gói mới:

  1. Chọn: Tệp -> Dự án mới ... -> Nhóm Mac OSX (!) -> Khung & Thư viện -> Gói. Thêm các tệp tài nguyên của bạn vào dự án.
  2. Tạo nhóm khi bạn tạo các ứng dụng iPhone khác.
  3. Bạn có thể thêm dự án này vào dự án thư viện tĩnh của mình và xây dựng lại toàn bộ thời gian thư viện được thay đổi. Bạn phải biết rằng chính gói đó sẽ không được liên kết với tệp thư viện của bạn.
  4. Trong các dự án ứng dụng của bạn, hãy thêm tệp .bundle vào dự án của bạn dưới dạng tệp tài nguyên thông thường (Thêm -> Tệp hiện có… -> tìm và chọn tệp .bundle được xây dựng ở trên. Không sao chép tệp).

Ví dụ:

// Static library code: 
#define MYBUNDLE_NAME  @"MyResources.bundle" 
#define MYBUNDLE_IDENTIFIER @"eu.oaktree-ce.MyResources" 
#define MYBUNDLE_PATH  [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: MYBUNDLE_NAME] 
#define MYBUNDLE   [NSBundle bundleWithPath: MYBUNDLE_PATH] 

// Get an image file from your "static library" bundle: 

- (NSString *) getMyBundlePathFor: (NSString *) filename 
{ 
     NSBundle *libBundle = MYBUNDLE; 
     if(libBundle && filename){ 
      return [[libBundle resourcePath] stringByAppendingPathComponent: filename]; 
     } 
     return nil; 
} 

// ..... 
// Get an image file named info.png from the custom bundle 
UIImage *imageFromMyBundle = [UIImage imageWithContentsOfFile: [self getMyBundlePathFor: @"info.png"] ]; 

Để được trợ giúp nhiều hơn bạn có thể kiểm tra những bài viết này tốt

  1. iOS Library With Resources

  2. Resource Bundles

Hy vọng nó sẽ giúp bạn.

+0

Cảm ơn câu trả lời của bạn :) –

+0

hmmm. chào mừng Midhun :-) –

+0

một điều: imageWithContentsOfFile kém trong trường hợp hoạt động tốt hơn là sử dụng imageNamed vì nó đang sử dụng bộ nhớ đệm để nó có thể nhanh hơn :) thêm vào đó bạn có thể đạt được kết quả tương tự với ít mã đơn giản hơn: '[UIImage imageNamed : [NSString stringWithFormat: @ "my.bundle /% @", imageName]]; 'và chỉ cần đặt tên gói phù hợp –