दिलचस्प पोस्ट
क्या बूल एक देशी सी प्रकार है? Scipy (पायथन) वाले सैद्धांतिक लोगों के लिए अनुभवजन्य वितरण फिटिंग? टेक्सटेरा में चयनित पाठ कैसे प्राप्त करें? क्या मैं Django में settings.py से टेम्पलेट्स में स्थिरांक का उपयोग कर सकता हूं? स्कैनर विधि को चार अक्षर प्राप्त करने के लिए फोकस प्राप्त होने पर टेक्स्टबॉक्स की सभी सामग्रियों का चयन करें (वेनिला जेएस या jQuery) जावा में एक ऑब्जेक्ट संदर्भ कितना बड़ा है और इसमें ठीक से जानकारी क्या है? रेल 4: उपलब्ध डेटाटाइपों की सूची जावास्क्रिप्ट – चयन के आधार पर फार्म बदलने में परिवर्तन? किसी प्रोजेक्ट से कोकोपॉड को कैसे निकालना है? Nullptr का उपयोग करने के क्या फायदे हैं? एडीटी 22.2 नया ऐप विज़ार्ड: असमर्थित टेम्पलेट निर्भरता: अपने एंड्रॉइड एक्लिप्स प्लगइन का नवीनीकरण करें MySQL: विशिष्ट मानों की संख्याओं की गणना करें एक माउस के एक्स / वाई निर्देशांक प्राप्त करना एक छवि पर क्लिक करता है ओएस एक्स या आईओएस (जीस्टॉल्ट का उपयोग किए बिना) में रनटाइम पर मैं ओएस संस्करण कैसे निर्धारित करूं?

Xcode 6 और एम्बेडेड फ़्रेमवर्क केवल iOS8 में समर्थित हैं

जब तैनाती लक्ष्य को कम करने के लिए Xcode 6.0.1 में एक एम्बेडेड ढांचा (डीआईएलडी) का उपयोग करते हैं तो आईओएस 8 मुझे मिलता है:

  • बिल्ड सफल होता है
  • रनटाइम लायब्रेरी लोडिंग त्रुटि

त्रुटि:

dyld: Library not loaded: @rpath/ObjectiveLyricsTouch2.framework/ObjectiveLyricsTouch2 Referenced from: /private/var/mobile/Containers/Bundle/Application/DC65ACA9-98E5-46CD-95F8-829D3416F6C0/musiXmatch.app/musiXmatch Reason: image not found (lldb) 

वेब के समाधान से एकत्रित समाधान "Xcode 6 और एम्बेडेड फ़्रेमवर्क केवल iOS8 में समर्थित हैं"

कुछ समय के लिए मैं सोच रहा था कि यह मेरी समस्या भी है, लेकिन सामान्य ऐप्स ( गैर-आईओएस -8-एक्सटेंशन ) के लिए आपको सिर्फ अपने आकस्मिक Xcode 6 आईओएस यूनिवर्सल फ़्रेमवर्क लक्ष्य ( सेट मच-ओ प्रकार स्टेटिक लाइब्रेरी के लिए ):

इसे स्टेटिक लाइब्रेरी में सेट करें

उसके बाद आइट्यून्स कनेक्ट और आईओएस 7 के साथ कोई समस्या नहीं होनी चाहिए 🙂

इसलिए, खुदाई के बाद मैं समाधान के साथ बाहर आया

ऐप में जोड़ने के लिए आपका माइमब्डेड फ़्रेमवर्क। फ्रेमवर्क बनाने का अनुमान है, ऐसा करें

  1. टैब में MyEmbeddedFramework.framework निकालें सामान्य> एम्बेडेड बाइनरीज़
  2. बनाएँ चरणों को निकालें> कॉपी चरण "फ्रेमवर्क" यदि आपके पास MyEmbeddedFramework.framework है
  3. साफ फ़ोल्डर बनाएँ
  4. शून्य एम्बेडेड फ़्रेमवर्क अनुभाग में MyEmbeddedFramework.framework को स्थानांतरित करें।
  5. अब आप देखेंगे कि एक नया बिल्ड चरण> एम्बेडेड फ़्रेमवर्क एक्सकोड 6 द्वारा बनाया गया है (आप नहीं, यह स्वचालित रूप से किया जाता है)
  6. अब अगर आपके पास 5 है, तो बिना किसी गुम के चलना चाहिए।

