สร้างโปรเจ็กต์ Xcode

หลังจากที่คุณเปิดใช้การเรียกเก็บเงินและสร้างคีย์ API คุณก็พร้อมที่จะตั้งค่า โปรเจ็กต์ Xcode ที่คุณใช้เพื่อพัฒนาแอปของคุณ

บันทึกประจำรุ่นจะพร้อมใช้งานสำหรับแต่ละรายการ

ขั้นตอนที่ 1: ติดตั้งซอฟต์แวร์ที่จำเป็น

หากต้องการสร้างโปรเจ็กต์โดยใช้ Places SDK สำหรับ iOS คุณต้องมีสิ่งต่อไปนี้

  • Xcode เวอร์ชัน 15.0 ขึ้นไป

ขั้นตอนที่ 2: สร้างโปรเจ็กต์ Xcode และติดตั้ง Places SDK สำหรับ iOS

เครื่องมือจัดการแพ็กเกจ Swift

Places SDK สำหรับ iOS สามารถติดตั้งได้ผ่าน Swift Package Manager หากต้องการเพิ่ม SDK โปรดตรวจสอบว่าคุณมี นำ Places SDK ที่มีอยู่สำหรับทรัพยากร Dependency ของ iOS ออก

หากต้องการเพิ่ม SDK ลงในโปรเจ็กต์ใหม่หรือโปรเจ็กต์ที่มีอยู่ ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิด Xcode project หรือ workspace แล้วไปที่ ไฟล์ > เพิ่มทรัพยากร Dependency ของแพ็กเกจ
  2. ป้อน https://github.com/googlemaps/ios-places-sdk เป็น URL แล้วกด Enter เพื่อดึงข้อมูลแพ็กเกจ แล้วคลิก "เพิ่มแพ็กเกจ"
  3. หากต้องการติดตั้ง version ที่เจาะจง ให้ตั้งค่าช่องกฎการขึ้นต่อกันเป็นค่าใดค่าหนึ่ง ตัวเลือกตามเวอร์ชัน สำหรับโปรเจ็กต์ใหม่ เราขอแนะนำให้ระบุเวอร์ชันล่าสุดและ โดยใช้ "เวอร์ชันที่แน่นอน" ตัวเลือก เมื่อเสร็จแล้ว ให้คลิก "เพิ่มแพ็กเกจ"
  4. จากหน้าต่างเลือกผลิตภัณฑ์แพ็กเกจ ให้ยืนยันว่าจะเพิ่ม GooglePlaces ไปยัง เป้าหมาย main ที่คุณกำหนด เมื่อเสร็จแล้ว ให้คลิก "เพิ่มแพ็กเกจ"
  5. หากต้องการยืนยันการติดตั้ง ให้ไปที่แผง General ของเป้าหมาย คุณควรเห็นแพ็กเกจที่ติดตั้งไว้ในเฟรมเวิร์ก ไลบรารี และเนื้อหาที่ฝัง นอกจากนี้ คุณยังสามารถดู "ทรัพยากร Dependency ของแพ็กเกจ" ส่วนของ "Project Navigator" เพื่อยืนยันแพ็กเกจและเวอร์ชันของแพ็กเกจ

