2011-04-21 23 views
6

Bir QuickLook jeneratörü yazmaya çalışıyorum. Bunun için yarattığım bir çerçeveye bağlanmam gerekiyor. Ancak, en kısa sürede karşı bağlamak olarak çerçeve, qlmanage söyleyerek kalbimizi eklenti yüklemek reddeder ki: Ben, çerçeveleri ve QuickLook'u Bağlama ilgili tüm öğreticiler okumak ama hiçbir cevap buldukÇerçeveleri QuickLook eklentilerine bağlama

[ERROR] Can't load plug-in at /path/to/my-ql.qlgenerator: The bundle “my-ql” couldn’t be loaded because it is damaged or missing necessary resources. 

. Ben öğrendim

şeyler/şimdiye kadar

  • Architecture dışladı: 32 bit, ikili tüm bağlantı oluşturma sürecinde hatalar olarak Framework dahil, bu nedenle bu sorun görünmüyor zaman.
  • Çerçevenin eklentinin paketine Contents/Frameworks altında kopyalandığını doğruladım.
  • çerçevenin yüklemek yolu başka bir uygulamada çerçeve kullanırken Ayrıca, her şey iyi gider @executable_path/../Frameworks

olarak ayarlanır. Ben mümkün olabilir olası açıklama aşağıdaki gibidir: qlmanage yürütürken, @executable_path aslında bu ikili işaret eder ve benim çerçevem ​​asla bulunmaz. Bu durumda, eklentiye göre bir konuma izin vermek için yükleme yolunu nasıl ayarlamalıyım? Çerçevemi global olarak kurmak istemiyorum. inşa QuickLook'u Plugin üzerinde DÜZENLEME

otool -L

şu sonuçları verir: Benim çerçeve üzerinde

/System/Library/Frameworks/QuickLook.framework/Versions/A/QuickLook (compatibility version 1.0.0, current version 327.4.0) 
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 38.0.0) 
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 44.0.0) 
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.29.0) 
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 15.0.0) 
@executable_path/../Frameworks/PESHandler.framework/Versions/A/PESHandler (compatibility version 1.0.0, current version 1.0.0) <== *this is my framework* 
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0) 
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0) 

otool -D verir bu:

@executable_path/../Frameworks/PESHandler.framework/Versions/A/PESHandler 

Çerçeve çöp gerektirmez Toplamak.

cevap

7

@executable_path, işlem için ana yürütülebilir görüntünün karşısına gider. Bu eklenti değil, quicklook daemon olurdu. Bunun yerine @loader_path kullanmalısınız.

Bunu kapsayan bir blog post belgesi.

+0

Teşekkür ederim. Bu değişkenlerden bazılarını ('@ loader_path' ve' @ rpath' dahil) okumuştum ama çok düşünmedim. –

+1

.. http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/ adresinde önerildiği gibi "@ rpath" a geçin. – Jay

1

Çerçevenizi kullandığınız uygulamanın çöp toplama işlemini gerektirip gerektirmediğini söylemezsiniz. Çerçevenin buna ihtiyacı varsa bile. Quick Look jeneratörü çöp toplama yöntemini kullanarak derlemeye çalışıyor olabilirsiniz. Ancak, Nicholas Riley's reply to this post'a göre "Hızlı Bakış jeneratörler çöp toplama ile derlenmiyor". Yalnız bu, neden dediğiniz gibi, “aslında tüm bağlantı süreci hataları” diye açıklıyor olabilir.

Çerçevenize aşina olmayınca, çöp toplama konusundaki güvenin ortadan kaldırılması için sürecin ne kadar ilgili olacağı hakkında hiçbir fikrim yok (yine, durum buysa), ancak çerçeveniz Hızlı bir şekilde kullanılmak üzere yeniden çalışmayı gerektirebilir Jeneratöre bak.

+0

Hayır, ne çerçeve ne de kullanılan GC ile yapılan uygulama. Elbette, SO ile ilgili tüm tartışmaları (ve özellikle de bağlantı kurduğunuz) okudum. Derdi ki, sızıntılar olurdu ama sızıntılar benim sorunum değil (en azından şu anda değil).Ayrıca, “tüm bağlantı süreci hataları” yorumumun yalnızca (“belirttiğim gibi)” “Çerçeve'yi 32-bit ikili” olarak eklerken ”uyguladığı, dolayısıyla çöp meselesi ile nasıl alakalı olması gerektiğini görmediğim yorumunu da ekledim. toplama: eklenti ve çerçeve * yapı * yapı mimarileri, tabii ki, bağlantı süreci, sadece iyi geçer. –