Skip to content

Latest commit

ย 

History

History
201 lines (174 loc) ยท 9.99 KB

220110_FileManager,_iOS_File_System,_Multipart_form-data.md

File metadata and controls

201 lines (174 loc) ยท 9.99 KB

220110 FileManager, iOS File System, Multipart/form-data

TIL (Today I Learned)

1์›” 10์ผ (์›”)

ํ•™์Šต ๋‚ด์šฉ

  • ์˜คํ”ˆ ๋งˆ์ผ“ ํ”„๋กœ์ ํŠธ STEP 2
  • Multipart/form-data ๋•Œ๋ฌธ์— 9์‹œ๊ฐ„ ์‚ฝ์งˆ..

ย 

๊ณ ๋ฏผํ•œ ์  / ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

[๋„คํŠธ์›Œํ‚น ํ•  ๋•Œ dataTask ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ƒํƒœ์ฝ”๋“œ์™€ ์‘๋‹ต๋ฉ”์„ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•]

  • ๋ญ”๊ฐ€ ์ƒํƒœ์ฝ”๋“œ๊ฐ€ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์„ ๋•Œ ๋ฆฌ์Šคํฐ์Šค์— ์ƒํƒœ๋ฉ”์„ธ์ง€๊ฐ€ ๋‹ด๊ธฐ๋Š” ์ค„ ์•Œ์•˜๋Š”๋ฐ, data์— json ํ˜•์‹์œผ๋กœ ๋‹ด์•„์ฃผ๋”๋ผ... ์ผ๋‹จ ์ด๊ฑฐ ์•Œ์•„๋‚ด๋Š”๋ฐ ์‚ฝ์งˆ..
// dataTask ๋‚ด๋ถ€. resoponse ๋ฐ”์ธ๋”ฉ ์ฒ˜๋ฆฌ ์ดํ›„...
guard (200...299).contains(response.statusCode) else {
    completion(.failure(NetworkError.statusCode(response.statusCode))) // ์—๋Ÿฌ ์ฒ˜๋ฆฌ
    print("---")
    print(httpResponse.statusCode) // ์ƒํƒœ์ฝ”๋“œ ์ถœ๋ ฅ

    if let convertedJsonIntoDict = try? JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary {
        // ์‘๋‹ต๋ฉ”์„ธ์ง€๋ฅผ data > Json > NSDictionary๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์ถœ๋ ฅ
        print(convertedJsonIntoDict)
    }

    print("---")
    return // ํด๋กœ์ € ๋ฆฌํ„ด
}
  • ๊ทธ๋ž˜์„œ ์œ„์— data๋ฅผ JSONSerialization๋กœ json์œผ๋กœ ๋ณ€ํ™˜ ํ›„ NSDictionary๋กœ ๋‹ค์šด์บ์ŠคํŒ… ํ•ด์ฃผ๋ฉด ์ƒํƒœ๋ฉ”์„ธ์ง€๊ฐ€ ์•„๋ž˜์ฒ˜๋Ÿผ ๋‚˜์˜จ๋‹ค.
  • ์•„๋ž˜ ๋ฉ”์„ธ์ง€๋Š” ์‚ฝ์งˆํ•˜๋‹ค๊ฐ€ ๊ฒฝํ—˜ํ–ˆ๋˜ ์ฝ”๋“œ๋ž‘ ๋ฉ”์„ธ์ง€์ค‘ ํ•˜๋‚˜.. 406๋„ ๋ณด์•˜๋‹ค.
 {
     code = 500;
     message = "Cannot invoke \"java.awt.image.BufferedImage.getWidth()\" because \"buffer\" is null";
 }

[URLRequest์— ๋“ฑ๋กํ•œ ํ—ค๋”, ๋ฐ”๋””๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•]

  • ํ—ค๋”๋Š” ์•„๋ž˜ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•ด์„œ print๋ฅผ ์ฐ์œผ๋ฉด ์ถœ๋ ฅํ•ด์ฃผ๋”๋ผ
    • request.allHTTPHeaderFields
  • Request์˜ ๋ฐ”๋”” ๋‚ด๋ถ€ ๋ฌธ์ž์—ด์€ String ๋‚ด๋ถ€ init์„ ํ™œ์šฉํ–ˆ๋‹ค.
    • String(data: request.httpBody!, encoding: .utf8)

[์‚ฝ์งˆ ๊ธฐ๋ก]

  • ์‚ฝ์งˆํ•˜๊ณ  ๋‚˜๋ฉด ๋ฟŒ๋“ฏํ•จ๋ณด๋‹ค ํ˜„ํƒ€๊ฐ€ ์”จ๊ฒŒ ์ฐพ์•„์˜จ๋‹ค... ์ •์ƒ์ธ๊ฐ€...
  • ์‹œ์ž‘์€ ๋‹ค๋ฅธ ํŒ€๋“ค์ด ํ…Œ์ŠคํŠธ๋กœ ์ƒํ’ˆ๋“ฑ๋ก์„ ํ•œ๊ฑธ ๋ณด๊ณ  ์šฐ๋ฆฌ ์ฝ”๋“œ๋กœ๋„ ์ƒํ’ˆ ๋“ฑ๋ก์ด ๋˜๋‚˜ ํ™•์ธ์ฐจ ํ…Œ์ŠคํŠธ๋ฅผ ํ•œ๊ฒŒ ์‹œ์ž‘์ด์˜€๋‹ค. ๊ทธ๊ฒŒ ์ €๋… 9์‹œ์ฏค์ด์˜€๋‚˜...
  • ๊ทผ๋ฐ ์ œ๋Œ€๋กœ ๋˜์งˆ ์•Š์•˜๋‹ค. ์ƒํƒœ์ฝ”๋“œ, ์‘๋‹ต๋ฉ”์„ธ์ง€, multipart form-data ์–‘์‹์„ ๊ผผ๊ผผํžˆ ์‚ดํŽด๋ณด๋ฉด์„œ ์‚ฝ์งˆํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.
  • 406 ์—๋Ÿฌ๊ฐ€ ๋‚˜์„œ ํ—ค๋”๊ฐ€ ๋ฌธ์ œ์ธ ์ค„ ์•Œ์•˜๋Š”๋ฐ, ๊ทธ๊ฑด ์•„๋‹ˆ์˜€๋‹ค.
  • ๊ฒฐ๊ตญ ๋ฌธ์ œ๋Š” ํ•˜๋“œ์ฝ”๋”ฉ์„ ๊ฐœ์„ ํ•˜๋ ค๊ณ  ๋งŒ๋“ค์–ด ๋‘์—ˆ๋˜ ํƒ€์ž…์—์„œ ์—ฐ๊ด€๊ฐ’์„ ํ™œ์šฉํ•ด Data ํƒ€์ž…๊ณผ ๋ฌธ์ž์—ด์„ ํ•จ๊ป˜ String ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์˜€๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ด๋Ÿฐ์‹.. "\(data)\r\n"
  • ๊ทธ๋ž˜์„œ ๋ฌธ์ž์—ด์€ ๋ฌธ์ž์—ด๋Œ€๋กœ append ์‹œํ‚ค๊ณ , Dataํƒ€์ž…์€ ๋˜ ๋”ฐ๋กœ.. ๊ฐ ํƒ€์ž…๋ณ„๋กœ append๋ฅผ ๋ถ„๋ฆฌํ•ด์ฃผ๋‹ˆ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.
    • ํŽธ์˜๋ฅผ ์œ„ํ•ด ๋งŒ๋“ค์—ˆ๋˜ append(_ string:)๋ฅผ ์ž˜๋ชป์จ๋จน๊ณ  ์žˆ์—ˆ๋„ค...
  • ํ•ด๊ฒฐํ•˜๊ณ ๋‚˜๋‹ˆ ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ์˜ ๋ฌธ์ œ์ ๋“ค์ด ๊ฝค๋‚˜ ๋งŽ์•˜์—ˆ๋‹ค. ๋ฆฌํŒฉํ† ๋ง์„ ๋งŽ์ด ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.
