Farklı derleme şemaları için farklı GoogleService-Info.plist kullanın


114

Üretim için bir derleme şeması ve hazırlık için bir yapı (2 farklı paket tanımlayıcısıyla) kullanıyorum ve her şema için ayrı bir GoogleService-Info.plist kullanmaya çalışıyorum. GCM (ve goole login) başlatılırken kullanılacak plist dosyasını manuel olarak seçmenin bir yolu var mı? Veya plist kullanmaktan kaçınmak ve kurulumu manuel yapmak mümkün mü?

Teşekkürler!


3
İki farklı hedef mi kullanıyorsunuz? Ardından, farklı Kopya Paketi Kaynaklarında (derleme aşamalarındaki) farklı dosyalara (aynı ada sahip) sahip olun.
Alexander Zimin


Benim için mükemmel çalıştı stackoverflow.com/a/58709334/11537677
Knight Fighter

Yanıtlar:


146

Detaylar

Test edildi:

  • Xcode 9.2
  • Xcode 10.2 (10E125)
  • Xcode 11.0 (11A420a)

Çözüm

  1. Projede tüm Google.plist dosyalarınızı (farklı adlarla) içeren klasör oluşturun

görüntü açıklamasını buraya girin

  1. Çalıştırma komut dosyası ekleyin

görüntü açıklamasını buraya girin

PATH_TO_GOOGLE_PLISTS değerini değiştirmeyi unutmayın

Kod

PATH_TO_GOOGLE_PLISTS="${PROJECT_DIR}/SM2/Application/Firebase"

case "${CONFIGURATION}" in

   "Debug_Staging" | "AdHoc_Staging" )
        cp -r "$PATH_TO_GOOGLE_PLISTS/GoogleService-Info-dev.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" ;;

   "Debug_Poduction" | "AdHoc_Poduction" | "Distribution" | "Test_Poduction" )
        cp -r "$PATH_TO_GOOGLE_PLISTS/GoogleService-Info-prod.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" ;;

    *)
        ;;
esac

Şema adları oluşturun

görüntü açıklamasını buraya girin



1
Bu doğru cevap. Görünüşe göre Firebase Analytics, bu plist dosyasını, çağırsanız bile uygulamanızın kök dizininde gerektiriyor configure(options:). github.com/firebase/quickstart-ios/issues/5
Rob Bajorek

2
Bu çok güzel bir çözüm ve cevap olarak kabul edilmelidir.
Luke Brandon Farrell

1
Çok hafif ve akıllı, harika yanıt. Teşekkür ederim!
gabuchan

1
@smileBot atlayabilirsiniz -r, daha fazla bilgi: Linux / Unix'te cp komutu
Vasily Bodnarchuk

76

@inidona'nın cevabı benim için çalıştı. Swift'e çevirdikten sonra

Swift 2.3 için:

let filePath = NSBundle.mainBundle().pathForResource("GoogleService-Info", ofType: "plist")
let options = FIROptions(contentsOfFile: filePath)
FIRApp.configureWithOptions(options)

Swift 3.0 için:

let filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist")!
let options = FIROptions(contentsOfFile: filePath)
FIRApp.configure(with: options)

Swift 4.0 için:

let filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist")!
let options = FirebaseOptions(contentsOfFile: filePath)
FirebaseApp.configure(options: options!)

1
Yukarıdaki kodla, GoogleService-Info.plistfarklı konumlarda iki farklı dosya dosyanız var mı veya farklı adlara sahip iki dosya olabilir. Gerçek dosya adlarının ne olduğu ve nereye yerleştirildikleri konusunda biraz daha bilgi verebilir misiniz?
Varun Gupta

1
GoogleService-Info-dev.plist adında 2 dosyam var GoogleService-Info-live.plist bu kod, uygulamanıza varsayılan GoogleService-Info-dev.plist yerine çalışmak istediğiniz uygulama bilgi dosyasını söylemenize olanak tanır koşullu ifade kullanın veya dosyalarınız arasında geçiş yapmak için hedef bayrakları
Essam Elmasry

evet, AppDelegate'te
Essam Elmasry

1
bana 'Yapılandırma dosyası bulunamadı:' GoogleService-Info.plist ''
veriyor

Son belgede "Uyarı: Bu yaklaşım bazı durumlarda Analytics koleksiyonunu etkileyebilir" yazıyor firebase.google.com/docs/projects/multiprojects
Shingo Fukuyama