तो रीकैप करने के लिए, इसे काम करने के लिए आप में MyEmbeddedFramework.framework को देखना चाहिए

ए) सामान्य> एंबेडेड बाइनरीज़ सामान्य> एंबेडेड बाइनरीज़

बी) चरण बनाएँ> एम्बेडेड फ़्रेमवर्क बिल्ड चरण> एम्बेडेड फ़्रेमवर्क

यह iPhone5S / iOS7 पर iPhone5S / IOS7 पर ठीक काम करता है, जहां मैं मिलता है:

dyld: पुस्तकालय लोड नहीं किया गया: @ rpath / ObjectiveLyricsTouch2.framework / ObjectLyricsTouch2 से संदर्भित: /var/mobile/Applications/739D9C44-3B91-4D4F-805B-83BE66C9CBCA/musiXmatch.app/musiXmatch कारण: कोई उपयुक्त छवि नहीं मिली। क्या मिला: /private/var/mobile/Applications/739D9C44-3B91-4D4F-805B-83BE66C9CBCA/musiXmatch.app/Frameworks/ObjectiveLyricsTouch2.framework/ObjectiveLyricsTouch2: असंगत सीपीयू-उपप्रकार: 0x0000000B में / निजी / var / मोबाइल / अनुप्रयोग / 739D9C44-3B91-4D4F-805B-83BE66C9CBCA / musiXmatch.app / Frameworks / ObjectiveLyricsTouch2.framework / ObjectiveLyricsTouch2

समस्या एंबेडेडफ्रेमवर्क में थी मुझे करना पड़ा

1) डिफॉल्ट के लिए आर्किटेक्चर सेट करें 2) मान्य आर्किटेक्चर को इन्हें सेट करें: आर्मव 7, आर्मवी 7 और आर्मवी 64 (जैसा कि ऐप्पल सुझाव देता है कि एंबेडेड फ्रेमवर्क कार्य करने की आवश्यकता है armv64)।

तब मैं ऐप को एक एम्बेडेड ढांचे के साथ चलाने में सक्षम था

  • iPhone5S / आईफोन 5 सी आईओएस 8
  • आईफोन 5 एस / आईफोन 5 सी आईओएस 7
  • आइपॉड 5 वीं जनरल / आईओएस 7
  • iPhone4S / iOS7
  • iPhone4 / iOS7

जब भी iTunes को कनेक्ट करते हैं, तो मैं न्यूनतम आवश्यक संस्करण के लिए कुछ त्रुटियां प्राप्त करता हूं:

  • फ्रेमवर्क "MinimumOSVersion" अमान्य है न्यूनतम मूल्य आईओएस 8.0 है;
  • अमान्य वास्तुकला: ऐप जो शामिल हैं और ऐप एक्सटेंशन और एक चौखटे के लिए arm64;

एम्बेडेड फ़्रेमवर्क समस्याएं

अभी के रूप में ऐप और विजेट के बीच कोड साझा करने के लिए एम्बेडेड ढांचे का उपयोग करने का कोई तरीका नहीं है और आईओएस 8 के साथ-साथ आईओएस 7 और पिछले पर भी इसका संचालन किया गया है।

यहां पर कुछ और पढ़ रहे हैं http://atomicbird.com/blog/ios-app-extension-tips

फ्रेमवर्क बनाम आईओएस 7

यदि आप किसी ऐप और एक्सटेंशन के बीच कोड साझा कर रहे हैं, तो ऐसा करने का एक अच्छा तरीका कोड को पकड़ने के लिए अपना खुद का एम्बेडेड ढांचा तैयार करना है। आईओएस 8 पर यह दोनों मामलों के लिए गतिशील रूप से लोड होगा, इसलिए आप सेट कर रहे हैं।

यदि आप अभी भी iOS 7 (या पहले) का समर्थन करते हैं, तो यह इतना स्पष्ट कटौती नहीं है एंबेडेड फ्रेमवर्क वहां काम नहीं करते हैं ऐप एक्सटेंशन प्रोग्रामिंग गाइड धीमी गति से नोट करता है कि आप इस से निपटने के लिए डलप्पन का उपयोग कर सकते हैं। उस दृष्टिकोण से आप आईओएस पर भरोसा करने के बजाय रन टाइम पर गतिशील रूप से लोड करने के लिए कोड लिखते हैं, अगर आपने यह सत्यापित किया है कि ऐसा कोड आईओएस के संस्करण पर चल रहा है जो ऐसा करने का समर्थन करता है

