設定 Xcode 專案

啟用計費功能並建立 API 金鑰後,您就可以設定要用來開發應用程式的 Xcode 專案。

每個版本都提供版本資訊

步驟 1:安裝必要軟體

如要使用 Maps SDK for iOS 建立專案,您必須下載並安裝:

  • Xcode 15.0 以上版本

步驟 2:建立 Xcode 專案並安裝 Maps SDK for iOS

Swift 套件管理員

您可以透過 Swift Package Manager 安裝 Maps SDK for iOS。如要新增 SDK,請確認您已移除所有現有的 Maps SDK for iOS 依附元件。

如要將 SDK 加入新專案或現有專案,請按照下列步驟操作:

  1. 開啟 Xcode projectworkspace,然後依序前往「File」>「Add Package Dependencies」
  2. 在網址中輸入 https://github.com/googlemaps/ios-maps-sdk,按下 Enter 鍵擷取套件,然後按一下「新增套件」。
  3. 如要安裝特定 version,請將「Dependency Rule」欄位設為其中一個版本型選項。如果是新專案,建議您指定最新版本並使用「精確版本」選項。完成後,按一下 [Add Package]。
  4. 在「Choose Package Products」視窗中,確認 GoogleMapsGoogleMapsBaseGoogleMapsCore 會新增至指定的 main 目標。完成後,按一下「Add Package」。
  5. 如要驗證安裝,請前往目標的 General 窗格。「Frameworks、程式庫和嵌入的內容」應該會顯示已安裝的套件。 您也可以查看「Project Navigator」的「Package Dependencies」部分,確認套件及其版本。

如要更新現有專案的 package,請按照下列步驟操作:

  1. 在 Xcode 中,依序前往「File」>「Packages」>「Update to Package Versions」。
  2. 如要驗證安裝,請前往「Project Navigator」的「Package Dependencies」部分,驗證套件及其版本。

如要移除使用 CocoaPods 新增的現有 Maps SDK for iOS 依附元件,請按照下列步驟操作:

  1. 關閉 Xcode 工作區。開啟終端機並執行下列指令:
    sudo gem install cocoapods-deintegrate cocoapods-clean 
    pod deintegrate 
    pod cache clean --all
  2. 如果不想將 PodfilePodfile.resolved 和 Xcode workspace 用於 CocoaPods 以外的任何產品,請移除。

如要移除手動安裝的現有 Maps SDK for iOS,請按照下列步驟操作:
  1. 在 Xcode 專案設定中,尋找「Frameworks、程式庫和內嵌內容」。使用減號(-) 移除下列架構:
    • GoogleMaps.xcframework
    • GoogleMapsBase.xcframework
    • GoogleMapsCore.xcframework
  2. 從 Xcode 專案的頂層目錄中,移除 GoogleMaps 套件。

CocoaPods

Maps SDK for iOS 以 CocoaPods Pod 的形式提供。CocoaPods 是一種適用於 Swift 和 Objective-C Cocoa 專案的開放原始碼依附元件管理員。

如果您還沒有 CocoaPods 工具,請在終端機上執行下列指令,即可在 macOS 中安裝這項工具。詳情請參閱 CocoaPods 入門指南

sudo gem install cocoapods

為 Maps SDK for iOS 建立 Podfile,並使用該檔案安裝 API 及其依附元件:

  1. 如果您還沒有 Xcode 專案,請立即建立專案,並儲存至本機電腦。如果您是 iOS 開發新手:
    1. 建立新專案。
    2. 依序選取「iOS」>「App」範本。
    3. 在專案選項畫面中:
      1. 在「Project Name」中輸入專案名稱。
      2. 記錄「Bundle ID」欄位的值。您可以使用該值來限制下方的 API 金鑰。
      3. 將專案「Interface」設為「Storyboard」
      4. 將「Language」(語言) 設為「Swift」或「Objective-C」
  2. 在專案目錄中建立名為 Podfile 的檔案。這個檔案定義了專案的依附元件。
  3. 編輯 Podfile,然後新增依附元件及其versions。以下示例包含 Maps SDK for iOS 所需的依附元件:
    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 及其所有依附元件。

    pod install
  7. 關閉 Xcode,接著按兩下來開啟專案的 .xcworkspace 檔案來啟動 Xcode。從現在起,您必須使用 .xcworkspace 檔案來開啟專案。

如要更新現有專案的 API,請按照下列步驟操作:

  1. 開啟終端機並前往包含 Podfile 的專案目錄。
  2. 執行 pod update 指令。這麼做會將 Podfile 中指定的所有 API 更新為最新版本。

手動安裝

