2012-02-07 30 views
9

Tôi có các khung tùy chỉnh trong gói ứng dụng của mình cho WebKit, WebCore và JavaScriptCore. Tôi muốn tất cả các khung công tác khác phụ thuộc vào các phiên bản hệ thống của WebKit, WebCore hoặc JavaScriptCore để sử dụng các phiên bản tùy chỉnh của tôi. Ví dụ, phiên bản Webkit tùy chỉnh của tôi tải các khung hệ thống riêng tư mà lần lượt phụ thuộc vào phiên bản hệ thống của WebKit. Điều này có nghĩa là cả WebKit của tôi và WebKit của hệ thống đều được tải và thường xảy ra sự cố ngay sau đó.Cách sạch nhất để thiết lập biến môi trường DYLD_FRAMEWORK_PATH cho bản xây dựng bản phát hành là gì?

Cách tôi hiểu điều này nên được thực hiện, là đặt biến môi trường DYLD_FRAMEWORK_PATH trước khi gói ứng dụng của bạn bắt đầu thực hiện (Tìm kiếm khung tải có thể tìm thấy tại đây: http://code.google.com/p/macdependency/wiki/SearchPaths). Bạn có thể thiết lập các biến môi trường trong mã với setenv, nhưng nó sẽ không có hiệu lực đối với tiến trình đang chạy. Tôi sẽ phải khởi động lại quy trình một lần nữa để nó có hiệu lực. Tôi cũng muốn tránh điều này.

Vì vậy, câu hỏi của tôi là cách tốt nhất để đặt DYLD_FRAMEWORK_PATH trước khi thực thi gói ứng dụng của tôi là gì? Điều này cũng phải hoạt động trong gói ứng dụng bản phát hành. Có cách nào để chạy tập lệnh hay không khi có ai đó nhấp vào gói ứng dụng của tôi trước khi tệp thực thi bắt đầu chạy. Hoặc có bất kỳ đề xuất nào khác không?

Xin cảm ơn trước.

+0

Bạn có ý nghĩa gì bởi 'tất cả các khuôn khổ khác'? Nếu đó chỉ là khung công tác riêng tư của bạn, bạn có thể xây dựng chúng liên kết tới WebKit riêng tư của bạn và các khung công tác liên quan không? –

+0

Cũng ở đâu đó trong núi mã là Webkit tùy chỉnh của tôi, DataDectors.framework được tải nếu bạn nhấp chuột phải vào cửa sổ (Chỉ trên OSX Lion) và DataDectors là một khung hệ thống riêng (không được xây dựng bởi tôi). Khi điều này xảy ra, DataDectors phụ thuộc vào các phiên bản hệ thống của WebKit và JavaScriptCore, do đó, một khi điều này xảy ra thì hiện có 2 bản sao của WebKit được tải, của tôi và các hệ thống. Điều này gây ra kết quả không mong muốn và sự cố. –

+1

Bạn có bao giờ quản lý để làm việc này không? Tôi đang tìm cách để làm một cái gì đó tương tự, và không có nhiều may mắn với bất kỳ phương pháp được đề nghị. – starkos

Trả lời

1

Tôi muốn giới thiệu environment.plist hoặc phím LSEnvironment trong info.plist. Kiểm tra các liên kết dưới đây.

https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/EnvironmentVars.html

+1

Info.plist chỉ mất đường dẫn tuyệt đối và tôi cần đường dẫn nằm bên trong gói ứng dụng của tôi, kỹ thuật này có thể được di chuyển xung quanh. Nếu tôi đặt nó trong environment.plist của tôi là toàn cục này, bởi vì nếu nó cũng không tốt, bởi vì các ứng dụng khác có thể sử dụng biến môi trường. –

2

Jeff Wolski has the right idea bằng cách giới thiệu trực tiếp đến tài liệu hướng dẫn của Apple về đề tài này. This thread cũng cung cấp lời khuyên tuyệt vời về cách thực hiện điều đó trong Xcode, bao gồm các trường hợp góc được liên kết với các phương pháp thay thế đặc điểm kỹ thuật (ví dụ: bằng cách sử dụng trực tiếp ~/.bash_profile cho người dùng của bạn).

Lý do của tôi cho chiming là bạn cũng yêu cầu một tập lệnh có thể hỗ trợ bạn (và nhà cung cấp tiền thưởng dường như có cùng một vấn đề). Hóa ra Webkit references such a script in its documentation, mà bạn có thể muốn tách ra khỏi the applicable Webkit source code. Điều này sẽ cung cấp cho bạn hướng dẫn bổ sung về cách, ít nhất theo các nhà phát triển, bạn nên làm điều này đúng cách.

Chúc bạn may mắn với (các) dự án của mình.

+0

Tôi đã xem tập lệnh run-safari và tập lệnh sẽ hoạt động, nhưng tôi không chắc chắn cách buộc một tập lệnh chạy bất cứ khi nào ai đó nhấp vào một gói ứng dụng. Tôi cần các biến môi trường được đặt cho phiên của tệp thực thi bên trong gói ứng dụng của tôi. –

+0

@MichaelWildermuth Theo [câu hỏi này] (http://stackoverflow.com/questions/281372/executing-shell-scripts-from-the-os-x-dock), có rất nhiều tùy chọn tồn tại. Ít nhất một trong số này sẽ đáp ứng nhu cầu của bạn, có thể là [thông qua một tệp '.command'] (http://stackoverflow.com/a/281386/517815) hoặc [phương pháp biên tập Script phức tạp hơn] (http://stackoverflow.com/a/310183/517815). Nếu những điều này không phù hợp với bạn, chúng tôi sẽ thảo luận một số tùy chọn khác. :) – MrGomez

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