Giriş
Aşağıda, Unity için Firebase SDK'sını kullanan Unity oyunlarının derleme ve oluşturma sürecinde hata ayıklamayla ilgili bir kılavuz verilmiştir. Bu makalede, oyununuzu yeni bir platform için yapılandırırken ve oluştururken ya da bir güncellemeden sonra karşılaşabileceğiniz yaygın sorunların çoğunun nasıl araştırılacağı ve çözüleceği açıklanmaktadır. Bu hatalar, işlemde ne zaman ortaya çıkabileceğine göre sıralanır. Bunları sırayla inceleyin ve her biri çözüldükçe devam edin.
Daha fazla bilgi için bu dokümana ek olarak Unity için Firebase SSS sayfasına da göz atın.
Oynatma modu derleme sorunları
İlk sınıf derleme sorunları, mobil derleme başlatmaya çalışmadan önce düzenleyicide test yaparken ortaya çıkabilir. Bu bölüm, Oynatma Modu'ndan önce ve Oynatma Modu sırasında gerçekleşen 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. Proje o anda derlenemezse derleme hataları, düzenleyici tarafından konsola kaydedilir ve Oynat moduna girmeye çalıştığınızda Unity'nin Sahne 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ızda, gerekli 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'sını
.unitypackage
olarak ekleyin veya - Ek Unity yükleme seçenekleri bölümündeki alternatiflerden birini inceleyin ve uygulayın.
- Firebase Unity SDK'sını
- Projenizdeki ve EDM4U'daki her Firebase ürünü için:
- Aynı sürümde olmalıdır.
- 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'sını "10.0.0" sürümünden önceki bir sürümde
.unitypackage
olarak içe aktardıysanız Firebase Unity SDK'sı 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
'leri kullanmayı ek Unity yükleme seçeneklerinden birine geçirmek istiyorsanız en temiz yöntem , bu taşıma bölümünde belirtilen yöntemlerle her Firebase paketini kaldırıp ardından tüm Firebase paketlerini yeniden içe aktarmaktır.
Düzenleyicinizin projenizi yeniden oluşturduğundan ve oynatma 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 Düzenleyici 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:
Mac OS'teki "Güvenlik ve Gizlilik" bölümünde Firebase paketlerini onayladığınızdan emin olun
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 izin 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 ayrıntılı bir tartışma için Unity Derleme Ayarları Dokümanlarını okuyun.
- Uygulamanızın yapılandırma dosyasını (Android için
google-services.json
veya iOS içinGoogleService-Info.plist
) ve Proje Ayarları > Uygulamalarınız bölümündeki Firebase konsolundan derleme hedefini indirin: Bu dosyalarınız varsa projenizde silin ve en son sürümle değiştirin. Dosya adlarına "(1)" veya başka sayılar eklenmeden dosyaların tam olarak yukarıda gösterildiği gibi yazıldığından emin olun. - 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ğinden emin olun.
- Firebase SDK'larının ve EDM4U'nun yalnızca bir yöntemle yüklendiğinde emin olmak için hem
Assets/
klasörünü hem de Unity Paket Yöneticisi'ni 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) 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) aracılığıyla yüklendiyse Windows > Paket Yöneticisi'ni 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 bu kez aynı sürümlerle tekrar yüklemenizi ö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 derleme hataları
Oyununuz düzenleyicide çalışıyorsa (seçtiğiniz uygun derleme hedefi için yapılandırılmışsa) Unity için Harici Bağımlılık Yöneticisi'nin (EDM4U) düzgün şekilde yapılandırıldığından ve çalıştığından emin olun.
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 kod küçültme (Cloud Firestore kullanılıyorsa zorunlu)
Android uygulaması oluştururken tek bir dex dosyasına sahip olmakla ilgili bir 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. Çoklu dex'i yalnızca kod küçültme 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çenek Oynatıcı Ayarları > Android > Yayınlama Ayarları > Küçük Yap bölümünde bulunabilir. * 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üçü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 derlenip yüklenebiliyorsa ancak çalışma zamanında hatalarla karşılaşıyorsanız cihazınızda oluşturulan günlükleri inceleyin.
Bu bölümde, günlüklerinizi olası hatalar açısından nasıl inceleyeceğiniz ve yalnızca cihazda veya simülatörde çalışma zamanında ortaya çıkan bu tür bir hata ayrıntılı olarak 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. 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 dosyasını 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.
Sonraki adımlar
Oyununuzda Firebase ile ilgili derleme, oluşturma veya çalıştırma sorunları devam ediyorsa Unity için Firebase SDK'sı sorunları sayfasını inceleyin ve yeni bir sorun gönderin. Ayrıca, ek seçenekler hakkında bilgi edinmek için Firebase destek sayfasını inceleyin.