یک پروژه Xcode راه اندازی کنید

پس از فعال کردن صورتحساب و ایجاد یک کلید API، آماده راه اندازی پروژه Xcode هستید که برای توسعه برنامه خود استفاده می کنید.

یادداشت های انتشار برای هر نسخه در دسترس هستند.

مرحله 1: نرم افزار مورد نیاز را نصب کنید

برای ساختن یک پروژه با استفاده از Places SDK برای iOS، شما نیاز دارید:

  • Xcode نسخه 15.0 یا بالاتر

مرحله 2: پروژه Xcode را ایجاد کرده و Places SDK را برای iOS نصب کنید

مدیر بسته سوئیفت

Places SDK برای iOS را می توان از طریق Swift Package Manager نصب کرد. برای افزودن SDK، مطمئن شوید که هر مکان SDK موجود برای وابستگی‌های iOS را حذف کرده‌اید.

برای افزودن SDK به یک پروژه جدید یا موجود، مراحل زیر را دنبال کنید:

  1. project یا workspace Xcode خود را باز کنید، سپس به File > Add Package Dependencies بروید.
  2. https://github.com/googlemaps/ios-places-sdk را به عنوان URL وارد کنید، Enter را فشار دهید تا بسته را وارد کنید و روی «افزودن بسته» کلیک کنید.
  3. برای نصب یک version خاص، قسمت Dependency Rule را روی یکی از گزینه های مبتنی بر نسخه تنظیم کنید. برای پروژه های جدید، توصیه می کنیم آخرین نسخه را مشخص کنید و از گزینه "نسخه دقیق" استفاده کنید. پس از تکمیل، روی "افزودن بسته" کلیک کنید.
  4. از پنجره انتخاب محصولات بسته ، تأیید کنید GooglePlaces به هدف main تعیین‌شده شما اضافه می‌شود. پس از تکمیل، روی "افزودن بسته" کلیک کنید.
  5. برای تأیید نصب خود، به صفحه General هدف خود بروید. در Frameworks، Libraries و Embedded Content باید بسته های نصب شده را ببینید. همچنین می‌توانید برای تأیید بسته و نسخه آن، بخش «وابستگی‌های بسته» در «ناوبر پروژه» را مشاهده کنید.

برای به روز رسانی package برای یک پروژه موجود، این مراحل را دنبال کنید:

  1. اگر از نسخه‌ای زودتر از 9.0.0 ارتقا می‌دهید، باید وابستگی‌های زیر را حذف کنید: GoogleMapsBase ، GoogleMapsCore ، و GoogleMapsM4B پس از ارتقا. وابستگی GoogleMaps را حذف نکنید. برای اطلاعات بیشتر، به یادداشت‌های انتشار نسخه 9.0.0 مراجعه کنید.

    از تنظیمات پیکربندی پروژه Xcode خود، Frameworks، Libraries و Embedded Content را پیدا کنید. برای حذف چارچوب زیر از علامت منفی (-) استفاده کنید:

    • GoogleMapsBase (فقط برای ارتقا از نسخه های قبل از 9.0.0)
    • GoogleMapsCore (فقط برای ارتقا از نسخه های قبل از 9.0.0)
    • GoogleMapsM4B (فقط برای ارتقاء نسخه های قبل از 9.0.0)
  2. از Xcode، به "File > Packages > Update To Latest Package Versions" بروید.
  3. برای تأیید نصب خود، به بخش Package Dependencies در Project Navigator بروید تا بسته و نسخه آن را تأیید کنید.

برای حذف Places SDK موجود برای وابستگی‌های iOS اضافه شده با استفاده از CocoaPods ، این مراحل را دنبال کنید:

  1. فضای کاری Xcode خود را ببندید. ترمینال را باز کنید و دستور زیر را اجرا کنید:
    sudo gem install cocoapods-deintegrate cocoapods-clean 
    pod deintegrate 
    pod cache clean --all
  2. اگر از آنها برای چیزی غیر از CocoaPods استفاده نمی کنید، Podfile ، Podfile.resolved و workspace Xcode را حذف کنید.

برای حذف Places SDK موجود برای iOS که به صورت دستی نصب شده است، این مراحل را دنبال کنید:
  1. از تنظیمات پیکربندی پروژه Xcode خود، Frameworks، Libraries و Embedded Content را پیدا کنید. برای حذف چارچوب زیر از علامت منفی (-) استفاده کنید:
    • GooglePlaces.xcframework
  2. از فهرست سطح بالای پروژه Xcode خود، بسته GooglePlaces حذف کنید.

CocoaPods

Places SDK برای iOS به‌عنوان یک CocoaPod pod، GooglePlaces در دسترس است که شامل همه قابلیت‌های مکان است.

CocoaPods یک مدیر وابستگی منبع باز برای پروژه های Swift و Objective-C Cocoa است. اگر از قبل ابزار CocoaPods را ندارید، با اجرای دستور زیر از ترمینال، آن را روی macOS نصب کنید. برای جزئیات، به راهنمای شروع به کار CocoaPods مراجعه کنید.

sudo gem install cocoapods

یک Podfile برای Places SDK برای iOS ایجاد کنید و از آن برای نصب SDK و وابستگی های آن استفاده کنید:

  1. اگر هنوز پروژه Xcode ندارید، اکنون یکی را ایجاد کرده و آن را در دستگاه محلی خود ذخیره کنید. اگر در توسعه iOS جدیدتر هستید، یک پروژه جدید ایجاد کنید و الگوی برنامه iOS را انتخاب کنید.
  2. یک فایل به نام Podfile در دایرکتوری پروژه خود ایجاد کنید. این فایل وابستگی های پروژه شما را تعریف می کند.
  3. Podfile را ویرایش کنید و وابستگی های خود را به همراه نسخه های آنها اضافه کنید. در اینجا یک مثال است که نام هدف برنامه شما و نام غلاف 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 را به همراه وابستگی هایی که ممکن است داشته باشند نصب می کند.

    pod install
  7. Xcode را ببندید و سپس فایل .xcworkspace پروژه خود را باز کنید (دوبار کلیک کنید) تا Xcode راه اندازی شود. از این زمان به بعد باید از فایل .xcworkspace برای باز کردن پروژه استفاده کنید.

برای به روز رسانی API برای یک پروژه موجود، این مراحل را دنبال کنید:

  1. یک ترمینال را باز کنید و به فهرست پروژه حاوی Podfile بروید.
  2. دستور pod update را اجرا کنید. با این کار همه API های مشخص شده در Podfile به آخرین نسخه به روز می شوند.

نصب دستی

این راهنما نشان می دهد که چگونه XCFramework حاوی Places SDK برای iOS را به صورت دستی به پروژه خود اضافه کنید و تنظیمات ساخت خود را در Xcode پیکربندی کنید. XCFramework یک بسته باینری است که می‌توانید در چندین پلتفرم از جمله ماشین‌هایی که از سیلیکون اپل استفاده می‌کنند استفاده کنید.

  1. فایل های باینری و منبع SDK زیر را دانلود کنید:
  2. برای دسترسی به XCFramework و منابع، فایل ها را استخراج کنید.
  3. Xcode را راه اندازی کنید و یک پروژه موجود را باز کنید یا یک پروژه جدید ایجاد کنید. اگر در توسعه iOS جدیدتر هستید، یک پروژه جدید ایجاد کنید و الگوی برنامه iOS را انتخاب کنید.
  4. بسته‌های Maps را از نسخه‌های قبلی از پروژه خود حذف کنید.
  5. تب General را باز کنید. XCFramework زیر را به داخل پروژه خود در بخش Frameworks, Libraries, and Embedded Content بکشید. حتماً Do Not Embed را انتخاب کنید:
    • GooglePlaces.xcframework
  6. GooglePlaces.bundle را از GooglePlacesResources که دانلود کردید بکشید
  7. GooglePlaces.bundle را از GooglePlacesResources که دانلود کرده‌اید در فهرست سطح بالای پروژه Xcode خود کپی کنید. وقتی از شما خواسته شد، مطمئن شوید که موارد کپی در پوشه گروه مقصد را انتخاب کنید.
  8. پروژه خود را از Project Navigator انتخاب کنید و هدف برنامه خود را انتخاب کنید.
  9. تب Build Phases را باز کنید. در لینک باینری با کتابخانه ها ، چارچوب ها و کتابخانه های زیر را اضافه کنید:
    • CoreGraphics.framework
    • CoreLocation.framework
    • libc++.tbd
    • libz.tbd
    • QuartzCore.framework
    • UIKit.framework
  10. پروژه خود را به جای یک هدف خاص انتخاب کنید و تب Build Settings را باز کنید. در بخش Linking - General -> Other Linker Flags ، -ObjC به "Debug" و "Release" اضافه کنید. اگر این تنظیمات قابل مشاهده نیستند، فیلتر را در نوار تنظیمات ساخت از Basic به All تغییر دهید.

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: فایل Apple Privacy Manifest را بررسی کنید

اپل به جزئیات حریم خصوصی برنامه برای برنامه های موجود در فروشگاه App نیاز دارد. برای به‌روزرسانی‌ها و اطلاعات بیشتر، از صفحه جزئیات حریم خصوصی فروشگاه App Apple دیدن کنید.

فایل Apple Privacy Manifest در بسته منابع برای SDK گنجانده شده است. برای تأیید اینکه فایل Manifest Privacy گنجانده شده است و برای بررسی محتوای آن، یک بایگانی از برنامه خود ایجاد کنید و یک گزارش حریم خصوصی از بایگانی ایجاد کنید .

مرحله 4: کلید API را به برنامه خود اضافه کنید

در مثال‌های زیر، YOUR_API_KEY با کلید API خود جایگزین کنید.

سریع

کلید API خود را به صورت زیر به AppDelegate.swift خود اضافه کنید:

  • عبارت import زیر را اضافه کنید:
    import GooglePlaces
  • موارد زیر را به application(_:didFinishLaunchingWithOptions:) خود اضافه کنید و YOUR_API_KEY را با کلید API خود جایگزین کنید:
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")

هدف-C

کلید API خود را به صورت زیر به AppDelegate.m خود اضافه کنید:

  • عبارت import زیر را اضافه کنید:
    @import GooglePlaces;
  • موارد زیر را به application:didFinishLaunchingWithOptions: YOUR_API_KEY را با کلید API خود جایگزین کنید:
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

GooglePlacesSwift

کلید API خود را به صورت زیر به AppDelegate.swift خود اضافه کنید:

  • عبارت import زیر را اضافه کنید:
    import GooglePlacesSwift
  • موارد زیر را به application(_:didFinishLaunchingWithOptions:) خود اضافه کنید و YOUR_API_KEY را با کلید API خود جایگزین کنید:
    PlacesClient.shared.provideAPIKey("YOUR_API_KEY")

مرحله 5: شروع به نوشتن کد کنید

نمونه کد زیر نحوه بدست آوردن مکان فعلی را نشان می دهد.

سریع

  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
      }
    }
  }

  

هدف-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()
    }
  }
  

مراحل بعدی

پس از پیکربندی پروژه، می‌توانید برنامه‌های نمونه را کاوش کنید.