31

Bu makaleyi kontrol edin: https://medium.com/@brunolemos/how-to-setup-a-different-firebase-project-for-debug-and-release-environment-157b40512164

Xcode üzerinde, projenizin içinde iki dizin oluşturun: Debugve Release. Her GoogleService-Info.plistdosyayı oraya koyun .

Açık AppDelegate.m, iç didFinishLaunchingWithOptionsyöntemle kod koyun:

Amaç-C

  NSString *filePath;
#ifdef DEBUG
  NSLog(@"[FIREBASE] Development mode.");
  filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist" inDirectory:@"Debug"];
#else
  NSLog(@"[FIREBASE] Production mode.");
  filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist" inDirectory:@"Release"];
#endif

  FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath];
  [FIRApp configureWithOptions:options];

Swift 4

var filePath:String!
#if DEBUG
    print("[FIREBASE] Development mode.")
    filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist", inDirectory: "Debug")
#else
    print("[FIREBASE] Production mode.")
    filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist", inDirectory: "Release")
#endif

let options = FirebaseOptions.init(contentsOfFile: filePath)!
FirebaseApp.configure(options: options)

İkisini de sürükleyip bırakın Debug ve Releaseklasörler Build Phases > Copy Bundle Resources:

Derleme Aşamaları> Paket Kaynaklarını Kopyala

Bu kadar :)


1
Bu benim için çalıştı. Bu klasörleri referans olarak buraya eklemelisiniz, aksi takdirde gerçekten çökecektir. Teşekkürler!
Eironeia

Bu çözüm hala Analyticsçerçeve sorununu çözmüyor, hangisinin .plistyüklendiğini bilemezsiniz.
Gerçekten

@Bruno Lemos, Bir xcode projesinden iki Firebase projesini aynı anda kullanabilir miyim? Debug& Olarak değil Releasemi? Çünkü bunu yapmaya çalıştığımda, her zaman already configured crash.Firebase resmi belgesindeki en son talimatları izledim. Teşekkürler
Tulon

24

GoogleService-Info.plist'inizi dinamik olarak yapılandırmak ve farklı paket tanımlayıcıları için farklı adlar kullanmak için bu yolu kullanabileceğinizi düşünüyorum.

ciao Andreas

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"];
FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath];
[FIRApp configureWithOptions:options];

5
Yukarıdaki kodla, farklı konumlarda GoogleService-Info.plist dosyalarında iki farklı dosyanız var mı veya farklı adlara sahip iki dosya olabilir. Gerçek dosya adlarının ne olduğu ve nereye yerleştirildikleri konusunda biraz daha bilgi verebilir misiniz?
Varun Gupta

4
ConfigureWithOptions çağrısı sırasında günlükte bu hatayı alıyorum:Could not locate configuration file: 'GoogleService-Info.plist'
Babken Vardanyan

14

Google'ın kodda dosya adının GoogleServiceInfo.plist olmasını beklediğini fark ettim:

 * The method |configureWithError:| will read from the file GoogleServices-Info.plist bundled with
 * your app target for the keys to configure each individual API. To generate your
 * GoogleServices-Info.plist, please go to https://developers.google.com/mobile/add
 *
 * @see GGLContext (Analytics)
 * @see GGLContext (SignIn)
 */
@interface GGLContext : NSObject

anahtar kelime bu

uygulama hedefinizle birlikte paketlenmiş GoogleServices-Info.plist dosyasından okuyun

Ben de aynı dosyayı kopyalayıp farklı dizinlere koydum ve farklı hedeflere sınırlandırdım:

görüntü açıklamasını buraya girin


Teşekkürler, çok basit ve benim için çok iyi çalışıyor, Xcode 10.1, FirebaseCore (5.3.1)
infinity_coding7

Uygulama içindeki birden fazla Plist veya diğer dosyalardan sonra oluşan "Çoklu komut üretme" hatası nasıl önlenir
Wahab Khan Jadon

12

Eğer GoogleService-Info.plistfarklı bir adı vardır o analitik sonuçlarını etkileyecektir. Firebase sizi bu konuda uyaracaktır. https://github.com/firebase/firebase-ios-sdk/issues/230#issuecomment-327138180 . Bu nedenle, bu çalışma zamanı çözümlerinden hiçbiri en iyi analitik sonuçlarını sağlamaz.

