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

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ı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 kitabından ö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'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ü için:
      • Aynı sürümde olan
      • Yalnızca .unitypackage olarak VEYA yalnızca Unity Paket Yöneticisi aracılığıyla yüklenmelidir.
  3. Firebase Unity SDK'yı "10.0.0" sürümünden önce içe aktardıysanız .unitypackages 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:

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

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 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: 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.
  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ğinde

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