2016-06-08 11 views
5

एक पुस्तकालय मैं उपयोग कर रहा हूँ करने के लिए .frameworks कॉपी करने के लिए CMake का उपयोग करते हुए हाल ही में एक .framework के रूप में वितरण करने लगे।iOS एप्लिकेशन बंडल

अपने मौजूदा CMake फ़ाइल में, मुझे अपने iOS एप्लिकेशन के साथ लिंक करने के लिए इसे प्राप्त करने में सफल है, लेकिन हो रही है:

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 से इसे स्थापित। मैं मैन्युअल रूप से, मेरे XCode प्रोजेक्ट में तो उसे जोड़ने के "एम्बेडेड बाइनरी" खंड में तो मैं अच्छा हूँ (नीचे छवि देखें)

enter image description here

तो मैं यह निष्कर्ष निकाला है कि समस्या में .framework हो रही है मेरा ऐप बंडल मैं this question का सामना करना पड़ा और जुड़ा हुआ क्यूटी उदाहरण में देखा, लेकिन मैं अभी भी अपने आप को यहाँ उन्मुख करने के लिए के रूप में मैं अपारदर्शी वाक्य रचना एक सा लग रहा हूँ कोशिश कर रहा हूँ।

CMake के BundleUtilities है क्या मैं यहाँ का उपयोग करना चाहते हैं? BundleUtilities उदाहरण को देख में मैं थोड़ा खो कर रहा हूँ:

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

इस OSX विशेष है या मैं इसे आईओएस की तरह ही आवेदन कर सकते हैं?

+1

मैं एक ही समस्या है। जहां तक ​​मैं समझता हूं, FIXUP_BUNDLE इसके लिए आदर्श होना चाहिए। हालांकि, ऐसा लगता है कि यह आईओएस बंडल लेआउट से निपटने के लिए बनाया गया है। –

+0

@EmilStyrke उत्तर देने के लिए थोड़ी देर के लिए मेरी TODO सूची में रहा है, आपके दर्द ने मुझे इसे प्राथमिकता में स्थानांतरित करने के लिए प्रेरित किया है :) –

उत्तर

2

हम एक आदर्श समाधान खोजने अंत नहीं था और चीजों को प्राथमिकता से भी अधिक मैन्युअल रूप से एक सा कर समाप्त हो गया:

  1. हम हम चलाने के बाद निर्माण पूरा हो गया है एक कस्टम आदेश जोड़ा है, लेकिन यह पहले पैक किया गया है (सीएमके के add_custom_command देखें)।

    • हमारे एप्लिकेशन बंडल फ़ोल्डर के अंतर्गत एक फ़्रेमवर्क निर्देशिका (यकीन है कि यह कहीं न कहीं, जहां यह अपने पैकेजिंग प्रक्रिया में नकल हो जाएगी बनाने) बनाता है:

    • कस्टम आदेश के बाद करता है।

    • हम cp -aH का उपयोग इस में सभी व्यवस्थाएं कॉपी करने के लिए निर्देशिका
    • चौखटे हम तो उपयोग करते हुए इस निर्देशिका में प्रत्येक ढांचे में पुनः प्रवेश: set_target_properties(${EXE_NAME} PROPERTIES XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks")

      : codesign --force --verbose Computers.framework --sign "$2"
  2. अपनी खोज पथ को फ़्रेमवर्क निर्देशिका जोड़ें

+0

धन्यवाद! यह बहुत ही मैं क्या कर समाप्त हो गया के समान है, लेकिन मैं यह भी, बाद में बनाता है के बाद से बंडल प्रवेश करना छोड़ करने के लिए, लेकिन अभी भी कस्टम आदेश चला लगते बंडल ही पुनः प्रवेश कराने के लिए किया था। यकीन नहीं है कि यह सीएमके या एक्सकोड के साथ एक समस्या है। –

+0

क्या '--sign' के बाद *** $ 2 *** है? – Itachi

+0

आपकी हस्ताक्षर आईडी। –

संबंधित मुद्दे