Analytics ile uğraşmayacak iki çözüm var.

  1. Her şema için farklı bir hedef kullanın ve her versiyonunu GoogleService-Info.plistkendi hedefi ile ilişkilendirin . Bkz Hedef Üyeliğini de Dosya denetçisi Xcode sağ tarafta. Daha fazla bilgi için Bu soruya bakın .

  2. Doğru sürümü kopyalamak için bir yapı faz komut dosyası kullan ait GoogleService-Info.plistyapı dizine. Hazırlama ve üretim için farklı bir paket kimliği kullanıyorum. Bu, uygulamanın her iki sürümünün de paralel olarak yüklenmesini sağlıyor. Ayrıca, aşağıdaki komut dosyasıyla farklı GoogleService-Info.plistdosyalarımı paket kimliğiyle adlandırabileceğim anlamına gelir . Örneğin:

    • GoogleService-Info-com.example.app.plist
    • GoogleService-Info-com.example.app.staging.plist

Aşama Komut Dosyası Oluştur

PATH_TO_CONFIG=$SRCROOT/Config/GoogleService-Info-$PRODUCT_BUNDLE_IDENTIFIER.plist
FILENAME_IN_BUNDLE=GoogleService-Info.plist
BUILD_APP_DIR=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
echo cp $PATH_TO_CONFIG "$BUILD_APP_DIR/$FILENAME_IN_BUNDLE"
cp $PATH_TO_CONFIG "$BUILD_APP_DIR/$FILENAME_IN_BUNDLE"

Not: PATH_TO_CONFIGKurulumunuza uyacak şekilde değiştirmeniz gerekecektir.

Aşama Komut Dosyası Oluştur


1
Şimdiye kadarki en iyi çözüm bu. Firebase Crashlytics, dSYM dosyalarını yüklemek için yalnızca GoogleService-Info.plist dosyasını kullanabildiğinden, 'sembol yükle' komut dosyasını kullanarak bu çözüm mükemmel çalışıyor!
Alexey Galishnikov

7

Geç ama sanırım bu cevabı yeni geliştiricilere yardımcı olmak için göndermeliyim , sorunumu çözen çok iyi bir makale buldum ve söz veriyorum size de yardımcı olabilir :) Sorununuzu da çözen bu makaleye göz
atın .

1. Adım: Firebase geliştirme ortamınıza karşılık gelen GoogleService-Info.plist'i Dev dizinine
kopyalayın . Benzer şekilde, Prod dizinindeki Firebase üretim ortamınıza karşılık gelen GoogleService-Info.plist'i kopyalayın . "Gerekirse öğeleri kopyala" seçeneğinin ve " Hedeflere ekle" altındaki tüm hedeflerin işaretini kaldırdığınızdan emin olun .

(1. Adım resim bağlantısı (Daha az itibar nedeniyle resim ekleyemiyorum))

Adım 2:
Xcode proje gezgininde uygulama hedefini seçin. Üstteki Derleme Aşamaları sekmesine geçin, ardından Yeni Çalıştırma Komut Dosyası Aşaması ekleyin . Aşama "Firebase Ortamını Kurun GoogleService-Info.plist" veya bu etkiye sahip bir şey olarak adlandırın ve "Paket Kaynaklarını Kopyala" nın önüne yerleştirin adımının .

3. Adım:
Uygun GoogleService-Info.plist'i derleme yapılandırmasına göre uygulama paketine kopyalayacak bir kabuk komut dosyası uygulayın . Aşağıdaki kabuk komut dosyasını kopyalayıp yeni oluşturduğunuz çalıştırma komut dosyası aşamasına yapıştırın:

# Name of the resource we're selectively copying
GOOGLESERVICE_INFO_PLIST=GoogleService-Info.plist

# Get references to dev and prod versions of the GoogleService-Info.plist
# NOTE: These should only live on the file system and should NOT be part of the target (since we'll be adding them to the target manually)
GOOGLESERVICE_INFO_DEV=${PROJECT_DIR}/${TARGET_NAME}/Firebase/Dev/${GOOGLESERVICE_INFO_PLIST}
GOOGLESERVICE_INFO_PROD=${PROJECT_DIR}/${TARGET_NAME}/Firebase/Prod/${GOOGLESERVICE_INFO_PLIST}

# Make sure the dev version of GoogleService-Info.plist exists
echo "Looking for ${GOOGLESERVICE_INFO_PLIST} in ${GOOGLESERVICE_INFO_DEV}"
if [ ! -f $GOOGLESERVICE_INFO_DEV ]
then
    echo "No Development GoogleService-Info.plist found. Please ensure it's in the proper directory."
    exit 1
fi

# Make sure the prod version of GoogleService-Info.plist exists
echo "Looking for ${GOOGLESERVICE_INFO_PLIST} in ${GOOGLESERVICE_INFO_PROD}"
if [ ! -f $GOOGLESERVICE_INFO_PROD ]
then
    echo "No Production GoogleService-Info.plist found. Please ensure it's in the proper directory."
    exit 1
fi

# Get a reference to the destination location for the GoogleService-Info.plist
PLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
echo "Will copy ${GOOGLESERVICE_INFO_PLIST} to final destination: ${PLIST_DESTINATION}"

# Copy over the prod GoogleService-Info.plist for Release builds
if [ "${CONFIGURATION}" == "Release" ]
then
    echo "Using ${GOOGLESERVICE_INFO_PROD}"
    cp "${GOOGLESERVICE_INFO_PROD}" "${PLIST_DESTINATION}"
else
    echo "Using ${GOOGLESERVICE_INFO_DEV}"
    cp "${GOOGLESERVICE_INFO_DEV}" "${PLIST_DESTINATION}"
fi

6

Plist'i Firebase ile kullanmaktan kaçınamazsınız. Şimdiye kadar bulduğum en iyi çözüm, her iki dosyayı da eklemek ve adlandırmak olacaktır.

GoogleService-Info_stage.plist

ve

GoogleService-Info_prod.plist

Daha sonra kodunuzdan doğru dosyayı arayabilirsiniz. Dosyaya sahip değilseniz bu yol uygulamanızı kilitlemeyecektir. FILENAME dosyasını GoogleService-Info_prod veya GoogleService-Info_stage ile değiştirmeniz yeterlidir.

if let configFile = Bundle.main.path(forResource: "FILENAME", ofType: "plist"), 
    let options = FirebaseOptions(contentsOfFile: configFile)   
{
   FirebaseApp.configure(options: options)
}

Çalışma zamanı yapılandırmaları, belgelerde belirtildiği gibi analiz raporlama sorunlarına yol açabilir .
Alex

3

Bu benim çözümüm!

NSString *filePath;
if([self isProduction]){
    filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"];
}else{
    filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info-Sandbox" ofType:@"plist"];
}
FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath];
[FIRApp configureWithOptions:options];

Ve bu kadar!


3

Bu cevap, @abbood'un cevabından çok ilham alıyor , ancak nasıl yapılacağı konusunda biraz daha spesifik.

Hedeflerinizin her biri için, örneğin dev, stg, prod:

  • İlgili GoogleService-Info.plistdosyayı, hedefinizin adını taşıyan ayrı bir klasöre indirin
  • Xcode'da, uygulama klasörünüzü sağ tıklayın ve Add files to "your app" görüntü açıklamasını buraya girin
  • Hedefleri içeren klasörü seçin, seçildiğinden ve seçildiğinden GoogleService-Info.plistemin olun , yalnızca hedefler listesinde karşılık gelen hedefi kontrol edin ve düğmesine basın.Copy items if neededCreate groupsAdd görüntü açıklamasını buraya girin

Bu kadar. Şimdi bu yapıya benzer bir şeye sahip olmalısınız

görüntü açıklamasını buraya girin

Bir hedef oluşturduğunuzda, doğru olan GoogleService-Info.plistkullanılacaktır.


Benim için mükemmel çalıştı.
Şafak Gezer

2

Xamarin C # 'da bunu nasıl yapacağınız aşağıda açıklanmıştır:

string plistPath = NSBundle.MainBundle.PathForResource ("GoogleService-Info", "plist");
Options options = new Options (plistPath);
App.Configure (options);

Firebase ad alanını eklemeyi unutmayın:

using Firebase.Analytics;

1

GoogleService-Info.plist.İOS uygulamanızı Google Sign-In bileşenleriyle entegre etmeye başlamadan önce, bağımlılıkları indirmeniz ve Xcode projenizi yapılandırmanız gerektiğinden, kullanmadan başarmanın mümkün olmadığını düşünüyorum . Ve bu süreç , bunun GoogleService-Info.plistüzerinde büyük bir etkenin olduğunu gösteriyor.

