กฎบิลด์ของ Xcode

ประเภทโปรเจ็กต์ Xcode ส่วนใหญ่รองรับกฎบิลด์ ซึ่งช่วยให้นักพัฒนาซอฟต์แวร์แก้ไขวิธีสร้างประเภทไฟล์ที่มีอยู่และกำหนดวิธีสร้างไฟล์ประเภทใหม่ สคริปต์ J2ObjC ออกแบบมาให้เชื่อมต่อเข้ากับระบบบิลด์อย่าง Xcode

โปรเจ็กต์ j2objc-sample-reversi คือตัวอย่างวิธีเพิ่มซอร์สของ Java ลงในเกม iOS แบบง่าย

บิลด์ขั้นต่ำต้องอัปเดตการตั้งค่าบิลด์ แล้วเพิ่มกฎของบิลด์ J2ObjC

อัปเดตการตั้งค่าบิลด์

  1. คลิกโปรเจ็กต์ในตัวนำทางโปรเจ็กต์เพื่อเปิดเครื่องมือแก้ไขโปรเจ็กต์ และตรวจสอบว่าได้เลือกเป้าหมายแอปพลิเคชันแล้ว
  2. คลิกแท็บการตั้งค่าบิลด์
  3. ลิงก์ไลบรารีการจำลอง JRE (jre_emul) โดยเพิ่ม -ljre_emul ลงใน Flager Flag อื่นๆ ซึ่งควรมีลักษณะดังนี้ การลิงก์ไลบรารีการจำลอง JRE ใน Xcode
  4. คลิกเครื่องหมาย + และเลือกเพิ่มการตั้งค่าที่ผู้ใช้กำหนด
  5. ตั้งชื่อการตั้งค่า J2OBJC_HOME และกำหนดค่าเป็นตำแหน่งของ J2ObjC นี่ควรจะเป็นโฟลเดอร์ที่เกิดจากการแตกไฟล์ release zip หรือโฟลเดอร์ j2objc/dist หากคุณคอมไพล์จากแหล่งที่มาและรูทของคุณคือ j2objc
  6. ในส่วนเส้นทางการค้นหา ให้แก้ไขต่อไปนี้
    • เส้นทางการค้นหาเฟรมเวิร์กเพิ่ม ${J2OBJC_HOME}/frameworks
    • เส้นทางการค้นหาไลบรารีจะเพิ่ม ${J2OBJC_HOME}/lib (สำหรับการกำหนดค่าบิลด์แต่ละรายการ)
    • เส้นทางการค้นหาส่วนหัวผู้ใช้เพิ่ม ${J2OBJC_HOME}/include
  7. ยืนยันการตั้งค่าโดยค้นหา J2OBJC_HOME คุณควรจะเห็นข้อความที่คล้ายกันนี้ การตั้งค่าบิลด์ Xcode

