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

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.

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ı:
  1. 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.

    1. MechaHamster: Level Up with Firebase Edition örnekleri:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. Uygun Firebase paketlerini içe aktardığınızı doğrulayın:

    1. Uygun paketleri içe aktarmak için aşağıdakilerden birini yapın:
      1. Firebase Unity SDK'yı .unitypackages olarak ekleyin veya
      2. Ek Unity yükleme seçenekleri bölümündeki alternatiflerden birini inceleyin ve uygulayın.
    2. 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.
  3. Firebase Unity SDK'yı "10.0.0" sürümünden önce .unitypackage sn. olarak içe aktardıysanız 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:

    1. 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.
    2. 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.
  4. Düzenleyicinizin projenizi yeniden inşa ettiğinden ve oynama denemelerinizin projenizin en güncel durumunu yansıttığından emin olun:

    1. Unity düzenleyici varsayılan olarak, öğe veya yapılandırma değişiklikleri algılandığında yeniden oluşturacak şekilde ayarlanmıştır.
    2. 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:

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

Oyununuzu Mac OS'teki düzenleyicide başlatırken "FirebaseCppApp-<version>.bundle, geliştirici doğrulanmadığı için açılamıyor." yazan bir iletişim kutusu gösterilirse Mac'in Güvenlik ve Gizlilik menüsünde ilgili 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 ortasında, "tanımlanmış bir geliştiriciye ait olmadığı için"FirebaseCppApp-<version>.bundle" kullanımı engellendi" yazan bir bölüm var.

Yine de İzin Ver etiketli düğmeyi tıklayın.

c35166e224cce720.png

Unity'ye geri dönün ve Oynat'a tekrar basın.

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

5ad9ddb0d3a52892.png

'a bastığınızda programınız devam edebilir; bu dosya bir daha sorulmaz.

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

  1. Derleme ayarlarınızın Dosya > Derleme Ayarları bölümünde istediğiniz hedef (iOS veya Android) için ayarlandığından emin olun. Daha kapsamlı tartışma için Unity Derleme Ayarları Belgeleri'ni okuyun.
  2. Uygulamanızın yapılandırma dosyasını (Android için google-services.json veya iOS için GoogleService-Info.plist) indirin ve Firebase konsolunda Proje Ayarları > Uygulamalarınız bölümüne giderek hedef oluşturun: Bu dosyalara zaten sahipseniz bunları projenizde silin ve en son sürümle değiştirin. Dosyaların, yukarıda "(1)" veya dosya adlarına başka sayılar eklenmeden tam olarak yazıldığından emin olun.
  3. 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
  4. 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 dizini Assets dizininde manuel olarak oluşturun.
    • Unity'nin google-services-desktop.json 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 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.
  2. 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.

  1. Firebase SDK'ları .unitypackage aracılığıyla 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" araması yapı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 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) 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önteme referansta bulunabilir. 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.

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 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 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.