문서 / 설정 / iOS / ArcGIS
ArcGIS 설정
ArcGIS Maps SDK for Swift를 MapConductor에서 쓰는 절차입니다. ArcGIS의 베이스맵을 ArcGISDesign으로 고를 수 있고, 3D와 2D 양쪽의 뷰를 쓸 수 있습니다.
PACKAGE
ios-for-arcgis
API KEY
필요
MIN iOS
17.0
VIEW
ArcGISMapView / 2D
시작하기 전에
Xcode 15 이상
ArcGIS 개발자 계정
ArcGIS의 API 키
디플로이 타깃 iOS 17.0 이상
STEP 01
API 키를 취득한다
- ArcGIS Location Platform 또는 ArcGIS Developers에 접속합니다.
- 프로젝트용의 API 키를 만듭니다.
- 필요한 ArcGIS 서비스(베이스맵, 지오코딩, 라우팅 등)를 활성화합니다.
- 키를 앱의 용도에 맞춰 제한합니다.
STEP 02
Swift Package Manager로 추가한다
Xcode의 File > Add Package Dependencies에서 패키지 URL을 입력합니다. ArcGIS Maps SDK for Swift는 의존 관계로서 자동으로 들어옵니다.
Package URLSwift Package Manager
https://github.com/MapConductor/ios-for-arcgis
Package.swiftSwift
dependencies: [
.package(url: "https://github.com/MapConductor/ios-sdk-core", from: "1.3.1"),
.package(url: "https://github.com/MapConductor/ios-for-arcgis", from: "1.0.0"),
],
targets: [
.target(
name: "YourApp",
dependencies: [
.product(name: "MapConductorCore", package: "ios-sdk-core"),
.product(name: "MapConductorForArcGIS", package: "ios-for-arcgis"),
]
),
]STEP 03
SDK를 초기화한다
지도 뷰가 만들어지기 전에 arcGISApiKeyInitialize(apiKey:)를 한 번만 호출합니다.
MyApp.swiftSwift
import SwiftUI
import MapConductorForArcGIS
@main
struct MyApp: App {
init() {
_ = arcGISApiKeyInitialize(apiKey: "YOUR_ARCGIS_API_KEY")
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}ContentView.swiftSwift
// Alternative: call it from the view's sdkInitialize closure
ArcGISMapView(state: mapState, sdkInitialize: {
_ = arcGISApiKeyInitialize(apiKey: "YOUR_ARCGIS_API_KEY")
})STEP 04
위치 정보의 권한을 더한다(필요한 경우)
위치 정보를 쓰는 경우는 Info.plist에 용도를 씁니다.
Info.plistXML
<key>NSLocationWhenInUseUsageDescription</key> <string>We need your location to display on the map</string>
LocationManager.swiftSwift
import CoreLocation
final class LocationManager: NSObject, ObservableObject, CLLocationManagerDelegate {
private let manager = CLLocationManager()
override init() {
super.init()
manager.delegate = self
}
func requestPermission() {
manager.requestWhenInUseAuthorization()
}
}동작 확인
여기까지 보이면 완료
3D 뷰로 지도를 냅니다. 같은 상태 객체를 ArcGISMapView2D에 넘기면 2D 표시가 됩니다. 줌・팬・(3D라면) 틸트가 들으면 완료입니다.
ContentView.swiftSwiftUI
import SwiftUI
import MapConductorCore
import MapConductorForArcGIS
struct ContentView: View {
@StateObject var mapState = ArcGISMapViewState(
mapDesignType: ArcGISDesign.Streets,
cameraPosition: MapCameraPosition(
position: GeoPoint(latitude: 35.6812, longitude: 139.7671),
zoom: 12.0
)
)
var body: some View {
// 3D scene view; ArcGISMapView2D takes the very same state
ArcGISMapView(state: mapState)
.ignoresSafeArea()
}
}지도 디자인
ArcGISDesign은 Esri의 베이스맵에 대응합니다. 알려진 ID로부터는 ArcGISDesign.Create(id:)로 만들 수 있습니다.
ArcGISDesign
Notes
Streets
표준의 도로 지도
Imagery
위성 화상
Topographic
지형도
OsmStandard
OpenStreetMap 표준 스타일
NavigationNight
야간 내비게이션
DarkGray
데이터를 얹는 바탕용
잘 안 될 때
지도가 새하얀 채로
- arcGISApiKeyInitialize(apiKey:)가 지도 뷰보다 먼저 호출되고 있는지 확인합니다.
- 키에서 필요한 ArcGIS 서비스가 활성화되어 있는지 확인합니다.
- 디플로이 타깃이 iOS 17.0 이상인지 확인합니다.
빌드가 통과하지 않는다
- 빌드 폴더를 지웁니다(Cmd+Shift+K).
- ~/Library/Developer/Xcode/DerivedData를 삭제하고 다시 빌드합니다.
- Swift Package Manager의 의존을 갱신합니다. CocoaPods와의 병용은 피해 주세요.
다음
ArcGISMapView는 3D, ArcGISMapView2D는 2D입니다. 양자는 같은 상태 객체를 공유합니다.