Xcode 프로젝트 설정

결제를 사용 설정하고 API 키를 만든 후에는 앱 개발에 사용할 Xcode 프로젝트를 설정할 수 있습니다.

버전마다 출시 노트가 제공됩니다.

1단계: 필수 소프트웨어 설치하기

iOS용 Maps SDK를 사용하여 프로젝트를 빌드하려면 다음을 다운로드하여 설치해야 합니다.

  • Xcode 버전 14.0 이상

2단계: Xcode 프로젝트 만들기 및 iOS용 Maps SDK 설치하기

Swift Package Manager

iOS용 Maps SDK는 Swift Package Manager를 통해 설치할 수 있습니다. SDK를 추가하려면 기존 iOS용 Maps SDK 종속 항목을 삭제했는지 확인하세요.

새 프로젝트 또는 기존 프로젝트에 SDK를 추가하려면 다음 단계를 따르세요.

  1. Xcode project 또는 workspace를 열고 File > Add Package Dependencies로 이동합니다.
  2. https://github.com/googlemaps/ios-maps-sdk를 URL로 입력하고 Enter 키를 눌러 패키지를 가져온 다음 '패키지 추가'를 클릭합니다.
  3. 특정 version를 설치하려면 종속 항목 규칙 필드를 버전 기반 옵션 중 하나로 설정합니다. 새 프로젝트의 경우 최신 버전을 지정하고 '정확한 버전' 옵션을 사용하는 것이 좋습니다. 완료되면 '패키지 추가'를 클릭합니다.
  4. Choose Package Products 창에서 GoogleMaps, GoogleMapsBase, GoogleMapsCore이 지정된 main 타겟에 추가되는지 확인합니다. 완료되면 '패키지 추가'를 클릭합니다.
  5. 설치를 확인하려면 대상의 General 창으로 이동합니다. 프레임워크, 라이브러리 및 삽입된 콘텐츠에 설치된 패키지가 표시됩니다. 'Project Navigator'의 'Package Dependencies' 섹션에서 패키지와 버전을 확인할 수도 있습니다.

기존 프로젝트의 package를 업데이트하려면 다음 단계를 따르세요.

  1. Xcode에서 'File > Packages > Update To Latest Package Versions'(파일 > 패키지 > 최신 패키지 버전으로 업데이트)로 이동합니다.
  2. 설치를 확인하려면 Project NavigatorPackage Dependencies 섹션으로 이동하여 패키지와 버전을 확인합니다.

CocoaPods를 사용하여 추가된 기존 iOS용 Maps SDK 종속 항목을 삭제하려면 다음 단계를 따르세요.

  1. Xcode 작업공간을 닫습니다. 터미널을 열고 다음 명령어를 실행합니다.
    sudo gem install cocoapods-deintegrate cocoapods-clean 
    pod deintegrate 
    pod cache clean --all
  2. CocoaPods 이외의 용도로 사용하지 않는 경우 Podfile, Podfile.resolved, Xcode workspace를 삭제합니다.

수동으로 설치된 기존 iOS용 Maps SDK를 삭제하려면 다음 단계를 따르세요.
  1. Xcode 프로젝트 구성 설정에서 프레임워크, 라이브러리, 삽입된 콘텐츠를 찾습니다. 빼기 기호(-)를 사용하여 다음 프레임워크를 삭제합니다.
    • GoogleMaps.xcframework
    • GoogleMapsBase.xcframework
    • GoogleMapsCore.xcframework
  2. Xcode 프로젝트의 최상위 디렉터리에서 GoogleMaps 번들을 삭제합니다.

CocoaPods

iOS용 Maps SDK는 CocoaPods pod로 제공됩니다. CocoaPods는 Swift 및 Objective-C Cocoa 프로젝트용 오픈소스 종속 항목 관리자입니다.

아직 CocoaPods 도구가 없으면 터미널에서 다음 명령어를 실행하여 macOS에 CocoaPods 도구를 설치합니다. 자세한 내용은 CocoaPods 시작 가이드를 참고하세요.

sudo gem install cocoapods

