อ่านไฟล์ในเครื่อง iPhone ด้วย Swift

Nutdanai Vankrua
odds.team
Published in
2 min readJan 29, 2019

เรื่องราวของ Dev ที่มี Requirement ให้ไปดึงไฟล์ .pdf / .docx / .rtf / .txt และอื่นๆ มากมายที่อยู่บนเครื่อง iPhone/iPad

Files App ใน iOS 11

ใน iOS 11 มี App ตัวใหม่ชื่อว่า “Files” คอยจัดการเรื่อง File ต่างๆ ให้ไม่ว่าจะอยู่บนเครื่อง หรืออยู่บน iCloud ก็ตาม

เราลองโหลด File อะไรก็ได้มาไว้ที่เครื่อง iPhone จะเจอ Default PopUp ของ iOS ถามว่าจะ Share ไปที่ไหน ซึ่งแน่นอน เราจะเลือก “Save to Files”

หน้าตา Action Sheet ของการ Share

กด “Save to Files” มันก็จะถามต่อไปว่าจะให้ Save ใน App ไหน

เลือก App ที่ต้องการนำไฟล์ไปไว้ในเครื่อง

บางคนอาจสงสัยว่า ถ้าเป็นเช่นนี้ File ที่เก็บอยู่ใน App เรา App อื่นจะเห็นไหม คำตอบคือเห็นถ้าเราเก็บไว้ใน Folder “Documents”

iOS File System
  • Documents : สำหรับเก็บไฟล์หรือข้อมูลที่ให้ User เห็นได้ หรือต้องการให้ App อื่น ซึ่งสามารถเห็นผ่าน Sharing ของ iOS ได้
  • Library : สำหรับ Folder นี้จะไม่เปิดเผยให้ User เห็น แต่ก็ไม่ได้ความว่าให้เก็บข้อมูล User นะครับ
  • Temp : สำหรับเก็บข้อมูลชั่วคราวและไม่เปิดเผยให้ User เห็น ซึ่งถ้า App เราปิดอยู่ File ใน Folder นี้สามารถถูกลบจาก OS โดยอัติโนมัติได้

สามารถอ่านเพิมเติ่มได้ที่นี้นะครับ

https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html

กลับมาที่โจทย์ของเรา (ลง Code กันสักที)

เราอยากที่จะสามารถ Browse ไฟล์ที่อยู่บนเครื่องเราได้ ดึง Path มันมาได้ เพื่อที่จะทำอะไรบางอย่างต่อ ค่อยว่ากันไป ทำอย่างไรนะ

โชคดีที่ Apple มี ViewController ชื่อว่า “UIDocumentInteractionController” มาให้ ง่ายๆ เลยก็สั่งให้เปิด ViewController นี้ขึ้นมาเลย

จะสังเกตว่าต้องระบุประเภทไฟล์ที่เราสนใจด้วย (documentTypes) ในกรณีนี้เราสนใจไฟล์ทุกประเภทจึงส่งไปว่า “public.item”

เราสามารถดูได้ว่า “UIDocumentInteractionController” รับ “documentType” อะไรได้บ้างจากที่นี้เลย https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html

สุดท้ายนี้เราต้องมี Listener / Callback / etc. อะไรบางอย่างที่ให้ “UIDocumentInteractionController” กลับมาบอกเราได้ว่าเลือกไฟล์อะไรไป ในกรณีนี้จะเป็น Delegate (หาอ่านต่อเองนะ >..<)

Class ViewController ของเราจึง implement Protocol ชื่อว่า “UIDocumentPickerDelegate” และสามารถคอยฟัง URL Path ของ File จาก Function ตาม Code ตัวอย่างได้แล้ว :)

จบแล้ว (หรือเปล่านะ)

จริงๆ แล้วยังมีหลายเรื่องที่สามารถนำไปต่อยอดได้ เช่น Upload File จากไฟล์ที่อ่าน / อ่านไฟล์ขึ้นมาแก้ไขข้อมูล แล้วบันทึกกลับลงไปใหม่ และอื่นๆ มากมาย แต่ในบทความนี้ขอจบเฉพาะ Browse File ให้เจอก่อนนะครับ

ถ้าใครอยากได้ Series การจัดการ File ในเครื่อง iOS ต่อช่วยกันตบมือด้วยนะครับ แล้วผมจะต่อยอดและมาเล่าให้ฟัง

ไว้เจอกันใหม่… ขอบคุณครับ ;)

--

--