Dolayısıyla, bu SO sorusundaki çözümler ve fikir , sorununuzda size yardımcı olabilir. Sadece GoogleService-Info plistuygulamanın dışına ana kopyasını 2 ayrı klasöre taşıdıktan sonra, her hedefte Yapı Aşamaları "Kopyala Dosyaları" kullanarak hedefe özgü plist'i Kaynaklar klasörüne içe aktarın.

Ayrıca bu SO sorusunu kontrol edin , size sorununuz hakkında daha fazla bilgi / fikir verebilir.


Burada hedef, aynı proje için farklı bir şema anlamına mı geliyor? Soruları okuduktan sonra, hedefin sadece aynı hedef için farklı bir inşa şeması değil, tamamen farklı bir inşa hedefi anlamına geldiğini anladım.
Varun Gupta

1
Peki ya her şema için farklı konfigürasyona sahip bir hedefiniz varsa?
evya

1

Xcode 9.2 ile, her iki hedefin de "googleServiceInfo.plist" olarak adlandırılmasına, ancak "Derleme Aşamaları", "Paket Kaynaklarını Kopyala" da belirtilen her hedef için dizin / dosya ile farklı dizinlere yerleştirilmesine ihtiyaç duydum.

Yukarıdakiler tercih ettiğim çözüm değildi, ancak daha önce @ inidona'nın cevabının satırları boyunca farklı dosya adları kullanmayı denemiştim, Swift 4'e dönüştürülmüştüm:

 let filePath = Bundle.main.path(forResource: "googleServiceInfo-Pro", ofType: "plist")!
 let options = FirebaseOptions(contentsOfFile: filePath)
 FirebaseApp.configure(options: options!)

Maalesef bu, Firebase hata mesajlarını düzeltmedi. Bu soruda: Firebase iOS SDK - GoogleService-Info.plist dışında bir yapılandırma dosyası kullanmak , orijinal göndericinin Firebase Kapsülünü güncelleyerek düzeltilmiş gibi göründüğü konsol uyarısı oluşturuyor , ancak bunu onaylamadım.


1

Bunu şu şekilde çözdüm:

    #if STAGING
        if let filePath = Bundle.main.path(forResource: "GoogleService-Info-Dev", ofType: "plist"),
            let options = FirebaseOptions(contentsOfFile: filePath) {
                FirebaseApp.configure(options: options)
        } else {
            fatalError("GoogleService-Info-Dev.plist is missing!")
        }
    #else
        if let filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist"),
            let options = FirebaseOptions(contentsOfFile: filePath) {
                FirebaseApp.configure(options: options)
        } else {
            fatalError("GoogleService-Info.plist is missing!")
        }
    #endif

1

Bazılarınız bir hatayla karşılaşırsa ve Xcode şikayet ederse

"Birden çok komut GoogleService-Info.plist oluşturur"

@Knight Fighter yanıtını uyguladıktan sonra şunları yapmak isteyebilirsiniz:

  • Derleme Aşamalarını Kontrol Edin > Paket Kaynaklarını Kopyala
  • Adlı dosyalar için filtre uygula GoogleService-Info.plist
  • Halihazırda komut dosyası aracılığıyla kopyalanmakta olduğundan, sahip olduğunuz tüm referansları kaldırın.

0

Bu yüzden aynı soruyu düşündüm ve daha önceki gönderilerden bazı fikirleri kullanarak, bazıları GoogleServices-Info.plisttüm uygulamalarda tüm ortamlar için uygulamalar yayınlıyor ve bu biraz endişe verici.

GoogleSerives-Info.plistDosyayı derleme zamanında kopyalayan genişletilebilir bir çözüm buldum . Dahası, bu yaklaşım, basit bir kuralı özelleştirme ve takip etme becerisiyle istediğiniz kadar ortamı destekleyerek yönetimi kolaylaştırır.

Birincisi ve en önemlisi üç ortama debugsahibim , (simülatörde çalıştırmak ve cihazda hata ayıklamak ve aktif olarak kodu kesmek stagingiçin ), (uçuşu test etmek için konuşlandırmak için) ve releaseüretim için.

Birinci adım, yapılandırmalarınızı oluşturmaktır:

görüntü açıklamasını buraya girin