หากต้องการอัปเดต package สำหรับโปรเจ็กต์ที่มีอยู่ ให้ทำตามขั้นตอนต่อไปนี้

  1. หากกำลังอัปเกรดจากเวอร์ชันก่อน 9.0.0 คุณต้องนำออก ทรัพยากร Dependency ต่อไปนี้ GoogleMapsBase, GoogleMapsCore และ GoogleMapsM4B หลังจากอัปเกรด ไม่ต้องนำการอ้างอิงสำหรับ GoogleMaps สำหรับข้อมูลเพิ่มเติม โปรดดู บันทึกประจำรุ่นของเวอร์ชัน 9.0.0

    จากการตั้งค่าการกำหนดค่าโปรเจ็กต์ Xcode ให้ค้นหา Frameworks, Libraries และเนื้อหาแบบฝัง ใช้เครื่องหมายลบ(-)เพื่อนำเฟรมเวิร์กต่อไปนี้ออก

    • GoogleMapsBase (สำหรับการอัปเกรดจากเวอร์ชันก่อน 9.0.0 เท่านั้น)
    • GoogleMapsCore (สำหรับการอัปเกรดจากเวอร์ชันก่อน 9.0.0 เท่านั้น)
    • GoogleMapsM4B (สำหรับการอัปเกรดจากเวอร์ชันก่อน 9.0.0 เท่านั้น)
  2. จาก Xcode ให้ไปที่ "File > แพ็กเกจ > อัปเดตเป็นเวอร์ชันล่าสุดของแพ็กเกจ"
  3. หากต้องการยืนยันการติดตั้ง ให้ไปที่ส่วนการอ้างอิงแพ็กเกจของ Project Navigator เพื่อยืนยันแพ็กเกจและเวอร์ชันของแพ็กเกจ

วิธีนำ Places SDK ที่มีอยู่สำหรับทรัพยากร Dependency ของ iOS ที่เพิ่มโดยใช้ CocoaPods ให้ทำตามขั้นตอนต่อไปนี้

  1. ปิดพื้นที่ทำงาน Xcode เปิดเทอร์มินัลและเรียกใช้คำสั่งต่อไปนี้
    sudo gem install cocoapods-deintegrate cocoapods-clean 
    pod deintegrate 
    pod cache clean --all
  2. นำ Podfile, Podfile.resolved และ Xcode workspace หากคุณไม่ได้ใช้สำหรับวัตถุประสงค์อื่นนอกเหนือจาก CocoaPods

หากต้องการนำ Places SDK สำหรับ iOS ที่มีอยู่ซึ่งติดตั้งด้วยตนเองออก ให้ทำดังนี้ ให้ทำตามขั้นตอนต่อไปนี้
  1. จากการตั้งค่าการกำหนดค่าโปรเจ็กต์ Xcode ให้ค้นหา Frameworks, Libraries และเนื้อหาแบบฝัง ใช้เครื่องหมายลบ(-)เพื่อนำเฟรมเวิร์กต่อไปนี้ออก
    • GooglePlaces.xcframework
  2. จากไดเรกทอรีระดับบนสุดของโปรเจ็กต์ Xcode ให้นำ GooglePlaces ออก

CocoaPods

Places SDK สำหรับ iOS มีให้บริการเป็น CocoaPod pod, GooglePlaces ซึ่งมีความสามารถในการระบุสถานที่ทั้งหมด

CocoaPods เป็นผู้จัดการทรัพยากร Dependency แบบโอเพนซอร์สของ Swift และ Objective-C โปรเจ็กต์โกโก้ หากยังไม่มีเครื่องมือ CocoaPods โปรดติดตั้งใน macOS โดยเรียกใช้คำสั่งต่อไปนี้จากเทอร์มินัล โปรดดูรายละเอียดที่หัวข้อ คู่มือเริ่มต้นใช้งาน CocoaPods

sudo gem install cocoapods

