ज़्यादातर Xcode प्रोजेक्ट टाइप, बिल्ड नियमों का इस्तेमाल करते हैं, जिनकी मदद से डेवलपर बदलाव कर पाते हैं मौजूदा फ़ाइल टाइप कैसे बनाए जाते हैं और नए फ़ाइल टाइप कैसे बनाए जाते हैं. J2ObjC स्क्रिप्ट को Xcode जैसे बिल्ड सिस्टम में जोड़ने के लिए जान-बूझकर डिज़ाइन किया गया है.
j2objc-sample-reversi प्रोजेक्ट किसी iOS गेम में Java के सोर्स जोड़ने के तरीके का उदाहरण.
कम से कम बिल्ड के लिए बिल्ड सेटिंग अपडेट करना ज़रूरी है. इसके बाद, J2ObjC बिल्ड नियम जोड़ा जा सकता है.
बिल्ड की सेटिंग अपडेट करें
- प्रोजेक्ट एडिटर खोलने के लिए प्रोजेक्ट नेविगेटर में प्रोजेक्ट पर क्लिक करें और पक्का करें कि ऐप्लिकेशन लक्ष्य चुना गया है.
- बिल्ड सेटिंग टैब पर क्लिक करें.
- अन्य लिंकर फ़्लैग में
-ljre_emul
जोड़कर, JRE एम्युलेशन लाइब्रेरी (jre_emul
) को लिंक करें. यह कुछ ऐसा दिखना चाहिए:अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
- + पर क्लिक करके, उपयोगकर्ता की ओर से तय की गई सेटिंग जोड़ें चुनें.
- सेटिंग को
J2OBJC_HOME
नाम दें और इसकी वैल्यू को J2ObjC की जगह पर सेट करें. इसमें ऐसा होना चाहिए वह रिलीज़ ज़िप को अनज़िप करने से बना फ़ोल्डर हो याj2objc/dist
फ़ोल्डर, अगर आपने सोर्स से कंपाइल किया है और आपका रूटj2objc
है. - खोज पाथ में, नीचे दी गई चीज़ों में बदलाव करें:
- फ़्रेमवर्क खोज पाथ जोड़ने के लिए
${J2OBJC_HOME}/frameworks
- लाइब्रेरी के खोज पाथ में
${J2OBJC_HOME}/lib
(हर बिल्ड कॉन्फ़िगरेशन के लिए) जोड़ें. - उपयोगकर्ता हेडर खोज पाथ में
${J2OBJC_HOME}/include
जोड़ें.
- फ़्रेमवर्क खोज पाथ जोड़ने के लिए
J2OBJC_HOME
की खोज करके अपनी सेटिंग की पुष्टि करें. आपको इससे मिलता-जुलता कुछ दिखेगा:अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
J2ObjC बिल्ड नियम जोड़ना
अपनी 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 प्रोजेक्ट से बाहर की हैं, तो वह पूरा पाथ डालें जिसका इस्तेमाल तब किया जाता है, जब वे सभी जानकारी टर्मिनल विंडो में दिखेंगे.
प्रोजेक्ट एडिटर खोलने के लिए प्रोजेक्ट नेविगेटर में प्रोजेक्ट पर क्लिक करें और पक्का करें कि ऐप्लिकेशन लक्ष्य चुना गया है.
बिल्ड नियम टैब पर क्लिक करें.
बिल्ड नियम जोड़ने के लिए + पर क्लिक करें.
नए नियम के प्रोसेस करें विकल्प के लिए, "Java सोर्स फ़ाइलें" चुनें. इस्तेमाल करना विकल्प "कस्टम स्क्रिप्ट" होना चाहिए.
कस्टम स्क्रिप्ट टेक्स्ट बॉक्स में, यह जोड़ें (
$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};
आउटपुट फ़ाइल पैनल में, + बटन पर क्लिक करें और यह जोड़ें:
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h
.+ बटन पर फिर से क्लिक करें और
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.m
जोड़ें.
काम पूरा हो जाने के बाद, सेटिंग पैनल कुछ ऐसा दिखना चाहिए (ध्यान दें: 10.2 के रूप में, Xcode अब भी पुराने सिस्टम के साथ काम करने की सुविधा के लिए, DERIVED_files_DIR वैरिएबल DERIVED_FILE_DIR के जैसा है):
अतिरिक्त लाइब्रेरी लिंक करना
लिंक बिल्ड स्टेप (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 ग्रुप.