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, işlemde ne zaman ortaya çıkabileceğine göre sıralanır. 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ı
İlk yapı sorunları sınıfı, mobil derleme başlatmaya çalışmadan önce düzenleyicide test yaparken 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ıklar, kod veya diğer öğelerde değişiklik algılandığında veya başladığında projeyi yeniden oluşturmaya çalışır. Bu süre sonunda 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üzenleyicinin ve derleyicinin gerekli türleri, sınıfları, yöntemleri ve üyeleri bulamamasından kaynaklanır. Bu durumun yaygın belirtileri aşağıdakilerin varyantları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ü için:
- Aynı sürümde olan
- Yalnızca
.unitypackage
olarak VEYA yalnızca Unity Paket Yöneticisi aracılığıyla yüklenmelidir.
- 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 eklediğinizden emin olun:- Unity Düzenleyici ve .NET Framework düzeylerinin sürümleri 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, varlık veya yapılandırma değişiklikleri algılandığında varsayılan olarak yeniden oluşturacak şekilde ayarlanmıştır.
- Bu işlev devre dışı bırakılmış ve Unity Editor manuel yenileme/yeniden derleme olarak ayarlanmış olabilir. Bu durumu inceleyin ve bu durumda manuel olarak yenilemeyi deneyin.
Oynatma Modu çalışma zamanı hataları
Oyununuz başlatılır ancak çalışırken Firebase ile ilgili sorunlarla karşılaşırsa aşağıdakileri deneyin:
"Güvenlik ve Gizlilik" Mac OS'de
Mac OS'te oyununuzu düzenleyicide başlattığınızda "FirebaseCppApp-<sürüm>.bundle Geliştirici doğrulanamadığı için açılamıyor." yazan bir iletişim kutusu gösterilirse 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", tanımlanmış bir geliştiriciye ait olmadığı için kullanımı engellendi" yazan bir bölüm vardır.
Yine de İzin Ver etiketli düğmeyi tıklayın.
Unity'e geri dönün ve tekrar Oynat'a basın.
Ardından, ilk uyarıya benzer bir uyarı görürsünüz:
Aç'a bastığınızda programınız devam edebilir ve bu dosyayla ilgili tekrar soru sorulmaz.
Projenizin geçerli yapılandırma dosyaları içerdiğinden ve bu dosyaları kullandığından emin olun
- Dosya > Derleme Ayarları bölümünde, derleme ayarlarınızın istediğiniz hedef (iOS veya Android) için ayarlandığından emin olun. 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. - Konsolda
Assets/StreamingAssets/
içindeki dosyalarla ilgili bir mesaj varsa Unity'nin bu dosyaları düzenleyemediğini belirten konsol mesajı olmadığından emin olun. Assets/StreamingAssets/google-services-desktop.json
dosyasının oluşturulduğundan ve indirilen yapılandırma dosyasıyla eşleştiğinden emin olun.- Otomatik olarak oluşturulmazsa ve
StreamingAssets/
mevcut değilseAssets
dizininde dizini manuel olarak oluşturun. - Unity'nin
google-services-desktop.json
dosyasını oluşturup oluşturmadığını kontrol edin.
- Otomatik olarak oluşturulmazsa ve
Her Firebase ürünü ve EDM4U'nun yalnızca .unitypackage
veya Unity Paket Yöneticisi aracılığıyla yüklendiğinde
- 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
veya Unity Paket Yöneticisi (UPM) paketlerine EDM4U ekleyebilir. Projenizde EDM4U'nun yalnızca bir kopyasının bulunduğundan emin olun. UPM paketleri EDM4U'ya bağlıysa en iyi seçenek, EDM4U'nun yalnızca UPM sürümlerini tutmaktır. 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üme sahip 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 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 yöntem, bu taşıma bölümünde belirtilen yöntemlerle her Firebase paketini 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 deposunda, işlemin bu bölümüyle ilgili adım adım bir kılavuz bulunur. Devam etmeden önce bu kılavuzu inceleyip 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ı için bir dizi sınıf tanımını ve bunlarla ilişkili ek verileri tutmak amacıyla kullanılır. Tek bir dex dosyası 65.536 yöntem referansıyla 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: Multidex'i yalnızca küçültme işlemi sorunu çözmezse etkinleştirin.
Kod sıkıştırmayı etkinleştirme
Unity, kullanılmayan kodu kaldırmak için 2017.2'de sadeleştirme özelliğini kullanıma sundu. Bu özellik, tek bir dex dosyasında referans verilen yöntemlerin toplam sayısını azaltabilir. * Bu seçeneği Oyuncu Ayarları > Android > Yayınlama Ayarları > Küçült. * Seçenekler Unity'nin farklı sürümlerinde farklılık gösterebilir. Bu nedenle, resmi Unity dokümanlarına bakın.
Multidex'i etkinleştirme
Küçükleştirme etkinleştirildikten sonra referans verilen yöntemlerin sayısı hâlâ sınırı aşıyorsa multidex
'ü etkinleştirmek de bir seçenektir. Unity'de bunu yapmanın birden fazla yolu vardır:
- Oynatıcı Ayarları bölümündeki Özel Gradle Şablonu etkinse
mainTemplate.gradle
dosyasını 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 fazla bilgiyi multidex kullanıcı kılavuzunda bulabilirsiniz.
Hedef cihaz çalışma zamanındaki hataları 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.
- Çıktıyı filtrelemek için komut satırı ortamınızın çeşitli araçlarını kullanabilirsiniz. Alternatif olarak logcat'in seçeneklerini de inceleyebilirsiniz.
ADB oturumunu sıfırdan başlatmanın basit bir yolu:
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, üretken aramalar oluşturmayı kolaylaştıran ek arama araçları mevcuttur.
iOS
Günlükleri İnceleme
Fiziksel bir cihaz kullanıyorsanız cihazı 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 olarak 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. Ayrıca, ek seçenekler hakkında bilgi edinmek için Firebase destek sayfasını inceleyin.