Oyun Derleme, Yükleme ve Çalıştırma Sürecinde Hata Ayıklama

Giriş

Aşağıda, Unity için Firebase SDK'sını kullanan Unity oyunlarının derleme ve derleme sürecinde hata ayıklama ile ilgili bir kılavuz yer almaktadır. Bu makalede, oyununuzu yeni bir platform için yapılandırıp derlerken veya bir güncellemeden sonra karşılaşabileceğiniz en yaygın sorunların nasıl incelenip çözüleceği açıklanmaktadır. Bu hatalar, süreçte ortaya çıkma sırasına göre düzenlenmiştir. Bu adımları sırayla uygulayın ve her biri çözüldükçe devam edin.

Bu dokümanın yanı sıra daha fazla bilgi için Unity için Firebase SSS sayfasını inceleyin.

Oyun modu derleme sorunları

İlk derleme sorunları sınıfı, mobil derleme başlatmaya çalışmadan önce düzenleyicide test yaparken ortaya çıkabilir. Bu bölüm, Play Modu öncesinde ve sırasında ortaya çıkan tüm Firebase hatalarıyla ilgilidir.

Unity, bağımlılıklarda, kodda veya diğer öğelerde değişiklikler olduğunu algıladığında projeyi yeniden oluşturmaya çalışır. Proje o sırada derlenemezse düzenleyici, derleme hatalarını konsola kaydeder ve Play Modu'na girmeye çalışırsanız Unity'nin Scene sekmesinde All compiler errors have to be fixed before you can enter playmode! ifadesini içeren bir hata pop-up'ı gösterilir.

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ı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ı:
  1. 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ılabilir hale getirdiğinizden emin olun.

    1. MechaHamster: Level Up With Firebase Edition'dan örnekler:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. Uygun Firebase paketlerini içe aktardığınızdan emin olun:

    1. Uygun paketleri içe aktarmak için:
      1. Firebase Unity SDK'sını .unitypackage olarak ekleyin veya
      2. Ek Unity yükleme seçenekleri bölümündeki alternatiflerden birini inceleyip uygulayın.
    2. Projenizdeki her Firebase ürününün ve EDM4U'nun:
      • Aynı sürüme sahip olmalıdır.
      • Yalnızca .unitypackage olarak VEYA yalnızca Unity Paket Yöneticisi aracılığıyla yüklenmiş olmalıdır.
  3. Firebase Unity SDK'sını "10.0.0" sürümünden önce .unitypackage olarak içe aktardıysanız Firebase Unity SDK'sı 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:

    1. Unity Editor sürümleri ile .NET Framework seviyeleri arasındaki uyumluluk, Firebase'i Unity projenize ekleme başlıklı makalede ele alınmıştır.
    2. Firebase paketlerinizi yanlışlıkla yanlış .NET Framework düzeyinde içe aktardıysanız veya .unitypackage kullanmaktan Ek Unity yükleme seçeneklerinden birine geçmeniz gerekiyorsa en temiz yöntem , bu taşıma bölümünde belirtilen yöntemlerle her Firebase paketini kaldırmak ve ardından tüm Firebase paketlerini tekrar içe aktarmaktır.
  4. Düzenleyicinizin projenizi yeniden oluşturduğunu ve oynatma denemelerinizin projenizin en güncel durumunu yansıttığını kontrol edin:

    1. Varsayılan olarak Unity düzenleyici, öğe veya yapılandırma değişiklikleri algılandığında yeniden derlenecek şekilde ayarlanmıştır.
    2. 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 gerekirse manuel yenilemeyi deneyin.

Oyun Modu çalışma zamanı hataları

Oyununuz başlatılıyor ancak çalışırken Firebase ile ilgili sorunlar yaşanıyorsa aşağıdakileri deneyin:

Mac OS'te "Güvenlik ve Gizlilik" bölümünde Firebase paketlerini onayladığınızdan emin olun.

Mac OS'te oyununuzu düzenleyicide başlatırken "FirebaseCppApp-<sürüm>.bundle, geliştirici doğrulanamadığı için açılamıyor." şeklinde bir iletişim kutusu gösterilirse Mac'in Güvenlik ve Gizlilik menüsünde bu paket dosyasını onaylamanız gerekir.

Bunun için Apple simgesi > Sistem Tercihleri > Güvenlik ve Gizlilik'i tıklayın.

Güvenlik menüsünde, sayfanın yaklaşık ortasında ""FirebaseCppApp-<version>.bundle" tanımlanmış bir geliştiriciye ait olmadığı için kullanımı engellendi." ifadesinin yer aldığı bir bölüm bulunur.