लेकिन आप iOS 7 पर उस कोड का उपयोग कैसे करते हैं? तुम नहीं करते अगर आपका साझा कोड एक एम्बेडेड ढांचे में है, तो iOS 7 पर इसे चलाने का कोई तरीका नहीं है। यह अभी अनुपलब्ध है।

डोलप्पन दृष्टिकोण आसान हो सकता है अगर आपको iOS 8 पर साझा किए गए कोड की आवश्यकता हो तो। अगर आपको आईओएस 7 की आवश्यकता है, तो आपको इसे ऐप लक्ष्य में शामिल करना होगा। और एक बार आप ऐसा करते हैं, आपको ढांचे की कोई ज़रूरत नहीं है। आप ऐप एक्सटेंशन के लिए अभी भी एक ढांचा का उपयोग कर सकते हैं, लेकिन ऐसा करने से वास्तव में उपयोगी नहीं है आप ढांचे के निर्माण का काम कर रहे होंगे, लेकिन इससे कोई लाभ नहीं मिलेगा बस दोनों लक्ष्यों में साझा कोड शामिल करें

और ऐप्पल के एक्सटेंशन गाइड से https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensibilityPG.pdf

यदि आप अपने युक्त ऐप से एम्बेडेड ढांचे से लिंक करते हैं, तो आप 8.0 की तुलना में आईओएस के संस्करणों के लिए अभी भी उसे तैनात कर सकते हैं, हालांकि इन संस्करणों में एम्बेडेड फ़्रेमवर्क उपलब्ध नहीं हैं।

एक्सकोड 6.1.1 में त्रुटि तय की गई

vim या vi का उपयोग कर project.pbxproj फ़ाइल खोलें

फ़ाइल के अंत में (8.1 के लिए खोज), वहां XCBuildConfiguration अनुभाग शुरू होगा

अपने ढांचे के लिए देखो

आउट केस में भले ही तैनाती का लक्ष्य एक्सकोड के जरिए -> सामान्य लक्ष्य सेटिंग में 7.1 पर था, फाइल में प्रविष्टि में डिबग और रिलीज़ दोनों के लिए 8.1 था

यहां पुरानी फाइल अनुभाग दिखता है:

 CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = ENFramework/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.1; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; 

नया अनुभाग ऐसा दिखता है:

 CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = ENFramework/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 7.1; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; 

अब हमें कोई चेतावनी नहीं मिली है (लेकिन आईओएस 7.1 डिवाइस पर काम करती है): एलडी: चेतावनी: एम्बेडेड डाइलीब / फ़्रेमवर्क केवल आईओएस 8 या उसके बाद के संस्करण पर चलते हैं

यह एक xcode बग की तरह दिखता है जो गलत तरीके से अलग आईओएस लक्ष्य सेट करता है और फिर त्रुटि उत्पन्न करता है।

एप्पल प्रलेखन पर गहराई से जा रहा है मुझे डेलोपें कमांड के बारे में पता चला है, जिसका उपयोग कुछ संस्करणों पर पुस्तकालयों को जोड़ने के लिए किया जाता है, जो समर्थित सिस्टम संस्करणों और पुस्तकालयों के आधार पर होता है।

उपयोग के dlopen उदाहरण: क्या 'dlopen ()' निजी एपीआई फ़ंक्शन है?

तो आइए एप्पल डॉक्स द्वारा दिए गए समाधान को देखें:

आईओएस के पुराने संस्करणों के लिए एक सम्मिलित ऐप को नियोजित करना

यदि आप अपने युक्त ऐप से एम्बेडेड ढांचे से लिंक करते हैं, तो आप 8.0 की तुलना में आईओएस के संस्करणों के लिए अभी भी उसे तैनात कर सकते हैं, हालांकि इन संस्करणों में एम्बेडेड फ़्रेमवर्क उपलब्ध नहीं हैं।

तंत्र जो आपको ऐसा करने की सुविधा देता है वह डलप्पेन कमांड है, जिसका उपयोग आप एक कमानात्मक रूप से लिंक करने और एक फ्रेमवर्क बंडल लोड करने के लिए करते हैं। आप इस आदेश को बिल्ड-टाइम लिंक के विकल्प के रूप में कार्य करते हैं, जिसे आप सामान्य Xcode सामान्य या बिल्ड चरणों लक्ष्य संपादक में निर्दिष्ट कर सकते हैं। मुख्य विचार केवल एम्बेडेड चौखटे को आपके युक्त ऐप में लिंक करने के लिए है IOS 8.0 या नए में चलने के बाद

