बिलिंग की सुविधा चालू करने और एपीआई पासकोड बनाने के बाद, Xcode प्रोजेक्ट सेट अप किया जा सकता है. इस प्रोजेक्ट का इस्तेमाल अपने ऐप्लिकेशन को डेवलप करने के लिए किया जाता है.
रिलीज़ नोट हर रिलीज़ के लिए उपलब्ध होते हैं.
पहला चरण: ज़रूरी सॉफ़्टवेयर इंस्टॉल करना
iOS के लिए Places SDK टूल का इस्तेमाल करके प्रोजेक्ट बनाने के लिए, आपको इनकी ज़रूरत होगी:
- Xcode वर्शन 15.0 या इसके बाद का वर्शन
चरण 2: Xcode प्रोजेक्ट बनाना और iOS के लिए Places SDK टूल इंस्टॉल करना
Swift पैकेज मैनेजर
iOS के लिए, Places SDK टूल को Swift Package Manager की मदद से इंस्टॉल किया जा सकता है. SDK टूल जोड़ने के लिए, पक्का करें कि आपने iOS डिपेंडेंसी के लिए सभी मौजूदा Places SDK टूल हटा दिए हों.
SDK टूल को किसी नए या मौजूदा प्रोजेक्ट में जोड़ने के लिए, यह तरीका अपनाएं:
-
अपना Xcode
project
याworkspace
खोलें. इसके बाद, फ़ाइल > पैकेज डिपेंडेंसी जोड़ें पर जाएं. - यूआरएल के तौर पर, https://github.com/googlemaps/ios-places-sdk डालें. इसके बाद, पैकेज देखने के लिए Enter दबाएं और "पैकेज जोड़ें" पर क्लिक करें.
-
किसी खास
version
को इंस्टॉल करने के लिए, डिपेंडेंसी नियम फ़ील्ड को वर्शन के हिसाब से दिए गए विकल्पों में से किसी एक पर सेट करें. नए प्रोजेक्ट के लिए, हम सबसे नया वर्शन बताने और "एग्ज़ैक्ट वर्शन" विकल्प का इस्तेमाल करने का सुझाव देते हैं. यह प्रोसेस पूरी होने के बाद, "Add Package" पर क्लिक करें. -
पैकेज प्रॉडक्ट चुनें विंडो से, पुष्टि करें कि
GooglePlaces
को आपके तय किए गएmain
टारगेट में जोड़ा गया है. यह प्रोसेस पूरी होने के बाद, "Add Package" पर क्लिक करें. -
अपने इंस्टॉलेशन की पुष्टि करने के लिए, टारगेट के
General
पैनल पर जाएं. फ़्रेमवर्क, लाइब्रेरी, और एम्बेड किए गए कॉन्टेंट में, आपको इंस्टॉल किए गए पैकेज दिखेंगे. पैकेज और उसके वर्शन की पुष्टि करने के लिए, "Project Navigator" के "पैकेज डिपेंडेंसी" सेक्शन में भी देखा जा सकता है.
अगर आपको किसी मौजूदा प्रोजेक्ट के लिए package
को अपडेट करना है, तो यह तरीका अपनाएं:
अगर आपने 9.0.0 से पहले के वर्शन से अपग्रेड किया है, तो अपग्रेड करने के बाद आपको ये डिपेंडेंसी हटानी होंगी:
GoogleMapsBase
,GoogleMapsCore
, औरGoogleMapsM4B
.GoogleMaps
के लिए डिपेंडेंसी न हटाएं. ज़्यादा जानकारी के लिए, वर्शन 9.0.0 के बारे में जानकारी देखें.अपने Xcode प्रोजेक्ट की कॉन्फ़िगरेशन सेटिंग में फ़्रेमवर्क, लाइब्रेरी, और एम्बेड किया गया कॉन्टेंट ढूंढें. नीचे दिए गए फ़्रेमवर्क को हटाने के लिए, माइनस साइन(-) का इस्तेमाल करें:
GoogleMapsBase
(सिर्फ़ 9.0.0 से पहले के वर्शन से अपग्रेड करने के लिए)GoogleMapsCore
(सिर्फ़ 9.0.0 से पहले के वर्शन से अपग्रेड करने के लिए)GoogleMapsM4B
(सिर्फ़ 9.0.0 से पहले के वर्शन से अपग्रेड करने के लिए)
- Xcode से, "फ़ाइल > पैकेज > नए पैकेज वर्शन पर अपडेट करें" पर जाएं.
- इंस्टॉल किए जाने की पुष्टि के लिए, Project Navigator के पैकेज डिपेंडेंसी सेक्शन पर जाएं और पैकेज और उसके वर्शन की पुष्टि करें.
CocoaPods
का इस्तेमाल करके जोड़ी गई iOS डिपेंडेंसी के लिए मौजूदा Places SDK टूल हटाने के लिए, यह तरीका अपनाएं:
- अपना Xcode फ़ाइल फ़ोल्डर बंद करें. टर्मिनल खोलें और नीचे दिया गया निर्देश चलाएं:
sudo gem install cocoapods-deintegrate cocoapods-clean pod deintegrate pod cache clean --all
-
अगर
Podfile
,Podfile.resolved
, और Xcodeworkspace
का इस्तेमाल CocoaPods के अलावा किसी और चीज़ के लिए नहीं किया जा रहा है, तो उन्हें हटा दें.
-
अपने Xcode प्रोजेक्ट की कॉन्फ़िगरेशन सेटिंग में फ़्रेमवर्क, लाइब्रेरी, और एम्बेड किया गया कॉन्टेंट ढूंढें. इस फ़्रेमवर्क को हटाने के लिए, माइनस का निशान(-) इस्तेमाल करें:
GooglePlaces.xcframework
-
अपने Xcode प्रोजेक्ट की टॉप लेवल डायरेक्ट्री से,
GooglePlaces
बंडल हटाएं.
CocoaPods
iOS के लिए, जगह का SDK टूल CocoaPod के पॉड, GooglePlaces के तौर पर उपलब्ध है. इसमें जगहों की सभी सुविधाएं शामिल हैं.
CocoaPods, Swift और Objective-C Cocoa प्रोजेक्ट के लिए एक ओपन सोर्स डिपेंडेंसी मैनेजर है. अगर आपके पास पहले से CocoaPods टूल नहीं है, तो इसे टर्मिनल से नीचे दिया गया निर्देश चलाकर macOS पर इंस्टॉल करें. ज़्यादा जानकारी के लिए, CocoaPods को इस्तेमाल करने के शुरुआती निर्देश देखें.
sudo gem install cocoapods
iOS के लिए, Places SDK टूल का Podfile
बनाएं और SDK टूल और उसकी डिपेंडेंसी इंस्टॉल करने के लिए इसका इस्तेमाल करें:
- अगर आपके पास अब तक कोई Xcode प्रोजेक्ट नहीं है, तो अभी एक प्रोजेक्ट बनाएं और उसे अपनी कंप्यूटर में सेव करें. अगर आप iOS डेवलपमेंट पर नए हैं, तो नया प्रोजेक्ट बनाएं और iOS ऐप्लिकेशन टेंप्लेट चुनें.
- अपनी प्रोजेक्ट डायरेक्ट्री में
Podfile
नाम की फ़ाइल बनाएं. यह फ़ाइल आपके प्रोजेक्ट की डिपेंडेंसी के बारे में बताती है. 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
चलाना न भूलें, ताकि यह पता चल सके कि नया वर्शन उपलब्ध है या नहीं. इससे यह पक्का किया जा सकेगा कि आप हमेशा नए वर्शन पर काम कर रहे हैं.Podfile
को सेव करें.कोई टर्मिनल खोलें और उस डायरेक्ट्री पर जाएं जिसमें
Podfile
शामिल है:cd <path-to-project>
pod install
निर्देश चलाएं. इससेPodfile
में बताए गए एपीआई और उनकी डिपेंडेंसी इंस्टॉल हो जाएगी.pod install
Xcode बंद करें. इसके बाद, Xcode लॉन्च करने के लिए, अपने प्रोजेक्ट की
.xcworkspace
फ़ाइल को खोलें (दो बार क्लिक करें). अब से, आपको प्रोजेक्ट खोलने के लिए.xcworkspace
फ़ाइल का इस्तेमाल करना होगा.
अगर आपको किसी मौजूदा प्रोजेक्ट के लिए एपीआई अपडेट करना है, तो यह तरीका अपनाएं:
- कोई टर्मिनल खोलें और
Podfile
वाली प्रोजेक्ट डायरेक्ट्री पर जाएं. pod update
निर्देश चलाएं. इससेPodfile
में बताए गए सभी एपीआई नए वर्शन में अपडेट हो जाएंगे.
मैन्युअल तरीके से इंस्टॉल करना
इस गाइड में, iOS के लिए Places SDK टूल वाले XCFramework को मैन्युअल तरीके से अपने प्रोजेक्ट में जोड़ने और Xcode में बिल्ड सेटिंग कॉन्फ़िगर करने का तरीका बताया गया है. XCFramework एक बाइनरी पैकेज है, जिसे कई प्लैटफ़ॉर्म पर इस्तेमाल किया जा सकता है. इनमें Apple सिलिकॉन का इस्तेमाल करने वाली मशीनें भी शामिल हैं.
- इन SDK टूल की बाइनरी और रिसॉर्स फ़ाइलें डाउनलोड करें:
- XCFramework और संसाधनों को ऐक्सेस करने के लिए, फ़ाइलों को निकालें.
- Xcode लॉन्च करें और या तो कोई मौजूदा प्रोजेक्ट खोलें या एक नया प्रोजेक्ट बनाएं. अगर आप iOS डेवलपमेंट पर नए हैं, तो नया प्रोजेक्ट बनाएं और iOS ऐप्लिकेशन टेंप्लेट चुनें.
- अपने प्रोजेक्ट से पिछली रिलीज़ से सभी Maps बंडल हटाएं.
-
सामान्य टैब खोलें. इस XCFramework को अपने प्रोजेक्ट में खींचें और
फ़्रेमवर्क, लाइब्रेरी, और एम्बेड किया गया कॉन्टेंट में छोड़ें. पक्का करें कि
आपने एम्बेड न करें चुना हो:
GooglePlaces.xcframework
डाउनलोड किए गए GooglePlacesResources से -
डाउनलोड किए गए GooglePlacesResources से
GooglePlaces.bundle
को कॉपी करके, अपने Xcode प्रोजेक्ट की टॉप लेवल डायरेक्ट्री में डालें. निर्देश मिलने पर, आइटम को डेस्टिनेशन ग्रुप के फ़ोल्डर में कॉपी करें चुनना न भूलें. - Project Navigator से अपना प्रोजेक्ट चुनें और अपने ऐप्लिकेशन का टारगेट चुनें.
-
चरण बनाएं टैब खोलें. बाइनरी को लाइब्रेरी से
लिंक करें में, ये फ़्रेमवर्क और लाइब्रेरी जोड़ें:
CoreGraphics.framework
CoreLocation.framework
libc++.tbd
libz.tbd
QuartzCore.framework
UIKit.framework
-
किसी खास टारगेट के बजाय, अपना प्रोजेक्ट चुनें और बिल्ड सेटिंग टैब खोलें. लिंक करना - सामान्य -> अन्य लिंकर फ़्लैग सेक्शन में, "डीबग" और "रिलीज़ करें" में
-ObjC
जोड़ें. अगर ये सेटिंग नहीं दिख रही हैं, तो बिल्ड सेटिंग बार में फ़िल्टर को सामान्य से सभी में बदलें.
GooglePlaces.bundle
को खींचें और छोड़ें
GooglePlacesSwift
आप Swift Package Manager, CocoaPods का इस्तेमाल करके, Google PlacesSwift (Preview) SDK टूल को मैन्युअल तरीके से इंस्टॉल कर सकते हैं. सभी प्रोसेस में इंस्टॉल करने का तरीका, iOS के लिए 'जगहें' SDK टूल के बताए गए चरणों की कॉपी है. यहां दिए गए अंतर यहां दिए गए हैं:
- Xcode 15.3 ज़रूरी है.
- अगर Swift पैकेज मैनेजर का इस्तेमाल किया जा रहा है, तो आपको
GooglePlaces
के इंस्टेंस कोGooglePlacesSwift
से बदलना होगा. इसमें इंपोर्ट स्टेटमेंट शामिल हैं.- https://github.com/googlemaps/ios-places-sdk के इंस्टेंस को https://github.com/googlemaps/ios-places-swift-sdk से बदलें.
- वर्शन नंबर को 0.1.0 में अपडेट करें.
- अगर ऐप्लिकेशन को मैन्युअल तरीके से इंस्टॉल किया जा रहा है, तो यहां दी गई SDK टूल की बाइनरी और रिसॉर्स फ़ाइलें डाउनलोड करें:
उदाहरण के लिए, अगर 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
तीसरा चरण: Apple Privacy मेनिफ़ेस्ट फ़ाइल की जांच करना
Apple को App Store पर मौजूद ऐप्लिकेशन के लिए, ऐप्लिकेशन की निजता से जुड़ी जानकारी की ज़रूरत होती है. अपडेट और ज़्यादा जानकारी के लिए, Apple App Store के निजता से जुड़ी जानकारी वाले पेज पर जाएं.
Apple Privacy मेनिफ़ेस्ट फ़ाइल, SDK टूल के लिए संसाधनों के बंडल में शामिल होती है. यह पुष्टि करने के लिए कि निजता मेनिफ़ेस्ट फ़ाइल शामिल की गई है और इसके कॉन्टेंट की जांच करने के लिए, अपने ऐप्लिकेशन का संग्रह बनाएं और संग्रह से निजता रिपोर्ट जनरेट करें.
चौथा चरण: अपने ऐप्लिकेशन में एपीआई पासकोड जोड़ना
यहां दिए गए उदाहरणों में, YOUR_API_KEY
को अपने एपीआई पासकोड से बदलें.
Swift
AppDelegate.swift
में अपने एपीआई पासकोड को इस तरह जोड़ें:
- यह इंपोर्ट स्टेटमेंट जोड़ें:
import GooglePlaces
- YOUR_API_KEY को अपनी एपीआई कुंजी से बदलकर, अपने
application(_:didFinishLaunchingWithOptions:)
तरीके में ये जोड़ें:GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C
AppDelegate.m
में अपने एपीआई पासकोड को इस तरह जोड़ें:
- यह इंपोर्ट स्टेटमेंट जोड़ें:
@import GooglePlaces;
- YOUR_API_KEY को अपनी एपीआई कुंजी से बदलकर, अपने
application:didFinishLaunchingWithOptions:
तरीके में ये जोड़ें:[GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];
GooglePlacesSwift
AppDelegate.swift
में अपने एपीआई पासकोड को इस तरह जोड़ें:
- यह इंपोर्ट स्टेटमेंट जोड़ें:
import GooglePlacesSwift
- YOUR_API_KEY को अपनी एपीआई कुंजी से बदलकर, अपने
application(_:didFinishLaunchingWithOptions:)
तरीके में ये जोड़ें:PlacesClient.shared.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
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() } }
अगले चरण
प्रोजेक्ट कॉन्फ़िगर होने के बाद, ऐप्लिकेशन के सैंपल देखे जा सकते हैं.