สร้าง Podfile สำหรับ Places SDK สำหรับ iOS และใช้ ให้ติดตั้ง SDK และทรัพยากร Dependency ต่อไปนี้

  1. หากยังไม่มีโปรเจ็กต์ Xcode โปรดสร้างโปรเจ็กต์ในตอนนี้และบันทึกไว้ใน ในเครื่องของคุณ หากคุณเพิ่งเริ่มพัฒนา iOS ให้สร้างโปรเจ็กต์ใหม่ แล้วเลือกเทมเพลตแอป iOS
  2. สร้างไฟล์ชื่อ Podfile ในไดเรกทอรีโปรเจ็กต์ ช่วงเวลานี้ จะเป็นตัวกำหนดทรัพยากร Dependency ของโปรเจ็กต์
  3. แก้ไข Podfile และเพิ่มทรัพยากร Dependency ของคุณพร้อมกับเวอร์ชันนั้นๆ นี่คือ ตัวอย่างที่ระบุชื่อเป้าหมายแอปพลิเคชันของคุณ และชื่อของ พ็อด GooglePlaces: วันที่
    source 'https://github.com/CocoaPods/Specs.git'
    
    platform :ios, '15.0'
    
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GooglePlaces', '8.3.0'
    end
    
    อย่าลืมเรียกใช้ pod outdated เป็นประจำเพื่อตรวจหาเมื่อมีเวอร์ชันใหม่ เพื่อให้เป็นเวอร์ชันล่าสุดอยู่เสมอ
  4. บันทึก Podfile
  5. เปิดเทอร์มินัลและไปที่ไดเรกทอรีที่มี Podfile:

    cd <path-to-project>
  6. เรียกใช้คำสั่ง pod install การดำเนินการนี้จะติดตั้ง API ที่ระบุใน Podfile รวมถึงทรัพยากร Dependency ทั้งหมด ที่พวกเขาอาจมี

    pod install
  7. ปิด Xcode จากนั้นเปิด (ดับเบิลคลิก) โปรเจ็กต์ของคุณ .xcworkspace ไฟล์เพื่อเปิด Xcode จากนี้เป็นต้นไป คุณต้องใช้ไฟล์ .xcworkspace เพื่อเปิดโปรเจ็กต์

หากต้องการอัปเดต API สำหรับโปรเจ็กต์ที่มีอยู่ ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิดเทอร์มินัลและไปที่ไดเรกทอรีโปรเจ็กต์ที่มี Podfile
  2. เรียกใช้คำสั่ง pod update การดำเนินการนี้จะอัปเดต API ทั้งหมด ที่ระบุไว้ใน Podfile เป็นเวอร์ชันล่าสุด

การติดตั้งด้วยตนเอง

คู่มือนี้แสดงวิธีเพิ่ม XCFramework ที่มี Places SDK สำหรับ iOS ลงใน โปรเจ็กต์และกำหนดค่าบิลด์ใน Xcode XCFramework เป็นแพ็กเกจไบนารีที่คุณใช้ได้ในหลายแพลตฟอร์ม รวมถึงคอมพิวเตอร์ด้วย โดยใช้ Apple silicon

  1. ดาวน์โหลดไฟล์ทรัพยากรและไบนารีของ SDK ต่อไปนี้
  2. แตกไฟล์เพื่อเข้าถึง XCFramework และทรัพยากร
  3. เปิด Xcode และเปิดโปรเจ็กต์ที่มีอยู่หรือสร้างโปรเจ็กต์ใหม่ หากคุณเพิ่งเริ่มพัฒนา iOS ให้สร้างโปรเจ็กต์ใหม่และ เลือกเทมเพลตแอป iOS
  4. นำแพ็กเกจ Maps ออกจากรุ่นก่อนหน้าออกจากโปรเจ็กต์
  5. เปิดแท็บทั่วไป ลาก XCFramework ต่อไปนี้ลงในโปรเจ็กต์ของคุณ ในส่วนเฟรมเวิร์ก ไลบรารี และเนื้อหาที่ฝัง ตรวจสอบว่า เพื่อเลือกไม่ฝัง:
    • GooglePlaces.xcframework
  6. ลาก GooglePlaces.bundle จาก GooglePlacesResources ที่คุณดาวน์โหลด
  7. คัดลอก GooglePlaces.bundle จาก GooglePlacesResources ที่คุณดาวน์โหลดลงในไดเรกทอรีระดับบนสุดของโปรเจ็กต์ Xcode ตรวจสอบว่าได้เลือก คัดลอกรายการไปยังโฟลเดอร์ของกลุ่มปลายทางเมื่อได้รับข้อความแจ้ง
  8. เลือกโปรเจ็กต์จาก Project Navigator แล้วเลือก ของแอปพลิเคชันเป้าหมาย
  9. เปิดแท็บเฟสของการสร้าง ภายในลิงก์ไบนารีกับ ไลบรารี ให้เพิ่มเฟรมเวิร์กและไลบรารีต่อไปนี้
    • CoreGraphics.framework
    • CoreLocation.framework
    • libc++.tbd
    • libz.tbd
    • QuartzCore.framework
    • UIKit.framework
  10. เลือกโปรเจ็กต์แทนเป้าหมายเฉพาะ แล้วเปิด แท็บการตั้งค่าบิลด์ ในการลิงก์ - ทั่วไป -> Linker อื่นๆ ส่วนการแจ้ง ให้เพิ่ม -ObjC ไปยัง "แก้ไขข้อบกพร่อง" และ "เผยแพร่" หาก การตั้งค่าไม่ปรากฏ เปลี่ยนตัวกรองในแถบการตั้งค่าของบิลด์ จากพื้นฐานเป็นทั้งหมด

GooglePlacesSwift

คุณสามารถติดตั้ง GooglePlacesSwift (เวอร์ชันตัวอย่าง) SDK โดยใช้ Swift Package Manager, CocoaPods และติดตั้งด้วยตนเองได้ ขั้นตอนการติดตั้งในทุกกระบวนการจะสะท้อนให้เห็นขั้นตอนที่สรุปสำหรับ Places SDK สำหรับ iOS ซึ่งมีความแตกต่างดังต่อไปนี้

ตัวอย่าง หากใช้ CocoaPods แล้ว Podfile ที่แก้ไขแล้วจะมีลักษณะดังนี้

source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '15.3'

target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
  pod 'GooglePlacesSwift', '0.1.0'
end

ขั้นตอนที่ 3: ตรวจสอบไฟล์ Manifest ด้านความเป็นส่วนตัวของ Apple

Apple ต้องการรายละเอียดความเป็นส่วนตัวของแอปสำหรับแอปใน App Store ไปที่หน้ารายละเอียดความเป็นส่วนตัวของ Apple App Store เพื่อดูข้อมูลอัปเดตและข้อมูลเพิ่มเติม

ไฟล์ Manifest ด้านความเป็นส่วนตัวของ Apple จะรวมอยู่ในแพ็กเกจทรัพยากรของ SDK หากต้องการตรวจสอบว่าไฟล์ Manifest สำหรับความเป็นส่วนตัวรวมอยู่ในไฟล์แล้ว และต้องการตรวจสอบเนื้อหา ให้สร้างที่เก็บถาวรของแอปแล้วสร้างรายงานความเป็นส่วนตัวจากที่เก็บถาวร

ขั้นตอนที่ 4: เพิ่มคีย์ API ลงในแอป

ในตัวอย่างต่อไปนี้ ให้แทนที่ YOUR_API_KEY ด้วยคีย์ API

Swift

เพิ่มคีย์ API ลงใน AppDelegate.swift ดังนี้

  • เพิ่มคำสั่งการนำเข้าต่อไปนี้
    import GooglePlaces
  • เพิ่มสิ่งต่อไปนี้ใน application(_:didFinishLaunchingWithOptions:) โดยแทนที่ YOUR_API_KEY ด้วยคีย์ API ของคุณ
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")

Objective-C

เพิ่มคีย์ API ลงใน AppDelegate.m ดังนี้

  • เพิ่มคำสั่งการนำเข้าต่อไปนี้
    @import GooglePlaces;
  • เพิ่มสิ่งต่อไปนี้ใน application:didFinishLaunchingWithOptions: โดยแทนที่ YOUR_API_KEY ด้วยคีย์ API ของคุณ
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

GooglePlacesSwift

เพิ่มคีย์ API ลงใน AppDelegate.swift ดังนี้

  • เพิ่มคำสั่งการนำเข้าต่อไปนี้
    import GooglePlacesSwift
  • เพิ่มสิ่งต่อไปนี้ใน application(_:didFinishLaunchingWithOptions:) โดยแทนที่ YOUR_API_KEY ด้วยคีย์ API ของคุณ
    PlacesClient.shared.provideAPIKey("YOUR_API_KEY")

ขั้นตอนที่ 5: เริ่มเขียนโค้ด

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีหาสถานที่ปัจจุบัน

Swift

  import GooglePlaces
  import UIKit

  class GetStartedViewController : UIViewController {

    // Add a pair of UILabels in Interface Builder, and connect the outlets to these variables.
    @IBOutlet private var nameLabel: UILabel!
    @IBOutlet private var addressLabel: UILabel!

    private var placesClient: GMSPlacesClient!

    override func viewDidLoad() {
      super.viewDidLoad()
      placesClient = GMSPlacesClient.shared()
    }

    // Add a UIButton in Interface Builder, and connect the action to this function.
    @IBAction func getCurrentPlace(_ sender: UIButton) {
      let placeFields: GMSPlaceField = [.name, .formattedAddress]
      placesClient.findPlaceLikelihoodsFromCurrentLocation(withPlaceFields: placeFields) { [weak self] (placeLikelihoods, error) in
        guard let strongSelf = self else {
          return
        }

        guard error == nil else {
          print("Current place error: \(error?.localizedDescription ?? "")")
          return
        }

        guard let place = placeLikelihoods?.first?.place else {
          strongSelf.nameLabel.text = "No current place"
          strongSelf.addressLabel.text = ""
          return
        }

        strongSelf.nameLabel.text = place.name
        strongSelf.addressLabel.text = place.formattedAddress
      }
    }
  }

  

Objective-C

  #import "GetStartedViewController.h"
  @import GooglePlaces;

  @interface GetStartedViewController ()
  // Add a pair of UILabels in Interface Builder and connect the outlets to these variables
  @property (weak, nonatomic) IBOutlet UILabel *nameLabel;
  @property (weak, nonatomic) IBOutlet UILabel *addressLabel;
  @end

  @implementation GetStartedViewController {
    GMSPlacesClient *_placesClient;
  }

  - (void)viewDidLoad {
    [super viewDidLoad];
    _placesClient = [GMSPlacesClient sharedClient];
  }

  // Add a pair of UILabels in Interface Builder and connect the outlets to these variables.
  - (IBAction)getCurrentPlace:(UIButton *)sender {
    GMSPlaceField placeFields = (GMSPlaceFieldName | GMSPlaceFieldFormattedAddress);

    __weak typeof(self) weakSelf = self;
    [_placesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:placeFields callback:^(NSArray<GMSPlaceLikelihood *> * _Nullable likelihoods, NSError * _Nullable error) {
      __typeof__(self) strongSelf = weakSelf;
      if (strongSelf == nil) {
        return;
      }

      if (error != nil) {
        NSLog(@"An error occurred %@", [error localizedDescription]);
        return;
      }

      GMSPlace *place = likelihoods.firstObject.place;
      if (place == nil) {
        strongSelf.nameLabel.text = @"No current place";
        strongSelf.addressLabel.text = @"";
        return;
      }

      strongSelf.nameLabel.text = place.name;
      strongSelf.addressLabel.text = place.formattedAddress;
    }];
  }

  @end
  

GooglePlacesSwift

  struct ContentView: View {
    @State var place: Place?

    var body: some View {
      Button("Get Place") {
        // A hotel in Saigon with an attribution.
        let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"
        let fetchPlaceRequest = FetchPlaceRequest(
          placeID: placeID,
          placeProperties: [.displayName, .formattedAddress]
        )
        Task {
          switch await placesClient.fetchPlace(with: fetchPlaceRequest) {
          case .success(let place):
            self.place = place
          case .failure(let placesError):
            // Handle error
        }
      Text(swiftPlace?.displayName ?? "No place yet")
        .padding()
      Text(swiftPlace?.formattedAddress ?? "No place yet")
        .padding()
    }
  }
  

ขั้นตอนถัดไป

หลังจากกำหนดค่าโปรเจ็กต์แล้ว คุณจะสำรวจ ตัวอย่างแอป