本指南說明如何手動將包含 Maps SDK for iOS 的 XCFrameworks 加進專案,並在 Xcode 中調整版本設定。XCFramework 是一種二進位檔套件,適用於多種平台,包括使用 Apple 晶片的電腦。
  1. 下載下列 SDK 二進位檔和資源檔案:
  2. 解壓縮檔案即可存取 XCFrameworks 和資源。
  3. 如果您還沒有 Xcode 專案,請立即建立專案,並儲存至本機電腦。如果您是 iOS 開發新手:
    1. 建立新專案。
    2. 依序選取「iOS」>「App」範本。
    3. 在專案選項畫面中:
      1. 在「Project Name」中輸入專案名稱。
      2. 記錄「Bundle ID」欄位的值。您可以使用該值來限制下方的 API 金鑰。
      3. 將專案「Interface」設為「Storyboard」
      4. 將「Language」(語言) 設為「Swift」或「Objective-C」
  4. 開啟「一般」分頁。將下列 XCFrameworks 拖曳至專案的「Frameworks、Library 和 Embedded Content」下方。請務必為每個 XCFramework 選取「Do Not Embed」
    • GoogleMaps.xcframework
    • GoogleMapsBase.xcframework
    • GoogleMapsCore.xcframework
  5. 從您下載的 GoogleMapsResources 複製 GoogleMaps.bundle,然後貼到 Xcode 專案的頂層目錄。出現提示時,請務必選取「將項目複製到目的地群組的資料夾」
  6. 從「Project Navigator」中選取專案,並選擇應用程式的目標。
  7. 開啟應用程式目標的「Build 階段」分頁。在「Link Binary with Libraries」中,加入下列架構和程式庫:
    • 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」分頁。在「Linking - General」->「Other Linker Flags」部分,將 -ObjC 新增至「Debug」和「Release」。如果沒有看到這些設定,請將「Build Settings」列中的篩選器從「Basic」變更為「All」。

  9. 如要安裝 Places SDK for iOS XCFramework,請參閱「開始使用 Places SDK for iOS」一文。

新增 Apple 隱私權資訊清單檔案

Apple 要求 App Store 的應用程式隱私權詳細資料。如需最新資訊和更多資訊,請造訪 Apple App Store 隱私權詳細資料頁面

  1. 下載 Maps SDK for iOS 的 Privacy Manifest 套件:GoogleMapsPrivacy
  2. 解壓縮檔案即可存取 GoogleMapsPrivacy.bundle
  3. 使用其中一種方法,將 GoogleMapsPrivacy.bundle 新增至 Xcode 專案導覽器。確認您已針對應用程式的目標勾選「新增至目標」方塊。新增後,PrivacyInfo 檔案會顯示在專案導覽器中,方便您檢查相關值。
  4. Xcode 隱私權資訊螢幕截圖
  5. 請建立應用程式封存檔,然後從封存檔案產生隱私權報告,確認已新增隱私權資訊清單。

步驟 3:將 API 金鑰加到專案

您在「取得 API 金鑰」中為應用程式產生了 API 金鑰,現在請將金鑰加進 Xcode 專案。

請將以下範例中的 YOUR_API_KEY 替換成您的 API 金鑰。

一節。

Swift

將 API 金鑰新增到您的 AppDelegate.swift 中,如下所示:

  1. 新增下列匯入陳述式:
    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 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 使用的網址配置

從 iOS 9 和 Xcode 7 開始,應用程式可以在應用程式的 Info.plist 檔案中指定配置,以宣告想開啟的網址配置。使用者在地圖上點選 Google 標誌時,Maps SDK for iOS 會開啟 Google 地圖行動應用程式,因此您的應用程式可宣告相關的網址配置。

如要宣告 Maps SDK for iOS 使用的網址配置,請在 Info.plist 中加入以下幾行程式碼:

LSApplicationQueriesSchemes googlechromes comgooglemaps

以下螢幕截圖顯示 Xcode 使用者介面中的設定:

Xcode 中的 LSApplicationQuerySchemes 設定

如果沒有上述宣告,使用者輕觸地圖上的 Google 標誌時可能會發生下列錯誤:

-canOpenURL:網址「comgooglemaps://」失敗 - 錯誤:「這個應用程式無法查詢 scheme comgooglemaps」 -canOpenURL: 失敗的網址: "googlechromes://" - 錯誤:「這個應用程式無法查詢通訊協定 googlechrome」

為解決這些錯誤,請在 Info.plist 中加入宣告內容。

後續步驟

取得 API 金鑰並設定 Xcode 專案後,接下來請建立並執行應用程式。iOS 版 Navigation SDK 提供許多教學課程和範例應用程式,可協助您快速上手。相關詳情請參閱: