Giriş
Aşağıda, Unity için Firebase SDK'sını kullanan Unity oyunlarında derleme ve oluşturma sürecinde hata ayıklama ile ilgili bir kılavuz verilmiştir. Bu dokümanda, oyununuzu yeni bir platform için yapılandırırken ve oluştururken veya bir güncellemeden sonra karşılaşabileceğiniz daha yaygın sorunların çoğunu nasıl araştırıp çözeceğiniz açıklanmaktadır. Bu hatalar, süreçte oluşabilecekleri sıraya göre düzenlenmiştir. Bunları sırayla inceleyin ve her biri çözüldükçe devam edin.
Bu belgenin yanı sıra daha fazla bilgi için Firebase for Unity SSS bölümüne bakın.
Play Modu derleme sorunları
Derleme sorunlarının ilk sınıfı, mobil derleme başlatmaya çalışmadan önce düzenleyicide test yaparken ortaya çıkabilir. Bu bölümde, Play Modu'ndan önce ve Play Modu sırasında oluşan tüm Firebase hataları ele alınır.
Unity başlatıldığında veya bağımlılıklarda, kodda ya da diğer öğelerde değişiklik algıladığında projeyi yeniden oluşturmaya çalışır. Proje o sırada derlenemezse düzenleyici, derleme hatalarını konsola kaydeder. Play Modu'na girmeye çalışırsanız Unity'nin All compiler errors have to be fixed before you can enter playmode!
yazan Scene sekmesinde bir hata pop-up'ı alırsınız.
Firebase ile ilgili derleme sorunlarında hata ayıklama
Eksik türler, sınıflar, yöntemler ve üyeler
Birçok Firebase sorunu, düzenleyicinin ve derleyicinin gerekli türleri, sınıfları, yöntemleri ve üyeleri bulamaması nedeniyle oluşur. Bu durumun yaygın belirtileri şunlardır:
The type or namespace name ‘<CLASS OR NAMESPACE NAME>' could not be found. Are you missing a using directive or an assembly reference?
The type or namespace name <TYPE OR NAMESPACE NAME> does not exist in the namespace ‘Firebase<.OPTIONAL NESTED NAMESPACE NAME PATH>' (are you missing an assembly reference?)
‘<CLASS NAME>' does not contain a definition for ‘<MEMBER VARIABLE OR METHOD NAME>'
Çözüm adımları:
Kodda Firebase sınıflarını veya yöntemlerini kullandığınız yerlerde, gerekli Firebase ürünleri için doğru
using
yönergelerini kullanarak bunları kullanılabilir hale getirdiğinizden emin olun.Uygun Firebase paketlerini içe aktardığınızı doğrulayın:
- Uygun paketleri içe aktarmak için:
- Firebase Unity SDK'yı
.unitypackage
s olarak ekleyin veya - Ek Unity yükleme seçenekleri bölümündeki alternatiflerden birini inceleyin ve uygulayın.
- Firebase Unity SDK'yı
- Projenizdeki ve EDM4U'daki her Firebase ürününün:
- Aynı sürümde olmalıdır.
- Yalnızca
.unitypackage
s olarak VEYA yalnızca Unity Paket Yöneticisi aracılığıyla yüklenmiş olmalıdır.
- Uygun paketleri içe aktarmak için:
Firebase Unity SDK'yı "10.0.0" sürümünden önce
.unitypackage
olarak içe aktardıysanız Firebase Unity SDK zip arşivinde hem .NET 3.x hem de .NET 4.x desteği için paketler bulunur. Projenize yalnızca uyumlu .NET Framework düzeyini eklediğinizden emin olun:- Unity Editor sürümleri ile .NET Frameworks düzeyleri arasındaki uyumluluk Firebase'i Unity projenize ekleme bölümünde ele alınmaktadır.
- Firebase paketlerinizi yanlış .NET Framework düzeyinde yanlışlıkla içe aktardıysanız veya
.unitypackage
yerine Ek Unity yükleme seçenekleri'nden birini kullanmaya geçmeniz gerekiyorsa en temiz yöntem , bu taşıma bölümünde belirtilen yöntemlerle tüm Firebase paketlerini kaldırıp ardından tüm Firebase paketlerini tekrar içe aktarmaktır.
Düzenleyicinizin projenizi yeniden oluşturduğunu ve oynatma girişimlerinizin projenizin en güncel durumunu yansıttığını kontrol edin:
- Varsayılan olarak, Unity düzenleyicisi, öğe veya yapılandırma değişiklikleri algılandığında yeniden oluşturulacak şekilde ayarlanır.
- Bu işlev devre dışı bırakılmış ve Unity Editor manuel yenileme/yeniden derleme olarak ayarlanmış olabilir. Bu durumu araştırın ve böyle bir durum söz konusuysa manuel yenilemeyi deneyin.
Oynatma modu çalışma zamanı hataları
Oyununuz başlatılıyorsa ancak çalışırken Firebase ile ilgili sorunlar yaşıyorsa şunları deneyin:
Mac OS'te "Güvenlik ve Gizlilik" bölümünde Firebase paketlerini onayladığınızdan emin olun.
Mac OS'te oyunu düzenleyicide başlatırken "FirebaseCppApp-<version>.bundle, geliştirici doğrulanamadığı için açılamıyor." şeklinde bir iletişim kutusu gösteriliyorsa Mac'in Güvenlik ve Gizlilik menüsünde söz konusu paket dosyasını onaylamanız gerekir.
Bunu yapmak için Apple simgesi > Sistem Tercihleri > Güvenlik ve Gizlilik'i tıklayın.
Güvenlik menüsünde, sayfanın yaklaşık yarısında ""FirebaseCppApp-<version>.bundle" was blocked from use because it is not from an identified developer." (FirebaseCppApp-<version>.bundle, tanımlanmış bir geliştiriciye ait olmadığı için kullanılamadı.) yazan bir bölüm bulunur.
Allow Anyway (Yine de İzin Ver) etiketli düğmeyi tıklayın.
Unity'ye dönüp Play'e (Oynat) tekrar basın.
Ardından, ilkine benzer bir uyarı görürsünüz:
Aç'ı tıkladığınızda programınız devam edebilir ve bu dosya hakkında tekrar soru sorulmaz.
Projenizin geçerli yapılandırma dosyaları içerdiğinden ve bu dosyaları kullandığından emin olun.
- File > Build Settings (Dosya > Derleme Ayarları) bölümünde derleme ayarlarınızın, hedeflediğiniz platforma (iOS veya Android) göre ayarlandığından emin olun. Daha kapsamlı bir tartışma için Unity Build Settings Documentation (Unity Derleme Ayarları Dokümanı) başlıklı makaleyi okuyun.
- Uygulamanızın yapılandırma dosyasını (Android için
google-services.json
veya iOS içinGoogleService-Info.plist
) indirin ve Firebase Console'da Proje Ayarları > Uygulamalarınız bölümünden hedef oluşturun: Bu dosyalar zaten varsa projenizde bunları silin ve en son sürümle değiştirin. Dosya adlarına "(1)" veya başka sayılar eklenmeden, yukarıda gösterildiği gibi yazıldığından emin olun. - Konsolda
Assets/StreamingAssets/
içindeki dosyalarla ilgili bir mesaj varsa Unity'nin dosyaları düzenleyemediğini belirten konsol mesajları olmadığından emin olun. Assets/StreamingAssets/google-services-desktop.json
oluşturulduğundan ve indirilen yapılandırma dosyasıyla eşleştiğinden emin olun.- Otomatik olarak oluşturulmamışsa ve
StreamingAssets/
yoksa diziniAssets
dizininde manuel olarak oluşturun. - Unity'nin
google-services-desktop.json
oluşturup oluşturmadığını kontrol edin.
- Otomatik olarak oluşturulmamışsa ve
Her Firebase ürününün ve EDM4U'nun yalnızca .unitypackage
veya Unity Paket Yöneticisi aracılığıyla yüklendiğinden emin olun.
- Firebase SDK'larının ve EDM4U'nun yalnızca bir yöntemle yüklendiğinden emin olmak için hem
Assets/
klasörünü hem de Unity Package Manager'ı kontrol edin. - Google Play gibi bazı Google tarafından geliştirilen eklentiler ve üçüncü taraf eklentileri EDM4U'ya bağlı olabilir. Bu eklentiler,
.unitypackage
veya Unity Paket Yöneticisi (UPM) paketlerinde EDM4U'yu içerebilir. Projenizde yalnızca bir EDM4U kopyası olduğundan emin olun. Herhangi bir UPM paketi EDM4U'ya bağlıysa Google APIs for Unity Archive page'de (Google APIs for Unity Arşiv sayfası) bulunan EDM4U'nun yalnızca UPM sürümlerini tutmanız en iyisidir.
Projenizdeki her Firebase ürününün aynı sürümde olduğundan emin olun.
- Firebase SDK'ları
.unitypackage
üzerinden yüklendiyseAssets/Firebase/Plugins/x86_64/
altındaki tümFirebaseCppApp
kitaplıklarının aynı sürümde olup olmadığını kontrol edin. - Firebase SDK'ları Unity Package Manager (UPM) aracılığıyla yüklendiyse Windows > Package Manager'ı açın, "Firebase"i arayın ve tüm Firebase paketlerinin aynı sürümde olduğundan emin olun.
- Projenizde Firebase SDK'larının farklı sürümleri varsa tüm Firebase SDK'larını tamamen kaldırmanızı ve ardından tüm Firebase SDK'larını aynı sürümlerle tekrar yüklemenizi öneririz. En temiz yöntem, bu taşıma bölümünde belirtilen yöntemlerle tüm Firebase paketlerini kaldırmaktır.
Çözümleyici ve hedef cihaz derleme hataları
Oyununuz düzenleyicide çalışıyorsa (seçtiğiniz uygun derleme hedefi için yapılandırılmışsa) bir sonraki adımda External Dependency Manager for Unity'nin (EDM4U) düzgün şekilde yapılandırıldığını ve çalıştığını doğrulayın.
EDM4U GitHub deposunda, bu sürecin bu bölümü için adım adım bir kılavuz bulunmaktadır. Devam etmeden önce bu kılavuzu inceleyip uygulamanız gerekir.
"Single Dex" sorunları ve küçültme (Cloud Firestore kullanılıyorsa zorunludur)
Android uygulaması oluştururken tek bir dex dosyasıyla ilgili bir derleme hatasıyla karşılaşabilirsiniz. Hata mesajı, projeniz Gradle derleme sistemini kullanacak şekilde yapılandırılmışsa aşağıdakine benzer:
Cannot fit requested classes in a single dex file.
.dex
dosyaları, Android uygulamaları için bir dizi sınıf tanımını ve bunlarla ilişkili ek verileri tutmak için kullanılır. Tek bir dex dosyası,65.536 yönteme referansla sınırlıdır. Projenizdeki tüm Android kitaplıklarındaki toplam yöntem sayısı bu sınırı aşarsa derlemeler başarısız olur.
Aşağıdaki iki adım sırayla uygulanabilir. Yalnızca küçültme sorunu çözmezse multidex'i etkinleştirin.
Küçültmeyi Etkinleştirme
Unity, 2017.2 sürümünde kullanılmayan kodları kaldırmak için sadeleştirme özelliğini kullanıma sundu. Bu özellik, tek bir dex dosyasında referans verilen toplam yöntem sayısını azaltabilir. * Bu seçeneği Player Settings > Android > Publishing Settings > Minify (Oynatıcı Ayarları > Android > Yayınlama Ayarları > Küçült) bölümünde bulabilirsiniz. * Seçenekler Unity'nin farklı sürümlerinde farklılık gösterebilir. Bu nedenle, resmi Unity belgelerine bakın.
Multidex'i etkinleştirme
Küçültme etkinleştirildikten sonra da referans verilen yöntemlerin sayısı sınırı aşmaya devam ederse başka bir seçenek olarak multidex
etkinleştirilebilir. Unity'de bunu yapmanın birden fazla yolu vardır:
- Player Settings (Oynatıcı Ayarları) bölümünde Custom Gradle Template (Özel Gradle Şablonu) etkinse
mainTemplate.gradle
öğesini değiştirin. - Dışa aktarılan projeyi oluşturmak için Android Studio'yu kullanıyorsanız modül düzeyindeki build.gradle dosyasını değiştirin.
Daha fazla bilgiyi Multidex kullanıcı kılavuzunda bulabilirsiniz.
Hedef cihaz çalışma zamanı hatalarını anlama ve düzeltme
Oyununuz düzenleyicide çalışıyor ve hedef cihazınız için oluşturulup yüklenebiliyorsa ancak çalışma zamanı hatalarıyla karşılaşıyorsanız cihazda oluşturulan günlükleri inceleyin ve araştırın.
Bu bölümde, günlüklerinizde olası hataları nasıl araştıracağınız ve yalnızca cihazda veya simülatörde çalışma zamanında oluşan bir hata açıklanmaktadır.
Android
Simülatör
- Emülatörünüzün konsolunda gösterilen günlükleri inceleyin veya Logcat penceresini görüntüleyin.
Cihaz
adb ve adb logcat ile bunların nasıl kullanılacağı hakkında bilgi edinin.
- Çıktıyı filtrelemek için komut satırı ortamınızın çeşitli araçlarını kullanabilirsiniz ancak alternatif olarak logcat'in seçeneklerini de inceleyebilirsiniz.
Temiz bir başlangıçla ADB oturumu başlatmanın basit yolu şudur:
adb logcat -c && adb logcat <OPTIONS>
Burada
OPTIONS
, çıkışı filtrelemek için komut satırına ilettiğiniz işaretlerdir.
Android Studio üzerinden Logcat'i kullanma
Android Studio üzerinden Logcat'i kullanırken ek arama araçları sayesinde verimli aramalar yapmak daha kolaydır.
iOS
Günlükleri İnceleme
Fiziksel bir cihaz çalıştırıyorsanız cihazı bilgisayarınıza bağlayın. Xcode'da lldb'yi inceleyin.
Swift ile İlgili Sorunlar
Swift'ten bahseden hata günlükleriyle karşılaşırsanız bunlarla ilgili olarak External Dependency Manager for Unity bölümüne bakın.
Sonraki adımlar
Oyununuzda Firebase ile ilgili derleme, oluşturma veya çalıştırma sorunları devam ediyorsa Unity için Firebase SDK sorunları sayfasını inceleyin ve yeni bir sorun kaydetmeyi düşünün. Ayrıca, ek seçenekler hakkında bilgi edinmek için Firebase destek sayfasını inceleyin.