body.append("--\(boundary)\r\n")
body.append("Content-Disposition: form-data; name=\"params\"\r\n")
body.append("Content-Type: application/json\r\n\r\n")
body.append(encodeData) // ์•ค ๋ฐ์ดํ„ฐ๋ผ ๋”ฐ๋กœ append
body.append("\r\n")
  • Mock ํ…Œ์ŠคํŠธํ•  ๋• ๋ฌธ์ œ ์—†์—ˆ๋Š”๋ฐ, ์‹ค์ œ๋กœ API๋ฅผ ์ฐŒ๋ฅด๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋‹ค๋ณด๋‹ˆ ๋ฐœ๊ฒฌํ•œ ๋ฌธ์ œ์ ๋“ค์ด๋‹ค.
    • ๊ทธ๋ฆฐ ๋ง๋Œ€๋กœ fake ํ…Œ์ŠคํŠธ๋„ ๊ผญ ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค.
  • ๋‹ค ๋งˆ์น˜๊ณ ๋‚˜๋‹ˆ ์˜ค์ „ 6์‹œ์˜€๋‹ค. 3์‹œ์ฏค ํ•ด๊ฒฐ๋ชปํ•˜๋Š” ๋‚˜์ž์‹ ํ•œํƒœ ๋นก์ณ์„œ ์ž๋ ค๊ณ  ๋ˆ„์› ์—ˆ๋Š”๋ฐ, ์ฐ์ฐํ•จ์— ์ž ์ด ์˜ค์งˆ ์•Š์•˜๋‹ค. ๊ฒฐ๊ตญ์—” ๋‹ค ํ•ด๊ฒฐํ•˜๊ณ  ์ชฝ์ž  3์‹œ๊ฐ„์„ ์žค๋„ค ๐Ÿ˜‡

