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

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ı:
  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ıma sunduğunuzdan 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ızı doğrulayın:

    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 inceleyin ve uygulayın.
    2. 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.
  3. 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:

    1. 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.
    2. 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.
  4. Düzenleyicinizin projenizi yeniden oluşturduğundan ve oynatma denemelerinizin projenizin en güncel durumunu yansıttığından emin olun:

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

c35166e224cce720.png

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:

5ad9ddb0d3a52892.png

'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

  1. 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.
  2. Uygulamanızın yapılandırma dosyasını (Android için google-services.json veya iOS için GoogleService-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.
  3. Konsolda Assets/StreamingAssets/ içindeki dosyalarla ilgili bir mesaj varsa Unity'nin bu dosyaları düzenleyemediğini belirten 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/ mevcut değilse Assets dizininde dizini manuel olarak oluşturun.
    • Unity'nin google-services-desktop.json dosyasını oluşturup oluşturmadığını kontrol edin.

Her Firebase ürü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ğinde 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 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.

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