आपको अपने कोड स्टेटमेंट में उद्देश्य-सी, स्विफ्ट नहीं, का उपयोग करना चाहिए , जो एक फ्रेमवर्क बंडल को सशर्त रूप से लोड करते हैं। आपके ऐप का बाकी किसी भी भाषा में लिखा जा सकता है, और एम्बेडेड फ्रेमवर्क स्वयं को किसी भी भाषा में भी लिखा जा सकता है।

कॉलिंग के बाद, निम्नलिखित प्रकार के कथन का उपयोग करके एम्बेडेड ढांचे वर्गों का उपयोग करें:

 MyLoadedClass *loadedClass = [[NSClassFromString (@"MyClass") alloc] init]; 

जरूरी

यदि आपका ऐप लक्ष्य वाला एंबेड फ़्रेमवर्क से लिंक होता है, तो इसमें arm64 आर्किटेक्चर शामिल होना चाहिए या एप स्टोर द्वारा इसे अस्वीकार कर दिया जाएगा।

सशर्त लिंकिंग का लाभ उठाने के लिए ऐप एक्सटेंशन Xcode प्रोजेक्ट सेट अप करने के लिए

  1. आपके प्रत्येक ऐप एक्सटेंशन के लिए, सामान्य रूप से, आईओओ 8.0 या बाद के होने के लिए तैनाती लक्ष्य सेट करें Xcode लक्ष्य संपादक में सामान्य टैब के "तैनाती जानकारी" अनुभाग में ऐसा करें।
  2. आपके युक्त ऐप के लिए, आईओएस का सबसे पुराना संस्करण होने के लिए तैनाती लक्ष्य सेट करें, जिसे आप समर्थन करना चाहते हैं।
  3. अपने युक्त ऐप में, सिस्टम वर्जन विधि का उपयोग कर आईओएस संस्करण के लिए रनटाइम चेक के भीतर डलप्पेन कमांड को कॉल की सशर्त करना। डलप्ले कमांड को केवल तभी कॉल करें जब आपका आईओएस 8.0 या उसके बाद का संस्करण चल रहा हो। यह कॉल करते समय, उद्देश्य-सी, स्विफ्ट नहीं, का उपयोग करना सुनिश्चित करें।

कुछ आईओएस एपीआई डीएलओपीएएन कमांड द्वारा एम्बेडेड ढांचे का इस्तेमाल करते हैं। आपको इन एपीआई के अपने प्रयोग को सशर्त करना होगा जैसे कि आप डेलोपेंस को सीधे फोन करते समय ये एपीआई CFBundleRef अपारदर्शी प्रकार से हैं:

CFBundleGetFunctionPointerForName
CFBundleGetFunctionPointersforNames

और NSBundle वर्ग से:

भार
loadAndReturnError:
classNamed:

एक युक्त ऐप में आप आईओएस के संस्करणों से 8.0 से अधिक की तैनाती कर रहे हैं, इन एपीआई को एक रनटाइम चेक के भीतर कॉल करें, जो यह सुनिश्चित करता है कि आप आईओएस 8.0 या नए में चल रहे हैं, और इन सीरीज को ई-सी-सी का उपयोग कर कॉल करें।

हमने निम्न विन्यास पर नवीनतम कोड चलाने की कोशिश की:

आईओएस 8 + – आईफोन 5 एस आईओएस 7.1.2 – आईफोन 4 आईओएस 6.1.3 – आईपैड 4

एप्लिकेशन सभी तीन उपकरणों पर ठीक काम कर रहा है, लेकिन संकलन करते समय चेतावनी Xcode में मौजूद है। "एम्बेडेड डाइलीब / फ़्रेमवर्क केवल आईओएस 8 या बाद के संस्करण पर चलते हैं"

इसके अलावा मैंने ऐप स्टोर में इसे सबमिट करने के लिए ऐप को संग्रहित करने की कोशिश की, यह ठीक पर चला गया

इसके अलावा, एक लिंक पाया गया जहां सेब डेवलपर में यह एक बग होने के लिए कहा गया था https://devforums.apple.com/message/999579#999579

