문서 / 설정 / 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
같은 프로바이더, 다른 플랫폼AndroidReact

시작하기 전에

Xcode 15 이상
ArcGIS 개발자 계정
ArcGIS의 API 키
디플로이 타깃 iOS 17.0 이상
STEP 01

API 키를 취득한다

  1. ArcGIS Location Platform 또는 ArcGIS Developers에 접속합니다.
  2. 프로젝트용의 API 키를 만듭니다.
  3. 필요한 ArcGIS 서비스(베이스맵, 지오코딩, 라우팅 등)를 활성화합니다.
  4. 키를 앱의 용도에 맞춰 제한합니다.
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입니다. 양자는 같은 상태 객체를 공유합니다.