[iOS File System]

  • ํŒŒ์ผ/์ž๋ฃŒ๋ฅผ ํƒ์ƒ‰/์ ‘๊ทผ/๋ณด๊ด€ ๋“ฑ์˜ ๊ธฐ๋Šฅ์œผ๋กœ ํŒŒ์ผ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ * ์˜๊ตฌ ์ €์žฅ์†Œ ๊ด€๋ฆฌ
    • OS <-> File System <-> Disk
  • ์• ํ”Œ ํŒŒ์ผ ์‹œ์Šคํ…œ
    • Apple file system, APFS๋กœ ๋ถˆ๋ฆฌ๋ฉฐ ์• ํ”Œ์—์„œ macOS, iOS, watchOS, tvOS ๋ชจ๋‘์—์„œ ๋ฒ”์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ๋งŒ๋“  ํŒŒ์ผ์‹œ์Šคํ…œ
    • ๋””์Šคํฌ ํŒŒ์ผ ์‹œ์Šคํ…œ(๋””์Šคํฌ ๋“œ๋ผ์ด๋ธŒ ๊ด€๋ฆฌ)
    • ๊ธฐ์กด HFS+ ๋Œ€์ฒดํ•˜๋Š” ์‹ ๊ทœ ํŒŒ์ผ ์‹œ์Šคํ…œ
    • iOS์—์„œ๋Š” 10.3 ๋ฒ„์ „๋ถ€ํ„ฐ macOS์—์„œ๋Š” ํ•˜์ด ์‹œ์—๋ผ ๋ฒ„์ „๋ถ€ํ„ฐ ๋„์ž…
  • ์• ํ”Œ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๊ธฐ๋Šฅ
    • ์ปจํ…Œ์ด๋„ˆ ๋ฐฉ๋ฒ• ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ๋‚ด ํŒŒํ‹ฐ์…˜ ์šฉ๋Ÿ‰ ์กฐ์ „
    • ์นดํ”ผ ์˜จ ๋ผ์ดํŠธ ์ง€์› -> ์Šค๋ƒ…์ƒท ์šฉ์ด
    • ๊ฐ•๋ ฅํ•œ ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • iOS file system
    • iOS ํŒŒ์ผ ์‹œ์Šคํ…œ์€ ํ•ด๋‹น ๊ฐ๊ฐ์˜ ์•ฑ์— ๋งž์ถฐ์ ธ์žˆ๋‹ค. (์‹œ์Šคํ…œ ๊ฐ„๊ฒฐ์„ฑ ๋ฐ ๋ณด์•ˆ ์ธก๋ฉด)
    • ์•ฑ SandBox ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€์—์„œ ํŒŒ์ผ ์‹œ์Šคํ…œ๊ณผ ์ƒํ˜ธ์ž‘์šฉ (์•ฑ ์„ค์น˜์‹œ ๊ฐ ๊ธฐ๋Šฅ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ SandBox์— ๋‹ด์Œ)
    • budle Container: ์•ฑ ๋ฒˆ๋“ค
    • Data Container: ์•ฑ/์œ ์ € ๋ฐ์ดํ„ฐ ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ์„œ๋ธŒ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌ
    • iCloud Container: iCloud ๊ด€๋ จ ๋ฐ์ดํ„ฐ
  • ๋‹ค์–‘ํ•œ ๋””๋ ‰ํ† ๋ฆฌ
    • Bundle(MyApp.app)
      • ์ด ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์•ฑ๊ณผ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ํฌํ•จํ•œ๋‹ค.
      • ์“ฐ๊ธฐ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
      • ๋ณ€์กฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด bundle ๋””๋ ‰ํ† ๋ฆฌ๋Š” app ์„ค์น˜์‹œ ์„œ๋ช…๋œ๋‹ค.
      • ์ด ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์“ฐ๊ธฐ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ์„œ๋ช…์ด ๋ณ€๊ฒฝ๋˜๊ณ , app์ด launch๋˜์ง€ ์•Š๋Š”๋‹ค.
      • app bundle์— ์ €์žฅ๋œ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ฝ๊ธฐ ์ „์šฉ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
      • iCloud / iTunes ๋ฐฑ์—…๋ถˆ๊ฐ€
      • iTunes๋Š” App Store์—์„œ ๊ตฌ์ž…ํ•œ ๋ชจ๋“  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ดˆ๊ธฐ ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    • Documents
      • ์‚ฌ์šฉ์ž ์ƒ์„ฑ ์ฝ˜ํ…์ธ  ์ €์žฅ
      • ํŒŒ์ผ ๊ณต์œ ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณต๊ฐœํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ๋งŒ ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค.
      • ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜์ •/์ถ”๊ฐ€/์‚ญ์ œ ๊ฐ€๋Šฅ(iTunes ํŒŒ์ผ ๊ณต์œ )
      • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ ๊ฐ€๋Šฅ
      • iCloud / iTunes ๋ฐฑ์—…
      • Inbox
        • ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋‹ฌ ์ž๋ฃŒ ์ €์žฅ
        • iCloud / iTunes ๋ฐฑ์—…
    • Documents/Inbox
      • ์•ฑ์ด ์™ธ๋ถ€ ์—”ํ‹ฐํ‹ฐ์—์„œ ์—ด๋„๋ก ์š”์ฒญํ•œ ํŒŒ์ผ์— ์ ‘๊ทผํ•œ๋‹ค.
      • ํŠน์ด ๋ฉ”์ผ์€ ์•ฑ๊ณผ ๊ด€๋ จ๋œ ์ด๋ฉ”์ผ ์ฒจ๋ถ€ ํŒŒ์ผ์„ inbox์— ์ €์žฅํ•œ๋‹ค.
      • Document interaction controllers๋Š” ํŒŒ์ผ์„ ํŒŒ์ผ app์— ๋ฐฐ์น˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
      • ๋‹ค๋ฅธ ์•ฑ์„ ํ†ตํ•ด ์ „์†ก๋ฐ›์€ ํŒŒ์ผ์ด ์ €์žฅ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ
      • ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ์‚ญ์ œ๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •์€ ์•ˆ๋œ๋‹ค.
      • ์‚ฌ์šฉ์ž๊ฐ€ ์ด ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์•ฑ์„ ์ด๋™ํ•ด์•ผํ•œ๋‹ค.
      • ์œ ์ €๊ฐ€ ์ง์ ‘ ์ƒ์„ฑ ๋ถˆ๊ฐ€
      • iCloud / iTunes ๋ฐฑ์—… ๊ฐ€๋Šฅ
    • Library
      • ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด ์•„๋‹Œ ํŒŒ์ผ์˜ ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ
      • ์—ฌ๋Ÿฌ ํ‘œ์ค€ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ ์ค‘ ํ•˜๋‚˜์— ํŒŒ์ผ์„ ์ €์žฅํ•œ๋‹ค
      • iOS app์€ ์ผ๋ฐ˜์ ์œผ๋กœ Application support์™€ Caches์˜ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉ
      • ์‚ฌ์šฉ์ž ์ง€์ • ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ ๊ฐ€๋Šฅ
      • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š์œผ๋ ค๋Š” ํŒŒ์ผ์—๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„œ๋ธŒ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
      • ์•ฑ์—์„œ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ํŒŒ์ผ์šฉ์œผ๋กœ ์ด๋Ÿฌํ•œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
      • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ Contents (Caches ์„œ๋ธŒ ๋””๋ ‰ํ† ๋ฆฌ ์ œ์™ธ)๋Š” iCloud / iTunes์— ์˜ํ•ด ๋ฐฑ์—…๋œ๋‹ค.
    • Library/Application Support
      • ์•ฑ์˜ ๊ธฐ๋Šฅ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ง€์†์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ์–ด์•ผํ•˜๋Š” ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๊ฒฝ๋กœ
      • CoreData ๊ธฐ๋ณธ ์ €์žฅ ๊ฒฝ๋กœ
      • ํ•ธ๋“œํฐ ๊ธฐ๊ธฐ ๋‚ด์— ์•ฑ ํด๋”(sandbox)๊ฐ€ ์ƒ๊ธฐ๊ณ , ์‚ฌ์šฉ์ž๋Š” Application Support๋Š” ์—ด์–ด๋ณผ ์ˆ˜ ์—†๋‹ค.
      • Document๋Š” ์•ฑ์—์„œ ํ—ˆ์šฉํ–ˆ์„ ๊ฒฝ์šฐ์—๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.
      • ๋‹น์—ฐํžˆ ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋„ Application Support์—๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • Library/Caches
      • ์•ฑ์˜ ๋™์ž‘ ์†๋„, ๋ฐ์ดํ„ฐ ์ ˆ์•ฝ ๋“ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐ„
      • ์‰ฝ๊ฒŒ ์žฌ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ๋งŒ ์ €์žฅ
      • ๋””์Šคํฌ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜๊ฑฐ๋‚˜ ์‹œ์Šคํ…œ ๋ณต์›์˜ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์— ์˜ํ•ด ์ž๋™์œผ๋กœ ํŒŒ์ผ์ด ์‚ญ์ œ๋  ์ˆ˜ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ
      • ์‚ญ์ œ๋˜์–ด๋„ ๋ฌด๋ฐฉํ•œ ํŒŒ์ผ๋งŒ ์ €์žฅํ•˜์ž.
      • iCloud / iTunes ๋ฐฑ์—… ๋ถˆ๊ฐ€
    • tmp
      • ์•ฑ ์‹คํ–‰ ์‚ฌ์ด์— ์œ ์ง€ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ์ž„์‹œํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๊ณณ
      • ๋”์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด ์•ฑ์—์„œ ์ด ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ์„ ์‚ญ์ œํ•ด์•ผ ํ•œ๋‹ค.
      • ์•ฑ์ด ์‹คํ–‰๋˜๊ณ  ์žˆ์ง€ ์•Š์„ ๋•Œ๋„ ์‹œ์Šคํ…œ์—์„œ ์ด ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.
      • iCloud / iTunes ๋ฐฑ์—… ๋ถˆ๊ฐ€

