์ฐ๋ฆฌ ์๋น์ค roome๋ ๋ฐฉํ์ถ ํ๋กํ์ ์์ฑํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค. ๋๋ฌธ์ ์ด ํ๋กํ์ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๊ณต์ ํ๋ ๊ฒ์ด ํ์์๋ค. ๋ค์ด๋ฒ, ์ธ์คํ ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ๋งค์ฒด๋ฅผ ๊ณ ๋ฏผํ๋๋ฐ ํ๋กํ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ฉด์ ํด๋ฆญ ์ ์ฐ๋ฆฌ ์ฑ์ผ๋ก ์ฐ๊ฒฐ์ ํ๋ ๊ฒ์๋ ์นด์นด์ค๋ง์ด ์ ํฉํ๋ค๋ ๊ฒฐ๋ก ์ด ๋์ ์นด์นด์คํก ๊ณต์ ํ๊ธฐ๋ง ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
1. ํ๋ฆ
๊ณต์ ํ๊ธฐ๊ฐ ์ด๋ฃจ์ด์ง๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
-----๋ณด๋ด๋ ์ด-----
1. ์ฌ์ฉ์๊ฐ ViewController์์ ๊ณต์ ํ๊ธฐ ๋ฒํผ์ ๋๋ฅธ๋ค.
2. ViewModel์์ KakaoShareApi๋ฅผ ์ฌ์ฉํด ๊ณต์ ์ฉ ํ ํ๋ฆฟ์ ์์ฑํ๊ณ , ์ ๋ฌํ๋ค.
3. ์ ๋ฌ ํ ๋๋์์จ๋ค.
-----๋ฐ๋ ์ด-----
1. ํ์ธํ๋ฌ ๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ฅธ๋ค.
2. -1) ์ฑ ๋ฏธ์ค์น ์ ์นด์นด์ค ๋๋ฒจ๋กํผ์ค์ ํ๋ซํผ์ ์ค์ ๋ iOS ๋ง์ผ์ผ๋ก ์ด๋ํ๋ค.
-2) ์ฑ ์ค์น ์
-a) background: SceneDelegate์ openURLContexts๊ฐ ์คํ๋๋ค.
-b) Suspended: SceneDelegate์ willConnectTo์์ ๋ถ๊ธฐ ์ฒ๋ฆฌํ์ฌ urlContexts๊ฐ ์๋ค๋ฉด openURLContexts๋ฅผ ํธ์ถํ๋ค.
2. ์ด๋ฏธ์ง URL
๋ณด์ฌ์ง๋ ๊ฒ์ ์์ ๊ฐ๋ค.
1. ์์ฑํ ํ๋กํ ์ด๋ฏธ์ง
2. Title = $(NICKNAME)๋์ ๋ฐฉํ์ถ ํ๋กํ ๋์ฐฉ!
3. Description = ์ง๊ธ ๋ฐ๋ก ๋ฃจ๋ฏธ์์ ํ์ธํด ๋ณด์ธ์.
4. Button = ํ์ธํ๋ฌ ๊ฐ๊ธฐ
์ด๋ ํ๋กํ ์ด๋ฏธ์ง๋ฅผ ๋ฃ๋ ๊ฒ์ด ๋ฌธ์ ์๋ค. ์นด์นด์คํก ๊ณต์ ํ์ด์ง๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ค๋ช ์ด ์๋ค.
๋ฉ์์ง์ ๋ฃ์ ์ด๋ฏธ์ง๋ URL ํํ๋ก ๋ฉ์์ง ํ ํ๋ฆฟ ๊ตฌ์ฑ ์์ ์ฒจ๋ถํ๊ฑฐ๋, ๋ฉ์์ง ํ ํ๋ฆฟ ๋๊ตฌ์์ ๋ฏธ๋ฆฌ ์ ๋ก๋ํ ์ ์์ต๋๋ค. ๊ธฐ๊ธฐ์ ์ ์ฅ๋ ์ด๋ฏธ์ง ํ์ผ์ ์๋ฒ์ ์ ๋ก๋ํ๊ณ ์ด๋ฏธ์ง ํ์ผ URL ๊ฐ์ ๊ตฌํด์ผ ๋ฉ์์ง ์ ์ก์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฏธ์ง ํ์ผ URL์ ๊ตฌํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ, ์น ํ์ด์ง ์ ์ด๋ฏธ์ง ํ์ผ์ ์นด์นด์ค ์๋ฒ๋ก ์ ๋ก๋ํ๊ฑฐ๋ ์คํฌ๋ฉํด๋๋ ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์์ต๋๋ค. ํ์ผ ์ฉ๋ 5MB ์ดํ ์ด๋ฏธ์ง๋ง ์ ๋ก๋ํ ์ ์์ต๋๋ค. ์นด์นด์ค ์๋ฒ์ ์ ๋ก๋๋ ์ด๋ฏธ์ง๋ ์ต๋ 100์ผ๊ฐ ๋ณด๊ด๋๊ณ , ๊ธฐ๊ฐ์ด ์ง๋๋ฉด ์๋์ผ๋ก ์ญ์ ๋ฉ๋๋ค.
์ฐ๋ฆฌ๋ ์๋ฒ์์ ์ด๋ฏธ์ง ํ์ผ์ ๊ฐ์ง๊ณ ์์ง ์์ผ๋ฏ๋ก ์ด๋ฏธ์ง ํ์ผ์ ์นด์นด์ค ์๋ฒ์ ์ ๋ก๋ ํ์ฌ ๋ฐํํด์ฃผ๋ url์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ์๋ค.
์ด๋ ์์ฑ๋ ํ๋กํ ์นด๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด FileManager๋ฅผ ์ฌ์ฉํ์๋ค. ImageManager๋ฅผ ๋ง๋ค์ด FileManager์ ์ ์ฅํ๊ฑฐ๋ ๊ฐ์ ธ์์ ์ฌ์ฉํ ์ ์๋๋ก ๊ตฌํํ์๋๋ฐ, ํ๋กํ ์นด๋ ViewController์์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ฉด ๊ทธ ์ด๋ฏธ์ง๋ฅผ Data๋ก ๋ณํํ์ฌ FileManager์ ์ ์ฅํ๊ณ ์นด์นด์คํก ์๋ฒ์ ์ ๋ก๋ํ๊ธฐ ์ํด ์ด๋ฏธ์ง๊ฐ ํ์ํ ๋ ImageManager์์ ๋ค์ UIImage๋ก ๋ณํํ์ฌ ๋ฐํํด์ค๋ค.
class ImageManager {
enum Identifiers: String {
case squareCard = "squareCard"
case rectangleCard = "rectangleCard"
}
//Data๋ก ๋ณํํ์ฌ FileManager์ ์ ์ฅ.
class func saveImageToDirectory(identifier: Identifiers, image: UIImage?) {
let documentsDirectory = FileManager.default.urls(for: .documentDirectory,in: .userDomainMask).first!
let imageName = identifier.rawValue
let fileURL = documentsDirectory.appendingPathComponent(imageName, conformingTo: .png)
do {
if let imageData = image?.pngData() {
try imageData.write(to: fileURL)
print("Image saved at: \(fileURL)")
}
} catch {
print("Failed to save images: \(error)")
}
}
//FileManager์์ ์ฐพ์์ Data๋ฅผ ๋ค์ UIImage๋ก ๋ณํ
class func loadImageFromDirectory(identifier: Identifiers) -> UIImage? {
let fileManager = FileManager.default
let documents = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!
let fileURL = documents.appendingPathComponent(identifier.rawValue, conformingTo: .png)
guard fileManager.fileExists(atPath: fileURL.path) else {
return nil
}
return UIImage(contentsOfFile: fileURL.path)
}
}
//์นด์นด์ค ์๋ฒ์ ์ด๋ฏธ์ง ์
๋ก๋
private func updateImageToKakaoServer() {
//ImageManager๋ฅผ ์ฌ์ฉํด FileManager์ ์ ์ฅ๋์๋ ์ด๋ฏธ์ง ๋ฐ์์ด
let image = ImageManager.loadImageFromDirectory(identifier: .squareCard)
if let profileImage = image {
//ํด๋น ์ด๋ฏธ์ง๋ฅผ ์นด์นด์ค ๊ณต์ ์๋ฒ์ ์
๋ก๋
ShareApi.shared.imageUpload(image: profileImage) { (imageUploadResult, error ) in
if let error = error { //์
๋ก๋ ์คํจ
print(error)
} else { //์
๋ก๋ ์ฑ๊ณต
print("imageUpload() success.")
//์
๋ก๋ ์ฑ๊ณต ํ ํด๋น url response ๋ฐ์.
let url = imageUploadResult?.infos.original.url
//์ฌ์ฉํ ํ
ํ๋ฆฟ์ ์ ๋ฌ
self.useCustomTemplate(imageURL: url)
}
}
}
}
https://apps.apple.com/kr/app/roome/id6503616766
roome
๋ฐฉ ํ์ถ ํ๋กํ ์ ์ ์๋น์ค ๋ฃจ๋ฏธ๋ฅผ ํตํด ๋์ ์ฑํฅ์ ๋น ๋ฅด๊ฒ ์ด๋ฏธ์ง๋ก ๋ง๋ค์ด ๋ณด์ธ์. ๋ฃจ๋ฏธ๋ ๋ฐฉ ํ์ถ์ ์ข์ํ๋ ์ฌ๋๋ค์ด ๋์ ์ทจํฅ์ ๋ด์ ํ๋กํ์ ์ด๋ฏธ์ง 1์ฅ์ผ๋ก ๋ง๋ค ์ ์๋ ์๋น์ค
apps.apple.com