Giriş
Aşağıda, Unity için Firebase SDK'sını kullanarak Unity oyunlarında derleme ve derleme işlemiyle ilgili hata ayıklama kılavuzu verilmiştir. Bu makalede, yeni bir platform için veya güncelleme sonrasında oyununuzu yapılandırıp geliştirirken karşılaşabileceğiniz yaygın sorunların çoğunu nasıl araştıracağınız ve çözeceğiniz açıklanmaktadır. Bu hatalar, süreçte oluşabilecek hataların sırasına göre düzenlenir. Uzmanlara sırayla danışarak her biri çözüme ulaştırıldığında devam edin.
Bu belgeye ek olarak, daha fazla bilgi için Unity için Firebase ile İlgili SSS bölümüne bakın.
Oynatma Modu derleme sorunları
Birinci sınıf derleme sorunları, mobil derleme başlatmaya çalışmadan önce düzenleyicide test yapılırken ortaya çıkabilir. Bu bölüm, Play Modu'ndan önce ve Play Modu sırasında oluşan tüm Firebase hatalarıyla ilgilidir.
Unity bağımlılıklarda, kodda veya diğer öğelerde değişiklik başlattığında ya da algıladığında projeyi yeniden oluşturmaya çalışır. Bu sırada proje derleme yapamazsa düzenleyici, derleme hatalarını konsola kaydeder. Play Modu'na girmeye çalıştığınızda ise Unity'nin Scene sekmesinde All compiler errors have to be fixed before you can enter playmode!
yazan bir hata pop-up'ı görürsünüz.
Firebase ile ilgili derleme sorunlarında hata ayıklama
Eksik türler, sınıflar, yöntemler ve üyeler
Firebase sorunlarının çoğu, düzenleyici ve derleyicinin gerekli türleri, sınıfları, yöntemleri ve üyeleri bulamamasından kaynaklanır. Bunun yaygın belirtileri aşağıdakilerin varyasyonlarıdı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 olan belirli Firebase ürünleri için doğru
using
yönergelerini kullanarak bunları kullanıma sunduğunuzdan 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 şu koşulları karşıladığından emin olun:
- Aynı sürümde olan
- Yalnızca Unity Paket Yöneticisi aracılığıyla VEYA özel olarak
.unitypackage
olarak yüklenir.
- Uygun paketleri içe aktarmak için:
Firebase Unity SDK'yı "10.0.0" sürümünden önce içe aktardıysanız
.unitypackage
s gibi Firebase Unity SDK zip arşivi, hem .NET 3.x hem de .NET 4.x desteği için paketler içerir. Projenize yalnızca uyumlu .NET Framework düzeyini dahil ettiğinizden emin olun:- Unity Editor sürümleri ve .NET Frameworks düzeyleri arasındaki uyumluluk, Firebase'i Unity projenize ekleme başlıklı makalede ele alınmıştır.
- Firebase paketlerinizi yanlışlıkla yanlış .NET Framework Düzeyinde içe aktardıysanız veya
.unitypackage
kullanımından Ek Unity yükleme seçeneklerinden birine geçmeniz gerekiyorsa en basit yöntem , bu taşıma bölümünde belirtilen yöntemler aracılığıyla tüm Firebase paketlerini kaldırıp tüm Firebase paketlerini yeniden içe aktarmaktır.
Düzenleyicinizin projenizi yeniden inşa ettiğinden ve oynama denemelerinizin projenizin en güncel durumunu yansıttığından emin olun:
- Unity düzenleyici varsayılan olarak, öğe veya yapılandırma değişiklikleri algılandığında yeniden oluşturacak şekilde ayarlanmıştır.
- Bu işlev devre dışı bırakılmış ve Unity Editor'ın manuel yenileme/yeniden derleme olarak ayarlanmış olması mümkündür. Bu sorunu inceleyin ve bu durumda manuel yenilemeyi deneyin.
Oynatma Modu çalışma zamanı hataları
Oyununuz başlıyor ancak çalışırken Firebase ile ilgili sorun yaşıyorsa aşağıdakileri deneyin:
"Güvenlik ve Gizlilik" Mac OS'de
Oyununuzu Mac OS'teki düzenleyicide başlatırken "FirebaseCppApp-<version>.bundle, geliştirici doğrulanamayacağı için açılamıyor." yazan bir iletişim kutusu gösterilirse, Mac'in Güvenlik ve Gizlilik menüsü.
Bunu yapmak için Apple Simgesi > Sistem Tercihleri > Güvenlik ve Gizlilik
Güvenlik menüsünde, sayfanın ortasında, ""FirebaseCppApp-<version>.bundle" yazan bir bölüm var tespit edilmiş bir geliştiriciye ait olmadığı için kullanımı engellendi."
Yine de İzin Ver etiketli düğmeyi tıklayın.
Unity'ye geri dönün ve Oynat'a tekrar basın.
Ardından, ilkine benzer bir uyarı görürsünüz:
Aç'a bastığınızda programınız devam edebilir; bu dosya bir daha sorulmayacaktır.
Projenizin geçerli yapılandırma dosyaları içerdiğinden ve bu dosyaları kullandığından emin olun.
- Derleme ayarlarınızın Dosya > Derleme Ayarları. Daha kapsamlı tartışma için Unity Derleme Ayarları Belgeleri'ni okuyun.
- Uygulamanızın yapılandırma dosyasını (Android için
google-services.json
veya iOS içinGoogleService-Info.plist
) indirin ve Firebase konsolunda Proje Ayarları > Uygulamalarınız: Bu dosyalar zaten mevcutsa projenizden silin ve onları en son sürümle değiştirin. Dosyaların, yukarıda "(1)" olmadan tam olarak yazıldığı şekilde yazıldığından emin olun ya da dosya adlarına ekli diğer sayılar. - Konsol,
Assets/StreamingAssets/
içindeki dosyalarla ilgili bir mesaj içeriyorsa Unity'nin dosyaları düzenleyemediğini belirten bir konsol mesajı olmadığından emin olun Assets/StreamingAssets/google-services-desktop.json
öğesinin oluşturulduğundan ve indirilen yapılandırma dosyasıyla eşleştiğinden emin olun.- Otomatik olarak oluşturulmadıysa 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şturulmadıysa 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 bu iki yöntemden yalnızca biriyle yüklendiğinden emin olmak için hem
Assets/
klasörünü hem de Unity Paket Yöneticisi'ni kontrol edin. - Google Play gibi Google tarafından geliştirilmiş bazı eklentiler ve üçüncü taraf eklentiler EDM4U'ya bağlı olabilir. Bu eklentiler,
.unitypackage
'ler veya Unity Package Manager (UPM) paketlerinde EDM4U'yu içerebilir. Projenizde yalnızca bir EDM4U kopyası bulunduğundan emin olun. Herhangi bir UPM paketi EDM4U'ya bağımlıysa yalnızca EDM4U'nun UPM sürümlerini saklamanız önerilir. Bu sürümleri Unity Arşivi için Google API'leri sayfasında bulabilirsiniz.
Projenizdeki her Firebase ürününün aynı sürümde olduğundan emin olun.
- Firebase SDK'ları
.unitypackage
aracılığıyla 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 Paket Yöneticisi (UPM) üzerinden yüklendiyse Windows'u açın > Package Manager, "Firebase" için arama yapın ve tüm Firebase paketlerinin aynı sürümde olduğundan emin olun.
- Projenizde Firebase SDK'larının farklı sürümleri bulunuyorsa tüm Firebase SDK'larını aynı sürümlerle tekrar yüklemeden önce tüm Firebase SDK'larını tamamen kaldırmanızı öneririz. En temiz yol, bu taşıma bölümünde belirtilen yöntemler aracılığıyla tüm Firebase paketlerini kaldırmaktır.
Çözümleyici ve hedef cihaz yapı hataları
Oyununuz düzenleyicide çalışıyorsa (seçtiğiniz uygun derleme hedefi için yapılandırılmışsa) bir sonraki adımda, Unity için Harici Bağımlılık Yöneticisi'nin (EDM4U) doğru şekilde yapılandırıldığını ve çalıştığını doğrulayın.
EDM4U GitHub deposu, işlemin bu kısmına yönelik adım adım açıklamalı bir kılavuz içerir. Bu kılavuz, devam etmeden önce incelemeniz ve uygulamanız gerekir.
"Tek Dex" sorunlar ve sadeleştirme (Cloud Firestore kullanılıyorsa zorunlu)
Android uygulaması oluştururken tek bir dex dosyasına sahip olmanız nedeniyle derleme hatasıyla karşılaşabilirsiniz. Hata mesajı aşağıdakine benzer (projeniz Gradle derleme sistemini kullanacak şekilde yapılandırılmışsa):
Cannot fit requested classes in a single dex file.
.dex
dosyaları, Android uygulamalarına yönelik 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öntemle sınırlıdır; projenizdeki tüm Android kitaplıklarındaki yöntemlerin toplam sayısı bu sınırı aşarsa derlemeler başarısız olur.
Aşağıdaki iki adım sırayla uygulanabilir: Multidex'i yalnızca küçültme işlemi sorunu çözmezse etkinleştirin.
Küçültmeyi Etkinleştir
Unity, kullanılmayan kodları çıkarmak için 2017.2'de Küçültme'yi kullanıma sundu. Bu sayede, tek bir dex dosyasındaki referans verilen yöntemlerin toplam sayısını azaltabiliyor. * Bu seçeneği Oyuncu Ayarları > Android > Yayınlama Ayarları > Küçült. * Seçenekler Unity'nin farklı sürümlerinde değişiklik gösterebilir. Bu nedenle resmi Unity dokümanlarına bakın.
Multidex'i etkinleştir
Küçültmeyi etkinleştirdikten sonra referans verilen yöntemlerin sayısı sınırı aşıyorsa başka bir seçenek de multidex
'i etkinleştirmektir. Unity'de bunu yapmanın birden çok yolu vardır:
- Oynatıcı Ayarları altındaki Özel Gradle Şablonu etkinse
mainTemplate.gradle
öğesini değiştirin. - Dışa aktarılan projeyi derlemek için Android Studio'yu kullanıyorsanız modül düzeyindeki build.gradle dosyasını değiştirin.
Daha ayrıntılı bilgiyi multidex kullanıcı kılavuzunda bulabilirsiniz.
Hedef cihaz çalışma zamanı hatalarını anlama ve düzeltme
Oyununuz düzenleyicide çalışıyorsa ve hedef cihazınız için geliştirilip 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üklerinizi olası hatalar ve yalnızca cihaz veya simülatörde çalışma zamanında ortaya çıkan bu tür bir hata için nasıl araştıracağınız açıklanmaktadır.
Android
Simülatör
- Emülatörünüzün konsolunda görüntülenen günlükleri inceleyin veya Logcat penceresini görüntüleyin.
Cihaz
adb, adb logcat ve bunların kullanımı hakkında bilgi edinin.
- Sonucu filtrelemek için komut satırı ortamınızın çeşitli araçlarını kullanabilirsiniz. Ancak alternatif olarak logcat'in seçeneklerine de bakabilirsiniz.
ADB oturumunu temiz bir sayfayla başlatmanın basit bir yolu şu şekildedir:
adb logcat -c && adb logcat <OPTIONS>
Burada
OPTIONS
, çıkışı filtrelemek için komut satırını ilettiğiniz işaretleri ifade eder.
Android Studio üzerinden Logcat'i kullanma
Logcat'i Android Studio üzerinden kullanırken verimli aramalar oluşturmayı kolaylaştıran ek arama araçları mevcuttur.
iOS
Günlükleri İnceleme
Fiziksel bir cihaz kullanıyorsanız bunu bilgisayarınıza bağlayın. Xcode'da lldb'yi inceleyin.
Swift Sorunları
Swift'ten bahseden hata günlükleriyle karşılaşırsanız bunlarla ilgili Unity için Harici Bağımlılık Yöneticisi bölümüne bakın.
Diğer Adımlar
Oyununuzda hâlâ Firebase ile ilgili derleme, derleme veya çalıştırma sorunları varsa Unity sorunları için Firebase SDK'sı sorunları sayfasını inceleyin ve yeni bir sorun kaydı oluşturun. Ek seçenekler hakkında bilgi edinmek için Firebase destek sayfasını da ziyaret edin.