2011-11-12 14 views
9

Tôi sử dụng xcode 4 để xây dựng ứng dụng ca cao với khung công tác/khung riêng tư.Tạo gói ứng dụng Cocoa với dylib/khung riêng

Trong bản phát triển Mac, tôi đặt dylib vào thư mục/usr/local/lib và kéo nó vào dự án.

Ứng dụng được biên dịch và chạy hoàn hảo trên máy tính của tôi.

Để phân phối ứng dụng này cho máy Mac khác, tôi tạo giai đoạn tạo tệp Sao chép và nói "sao chép thư mục đó vào thư mục Khung".

Ứng dụng được xây dựng thành công và tôi thực sự thấy dylib được sao chép vào thư mục Khung trong gói ứng dụng.

Vấn đề là khi tôi chạy ứng dụng này trong một máy Mac thông thường khác, không cài đặt dylib này. Tôi nhận được một lỗi nói:

dyld: Library not loaded: /usr/local/lib/mylib.dylib 
+0

Bạn đang xây dựng thư viện từ nguồn hay bạn đã nhận được thư viện từ nơi nào đó đã được tạo chưa? –

Trả lời

9

vấn đề này xuất phát từ thực tế là bạn sao chép khung vào gói ứng dụng, vì vậy nó có sẵn tại một địa điểm như:

<you_app_path>/Contents/Frameworks 

nhưng bạn cố gắng tải từ số /usr/local/lib nơi không có sẵn trên máy triển khai của bạn. Từ Apple Framework Programming Guide:

Để nhúng một khuôn khổ trong một ứng dụng, có một số bước mà bạn phải thực hiện:

Bạn phải cấu hình xây dựng giai đoạn của mục tiêu ứng dụng của bạn để đưa khuôn khổ ở đúng vị trí.

Bạn phải định cấu hình thư mục cài đặt của mục tiêu khung, cho biết khuôn khổ nơi nó sẽ hoạt động.

Bạn phải định cấu hình mục tiêu ứng dụng để nó tham chiếu đến khung trong thư mục cài đặt của nó.

Bây giờ, bạn nói rằng giai đoạn xây dựng là ok; Tôi cũng giả sử rằng bạn đã gửi đúng cài đặt xây dựng mục tiêu ứng dụng. Những gì còn lại là định cấu hình thư mục cài đặt của mục tiêu khung.

Nếu bạn không tự xây dựng khung, bạn có thể khắc phục điều này bằng cách thay đổi đường dẫn cài đặt khung để được xác định tương ứng với trình tải (ứng dụng của bạn), chẳng hạn như: @loader_path/../Frameworks/ (hoặc @executable_path/../Frameworks). Bạn có thể làm điều đó bằng phương tiện install_name_tool.

Nếu bạn tự biên dịch khung riêng tư, bạn có thể xác định vị trí cài đặt của nó trong cài đặt Xcode.

+0

Có. phương pháp này hoạt động. Ít nhất tôi có thể cho phép ứng dụng tải khung công tác riêng tư trong máy triển khai. Nhưng một lỗi khác xuất hiện. Khung công tác riêng liên kết một số thư viện (/usr/lib/libiconv.dylib libcurl, ... etc). Tôi sử dụng otool để kiểm tra đường dẫn thư viện và nó hiển thị /usr/lib/lib *** Vấn đề của tôi là cách đặt đường dẫn của các thư viện này? – ianXian

+0

Với dylibs bạn có thể sử dụng install_name_tool và chỉ định @ loader_path /../ Frameworks/(not executable_path). – sergio

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