M1๋งฅ๋ถ ์นด์นด์ค ๋งต ๊ตฌํ ๋ฐฉ๋ฒ ( kakao SDK for ios )
ํ์ฌ ์ ์ ๊ฐ๋ฐ ํ๊ฒฝ์ M1 ๋งฅ๋ถ, Xcode: 13.4.1 , Simulator: ios 15.5์ ๋๋ค.
์นด์นด์คํก ๋๋ฒจ๋กํผ ๊ฐ์ด๋์ ๊ฒ์์ ํตํด ์งํํ์ผ๋ฉฐ ์ฌ๋ฌ ๊ฐ์ง ๋ฌธ์ ๋ก ์ธํ์ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ค์ดํฐ๋ธ ์ฑ ํค ๋ฐ๊ธ ๋ฐ Bundle ID ๋ฑ๋กํ๊ธฐ ์ํ์ฌ
1. ์นด์นด์ค ๊ฐ๋ฐ์ ์ฌ์ดํธ์ ์ ์ํฉ๋๋ค.
https://developers.kakao.com/product/map
2. API ์ฌ์ฉํ๊ธฐ - ์์ํ๊ธฐ์ ๋ค์ด๊ฐ๋๋ค.
3. ์ ํ๋ฆฌ์ผ์ด์ ์ถ๊ฐํฉ๋๋ค.
4. ์ํ๋ ์ด๋ฆ๋ช ์ผ๋ก ์ฑ ์ด๋ฆ, ์ฌ์ ์๋ช ์์ฑ ํ ์ ์ฅํ์ฌ ๋ง๋ค๊ธฐ
5. ์ผ์ชฝ ์ฑ ์ค์ ๋ฉ๋ด์ -> ํ๋ซํผ -> iosํ๋ซํผ ๋ฑ๋ก
์์ ์ฌ์ง์ ๋ณด์ด๋ ๋นจ๊ฐ ๋ฐ์ค์ ํ์ฌ ์นด์นด์ค ๋งต์ ๊ตฌํํ xcode ํ๋ก์ ํธ์ Bundle Identifier๊ฐ์ ๊ทธ๋๋ก ์ ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
Bundle Identifier๊ฐ์ ํ๋ก์ ํธ TARGETS -> General -> Identity -> Bundle Identifier์์ ํ์ธํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
6. Info.plist ํ์ผ์ ๋ฐ๊ธ๋ฐ์ App key๋ฅผ ๋ฃ์ด์ค๋๋ค.
์ผ์ชฝ ์ฑ ์ค์ ๋ฉ๋ด์ -> ์์ฝ์ ๋ณด -> ์ฑ ํค -> ๋ค์ดํฐ๋ธ ์ฑ ํค๋ฅผ ๋ณต์ฌํฉ๋๋ค.
์๋ ์ฌ์ง๊ณผ ๊ฐ์ด Info.plist์ KAKAO_APP_KEY
7. ํ๋ ์์ํฌ๋ค์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
ํ๋ก์ ํธ - TARGETS - General - Frameworks, Libraries and Embedded Content๋ก ์ด๋ํ์ฌ
+ ๋ฒํผ์ ๋๋ฌ ํ์ํ ํ๋ ์ ์ํฌ๋ค์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
- Metal.framework ( OpenGLES.framework ๋์ )
- SystemConfiguration.framework
- CoreLocation.framework
- QuartzCore.framework
- libc++.tbd
- libxml2.tbd
- libsqlite3.tbd
โป libc++.tbd / libxml2.tbd / libsqlite3.tbd ์ธ ๊ฐ์ง๋ ํ ๋ฒ์ ๋ค์ด๊ฐ์ง ์์ ๋ ๋ฒ ๋ฃ์ด ์ฃผ๋ ์์ ์ ํด์ผ ํฉ๋๋ค.
โปOpenGLES.framework๋์ Metal.framework๊ฐ ์ฐ์ด๋ ์ด์
OpenGLES.framework๋์ Metal.framework๊ฐ ์ฐ์ด๋ ์ด์ ๊ด๋ จํด์ ํ ๋ฒ์ฏค ์ฝ๊ธฐ ์ข์ ๋ธ๋ก๊ทธ์ธ ๊ฑฐ ๊ฐ์ต๋๋ค.
2018๋ ๋์ OpenGLES๋ ios์ MacOs์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ก ๋ณ๊ฒฝ๋์์ผ๋ฉฐ Metal์ Apple์ ์ํด 2014๋ ๋์ ๋ฑ์ฅํ์ฌ OpenGLES ๋์ ์ข์ ๋์์ด ๋์๋ค๊ณ ํฉ๋๋ค.
8. Kakao map SDK ๋ค์ด์ ๋ฐ์์ผ ํฉ๋๋ค.
https://apis.map.kakao.com/ios/guide/
์์ ๋งํฌ์ ๋ค์ด๊ฐ ๋ค์ด๋ก๋๋ฅผ ํฉ๋๋ค.
๋ค์ด๋ก๋ํ SDKํ์ผ์ ์์ถ์ ํ์ด ์ค ํ DaumMap.embeddedframework ํด๋๋ฅผ
ํ๋ก์ ํธ ์์ ์๋ ํ๋ ์์ํฌ ํด๋ ์๋์ ๋ฃ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
ํ๋ ์์ํฌ ํด๋ ์ฐํด๋ฆญ ํ Add Files to "~~" ํด๋ฆญํ์ฌ ๋ฐฉ๊ธ ์์ถ ํผ DaumMap.embeddedframeworkํด๋ ํ์ผ์ ๋ฃ์ด์ค๋๋ค.
ํด๋๋ฅผ ๋ฃ์ด์ค ํ ํ๋ก์ ํธ - TARGETS - General - Frameworks, Libraries and Embedded Content๋ก ์ด๋ํ์ฌ
DaumMap.framework๊ฐ ๋ค์ด๊ฐ์ง ๊ฒ์ ํ์ธํด์ผ ํฉ๋๋ค.
9. ํค๋ ํ์ผ์ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
์นด์นด์ค ๋งต์ด Objective-C๋ก ์์ฑ๋์ด Swift์์ ์ฌ์ฉํ๋ ค๋ฉด ํค๋ ํ์ผ์ด ํ์ํฉ๋๋ค.
command + n ๋๋ฌ ํค๋ ํ์ผ์ ๋ง๋ค์ด ์ค๋๋ค. ์ด๋ฆ์ ์ํ์๋ ์ด๋ฆ ์ ์ด์ฃผ์ ๋ ๋ฉ๋๋ค.
๋ง๋ ํค๋ ํ์ผ์ #import <DaumMap/MtMapView.h> ์ถ๊ฐํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
ํค๋ํ์ผ์ ์ฐ๊ฒฐํด์ฃผ๊ธฐ ์ํด ์ค์ ์ ํด์ผ ํฉ๋๋ค.
TARGETS - Build Settings - ์ผ์ชฝ ๊ฒ์ ์นธ์ swift compiler ๊ฒ์ ํ Swift Compiler - General - Objective -C Bridging Header
ํ๋ก์ ํธ/ํค๋ ํ์ผ๋ช . h ๋ก ์จ์ฃผ์๋ฉด ๋ฉ๋๋ค. ( ํค๋ ํ์ผ full path ๊ฐ ๋ฃ์ด์ฃผ์ ๋ ๋ฉ๋๋ค )
10. Build Settings ์ค์ ํด์ฃผ๊ธฐ
ํ์ฌ Map์ฉ SDK๋ Automatic Reference Counting(ARC)์ ์ง์ํ์ง ์์ต๋๋ค.
Objective-C Automatic Reference Counting - NO๋ก ๋ฐ๊ฟ์ค๋ค.
Weak Reference in Manual Retain Release - NO๋ก ๋ฐ๊ฟ์ค๋ค.
โป ์ฌ๋ฌ ๋ฒ์ ์ฝ์ง๊ณผ ๊ฒฝํ์ผ๋ก ์ป์ ๊ฒฐ๊ณผ๋ ์ด์ ๋ ์์ง๋ง YES๋ก ํด๋ ๋น๋๊ฐ ๋ฉ๋๋ค. ( ์ด์ ๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๊ณต๋ถ์ ๊ฒ์์ ํด๋ด์ผ ํ ๊ฑฐ ๊ฐ์ต๋๋ค. )
M1๋งฅ๋ถ์ ์ ํ ์์ฌ์์ ์์ฐํ๋ ARM ๊ธฐ๋ฐ์ผ๋ก ๋์๊ฐ๋๋ค. CPU๊ฐ ๋ฌ๋ผ์ ธ์ ๋น๋ํ ๋ ์ฌ์ฉ๋๋ CPU์ ์ํคํ ์ฒ๋ ๋ณํ๊ฒ ๋๋ฉด์ arm64๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
Excluded Architectures์์ arm64๋ฅผ ์ ๋ ฅํด์ค๋๋ค.
๋ฏธ ์ค์ ์ ์ค๋ฅ ๋ด์ฉ
DaumMap.embeddedframework/DaumMap.framework/DaumMap(MTMapView.o), building for iOS Simulator, but linking in object file built for iOS, for architecture arm64
Framework Search Paths์ $(PROJECT_DIR)/DaumMap.embeddedframework์ ์ ์ด์ค๋๋ค.
โป $(PROJECT_DIR)/DaumMap.embeddedframework - ์กฐ๊ฑด์ ํ๋ ์์ํฌ ํด๋ ์๋์ DaumMap.embeddedframework ํด๋ ์๋ DaumMap / ๋ฆฌ์์ค ํด๋๊ฐ ์์ด์ผ ๋น๋๊ฐ ๋ฉ๋๋ค.
์ค๋ฅ ๋ด์ฉ
11. ๋งต์ ํ๋ฉด์ ๋์ฐ๊ธฐ ์ํด ViewController์ ์ฝ๋ ์์ฑํ๊ธฐ
import UIKit
class ViewController: UIViewController, MTMapViewDelegate {
var mapView: MTMapView?
override func viewDidLoad() {
super.viewDidLoad()
mapView = MTMapView(frame: self.view.bounds)
if let mapView = mapView {
mapView.delegate = self
mapView.baseMapType = .standard
self.view.addSubview(mapView)
}
}
}
๋น๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋๋ฉด์ ๊ฒฐ๊ณผ ํ๋ฉด์ ๋๋ค.
์นด์นด์ค ๋งต์ ๊ตฌํํ๋ฉด์ ์ ๋ง ๋ค์ํ ์ค๋ฅ์ ๊ฒ์์ ํตํด ํ๋์ฉ ์ฐพ์ผ๋ฉด์ ํด๊ฒฐํด๊ฐ๋ ๊ณผ์ ์ ๊ฒช์์ต๋๋ค.
๊ฒฝํ์ ํด๋ด์ผ๋ก์จ ์ข ๋ ์ฑ์ฅํ ์ ์๋ ๊ธฐํ๊ฐ ๋ ๊ฒ ๊ฐ์ต๋๋ค.