การเพิ่มกฎการสร้าง J2ObjC

  1. กำหนดไดเรกทอรีรากของไฟล์ซอร์สของ Java ซึ่งเราเรียกว่า $source-root ไดเรกทอรีรากคือไดเรกทอรีที่มีแพ็กเกจยอดนิยมของไฟล์ต้นฉบับ

    • หากคุณใช้ git และต้องการดึงไฟล์ Java จากโปรเจ็กต์ Git อื่น ให้เพิ่ม submodule ติดตามโปรเจ็กต์ด้วยซอร์สของ Java ตัวอย่างเช่น สมมติว่าโปรเจ็กต์ Xcode (xcodeproj) อยู่ใน ~/dev/MyProject แล้วคุณก็น่าจะมีไดเรกทอรี MyProject อีกรายการที่มีซอร์ส Objective-C ในไดเรกทอรี ~/dev/MyProject/MyProject ให้เรียกใช้ git submodule add git@github.com:user/javaproject เพื่อสร้างไดเรกทอรี ~/dev/MyProject/MyProject/javaproject ที่มีแหล่งที่มาสำหรับโปรเจ็กต์ Java คู่กับซอร์ส Objective-C จากนั้นคุณสามารถลากโฟลเดอร์ดังกล่าวไปยังโปรเจ็กต์ Xcode ภายใต้กลุ่ม MyProject ซึ่งมีการมิเรอร์ Xcode ระบบไฟล์ ${PROJECT_DIR}/MyProject/javaproject/src คือ$source-root

    • หากซอร์สของ Java อยู่ในกลุ่มหรือไดเรกทอรีในโปรเจ็กต์ Xcode ค่า $source-root จะเป็น ${PROJECT_DIR}/__group_or_directory_name__

    • หากไม่แน่ใจ ให้คลิกขวาที่กลุ่มหรือไดเรกทอรีนั้น แล้วเลือก "แสดงใน Finder" เพื่อดูไดเรกทอรีและใช้เส้นทางสัมบูรณ์

    • เช่น หากคุณมีแพ็กเกจ Java foo.bar ในไดเรกทอรีชื่อ ~/myproject/src ไฟล์ 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) ต้องใช้แฟล็กเฉพาะสำหรับ J2ObjC ซึ่งจะแตกต่างกันไปตามวิธีที่แอปพลิเคชันใช้คลาส Java ที่แปลแล้ว ดูรายการทั้งหมดได้ที่การตั้งค่าลิงก์ที่จำเป็น ต่อไปนี้คือตัวอย่าง ไลบรารีเพิ่มเติมที่คุณอาจต้องลิงก์

  • หากต้องการใช้แพ็กเกจ java.util.zip คุณต้องลิงก์ไลบรารี libz.dylib ด้วยการเพิ่ม -ljre_zip ลงใน Flager Flag อื่นๆ
  • หากต้องการสร้างแฮชที่ปลอดภัย คุณต้องเพิ่มเฟรมเวิร์กการรักษาความปลอดภัยไปยังโปรเจ็กต์ของคุณ

การแก้ไขข้อบกพร่องของบิลด์

หาก Xcode รายงานความล้มเหลวของบิลด์ด้วยขั้นตอนเหล่านี้ ให้เปิด Issue Navigator แล้วคลิกที่ข้อผิดพลาดเพื่อตรวจสอบรายละเอียด ซึ่งจะแสดงรายละเอียดของคำสั่งบรรทัดคำสั่งที่มีการดำเนินการ ข้อผิดพลาดที่พบบ่อยมีดังนี้

  • แก้ไขชั้นเรียนไม่ได้ - $source-path ที่คุณใช้ไม่ถูกต้อง มองหาตัวเลือก -sourcepath ในคำสั่งดำเนินการและตรวจสอบว่าตัวเลือกชี้ไปที่ไดเรกทอรีรากของไฟล์ซอร์สของ Java

  • ไม่พบไฟล์"JreEmulation.h" - ปัญหาน่าจะเกิดจากค่าเส้นทางการค้นหาส่วนหัวผู้ใช้ที่ไม่ถูกต้อง ค้นหาคำสั่งบิลด์สำหรับตัวเลือก -I พร้อมเส้นทาง หากเห็นด้วย ให้คัดลอกเส้นทาง (ไม่ใช่ -I) และในหน้าต่างเทอร์มินัลที่เรียกใช้ ls ด้วยเส้นทางนั้นเพื่อยืนยันว่าไม่มีการพิมพ์ผิด

  • "_IOSClass_FromClass", อ้างอิงจาก: หรือ "_OBJCCLASS$_Java" - Library Paths อาจไม่ถูกต้องหรือคุณลืมลิงก์ไลบรารีการจำลอง JRE โดยตั้งค่า Linker Flag อื่นๆ เป็น -ljre_emul คุณอาจต้องลิงก์ไลบรารีเพิ่มเติมด้วย

  • สัญลักษณ์ที่ไม่ได้ระบุ: _iconv* - ลิงก์ในไลบรารี iconv ที่จำเป็น

หากยังพบปัญหาอยู่ โปรดสอบถามกลุ่ม j2objc-discuss