Yine de izin ver etiketli düğmeyi tıklayın.

c35166e224cce720.png

Unity'ye geri dönün ve tekrar Play'e (Oynat) basın.

Ardından, ilkine benzer bir uyarı görürsünüz:

5ad9ddb0d3a52892.png

Aç'a bastığınızda programınız devam edebilir. Bu dosya hakkında size tekrar soru sorulmaz.

Projenizin geçerli yapılandırma dosyaları içerdiğinden ve bunları kullandığından emin olun.

  1. File > Build Settings (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ı bir açıklama için Unity Derleme Ayarları Belgeleri'ni okuyun.
  2. Firebase konsolunda Proje Ayarları > Uygulamalarınız bölümünden uygulamanızın yapılandırma dosyasını (Android için google-services.json veya iOS için GoogleService-Info.plist) ve derleme hedefini indirin: Bu dosyalar zaten varsa projenizden silin ve en son sürümle değiştirin. Dosya adlarının tam olarak yukarıda gösterildiği gibi yazıldığından ve dosya adlarına "(1)" veya başka sayıların eklenmediğinden emin olun.
  3. Konsolda Assets/StreamingAssets/ dizinindeki dosyalarla ilgili bir mesaj varsa Unity'nin bu dizindeki dosyaları düzenleyemediğini belirten bir konsol mesajı olmadığından emin olun.
  4. 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/ yoksa Assets dizininde manuel olarak oluşturun.
    • Unity'nin google-services-desktop.json dosyasını oluşturup oluşturmadığını kontrol edin.

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.

  1. 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 Paket Yöneticisi'ni kontrol edin.
  2. Google Play gibi bazı Google tarafından geliştirilen eklentiler ve üçüncü taraf eklentiler EDM4U'ya bağlı olabilir. Bu eklentiler, .unitypackage'lerinde veya Unity Paket Yöneticisi (UPM) paketlerinde EDM4U'yu içerebilir. Projenizde EDM4U'nun yalnızca bir kopyası olduğundan emin olun. EDM4U'ya bağlı UPM paketleri varsa EDM4U'nun yalnızca UPM sürümlerini tutmanı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.

  1. Firebase SDK'ları .unitypackage üzerinden yüklendiyse Assets/Firebase/Plugins/x86_64/ altındaki tüm FirebaseCppApp kitaplıklarının aynı sürümde olup olmadığını kontrol edin.
  2. 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.
  3. 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öntemleri kullanarak 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ığını ve çalıştığını doğrulayın.

EDM4U GitHub deposunda, sürecin bu bölümü için adım adım açıklamalı 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ıyla 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önteme referans vermekle sınırlıdır. Projenizdeki tüm Android kitaplıklarından gelen 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 sadeleştirme sorunu çözmezse etkinleştirin.

Sadeleştirmeyi 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 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 değişiklik gösterebilir. Bu nedenle resmi Unity belgelerine bakın.

Multidex'i etkinleştirme

Sadeleştirmeyi etkinleştirdikten sonra referans verilen yöntemlerin sayısı hâlâ sınırı aşıyorsa multidex seçeneğini etkinleştirebilirsiniz. Unity'de bunu yapmanın birden fazla yolu vardır:

  • Player Settings (Oyuncu Ayarları) bölümünde Custom Gradle Template (Ö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ı rehberinde bulabilirsiniz.

Hedef cihaz çalışma zamanı hatalarını anlama ve düzeltme

Oyununuz düzenleyicide çalışıyor, hedef cihazınız için derlenip yüklenebiliyor 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ın nasıl inceleneceği ve yalnızca cihazda veya simülatörde çalışma zamanında ortaya çıkan 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.

  • Çıkışı filtrelemek için komut satırı ortamınızın çeşitli araçlarını kullanabilirsiniz ancak alternatif olarak logcat'in seçeneklerine de göz atabilirsiniz.
  • ADB oturumunu temiz bir şekilde başlatmanın basit bir 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

Logcat'i Android Studio üzerinden kullanırken verimli aramalar yapmayı kolaylaştıran ek arama araçları kullanılabilir.

iOS

Günlükleri İnceleme

Fiziksel bir cihaz kullanıyorsanız cihazı bilgisayarınıza bağlayın. Xcode'da lldb'yi inceleyin.

Swift ile İlgili Sorunlar

Swift ile ilgili hata günlükleriyle karşılaşırsanız Unity için Harici Bağımlılık Yöneticisi bölümüne göz atı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 bildirmeyi düşünün. Diğer seçenekler hakkında bilgi edinmek için Firebase destek sayfasını da inceleyebilirsiniz.