मैंने मक्-ओ टाइप को एक्सक्ल्यूबल करने के लिए सेट किया और यह मेरे लिए काम किया। इसे स्थैतिक, डायनेमिक या बंडल में सेट करना, जब मैंने इसे चलाया था तो दूसरी त्रुटियां बनायीं

लक्ष्य> "आपका ऐप"> सेटिंग> लिंकिंग> मच-ओ प्रकार> निष्पादन योग्य बनाएँ

मैं इस समस्या को निम्न तरीके से हल करता हूं: "एंबेडेड फ़्रेमवर्क" और "मुख्य ऐप" लक्ष्य दोनों लक्ष्य में उसी परिनियोजन लक्ष्य का उपयोग करें

इसलिए, अस्थायी, मैंने डायनामिक लाइब्रेरी के लिए कोई नहीं कहा, जबकि आईओएस 7 पर कई डिवाइसेस। मैंने अपनी समस्या का समाधान कैसे किया? ऐप और एक्सटेंशन के बीच मॉडल को स्थानांतरित करने के लिए मुझे लिब की जरूरत थी। इसलिए, मैंने अपने मॉडल को साझा कंटेनर में JSON स्ट्रिंग में डाल दिया। और यह एक जादू की तरह काम करता है

बस रिकॉर्ड के लिए … IOS8 से iOS7 परिनियोजन प्रकार से प्रोजेक्ट बदलते समय मुझे यह समस्या थी।

ऐप ने कोकोपोड्स और कोई कस्टम एम्बेडेड चौखटे का इस्तेमाल नहीं किया।

मुझे मुख्य परियोजना को दो लक्ष्य बदलना पड़ा
आवेदन
आवेदन टेस्ट

मैक-ओ टाइपिंग स्थिर करने के लिए (उपरोक्त उत्तर से)

फिर कोकोपॉड परियोजना पर प्रत्येक उप पोड प्रोजेक्ट के तहत मच-ओ टाइप को स्थिर बना दिया गया, मुख्य पोड परियोजना मच-ओ सेटिंग रिक्त करने के लिए छोड़ दिया।

जब आप आईओएस पर डायनामिक लाइब्रेरी का उपयोग करते हैं, तो आपको लाइब्रेरी पर हस्ताक्षर करने के लिए कोड चाहिए Xcode 6 में, आपको "कोड साइन ऑन कॉपी" का चयन करना चाहिए। और Xcode5 के साथ, आपको रन स्क्रिप्ट के साथ अपने स्वयं के द्वारा लाइब्रेरी पर हस्ताक्षर करना चाहिए। पसंद :

 LOCATION="${BUILT_PRODUCTS_DIR}"/"${FRAMEWORKS_FOLDER_PATH}" IDENTITY="iPhone Developer: xxxxx" codesign --verbose --force --sign "$IDENTITY" "$LOCATION/BeeFramework.framework/BeeFramework" 

उपयोग चौखटे निकालें! अगर आप आईओएस 7.0 में काम करने के लिए फ्रेमवर्क चाहते हैं तो अपने पॉडफाइल से यानी चलाने के पॉड deintegrate कमांड, अपने PodFile को संशोधित करें और फिर pod install command को फिर से चलाएं

इसके बाद भी, मुझे ब्रिजिंग फ़ाइल में फ्रेमवर्क के सभी .h फाइल को जोड़ना पड़ा, जिसने समस्या को ठीक किया। फास्ट फाइलों से आयात लायब्रेरी भी आयात करें

एक्सकोड 7.3 को अद्यतन करते समय मेरे पास एक बग था और मुझे मेरे लिए समाधान था – फ़ॉड्स प्रोजेक्ट में लक्ष्य बदलें -> 7.0 – आशा है कि यह उपयोगी होगा! आक्रमण

मैं एक ऐसे मुद्दे पर चल रहा था जहां मुझे कुछ लाइब्रेरीज़ को एम्बेडेड ढांचे के रूप में शामिल करने की आवश्यकता थी, अन्यथा मैं ऊपर त्रुटि प्राप्त करता था और जब मैंने ऐसा किया, तो ऐप स्टोर में सबमिट करते समय मुझे त्रुटियाँ मिलीं।

मेरा समाधान पोड का उपयोग करना था और यह सुनिश्चित करना था कि आप "use_frameworks!" लाइन।