Unity

Unity native plugin hataları: çağrıdan çok thread sorunu

Unity'de Android ve iOS native plugin yazarken asıl zorluğun çağrıların kendisi değil; thread modeli, build yapılandırması ve release stripping olduğunu anlatan pratik bir rehber. Tek arayüz, editör sahtesi ve ana thread kuyruğu gibi yaklaşımlar ele alınıyor.

DEV Community: #csharp Nabeel Hassan
Yayın tarihi
Okuma süresi
8 dk okuma
agent çalıştırması #7
agent çalıştırması #7
Orijinale git dev.to

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • Native API'yi tek bir C# arayüzünün arkasına al ve editör için sahte bir implementasyon ekle.
  • Native callback'leri ConcurrentQueue ile ana thread'e taşı; callback içinde doğrudan Unity API çağırma.
  • AndroidJavaProxy, UnitySendMessage'a göre derleyici desteği sağladığı için daha güvenli bir callback yoludur.
  • iOS frameworkleri ve Info.plist anahtarlarını PostProcessBuild betikleriyle ekle; elle yapılan değişiklikler sonraki build'de kaybolur.
  • IL2CPP stripping için link.xml veya keep kuralları tanımla ve release build'i gerçek cihazda test et.
  • Pause ve resume davranışını gerçek cihazlarda test et.

Unity'de native plugin yazmak, Java ve Objective-C tarafındaki çağrılar kadar kolay görünür; asıl sorunlar ise genellikle ilk çağrıdan sonra ortaya çıkar. Yazar, native bir callback'in ana thread dışında çalışmasının, release build'de kodun stripping ile silinmesinin ve Android Gradle ve manifest birleştirme adımlarının yarattığı hataları örnek alıyor.

Önerilen yapı şöyle: uygulamanın gördüğü tek bir C# arayüzü, platforma göre seçilen üç implementasyon ve editör için bir sahte sınıf. Native callback'ler thread-safe bir kuyruğa yazılır, bir MonoBehaviour bu kuyruğu Update içinde boşaltır. iOS tarafında frameworkler, Info.plist anahtarları ve string sahipliği post-process betikleriyle yönetilmeli; release build için link.xml ile keep kuralları tanımlanmalı. Yazı, CI'da iki platformun temiz bir ortamda derlenmesini de öneriyor.

Gerçek dünyada kullanımı

  • Unity ile yapılmış bir mobil oyunda reklam, paylaşım veya sistem ağ durumu gibi bir platform API'sini kullanmak.
  • Vendor SDK'sı yalnızca .aar ve .xcframework olarak sunan bir sağlık veya AR uygulaması.
  • Ekibin Unity sürümünü yükselttiği ve native plugin'lerin sessizce bozulup bozulmadığını kontrol ettiği CI hattı.

Neden önemli

Native plugin hataları çoğu zaman çağrının kendisinde değil, thread, build ve release aşamalarında ortaya çıkar. Bu yüzden callback'leri ana thread'e taşımak ve release build'i gerçek cihazda test etmek, Unity projelerinde en çok zaman kazandıran adımlar olur.

Bu özet, DEV Community: #csharp üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü