Xcode प्रोजेक्ट सेट अप करना

बिलिंग की सुविधा चालू करने और एपीआई पासकोड बनाने के बाद, Xcode प्रोजेक्ट को सेट अप किया जा सकता है. इस प्रोजेक्ट का इस्तेमाल, ऐप्लिकेशन डेवलप करने के लिए किया जाता है.

हर रिलीज़ के लिए रिलीज़ नोट उपलब्ध हैं.

पहला चरण: ज़रूरी सॉफ़्टवेयर इंस्टॉल करें

iOS के लिए Places SDK टूल का इस्तेमाल करके प्रोजेक्ट बनाने के लिए, आपको इनकी ज़रूरत होगी:

  • Xcode वर्शन 14.0 या उसके बाद का वर्शन

दूसरा चरण: Xcode प्रोजेक्ट बनाना और iOS के लिए Places SDK टूल इंस्टॉल करना

स्विफ़्ट पैकेज मैनेजर

iOS के लिए Places SDK टूल को Swift Package Manager की मदद से इंस्टॉल किया जा सकता है. SDK टूल जोड़ने के लिए, पक्का करें कि आपने iOS डिपेंडेंसी के लिए, Places SDK टूल को हटा दिया है.

SDK टूल को किसी नए या मौजूदा प्रोजेक्ट में जोड़ने के लिए, यह तरीका अपनाएं:

  1. अपना Xcode project या workspace खोलें. इसके बाद, फ़ाइल > पैकेज डिपेंडेंसी जोड़ें पर जाएं.
  2. यूआरएल के तौर पर https://github.com/googlemaps/ios-places-sdk डालें, पैकेज पाने के लिए Enter दबाएं और "पैकेज जोड़ें" पर क्लिक करें.
  3. किसी खास version को इंस्टॉल करने के लिए, डिपेंडेंसी नियम फ़ील्ड को वर्शन-आधारित विकल्पों में से किसी एक पर सेट करें. नए प्रोजेक्ट के लिए, हमारा सुझाव है कि आप सबसे नया वर्शन तय करें. साथ ही, "एग्ज़ैक्ट वर्शन" विकल्प इस्तेमाल करें. यह प्रोसेस पूरी होने के बाद, "पैकेज जोड़ें" पर क्लिक करें.
  4. पैकेज के प्रॉडक्ट चुनें विंडो से, पुष्टि करें कि GooglePlaces को आपके तय किए गए main टारगेट में जोड़ दिया जाएगा. यह प्रोसेस पूरी होने के बाद, "पैकेज जोड़ें" पर क्लिक करें.
  5. अपने इंस्टॉलेशन की पुष्टि करने के लिए, अपने टारगेट के General पैनल पर जाएं. फ़्रेमवर्क, लाइब्रेरी, और एम्बेड किए गए कॉन्टेंट में, आपको इंस्टॉल किए गए पैकेज दिखेंगे. पैकेज और उसके वर्शन की पुष्टि करने के लिए, "Project Navigator" के "पैकेज डिपेंडेंसी" सेक्शन में भी देखा जा सकता है.

किसी मौजूदा प्रोजेक्ट के लिए, package को अपडेट करने के लिए, यह तरीका अपनाएं:

  1. Xcode से, "फ़ाइल > पैकेज > सबसे नए पैकेज वर्शन में अपडेट करें" पर जाएं.
  2. अपने इंस्टॉलेशन की पुष्टि करने के लिए, प्रोजेक्ट नेविगेटर के पैकेज डिपेंडेंसी सेक्शन में जाकर पैकेज और उसके वर्शन की पुष्टि करें.

CocoaPods का इस्तेमाल करके जोड़ी गई iOS डिपेंडेंसी के लिए, मौजूदा Places SDK टूल को हटाने के लिए, यह तरीका अपनाएं:

  1. Xcode के फ़ाइल फ़ोल्डर को बंद करें. टर्मिनल खोलें और यह निर्देश दें:
    sudo gem install cocoapods-deintegrate cocoapods-clean 
    pod deintegrate 
    pod cache clean --all
  2. अगर Podfile, Podfile.resolved, और Xcode workspace को CocoaPod के अलावा किसी और काम के लिए इस्तेमाल नहीं किया जा रहा है, तो उन्हें हटा दें.

iOS के लिए इंस्टॉल किए गए मौजूदा Places SDK टूल को मैन्युअल तरीके से हटाने के लिए, यह तरीका अपनाएं:

  1. अपने Xcode प्रोजेक्ट की कॉन्फ़िगरेशन सेटिंग में जाकर, फ़्रेमवर्क, लाइब्रेरी, और एम्बेड किया गया कॉन्टेंट ढूंढें. नीचे दिए गए फ़्रेमवर्क को हटाने के लिए, माइनस के निशान(-) का इस्तेमाल करें:
    • GooglePlaces.xcframework
  2. अपने Xcode प्रोजेक्ट की टॉप लेवल डायरेक्ट्री से, GooglePlaces बंडल हटाएं.

कोकोपॉड

iOS के लिए Places SDK टूल, CocoaPod पॉड, GooglePlaces के तौर पर उपलब्ध है. इसमें सभी जगहों से जुड़े फ़ंक्शन शामिल होते हैं.

CocoaPods, Swift और Objective-C Cocoa प्रोजेक्ट के लिए एक ओपन सोर्स डिपेंडेंसी मैनेजर है. अगर आपके पास पहले से CocoaPods टूल नहीं है, तो इसे macOS पर इंस्टॉल करें. इसके लिए, टर्मिनल से यह कमांड इस्तेमाल करें. ज़्यादा जानकारी के लिए, CocoaPods के शुरुआती इस्तेमाल से जुड़ी गाइड देखें.

sudo gem install cocoapods

iOS के लिए Places SDK टूल के लिए एक Podfile बनाएं. इसके बाद, SDK टूल और इसकी डिपेंडेंसी को इंस्टॉल करने के लिए इसका इस्तेमाल करें:

  1. अगर आपके पास अब तक कोई Xcode प्रोजेक्ट नहीं है, तो अभी एक प्रोजेक्ट बनाएं और उसे अपने लोकल मशीन में सेव करें. अगर आपने iOS डेवलपमेंट का इस्तेमाल पहले कभी नहीं किया है, तो एक नया प्रोजेक्ट बनाएं और iOS ऐप्लिकेशन का टेंप्लेट चुनें.
  2. अपनी प्रोजेक्ट डायरेक्ट्री में, Podfile नाम की फ़ाइल बनाएं. इस फ़ाइल में आपके प्रोजेक्ट की डिपेंडेंसी के बारे में बताया गया है.
  3. Podfile में बदलाव करें और उनके versions के साथ अपनी डिपेंडेंसी जोड़ें. यहां एक उदाहरण दिया गया है, जिसमें आपके ऐप्लिकेशन टारगेट के नाम और 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 निर्देश चलाएं. इससे, Podfile में बताए गए एपीआई इंस्टॉल हो जाएंगे. साथ ही, उनकी डिपेंडेंसी भी इंस्टॉल हो जाएगी.

    pod install
  7. Xcode को बंद करें और फिर Xcode को लॉन्च करने के लिए, अपने प्रोजेक्ट की .xcworkspace फ़ाइल खोलें (दो बार क्लिक करें). इसके बाद, प्रोजेक्ट खोलने के लिए आपको .xcworkspace फ़ाइल का इस्तेमाल करना होगा.

अगर आपको किसी मौजूदा प्रोजेक्ट के लिए एपीआई अपडेट करना है, तो यह तरीका अपनाएं:

  1. कोई टर्मिनल खोलें और Podfile वाली प्रोजेक्ट डायरेक्ट्री पर जाएं.
  2. pod update निर्देश चलाएं. इससे Podfile में दिए गए सभी एपीआई को सबसे नए वर्शन में अपडेट कर दिया जाएगा.

मैन्युअल तरीके से इंस्टॉल करना

इस गाइड में बताया गया है कि अपने प्रोजेक्ट में iOS के लिए Places SDK टूल वाला XCFramework मैन्युअल तरीके से कैसे जोड़ें और Xcode में अपनी बिल्ड सेटिंग कैसे कॉन्फ़िगर करें. XCFramework एक बाइनरी पैकेज होता है. इसे कई प्लैटफ़ॉर्म पर इस्तेमाल किया जा सकता है. इनमें Apple सिलिकॉन का इस्तेमाल करने वाली मशीनें भी शामिल हैं.

  1. SDK टूल की बाइनरी और संसाधन वाली ये फ़ाइलें डाउनलोड करें:
  2. XCFramework और संसाधनों को ऐक्सेस करने के लिए, ZIP फ़ाइलों को अनपैक करें.
  3. Xcode लॉन्च करें और कोई मौजूदा प्रोजेक्ट खोलें या नया प्रोजेक्ट बनाएं. अगर आपने iOS डेवलपमेंट का इस्तेमाल पहले कभी नहीं किया है, तो नया प्रोजेक्ट बनाएं और iOS ऐप्लिकेशन का टेंप्लेट चुनें.
  4. अपने प्रोजेक्ट से पिछली रिलीज़ में से सभी Maps बंडल हटाएं.
  5. सामान्य टैब खोलें. नीचे दिए गए XCFramework को फ़्रेमवर्क, लाइब्रेरी, और एम्बेड किए गए कॉन्टेंट में जाकर अपने प्रोजेक्ट में खींचें और छोड़ें. पक्का करें कि आपने एम्बेड न करें को चुना हो:
    • GooglePlaces.xcframework
  6. GooglePlaces.bundle को आपके डाउनलोड किए गए GooglePlacesResources से खींचें और छोड़ें
  7. अपने Xcode प्रोजेक्ट की टॉप लेवल डायरेक्ट्री में डाउनलोड किए गए GooglePlacesResources से GooglePlaces.bundle कॉपी करें. जब आपसे कहा जाए, तब डेस्टिनेशन ग्रुप के फ़ोल्डर में आइटम कॉपी करें को चुनना न भूलें.
  8. प्रोजेक्ट नेविगेटर से अपना प्रोजेक्ट चुनें और ऐप्लिकेशन का टारगेट चुनें.
  9. बिल्ड के चरण टैब खोलें. बाइनरी को लाइब्रेरी से लिंक करें में, ये फ़्रेमवर्क और लाइब्रेरी जोड़ें:
    • CoreGraphics.framework
    • CoreLocation.framework
    • libc++.tbd
    • libz.tbd
    • QuartzCore.framework
    • UIKit.framework
  10. खास टारगेट के बजाय अपना प्रोजेक्ट चुनें और बिल्ड सेटिंग टैब खोलें. लिंक करना - सामान्य -> अन्य लिंकर फ़्लैग सेक्शन में, -ObjC को "डीबग" और "रिलीज़" में जोड़ें. अगर ये सेटिंग नहीं दिख रही हैं, तो बिल्ड सेटिंग बार में मौजूद फ़िल्टर को बेसिक से सभी पर सेट करें.

तीसरा चरण: अपने ऐप्लिकेशन में एपीआई पासकोड जोड़ना

यहां दिए गए उदाहरणों में, YOUR_API_KEY को अपनी एपीआई पासकोड से बदलें.

Swift

अपने AppDelegate.swift में अपनी एपीआई कुंजी इस तरह जोड़ें:

  • यह इंपोर्ट स्टेटमेंट जोड़ें:
    import GooglePlaces
  • अपने application(_:didFinishLaunchingWithOptions:) तरीके में यह तरीका जोड़ें और YOUR_API_KEY को अपनी एपीआई कुंजी से बदलें:
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")

Objective-C

अपने AppDelegate.m में अपनी एपीआई कुंजी इस तरह जोड़ें:

  • यह इंपोर्ट स्टेटमेंट जोड़ें:
    @import GooglePlaces;
  • अपने application:didFinishLaunchingWithOptions: तरीके में यह तरीका जोड़ें और YOUR_API_KEY को अपनी एपीआई कुंजी से बदलें:
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

चौथा चरण: कोड लिखना शुरू करें

नीचे दिए गए कोड सैंपल मौजूदा जगह पाने का तरीका बताते हैं.

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
      

अगले चरण

प्रोजेक्ट कॉन्फ़िगर होने के बाद, ऐप्लिकेशन के नमूने देखे जा सकते हैं. आपके पास Cocoapods v1.6.1 इंस्टॉल होना चाहिए.