Xcode के बिल्ड के नियम

ज़्यादातर Xcode प्रोजेक्ट टाइप, बिल्ड नियमों का इस्तेमाल करते हैं, जिनकी मदद से डेवलपर बदलाव कर पाते हैं मौजूदा फ़ाइल टाइप कैसे बनाए जाते हैं और नए फ़ाइल टाइप कैसे बनाए जाते हैं. J2ObjC स्क्रिप्ट को Xcode जैसे बिल्ड सिस्टम में जोड़ने के लिए जान-बूझकर डिज़ाइन किया गया है.

j2objc-sample-reversi प्रोजेक्ट किसी iOS गेम में Java के सोर्स जोड़ने के तरीके का उदाहरण.

कम से कम बिल्ड के लिए बिल्ड सेटिंग अपडेट करना ज़रूरी है. इसके बाद, J2ObjC बिल्ड नियम जोड़ा जा सकता है.

बिल्ड की सेटिंग अपडेट करें

  1. प्रोजेक्ट एडिटर खोलने के लिए प्रोजेक्ट नेविगेटर में प्रोजेक्ट पर क्लिक करें और पक्का करें कि ऐप्लिकेशन लक्ष्य चुना गया है.
  2. बिल्ड सेटिंग टैब पर क्लिक करें.
  3. अन्य लिंकर फ़्लैग में -ljre_emul जोड़कर, JRE एम्युलेशन लाइब्रेरी (jre_emul) को लिंक करें. यह कुछ ऐसा दिखना चाहिए: Xcode में JRE एम्युलेशन लाइब्रेरी लिंक करना अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  4. + पर क्लिक करके, उपयोगकर्ता की ओर से तय की गई सेटिंग जोड़ें चुनें.
  5. सेटिंग को J2OBJC_HOME नाम दें और इसकी वैल्यू को J2ObjC की जगह पर सेट करें. इसमें ऐसा होना चाहिए वह रिलीज़ ज़िप को अनज़िप करने से बना फ़ोल्डर हो या j2objc/dist फ़ोल्डर, अगर आपने सोर्स से कंपाइल किया है और आपका रूट j2objc है.
  6. खोज पाथ में, नीचे दी गई चीज़ों में बदलाव करें:
    • फ़्रेमवर्क खोज पाथ जोड़ने के लिए ${J2OBJC_HOME}/frameworks
    • लाइब्रेरी के खोज पाथ में ${J2OBJC_HOME}/lib (हर बिल्ड कॉन्फ़िगरेशन के लिए) जोड़ें.
    • उपयोगकर्ता हेडर खोज पाथ में ${J2OBJC_HOME}/include जोड़ें.
  7. J2OBJC_HOME की खोज करके अपनी सेटिंग की पुष्टि करें. आपको इससे मिलता-जुलता कुछ दिखेगा: Xcode बिल्ड की सेटिंग अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