iOS용 Maps SDK를 위한 Podfile을 만들고 이를 사용하여 API와 종속 항목을 설치합니다.

  1. 아직 Xcode 프로젝트가 없으면 지금 만들어 로컬 머신에 저장합니다. iOS 개발이 처음인 경우:
    1. 새 프로젝트를 만듭니다.
    2. iOS > App 템플릿을 선택합니다.
    3. 프로젝트 옵션 화면에서 다음 단계를 따릅니다.
      1. Project Name(프로젝트 이름)을 입력합니다.
      2. 번들 식별자 필드의 값을 기록합니다. 이 값을 사용하여 아래의 API 키를 제한할 수 있습니다.
      3. 프로젝트 InterfaceStoryboard로 설정합니다.
      4. 언어Swift 또는 Objective-C로 설정합니다.
  2. 프로젝트 디렉터리에 Podfile 파일을 만듭니다. 이 파일은 프로젝트의 종속 항목을 정의합니다.
  3. Podfile를 수정하고 versions과 함께 종속 항목을 추가합니다. 다음은 iOS용 Maps SDK에 필요한 종속 항목이 포함된 예입니다.
    source 'https://github.com/CocoaPods/Specs.git'
    
    platform :ios, '15.0'
    
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GoogleMaps', '8.4.0'
    end
    
    항상 최신 버전을 사용하려면 pod outdated를 정기적으로 실행하여 최신 버전이 있는지 감지해야 합니다. 필요한 경우 최신 버전으로 업그레이드하세요.
  4. Podfile을 저장합니다.
  5. 터미널을 열고 Podfile가 포함된 디렉터리로 이동합니다.

    cd <path-to-project>
  6. pod install 명령어를 실행합니다. Podfile에 지정된 API가 API에 포함된 종속 항목과 함께 설치됩니다.

    pod install
  7. Xcode를 닫은 다음 프로젝트의 .xcworkspace 파일을 (더블클릭하여) 열어 Xcode를 실행합니다. 이 때부터는 .xcworkspace 파일을 사용하여 프로젝트를 열어야 합니다.

기존 프로젝트의 API를 업데이트하려면 다음 단계를 따르세요.

  1. 터미널을 열고 Podfile가 포함된 프로젝트 디렉터리로 이동합니다.
  2. pod update 명령어를 실행합니다. 이렇게 하면 Podfile에 지정된 모든 API가 최신 버전으로 업데이트됩니다.

수동 설치

이 가이드에서는 iOS용 Maps SDK가 포함된 XCFrameworks를 프로젝트에 수동으로 추가하고 Xcode에서 빌드 설정을 구성하는 방법을 설명합니다. XCFramework는 Apple 실리콘을 사용하는 머신을 비롯한 여러 플랫폼에서 사용할 수 있는 바이너리 패키지입니다.
  1. 다음 SDK 바이너리 및 리소스 파일을 다운로드합니다.
  2. XCFrameworks 및 리소스에 액세스하려면 압축된 파일의 압축을 풉니다.
  3. 아직 Xcode 프로젝트가 없으면 지금 만들어 로컬 머신에 저장합니다. iOS 개발이 처음인 경우:
    1. 새 프로젝트를 만듭니다.
    2. iOS > App 템플릿을 선택합니다.
    3. 프로젝트 옵션 화면에서 다음 단계를 따릅니다.
      1. Project Name(프로젝트 이름)을 입력합니다.
      2. 번들 식별자 필드의 값을 기록합니다. 이 값을 사용하여 아래의 API 키를 제한할 수 있습니다.
      3. 프로젝트 InterfaceStoryboard로 설정합니다.
      4. 언어Swift 또는 Objective-C로 설정합니다.
  4. 일반 탭을 엽니다. 다음 XCFrameworks를 프레임워크, 라이브러리 및 삽입된 콘텐츠의 프로젝트로 드래그합니다. 각 XCFramework에 대해 Do Not Embed(삽입 안함)를 선택해야 합니다.
    • GoogleMaps.xcframework
    • GoogleMapsBase.xcframework
    • GoogleMapsCore.xcframework
  5. 다운로드한 GoogleMapsResources에서 GoogleMaps.bundle을 Xcode 프로젝트의 최상위 디렉터리로 복사합니다. 메시지가 표시되면 항목을 대상 그룹 폴더에 복사를 선택해야 합니다.
  6. Project Navigator에서 프로젝트를 선택하고 애플리케이션의 타겟을 선택합니다.
  7. 애플리케이션 타겟의 Build Phases 탭을 엽니다. Link Binary with Library에서 다음 프레임워크 및 라이브러리를 추가합니다.
    • Accelerate.framework
    • Contacts.framework
    • CoreData.framework
    • CoreGraphics.framework
    • CoreImage.framework
    • CoreLocation.framework
    • CoreTelephony.framework
    • CoreText.framework
    • GLKit.framework
    • ImageIO.framework
    • libc++.tbd
    • libz.tbd
    • Metal.framework
    • OpenGLES.framework
    • QuartzCore.framework
    • SystemConfiguration.framework
    • UIKit.framework
  8. 특정 대상 대신 자신의 프로젝트를 선택하고 Build Settings 탭을 엽니다. 연결 - 일반 -> 기타 링커 플래그 섹션에서 -ObjC를 '디버그' 및 '릴리스'에 추가합니다. 이러한 설정이 표시되지 않으면 Build Settings(빌드 설정) 표시줄의 필터를 Basic에서 All로 변경합니다.

  9. iOS XCFramework용 Places SDK를 설치하려면 iOS용 Places SDK 시작하기를 참고하세요.

3단계: 프로젝트에 API 키 추가

API 키 가져오기에서 앱의 API 키를 생성했습니다. 이제 해당 키를 Xcode 프로젝트에 추가합니다.