[FileManager]

  • ๋ฌธ์ž์—ด์„ ๋‹ด์€ .txt ํŒŒ์ผ์„ ์ƒ์„ฑ
let fileManager = FileManager.default

// ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ
let applicationSupportURL = fileManager.urls(for: .applicationSupportDirectory, in: .userDomainMask)[0]
let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
let tmpURL = fileManager.temporaryDirectory

// ์ƒ์„ฑํ•  ํŒŒ์ผ ๊ฒฝ๋กœ
let fileURL = tmpURL.appendingPathComponent("abc.txt")

// ์‚ฝ์ž…ํ•  ๋ฌธ์ž์—ด
let text = NSString(string: "Hello, Files!")

do {
    try text.write(to: fileURL, atomically: true, encoding: String.Encoding.utf8.rawValue)
    print(fileURL)
} catch {
    print("์‹คํŒจ")
}
  • ํŒŒ์ผ์„ ์ฝ์–ด์„œ ์ถœ๋ ฅํ•˜๊ธฐ
do {
    let dataFromPath: Data = try Data(contentsOf: fileURL) // URL์„ ๋ถˆ๋Ÿฌ์™€์„œ Dataํƒ€์ž…์œผ๋กœ ์ดˆ๊ธฐํ™”
    let text: String = String(data: dataFromPath, encoding: .utf8) ?? "๋ฌธ์„œ์—†์Œ" // Data to String
    print(text) // ์ถœ๋ ฅ
} catch let e {
    print(e.localizedDescription)
}
  • ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๊ธฐ
do {
    try fileManager.removeItem(at: fileURL) // ์‚ญ์ œํ•  ํŒŒ์ผ์˜ ๊ฒฝ๋กœ
    print(fileURL)
} catch {
    print("์‹คํŒจ")
}