Xcode projesi oluşturma

Faturalandırmayı etkinleştirip bir API anahtarı oluşturduktan sonra, uygulamanızı geliştirmek için kullanacağınız Xcode projesini kurmaya hazırsınız demektir.

Her sürüm için sürüm notları mevcuttur.

1. Adım: Gerekli yazılımı yükleyin

iOS için Yerler SDK'sını kullanarak proje oluşturmak için gerekenler:

  • Xcode 15.0 sürümü veya sonraki sürümler

2. Adım: Xcode projesini oluşturun ve iOS için Yerler SDK'sını yükleyin

Swift Paket Yöneticisi

iOS için Yerler SDK'sı Swift Package Manager aracılığıyla yüklenebilir. SDK'yı eklemek istiyorsanız mevcut iOS bağımlıları için Yerler SDK'sını kaldırdığınızdan emin olun.

SDK'yı yeni veya mevcut bir projeye eklemek için aşağıdaki adımları uygulayın:

  1. Xcode project veya workspace dosyanızı açın, ardından Dosya > Paket Bağımlılıkları Ekle'ye gidin.
  2. URL olarak https://github.com/googlemaps/ios-places-sdk adresini girin, paketi almak için Enter'a basın ve "Paket Ekle"yi tıklayın.
  3. Belirli bir version yüklemek için Bağımlılık Kuralı alanını sürüm tabanlı seçeneklerden birine ayarlayın. Yeni projeler için en son sürümü belirtmenizi ve "Tam Sürüm" seçeneğini kullanmanızı öneririz. İşlem tamamlandığında "Paket Ekle"yi tıklayın.
  4. Paket Ürünlerini Seçin penceresinden GooglePlaces ürününün, belirlediğiniz main hedefine ekleneceğini doğrulayın. İşlem tamamlandığında "Paket Ekle"yi tıklayın.
  5. Yüklemenizi doğrulamak için hedefinizin General bölmesine gidin. Çerçeveler, Kitaplıklar ve Yerleştirilmiş İçerikler bölümünde yüklü paketleri göreceksiniz. Paketi ve sürümünü doğrulamak için "Project Navigator"ın "Paket Bağımlılıkları" bölümünü de görüntüleyebilirsiniz.