다음 예에서 YOUR_API_KEY를 이 API 키로 바꾸세요.

자세한 정보를 확인합니다.

Swift

다음과 같이 API 키를 AppDelegate.swift에 추가합니다.

  1. 다음 import 문을 추가합니다.
    import GoogleMaps
  2. API 키를 사용하여 application(_:didFinishLaunchingWithOptions:) 메서드에 다음을 추가합니다.
    GMSServices.provideAPIKey("YOUR_API_KEY")
  3. Places API도 사용하고 있다면 여기에 표시된 대로 키를 다시 추가합니다.
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")

Objective-C

다음과 같이 API 키를 AppDelegate.m에 추가합니다.

  1. 다음 import 문을 추가합니다.
    @import GoogleMaps;
  2. API 키를 사용하여 application:didFinishLaunchingWithOptions: 메서드에 다음을 추가합니다.
    [GMSServices provideAPIKey:@"YOUR_API_KEY"];
  3. Places API도 사용하고 있다면 여기에 표시된 대로 키를 다시 추가합니다.
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

4단계: 지도 추가하기

Swift

/*
 *   Copyright 2020 Google Inc. All rights reserved.
 *
 *
 *   Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
 *   file except in compliance with the License. You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software distributed under
 *   the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 *   ANY KIND, either express or implied. See the License for the specific language governing
 *   permissions and limitations under the License.
 */

import UIKit
import GoogleMaps

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        // Create a GMSCameraPosition that tells the map to display the
        // coordinate -33.86,151.20 at zoom level 6.

        let options = GMSMapViewOptions()
        options.camera = GMSCameraPosition.camera(withLatitude: -33.86, longitude: 151.20, zoom: 6.0)
        options.frame = self.view.bounds

        let mapView = GMSMapView(options: options)
        self.view.addSubview(mapView)

        // Creates a marker in the center of the map.
        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2D(latitude: -33.86, longitude: 151.20)
        marker.title = "Sydney"
        marker.snippet = "Australia"
        marker.map = mapView
  }
}

Objective-C

/*
*   Copyright 2020 Google Inc. All rights reserved.
*
*
*   Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
*   file except in compliance with the License. You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
*   Unless required by applicable law or agreed to in writing, software distributed under
*   the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
*   ANY KIND, either express or implied. See the License for the specific language governing
*   permissions and limitations under the License.
*/

#import "ViewController.h"
#import <GoogleMaps/GoogleMaps.h>

@interface ViewController()

@end

@implementation ViewController

-   (void)viewDidLoad {
  [super viewDidLoad];
  // Do any additional setup after loading the view.
  // Create a GMSCameraPosition that tells the map to display the
  // coordinate -33.86,151.20 at zoom level 6.
  GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
  options.camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                        longitude:151.2086
                                                             zoom:6];
  options.frame = self.view.bounds;
  GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];

  [self.view addSubview:mapView];

  // Creates a marker in the center of the map.
  GMSMarker *marker = [[GMSMarker alloc] init];
  marker.position = CLLocationCoordinate2DMake(-33.86, 151.20);
  marker.title = @"Sydney";
  marker.snippet = @"Australia";
  marker.map = mapView;
}

@end

5단계 (선택사항): API에서 사용하는 URL 스키마 선언

iOS 9 및 Xcode 7부터는 앱의 Info.plist 파일에 스키마를 지정하여 앱에서 열려는 URL 스킴을 선언할 수 있습니다. iOS용 Maps SDK는 사용자가 지도의 Google 로고를 클릭하면 Google 지도 모바일 앱을 열므로 앱에서 관련 URL 스키마를 선언할 수 있습니다.

iOS용 Maps SDK에서 사용하는 URL 스키마를 선언하려면 Info.plist에 다음 줄을 추가합니다.

LSApplicationQueriesSchemes googlechromes comgooglemaps

다음 스크린샷은 Xcode 사용자 인터페이스의 구성을 보여줍니다.

Xcode의 LSApplicationQuerySchemes 구성

위의 선언이 없으면 사용자가 지도에서 Google 로고를 탭할 때 다음과 같은 오류가 발생할 수 있습니다.

-canOpenURL: 다음 URL의 실패: 'comgooglemaps://' - 오류: '이 앱은 comgooglemaps 스키마를 쿼리할 수 없습니다.' -canOpenURL: URL의 실패: 'googlechromes://' - 오류: '이 앱은 googlechromes 스키마를 쿼리할 수 없습니다.'

이러한 오류를 제거하려면 Info.plist에 선언을 추가합니다.

다음 단계

이제 API 키와 Xcode 프로젝트가 있으므로 앱을 만들고 실행할 수 있습니다. iOS용 Navigation SDK는 시작하는 데 도움이 되는 다양한 튜토리얼과 샘플 앱을 제공합니다. 자세한 내용은 다음을 참고하세요.