รับเส้นทางสำหรับทรัพยากรในเครื่องมือบรรทัดคำสั่ง

ฉันกำลังพยายามรับเส้นทางของทรัพยากรในเครื่องมือบรรทัดคำสั่งใน Xcode (8 เบต้า 2) นี่คือสิ่งที่ฉันมี:

  • ทรัพยากร file.xyz ถูกลากเข้าไปในโปรเจ็กต์และความเป็นสมาชิกเป้าหมายตรงกับโปรเจ็กต์หลัก
  • ภายใต้ขั้นตอนการสร้าง -> คัดลอกไฟล์ ปลายทางจะถูกตั้งค่าเป็น "ทรัพยากร" และเส้นทางย่อยว่างเปล่า "คัดลอกเฉพาะเมื่อติดตั้ง" จะไม่ถูกเลือก และ file.xyz จะแสดงอยู่ในตารางด้านล่าง
  • ในไฟล์ main.swift ของฉัน ฉันมีรหัสต่อไปนี้:

    guard let filePath = Bundle.pathForResource("file",
                                             ofType: "xyz",
                                             inDirectory: "Resources") else{
        fatalError("Could not find file")
    }
    

fatalError จะถูกทริกเกอร์ทุกครั้ง มีความคิดอะไรบ้าง? ฉันเข้าใจว่าเครื่องมือบรรทัดคำสั่งไม่มีชุดแอปพลิเคชัน และนั่นคือสาเหตุที่ทรัพยากรถูกคัดลอกไปยังโฟลเดอร์ทรัพยากรแทน แต่อาร์กิวเมนต์ inDirectory ของฉันค่อนข้างเดายาก... ขอบคุณที่อ่าน

แก้ไข: เป้าหมายหลักของฉันคือการเข้าถึงไฟล์ทรัพยากร (ในกรณีนี้คือไฟล์ข้อความ) จาก CLT ฉันไม่ได้ยึดติดกับวิธีการเฉพาะเจาะจงนี้ ดังนั้นหากมีวิธีอื่นก็เยี่ยมยอดเช่นกัน!


person Rogare    schedule 17.07.2016    source แหล่งที่มา
comment
เนื่องจาก CLI ไม่มีบันเดิล (Bundle.main() คือ nil!) โฟลเดอร์ Resources ควรมาจากไหนหรือโฟลเดอร์ควรอยู่ที่ไหน พารามิเตอร์ inDirectory ระบุโฟลเดอร์ย่อยที่ถูกต้องของโฟลเดอร์ Resources ในบันเดิล   -  person vadian    schedule 17.07.2016
comment
@vadian ขอบคุณสำหรับความคิดเห็น ฉันเดินไปในทิศทางนี้หลังจากอ่านความคิดเห็นของ capikaw ที่นี่: stackoverflow.com/a/3950218/1781058 ซึ่งเขาบอกว่า Bundle ยังคงสามารถใช้เพื่อลิงก์ไฟล์ในเป้าหมาย CLT   -  person Rogare    schedule 17.07.2016
comment
คุณสามารถลิงก์ไฟล์ที่จะคอมไพล์ได้ คุณยังสามารถฝังไฟล์ได้ แต่คุณไม่สามารถเข้าถึงไฟล์ผ่านทาง (NS)Bundle   -  person vadian    schedule 17.07.2016
comment
@vadian ตกลงเพียงเพื่อให้แน่ใจว่าฉันเข้าใจคุณกำลังบอกว่าไม่มีวิธีเข้าถึงไฟล์ทรัพยากรในเครื่องมือบรรทัดคำสั่งเลยใช่ไหม   -  person Rogare    schedule 17.07.2016
comment
ฉันไม่ต้องการที่จะพูด เลย แต่ไม่ใช่ผ่านกลุ่มอย่างแน่นอน ตัวอย่างเช่น เป็นไปได้ที่จะฝัง Info.plist ใน CLI แต่ฉันไม่รู้ว่าจะเข้าถึงได้อย่างไร   -  person vadian    schedule 17.07.2016
comment
@vadian โอเค ขอบคุณ ฉันจะแก้ไขคำถามให้ชัดเจนว่าฉันสนใจที่จะเข้าถึงไฟล์ทรัพยากร แต่ไม่จำเป็นต้องใช้ Bundle   -  person Rogare    schedule 17.07.2016
comment
เครื่องมือบรรทัดคำสั่ง ทำ ใช้โครงสร้าง Bundle กล่าวอีกนัยหนึ่ง Bundle.main ส่งคืนบันเดิลที่ถูกต้องสำหรับไดเร็กทอรีที่มีบรรทัดคำสั่งที่สามารถเรียกใช้งานได้ Bundle.main.resourceURL ส่งคืน URL สำหรับไดเรกทอรีหลัก Bundle.main.pathForResource("file", ofType:"xyz") จะส่งคืนพาธที่ถูกต้อง หาก file.xyz ถูกคัดลอกไปยังไดเร็กทอรีเดียวกันกับเครื่องมือบรรทัดคำสั่ง   -  person NSGod    schedule 17.07.2016
comment
@NSGod ขอบคุณที่ทำได้! หากคุณต้องการใส่คำตอบ ฉันจะทำเครื่องหมายว่ายอมรับแล้ว   -  person Rogare    schedule 17.07.2016
comment
@NSGod สำหรับฉันดูเหมือนว่า Bundle.main และ Bundle.main.resourceURL ให้ไดเร็กทอรีที่มีไบนารีบรรทัดคำสั่ง ฉันไม่แน่ใจว่าจะเข้าถึงไฟล์อื่นได้อย่างไร   -  person Jay Wong    schedule 09.02.2018


คำตอบ (1)


วิธีแก้ปัญหา คุณสามารถใช้พาธสัมบูรณ์ของไฟล์ต้นฉบับได้ เช่น หากอยู่ในไดรฟ์ iCloud :

ให้เส้นทาง = "/Users/myName/Library/Mobile Documents/com~apple~CloudDocs/myDirectory/file.xyz"

person Hugues    schedule 06.02.2020
comment
ฉันไม่รู้ว่าทำไมสิ่งนี้ถึงถูกโหวตลง มันจะใช้งานได้หากคุณกำลังเขียนโปรแกรมสำหรับ Mac คุณสามารถใช้มันเพื่อทดสอบการนำเข้าไฟล์ทดสอบ คุณสามารถแก้ไขตัวอย่างของฉันด้วยเส้นทางสัมบูรณ์ที่แท้จริงสำหรับโครงการของคุณ อย่างที่ฉันพูดไปเป็นเพียงวิธีแก้ปัญหา - person Hugues; 13.10.2020