๐งโ๐ป ๋ชจ๊ฐ์ฝ 3์ฃผ์ฐจ
์ด์ ๊ธ ๐งโ๐ป ๋ชจ๊ฐ์ฝ 2์ฃผ์ฐจ ๋ณด๋ฌ๊ฐ๊ธฐ.
๐ ์ค๋์ ํ ์ผ
- ์ฃผ๋์ด ์ฐฝ์ ๊ฒฝ์ง๋ํ ์ฃผ์ ๋ฐ๊พธ๊ธฐ
๐ฃ ์ฃผ๋์ด ์ฐฝ์ ๊ฒฝ์ง๋ํ ์ฃผ์ ๋ฐ๊พธ๊ธฐ
์ด์ ์ ์ ํ๋ Myxtape์์ด๋์ด๋ฅผ ๊ตฌํํ๋ ค๊ณ ๋ ธ๋ ฅํ์์ผ๋ ๊ธฐ์ ์ ์ธ ๋ฌธ์ ์ ๋๋ฌํ๋ค.
๊ทธ๊ฐ ์๋ฌด๊ฒ๋ ์ํ๊ฒ์ ์๋์๋ค. ๋ง์ดํฌ๋ฅผ ํตํด ๋ชฉ์๋ฆฌ๋ฅผ ๋
น์ํ๋๊ฒ๊ณผ ๋ด๋ถ์ ์๋ฆฌ, ์ฆ output audio๋ฅผ ๋
น์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํ๋๋ฐ, ์ธ๋ถ ๋ง์ดํฌ ๋
น์์ ์์ ์ฌ์ง์์ ๋ณด์ด๋ฏ ๋น๊ต์ ์ฝ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ์ง๋ง, output audio์ ๊ฒฝ์ฐ๋ API๋ก ์ ๊ณต๋์ง ์๋ ๊ธฐ๋ฅ์ด์๋ค. ์ ์๊ถ ๋ฌธ์ ๋ก ์ถ์ ๋๋ ์ด์ ๋ก ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์๋ ๊ฒ ๊ฐ์๋ค. ์ง๋ ํ์ฃผ๊ฐ ๋ง์ ์ ๋ณด๋ฅผ ๊ฒ์ํ๊ณ ์๋ํด๋ณด์์ง๋ง, AVAudioEngine์ ์ฌ์ฉํด์ ๊ฐ๋ฅํ ๊ฒ์ด๋ผ๋ ์ถ๋ก ๋ง ์์ ๋ฟ ๋ ์์ธํ ์ ๋ณด๋ฅผ ์ป๋๊ฑด ๋ถ๊ฐ๋ฅํ๋ค. ์ถ๊ฐ๋ก Apple Developer Forum์์ ๊ทธ๋ฐ ๊ธฐ๋ฅ์ ๊ตฌํํ๋๋ผ๋ ์ ํ ๊ท์ ์ ์๋ฐ๋๋ค๋ ๊ธ์ ์ฐพ์ผ๋ฉฐ ๊ฒฐ๊ตญ ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒฐ๋ก ์ ๋๋ฌํ๋ค.
๊ทธ๋์ ์ด๋ฒ ๋ชจ์์์๋ ์ฑ์ ๋ด๋นํ๋ ๋ด๊ฐ ํ์๋ค์๊ฒ ์ด์ ์ฃผ์ ๊ฐ ๊ธฐ์ ์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ ์ด์ ๋ฅผ ์ค๋ช ํ์๊ณ , ์๊ฒฌ์ ๋๋ ๋์ ์ฃผ์ ๋ฅผ ๋ฐ๊พธ๋ ์ชฝ์ผ๋ก ์๊ฒฌ์ ๋ชจ์๋ค. ์น๊ณผ ์ฑ์ ํตํด์ ํด๋ณผ ์ ์๋๊ฒ์ด ๋ฌด์์ด ์์๊น ๊ณ ๋ฏผ์ ํ๋ค ์ฒ์ ์ฃผ์ ๋ก ์ ํ๋ ์ค์ผ์ค๋ฌ ์ชฝ์ผ๋ก ์๊ฒฌ์ด ๋ชจ์์ก๋ค. ๋ฌ๋ ฅ์ ์ฌ์ฉํ๋ ๋ณต์กํ ์ค์ผ์ค๋ฌ๋ฅผ ์ง์ํ๊ณ ๊ฐ๋จํ๊ฒ ํ ์ผ๋ง์ ๋์ดํ๋ ์ฌํํ To Do List์คํ์ผ์ ์ค์ผ์ค๋ฌ๋ฅผ ๋ง๋ค์ด๋ณด๊ธฐ๋ก ํ๋ค. ๋ ํ์์ ํ๊ณผ ํํ์ด์ง์ ๊ณต์ง์ฌํญ์ด๋ ํ๊ต ๊ณต์ง์ฌํญ์ ์ง์ ํ์ธํ๋๊ฒ์ด ๋ถํธํ๋ค๊ณ ๋๊ผ์ด์ ์น ํฌ๋กค๋ง์ ํตํด ๊ณต์ง์ฌํญ์ ๊ธ์ด์ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ๋ ๊ตฌํํด๋ณด๊ธฐ๋ก ์๊ฒฌ์ ๋ชจ์๋ค. ์ ๋ฒ ์์ด๋์ด๊ฐ ํ๋น์ฑ์ ์ถฉ๋ถํ ๊ฒ์ฆํ์ง ๋ชปํ ์ํ๋ก ์์ํ์ฌ ์คํจํ์ผ๋ฏ๋ก, ์ด๋ฒ์ ๊ฐ๋จํ ๊ธฐ๋ฅ๋ง์ ํ๋นํ์ง ํ์ธํด๊ฐ๋ฉฐ ๋ง๋ค์ด๋ณด๊ธฐ๋ก ํ์๋ค.
๐ Json
To Do๋ค์ Json์ผ๋ก ์๋ฒ์ ์ ์ฅํ์ฌ ์น๊ณผ ์ฑ์์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค. Swift์์ Json์ ์๋ฒ์์ ๊ฐ์ ธ์ ๋์ฝ๋ฉํ์ฌ ์ฌ์ฉํ๊ณ , ์ฑ์์ ์ธ์ฝ๋ฉํ์ฌ ์๋ฒ์ ์ฌ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด์๋ค. ์ ํ ๊ฐ๋ฐ์ ๋ํ๋จผํธ์์ ๊ด๋ จ๋ ๋ฌธ์๋ฅผ ์ฐพ์ ์ ์์๋ค. ์ด ๋ฌธ์์ ๋ฐ๋ผ์ Swift PlayGround์์ ๋ด ์๋ฒ์ Jsonํ์ผ์ ์ ๋ก๋ํ๋ ์ค์ต์ ํด๋ดค๋ค.
import Cocoa
struct Order: Codable {
let customerId: String
let items: [String]
}
let order = Order(customerId: "12345", items: ["Cheese pizza", "Diet soda"])
let uploadData = try! JSONEncoder().encode(order)
let url = URL(string: "http://MY SERVER IP/json/")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let task = URLSession.shared.uploadTask(with: request, from: uploadData) { data, response, error in
if let error = error {
print ("error: \(error)")
return
}
guard let response = response as? HTTPURLResponse,
(200...299).contains(response.statusCode) else {
print ("server error")
return
}
if let mimeType = response.mimeType,
mimeType == "application/json",
let data = data,
let dataString = String(data: data, encoding: .utf8) {
print ("got data: \(dataString)")
}
}
task.resume()
์๋ฒ ์ค์ ๋ฌธ์ ์ธ์ง ๊ฒฐ๊ณผ๋ server problem์ด์๋ค. ๋ค๋ฅธ ์ฃผ์๋ฅผ ์ฃผ์์๋๋ ์ฐ๊ฒฐ์ ์คํจํ๋ค๋ ์๋ฌ๊ฐ ๋์ค๋๊ฒ์ผ๋ก ๋ณผ ๋, ์๋ฒ์ ์ฐ๊ฒฐ์ ๋์์ง๋ง ์๋ฒ์์ POST ๊ด๋ จ ๋ฌธ์ ๊ฐ ์๋๊ฒ์ผ๋ก ์ถ์ ๋๋ค. ๊ด๋ จ ๋ฌธ์ ๋ถํฐ ์์ํ์ฌ ์ฐจ์ฐจ ํด๊ฒฐํด ๋๊ฐ์ผ๊ฒ ๋ค.
๋ค์ ๊ธ ๐งโ๐ป ๋ชจ๊ฐ์ฝ 4์ฃผ์ฐจ๋ณด๋ฌ๊ฐ๊ธฐ.
Comments