J2ObjC बिल्ड नियम जोड़ना

  1. अपनी Java सोर्स फ़ाइलों की रूट डायरेक्ट्री तय करें, जिसे हम $source-root. रूट डायरेक्ट्री वह डायरेक्ट्री होती है जिसमें सबसे ऊपर पैकेज को कॉपी करने की ज़रूरत नहीं है.

    • अगर आप git का इस्तेमाल कर रहे हैं और किसी दूसरे git प्रोजेक्ट से आपकी Java फ़ाइलें लेना चाहते हैं, तो अपने Java के साथ प्रोजेक्ट को ट्रैक करने वाला सबमॉड्यूल जोड़ें स्रोत. उदाहरण के लिए, मान लें कि आपका Xcode प्रोजेक्ट (xcodeproj) ~/dev/MyProject में है, तो आपके Objective-C सोर्स के साथ एक और MyProject डायरेक्ट्री हो सकती है. इस ~/dev/MyProject/MyProject डायरेक्ट्री, git submodule add git@github.com:user/javaproject को यहां तक चली अपने Java प्रोजेक्ट के लिए, सोर्स के साथ ~/dev/MyProject/MyProject/javaproject डायरेक्ट्री बनाएं अपने Objective-C सोर्स के साथ जानकारी शेयर करें. इसके बाद, उस फ़ोल्डर को Xcode प्रोजेक्ट में खींचें और छोड़ें MyProject ग्रुप में शामिल होगा, जिसमें Xcode पर फ़ाइल सिस्टम का डुप्लीकेट वर्शन मौजूद होता है. ${PROJECT_DIR}/MyProject/javaproject/src ही $source-root है.

    • अगर आपके Xcode प्रोजेक्ट के Java सोर्स किसी ग्रुप या डायरेक्ट्री में हैं, तो $source-root ${PROJECT_DIR}/__group_or_directory_name__ है.

    • अगर आपका कोई सवाल है, तो उस ग्रुप या डायरेक्ट्री पर राइट क्लिक करें. इसके बाद, Finder में 'दिखाएं' को चुनें और ऐब्सलूट पाथ का इस्तेमाल करें.

    • उदाहरण के लिए, अगर आपके पास ~/myproject/src नाम की डायरेक्ट्री में, Java पैकेज foo.bar है, तो उस पैकेज की Java फ़ाइलें ~/myproject/src/foo/bar/**.java में होनी चाहिए -- इसका अर्थ है कि ~/myproject/src आपके प्रोजेक्ट की रूट डायरेक्ट्री है.

    • अगर Java सोर्स फ़ाइलें, Xcode प्रोजेक्ट से बाहर की हैं, तो वह पूरा पाथ डालें जिसका इस्तेमाल तब किया जाता है, जब वे सभी जानकारी टर्मिनल विंडो में दिखेंगे.

  2. प्रोजेक्ट एडिटर खोलने के लिए प्रोजेक्ट नेविगेटर में प्रोजेक्ट पर क्लिक करें और पक्का करें कि ऐप्लिकेशन लक्ष्य चुना गया है.

  3. बिल्ड नियम टैब पर क्लिक करें.

  4. बिल्ड नियम जोड़ने के लिए + पर क्लिक करें.

  5. नए नियम के प्रोसेस करें विकल्प के लिए, "Java सोर्स फ़ाइलें" चुनें. इस्तेमाल करना विकल्प "कस्टम स्क्रिप्ट" होना चाहिए.

  6. कस्टम स्क्रिप्ट टेक्स्ट बॉक्स में, यह जोड़ें ($source-root विकल्प के तौर पर इस्तेमाल करना न भूलें):

    if [ ! -f "${J2OBJC_HOME}/j2objc" ]; then echo "J2OBJC_HOME is not correctly defined, currently set to '${J2OBJC_HOME}'"; exit 1; fi;
    "${J2OBJC_HOME}/j2objc" -d ${DERIVED_FILE_DIR} -sourcepath "$source-root" --no-package-directories -g ${INPUT_FILE_PATH};
    
  7. आउटपुट फ़ाइल पैनल में, + बटन पर क्लिक करें और यह जोड़ें: ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h.

  8. + बटन पर फिर से क्लिक करें और ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.m जोड़ें.

काम पूरा हो जाने के बाद, सेटिंग पैनल कुछ ऐसा दिखना चाहिए (ध्यान दें: 10.2 के रूप में, Xcode अब भी पुराने सिस्टम के साथ काम करने की सुविधा के लिए, DERIVED_files_DIR वैरिएबल DERIVED_FILE_DIR के जैसा है):

Xcode बिल्ड के नियम

अतिरिक्त लाइब्रेरी लिंक करना

लिंक बिल्ड स्टेप (Xcode का "Linkbinary with Libraries" बिल्ड फ़ेज़) के लिए ज़रूरी शर्तें J2ObjC के लिए बनाए गए फ़्लैग, जो इस आधार पर अलग-अलग होते हैं कि आपका ऐप्लिकेशन, अनुवाद किए गए Java क्लास का इस्तेमाल कैसे करता है. पूरी सूची के लिए ज़रूरी लिंक सेटिंग देखें. यहाँ कुछ चीज़ें दी गई हैं यहां उन अतिरिक्त लाइब्रेरी के उदाहरण दिए गए हैं जिन्हें आपको लिंक करना पड़ सकता है:

  • java.util.zip पैकेज का इस्तेमाल करने के लिए, आपको libz.dylib लाइब्रेरी को जोड़ना होगा. इसके लिए, अन्य लिंकर फ़्लैग के लिए -ljre_zip.
  • सुरक्षित तरीके से हैश जनरेट करने के लिए, आपको अपने प्रोजेक्ट में सिक्योरिटी फ़्रेमवर्क जोड़ना होगा.

बिल्ड की समस्याओं को डीबग करना

अगर Xcode इन चरणों में बिल्ड फ़ेल होने की रिपोर्ट करता है, तो गड़बड़ी नेविगेटर खोलें और किसी गड़बड़ी पर क्लिक करके जानकारी की जांच करें. इससे आपको उन कमांड-लाइन की जानकारी दिखेगी स्टेटमेंट पर काम किया गया. यहां कुछ सामान्य गड़बड़ियां दी गई हैं:

  • क्लास की समस्या हल नहीं की जा सकती - शायद आपने गलत $source-path का इस्तेमाल किया है. चलाए गए निर्देश में, -sourcepath विकल्प ढूंढें और पक्का करें कि यह आपकी Java सोर्स फ़ाइलों की रूट डायरेक्ट्री.

  • "JreEmulation.h" फ़ाइल नहीं मिली - शायद, यूज़र हेडर सर्च की सुविधा में समस्या है. यह समस्या गलत है पाथ की वैल्यू. पाथ वाले -I विकल्प के लिए बिल्ड कमांड खोजें; अगर वह ठीक लगता है, पाथ को कॉपी करें (-I नहीं) और टर्मिनल विंडो में पुष्टि करने के लिए, उस पाथ के साथ ls को वहां चलाएं टाइपिंग की कोई गड़बड़ी नहीं है.

  • "_IOSClass_FromClass", इससे रेफ़रंस लिया गया है: या "_OBJCCLASS$_Java" - इसकी लाइब्रेरी खोज पाथ गलत है या अन्य लिंकर फ़्लैग को -ljre_emul में बदलें. आपको अतिरिक्त लाइब्रेरी भी लिंक करनी पड़ सकती हैं.

  • जिन चिह्नों की जानकारी नहीं है: _iconv* - ज़रूरी iconv लाइब्रेरी में मौजूद लिंक.

अगर आपको अब भी समस्याएं आ रही हैं, तो उनसे पूछें j2objc-discuss ग्रुप.