"Ürün" -> "Şema" -> "Şemayı Düzenle" yi seçin ve gerektiği gibi çoğaltın / yenisini oluşturun. Her Şemayı gözden geçirin ve kategorilerin her birinde "Yapı Yapılandırması" açılır menüsünden ilgili yapılandırmasını atayın:

görüntü açıklamasını buraya girin

Bir adım daha ileri gidiyorum ve dağıtılması gereken Şemalar için "çalıştır" seçeneğinin işaretini kaldırıyorum, yani serbest bırakma ve aşamalandırma ve tersine hata ayıklama için "arşiv" işaretini kaldırıyorum. Senin için mantıklı olanı yapmalısın.

görüntü açıklamasını buraya girin

Derleme aşamaları altında aşağıdaki çalıştırma komut dosyasını ekleyin ( CONFIGURATIONS_FOLDERdeğişken istenildiği gibi özelleştirilebilir - sadece bir sonraki adımda aynı klasör adını kullandığınızdan emin olun):

# Get a reference to the folder which contains the configuration subfolders.
CONFIGURATIONS_FOLDER=Firebase
# Get a refernce to the filename of a 'GoogleService-Info.plist' file.
GOOGLESERVICE_INFO_PLIST=GoogleService-Info.plist
# Get a reference to the 'GoogleService-Info.plist' for the current configuration.
GOOGLESERVICE_INFO_PLIST_LOCATION=${PROJECT_DIR}/${TARGET_NAME}/${CONFIGURATIONS_FOLDER}/${CONFIGURATION}/${GOOGLESERVICE_INFO_PLIST}
# Check if 'GoogleService-Info.plist' file for current configuration exist.
if [ ! -f $GOOGLESERVICE_INFO_PLIST_LOCATION ]
then
  echo "No '${GOOGLESERVICE_INFO_PLIST}' file found for the configuration '${CONFIGURATION}' in the configuration directory '${PROJECT_DIR}/${TARGET_NAME}/${CONFIGURATIONS_FOLDER}/${CONFIGURATION}'."
  exit 1
fi
# Get a reference to the destination location for the GoogleService-Info.plist.
GOOGLESERVICE_INFO_PLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
# Copy 'GoogleService-Info.plist' for current configution to destination.
cp "${GOOGLESERVICE_INFO_PLIST_LOCATION}" "${GOOGLESERVICE_INFO_PLIST_DESTINATION}"
echo "Successfully coppied the '${GOOGLESERVICE_INFO_PLIST}' file for the '${CONFIGURATION}' configuration from '${GOOGLESERVICE_INFO_PLIST_LOCATION}' to '${GOOGLESERVICE_INFO_PLIST_DESTINATION}'."

görüntü açıklamasını buraya girin

Seçtiğiniz yapılandırma klasörünüzde (yukarıdaki örnekte "Firebase"), her bir yapılandırma için, kendi yapılandırmasıyla tam olarak aynı şekilde adlandırılan (büyük / küçük harfe duyarlı) klasörleri iç içe geçirin, bunların içine ilgili GoogleServices-Info.plistdosyaları şu şekilde yerleştirin:

görüntü açıklamasını buraya girin

Son GoogleServices-Info.plistolarak, projeye kazara bir kök seviyesinin eklenmediğinden emin olmak isterim, bu yüzden aşağıdakileri .gitignore dosyama ekliyorum.

# Ignore project level GoogleService-Info.plist
/[Project Name]/GoogleService-Info.plist

0

Diyelim ki ayarlanmış iki konfigürasyonumuz var developve production. İki şey yapmalısınız:

  1. Verilen konfigürasyona uymak için her iki plisteyi yeniden adlandırın:
  • GoogleService-Info-development.plist
  • GoogleService-Info-production.plist
  1. Seçili yapılandırma için doğru plist'i kopyalayan bir çalıştırma komut dosyası ekleyin:
FIREBASE_PLIST_PATH="${PROJECT_DIR}/App/Resources/Plists/GoogleService-Info-${CONFIGURATION}.plist"
echo "Firebase plist path: ${FIREBASE_PLIST_PATH}"
cp -r ${FIREBASE_PLIST_PATH} "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"

Çalıştırma komut dosyasının komut dosyasından önce konumlandırılması gerekir FirebaseCrashlytics.

Tek şema için daha önce yaptığınız gibi firebase'i başlatabilirsiniz: FirebaseApp.configure()

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.