2016-06-08 18 views
5

Bir kitaplık Son zamanlarda dağıtımını .framework olarak kullanıyorum. Mevcut CKağıt dosyasındaÇerçeveyi iOS uygulamasına kopyalamak için CMake'i kullanma Grup uygulaması

, benim iOS uygulaması ile bağlamak için bunu alma başarılı oldum, ama alıyorum:

dyld: Library not loaded: @rpath/Pizza.framework/Pizza 
    Referenced from: /var/mobile/Containers/Bundle/Application/D71ED298-C287-4B2F-8AFA-710A14C06D75/pizzashop.app/pizza 
    Reason: image not found 

Xcode onu yüklediğinizde. El ile "embedded ikili" bölümünde, benim xcode projeye ekleyin o zaman iyiyim

enter image description here

Bu yüzden problem haline .framework oluyor sonucuna sonra (aşağıdaki resme bakın) benim uygulama paketim. Ben this question ile karşılaştım ve bağlantılı QT örneğine baktım, ama ben hala sözdizimi biraz opak buluyorum olarak kendimi yönlendirmeye çalışıyorum.

CMake'in BundleUtilities'i burada kullanmak istediklerim var mı? BundleUtilities örneğe bakarak ben biraz kayboldum:

set(APPS ...) # paths to executables 
set(DIRS ...) # directories to search for prerequisites 
INSTALL(CODE " 
    include(BundleUtilities) 
    fixup_bundle(\"${APPS}\" \"\" \"${DIRS}\") 
    " COMPONENT Runtime) 

bu OSX özgü mi yoksa iOS benzer uygulayabilirsiniz?

+1

Aynı sorunu yaşıyorum. Anladığım kadarıyla, FIXUP_BUNDLE bunun için ideal olmalı. Bununla birlikte, iOS paket düzenleriyle başa çıkmak için yapılmış gibi görünmüyor. –

+0

@EmilStyrke cevabını yayınlamak için bir süreliğine TODO listemde olmuştur, ağrınız beni önceliğe taşımak için beni teşvik etti :) –

cevap

2

Biz ideal bir çözüm bulma sonunda ve tercih daha elle işleri biraz yapmak sona erdi vermedi:

  1. Biz inşa tamamlandıktan sonra çalıştırmak özel bir komut eklendi ama ondan önce paketlenmiştir (bkz. CMake'in add_custom_command).

    • bizim uygulama paketi klasörü altında bir Çerçeveleri dizinini (sizin ambalaj sürecinde kopyalanan alacak nerede bir yerde olduğundan emin olun) oluşturur:

    • özel komut aşağıdakileri yapar. set_target_properties(${EXE_NAME} PROPERTIES XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks")

      : codesign --force --verbose Computers.framework --sign "$2"
  2. arama yollarına Çerçeveleri dizin ekleyin: Biz bu işe tüm çerçeveler kopyalamak için cp -aH kullanmak

  3. o zaman kullanarak bu dizindeki her çerçeveyi yeniden oturum dizini
  4. çerçeveler
+0

Teşekkürler! Bu, yaptığım şeye çok benziyor, ama aynı zamanda paketin kendisini yeniden imzalamak zorunda kaldım, çünkü sonraki yapıların demet imzalamayı atlayıp hala özel komutu çalıştırdığı görülüyor. CMake veya XCode ile ilgili bir sorun olup olmadığından emin değil. –

+0

''sign'den sonra *** 2 *** *** nedir? – Itachi

+0

İmza kimliğiniz. –

İlgili konular