March 24, 2012

การสร้าง Source Path เอง

กรณีที่เรา import ไฟล์ เช่น resource หรือภาพต่างๆ เข้ามาในโปรเจ็คแบบ reference เรามักเจอปัญหาที่ว่าหากวันหนึ่ง เราจำเป็นต้องย้ายที่อยู่ของไฟล์เหล่านั้นไป จนเป็นเหตุให้รายชื่อไฟล์ต่างๆ ใน tree ด้านซ้ายของ Xcode เป็นสีแดง เนื่องจาก Xcode มองหาไฟล์นั้นไม่เจอ จนนักพัฒนาจำเป็นต้องอ้างอิงไฟล์เหล่านั้นใหม่ หลายคนที่ผมเจอมักลากไฟล์เข้ามาในโปรเจ็คใหม่อีกรอบหนึ่ง ซึ่งนั่นทำให้เสียเวลาเป็นอย่างมาก หากในโปรเจ็คมีไฟล์จำนวนมากที่ต้องแก้ไข และที่สำคัญไฟล์ project.pbxproj จะถูกแก้ไข จนอาจทำให้เกิด conflict กับคนอื่นโดยไม่จำเป็น

ในกรณีนี้นี้ เราสามารถแก้ไขตำแหน่งของไฟล์ได้โดยที่ไฟล์ project.pbxproj จะไม่ถูกแก้ไขได้ โดยการให้ไฟล์เหล่านั้น อ้างอิงกับ source path (source path คืออะไร ให้อ่านต่อไปในบทความนี้) ของเราเอง ทำให้ทุกครั้งที่มีการเปลี่ยนตำแหน่งไฟล์ใหม่ เราก็แค่มาแก้ source path ใหม่เท่านั้นเอง โดยจะเป็นการแก้ที่ setting ของตัว Xcode เอง ไม่ได้เกี่ยวกับโปรเจ็คของเราแต่อย่างใดทำให้ไม่มี change เกิดขึ้นกับไฟล์ในโปรเจ็ค

เราสามารถกำหนดการอ้างอิงตำแหน่ง (path) ของไฟล์ โดยสามารถกำหนดเป็น absolute path หรือจะให้อิงกับ path อื่นๆ ก็ได้ และหากดู property ของแต่ละไฟล์ในโปรเจ็ค จะพบว่าแต่ละไฟล์มี Location เป็น Relative to Group ให้อยู่แล้วเนื่องจากค่านี้เป็นค่า Default ของ Xcode



ส่วนค่าอื่นๆ ที่เราสามารถกำหนดให้ได้ ก็จะมีดังนี้



สำหรับความหมายของแต่ละค่านั้นก็พอจะเดาได้คร่าวๆ จากชื่อของมันเอง ส่วนรายละเอียดก็ตามไปอ่านต่อได้ที่ How Files are referenced

ถ้าหากเราต้องการจะให้ไฟล์ของเรา relative กับ path ที่เราต้องการล่ะ จะทำได้ไหม? คำตอบก็คือ ได้ แต่เราต้องไปสร้างสิ่งที่เรียกว่า Source Path ก่อน โดยการเข้าไปใน preference ของ Xcode เลือกแท็บ Locations และ Source Trees จากนั้นให้กดเครื่องหมาย บวก ที่ด้านล่างซ้ายและกำหนดค่าของ Source Path ดังรูปด้านล่าง



โดยที่

  • Setting Name จะเป็นชื่อสำหรับให้ไฟล์ใช้อ้างอิง
  • Display Name จะเป็นชื่อที่จะแสดงใน property panel ของไฟล์
  • Path คือ path directory ของ source path ที่เราจะให้ไฟล์ไป relative ด้วย กรณีนี้เราจะกำหนดค่าให้ Path เป็นที่อยู่ของ resource ที่นำเข้ามาในโปรเจ็คแบบ reference เช่นไฟล์ภาพต่างๆ 

หากตั้งค่าเสร็จแล้ว กลับมาดูที่ property panel ของไฟล์จะพบว่ามี source path ใหม่ที่เราพึ่งสร้างไปปรากฎขึ้นมาแล้วดังรูป





ให้เราเลือกให้ไฟล์ resource มา relative กับ source path ที่เราพึ่งสร้างขึ้นมาใหม่ เท่านี้หากคราวหน้าเรามีการย้ายที่อยู่ของไฟล์ resource ต่างๆ ก็แค่เข้ามาแก้ไข path ของ source path ตัวนี้เท่านั้นเอง โดยที่ไม่กระทบกับไฟล์ project.pbxproj เลยแม้แต่น้อย

อ่านต่อ: Files in Projects