Mevcut bir projenin package öğesini güncellemek için şu adımları izleyin:

  1. 9.0.0'dan önceki bir sürümden yeni sürüme geçiyorsanız şu bağımlılıkları kaldırmanız gerekir: yeni sürüme geçtikten sonra GoogleMapsBase, GoogleMapsCore ve GoogleMapsM4B. GoogleMaps için bağımlılığı kaldırmayın. Daha fazla bilgi için 9.0.0 Sürüm Notları'na bakın.

    Xcode proje yapılandırma ayarlarınızdan Çerçeveler, Kitaplıklar ve Yerleştirilmiş İçerikler'i bulun. Aşağıdaki çerçeveyi kaldırmak için eksi işaretini(-) kullanın:

    • GoogleMapsBase (Yalnızca 9.0.0'dan önceki sürümlerden yapılan yükseltmeler için)
    • GoogleMapsCore (Yalnızca 9.0.0'dan önceki sürümlerden yapılan yükseltmeler için)
    • GoogleMapsM4B (Yalnızca 9.0.0'dan önceki sürümlerden yapılan yükseltmeler için)
  2. Xcode'dan "File > Packages > Update to En Son Paket Sürümlerine Güncelle"ye gidin.
  3. Yüklemenizi doğrulamak için Project Navigator'ın Paket Bağımlılıkları bölümüne giderek paketi ve sürümünü doğrulayın.

CocoaPods kullanılarak eklenen mevcut iOS bağımlılıkları için Yerler SDK'sını kaldırmak istiyorsanız şu adımları uygulayın:

  1. Xcode çalışma alanınızı kapatın. Terminali açın ve aşağıdaki komutu yürütün:
    sudo gem install cocoapods-deintegrate cocoapods-clean 
    pod deintegrate 
    pod cache clean --all
  2. Podfile, Podfile.resolved ve workspace Xcode'larını CocoaPods dışında bir amaçla kullanmıyorsanız kaldırın.

Manuel olarak yüklenmiş olan mevcut iOS için Yerler SDK'sını kaldırmak için şu adımları uygulayın:
  1. Xcode proje yapılandırma ayarlarınızdan Çerçeveler, Kitaplıklar ve Yerleştirilmiş İçerikler'i bulun. Aşağıdaki çerçeveyi kaldırmak için eksi işaretini(-) kullanın:
    • GooglePlaces.xcframework
  2. Xcode projenizin üst düzey dizininden GooglePlaces paketini kaldırın.

CocoaPods

iOS için Yerler SDK'sı, tüm Rehber özelliklerini içeren bir CocoaPod kapsülü GooglePlaces olarak sunulur.

CocoaPods, Swift ve Objective-C Cocoa projeleri için açık kaynaklı bir bağımlılık yöneticisidir. CocoaPods aracınız henüz yüklü değilse terminalde aşağıdaki komutu çalıştırarak macOS'e yükleyin. Ayrıntılı bilgi için CocoaPods Başlangıç kılavuzuna göz atın.

sudo gem install cocoapods

iOS için Yerler SDK'sına yönelik bir Podfile oluşturun ve bu SDK'yı ve bağımlılıklarını yüklemek için kullanın:

  1. Henüz bir Xcode projeniz yoksa şimdi bir proje oluşturun ve yerel makinenize kaydedin. iOS geliştirme konusunda daha yeniyseniz yeni proje oluşturun ve iOS uygulaması şablonunu seçin.
  2. Proje dizininizde Podfile adlı bir dosya oluşturun. Bu dosya projenizin bağımlılıklarını tanımlar.
  3. Podfile öğesini düzenleyin ve versions birlikte bağımlılıklarınızı ekleyin. Uygulamanızın hedef adını ve GooglePlaces kapsülünün adını belirten bir örneği burada bulabilirsiniz:
    source 'https://github.com/CocoaPods/Specs.git'
    
    platform :ios, '15.0'
    
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GooglePlaces', '8.3.0'
    end
    
    Her zaman en yeni sürümün yüklü olduğundan emin olmak için yeni bir sürüm olduğunu algılamak amacıyla pod outdated uygulamasını düzenli olarak çalıştırmayı unutmayın.
  4. Podfile dosyasını kaydedin.
  5. Bir terminal penceresi açıp Podfile içeren dizine gidin:

    cd <path-to-project>
  6. pod install komutunu çalıştırın. Bu işlem, Podfile içinde belirtilen API'leri ve bu API'lerin sahip olabileceği bağımlılıkları yükler.

    pod install
  7. Xcode'u kapatın ve ardından Xcode'u başlatmak için projenizin .xcworkspace dosyasını açın (çift tıklayın). Bu andan itibaren projeyi açmak için .xcworkspace dosyasını kullanmanız gerekir.

Mevcut bir projenin API'sini güncellemek için şu adımları izleyin:

  1. Bir terminal penceresi açın ve Podfile öğesini içeren proje dizinine gidin.
  2. pod update komutunu çalıştırın. Bu işlem, Podfile içinde belirtilen tüm API'leri en son sürüme günceller.

Manuel yükleme

Bu kılavuzda, iOS için Yerler SDK'sını içeren XCFramework'ü projenize manuel olarak nasıl ekleyeceğiniz ve Xcode'da derleme ayarlarınızı nasıl yapılandıracağınız gösterilmektedir. XCFramework, Apple Silicon kullanan makineler de dahil olmak üzere birden fazla platformda kullanabileceğiniz bir ikili pakettir.

  1. Aşağıdaki SDK ikili program ve kaynak dosyalarını indirin:
  2. XCFramework'e ve kaynaklara erişmek için dosyaları çıkarın.
  3. Xcode'u başlatın ve mevcut bir projeyi açın veya yeni proje oluşturun. iOS geliştirme konusunda daha yeniyseniz yeni proje oluşturun ve iOS uygulaması şablonunu seçin.
  4. Projenizden önceki sürümlerden tüm Haritalar paketlerini kaldırın.
  5. Genel sekmesini açın. Aşağıdaki XCFramework'ü projenize Çerçeveler, Kitaplıklar ve Yerleştirilmiş İçerikler bölümünden sürükleyin. Yerleştirme'yi seçtiğinizden emin olun:
    • GooglePlaces.xcframework
  6. İndirdiğiniz GooglePlacesResources'tan GooglePlaces.bundle simgesini sürükleyin
  7. GooglePlaces.bundle öğesini, indirdiğiniz GooglePlacesResources dosyasından Xcode projenizin üst düzey dizinine kopyalayın. İstendiğinde Öğeleri hedef grubun klasörüne kopyala'yı seçtiğinizden emin olun.
  8. Project Navigator'dan projenizi ve uygulamanızın hedefini seçin.
  9. Derleme Aşamaları sekmesini açın. Kitaplıklarla İkili Program arasında bağlantı oluşturma bölümüne aşağıdaki çerçeveleri ve kitaplıkları ekleyin:
    • CoreGraphics.framework
    • CoreLocation.framework
    • libc++.tbd
    • libz.tbd
    • QuartzCore.framework
    • UIKit.framework
  10. Belirli bir hedef yerine projenizi seçin ve Derleme Ayarları sekmesini açın. Bağlantı Oluşturma - Genel -> Diğer Bağlayıcı İşaretleri bölümünde, -ObjC öğesini "Hata ayıkla" ve "Serbest bırak" öğelerine ekleyin. Bu ayarlar görünmüyorsa Derleme Ayarları çubuğundaki filtreyi Temel yerine Tümü olarak değiştirin.

GooglePlacesSwift

GooglePlacesSwift (Önizleme) SDK'sını Swift Package Manager ve CocoaPods'u kullanarak veya manuel olarak yükleyebilirsiniz. Tüm işlemlerde yükleme adımları, aşağıdaki farklılıklarla birlikte iOS için Yerler SDK'sında açıklanan adımları yansıtır:

Örneğin, CocoaPods kullanıyorsanız düzenlenen Podfile görünümü şu şekilde görünür:

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. Adım: Apple Gizlilik Manifest dosyasını inceleyin

Apple, App Store'daki uygulamalar için uygulama gizlilik ayrıntılarını zorunlu kılar. Güncellemeler ve daha fazla bilgi için Apple App Store Gizlilik Ayrıntıları sayfasını ziyaret edin.

Apple Gizlilik Manifest dosyası, SDK'nın kaynak paketinde yer almaktadır. Gizlilik Manifest Dosyasının dahil edildiğini doğrulamak ve içeriğini incelemek için uygulamanızın arşivini oluşturup arşivden bir gizlilik raporu oluşturun.

4. Adım: API anahtarını uygulamanıza ekleyin

Aşağıdaki örneklerde YOUR_API_KEY öğesini kendi API anahtarınızla değiştirin.

Swift

API anahtarınızı AppDelegate.swift cihazınıza aşağıdaki şekilde ekleyin:

  • Aşağıdaki içe aktarma deyimini ekleyin:
    import GooglePlaces
  • YOUR_API_KEY ifadesini API anahtarınızla değiştirerek application(_:didFinishLaunchingWithOptions:) yönteminize aşağıdaki kodu ekleyin:
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")

Objective-C

API anahtarınızı AppDelegate.m cihazınıza aşağıdaki şekilde ekleyin:

  • Aşağıdaki içe aktarma deyimini ekleyin:
    @import GooglePlaces;
  • YOUR_API_KEY ifadesini API anahtarınızla değiştirerek application:didFinishLaunchingWithOptions: yönteminize aşağıdaki kodu ekleyin:
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

GooglePlacesSwift

API anahtarınızı AppDelegate.swift cihazınıza aşağıdaki şekilde ekleyin:

  • Aşağıdaki içe aktarma deyimini ekleyin:
    import GooglePlacesSwift
  • YOUR_API_KEY ifadesini API anahtarınızla değiştirerek application(_:didFinishLaunchingWithOptions:) yönteminize aşağıdaki kodu ekleyin:
    PlacesClient.shared.provideAPIKey("YOUR_API_KEY")

5. Adım: Kod yazmaya başlayın

Aşağıdaki kod örnekleri, geçerli yerin nasıl alınacağını gösterir.

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

Sonraki adımlar

Projeniz yapılandırıldıktan sonra örnek uygulamaları keşfedebilirsiniz.