J2ObjC'nin arkasındaki motivasyon

J2ObjC ilk başta hayal kırıklığına uğradı. Birçok geliştirme ekibinin, web ürünlerini ve mobil ürünlerini işlevsellik açısından birbirinden ayırmadan hızlı bir şekilde yinelemeye çalışırken hayal kırıklığına uğradı. Google'ın istemci ürünlerinin birçoğu, web uygulamaları için GWT (yeni adıyla J2CL) ve Android mobil cihazlar için Android API kullanılarak oluşturuldu. Bu durum, JavaScript web uygulamaları olması veya Objective-C'de elle yazılmış olması gereken iPod/iPad uygulamalarından gelmiştir. GWT ve Android uygulamaları iş mantığı (UI olmayan) kodunu paylaşabilse de bu kodu iOS uygulamalarıyla paylaşmanın herhangi bir çözümü yoktu.

Bu sorunu çözmeye yönelik çeşitli yaklaşımlar araştırıldı. XMLVM çok umut verici görünüyordu ancak çok umut vericiydi, ancak o dönemde iOS çevirmen sayfası projenin askıya alındığını belirtmişti (artık tekrar etkin ve bu projeye iyi bir alternatiftir). Diğer çeviri araçları ise tek seferlik kod dönüşümü gerçekleştirdi ve çıktıları başarıyla oluşturulup çalıştırılmadan önce ek düzenleme gerektiriyordu.

Yeni Bir Proje Doğdu

Başından beri birçok mühendis, J2ObjC gibi bir çevirmenin mümkün olmadığını düşünüyordu. Tüm Java uygulama kodlarını doğru bir şekilde iOS'e çevirirken anlamını mükemmel bir şekilde koruyabilen bir araç oluşturmak aslında imkânsızdır. Bunun nedeni, iOS'in kullanıcı arayüzü tasarımla ilgili katı standartlara sahip olması ve kullanıcılarının, bir uygulamanın bu standartlara uymadığında oldukça farkında olmasıdır. Birinci sınıf, hızlı bir iOS kullanıcı arayüzüne sahip olmanın tek yolu, bu arayüzü Apple'ın iOS SDK çerçevelerini kullanarak Objective-C ile yazmaktır.

Ancak çoğu mühendis diferansiyel kalkülün sınırlarından öğrendiği gibi imkansız olana yaklaşmak çok faydalı olabilir. Bu nedenle, J2ObjC'nin başarılı olma şansını artıracak bir dizi sınır belirledik:

  • Yalnızca istemci taraflı geliştirmeleri destekleyin. Komut satırı araçları ve sunucu kodu teoride çevrilebilir ancak bu kullanım alanında J2ObjC tarafından ele alınmayan sorunlar yaşanabilir.
  • Yalnızca iş mantığı kodunu destekler ve kullanıcı arayüzü API'lerinden çok, uzak durun (eski haritaların köşelerinde olduğu gibi, "burada canavarlar var").
  • Daha genel bir temel değil, iOS Temel Çerçeve'yi gerektirir.
  • Apple'ın bellek yönetimi en iyi uygulamalarını uyguladıktan sonra kabul edilebilir performansı ve bellek kullanımını doğrulamak için Xcode'un Araçları'nı kullanın.
  • Öğelerin eksiksiz olması için gerekenlere değil, yalnızca uygulama geliştiricilerin ihtiyaç duyduğu şeylere odaklanın. Gerçek uygulamaların ihtiyaçları proje gereksinimlerini artırır.

Biz Faydalı Buluyoruz, Belki Siz de Yararlı Bulur

Bazı dahili projelerde Java iş mantığını iOS uygulamalarıyla paylaşma sorununu çözdüğü için J2ObjC'yi açık kaynaklı hale getirdik. Şu anda birçok ekip çevirmenden yararlanıyor ve biz de yeni işlevler eklemeye ve birçok hatayı düzeltmeye çalışıyoruz. Diğer mobil uygulama ekiplerinin bu uygulamayı denemelerini, nelerin işe yaradığını ve nelerin iyileştirilmesi gerektiğini bize bildirmelerini rica ediyoruz.

Proje üzerinde çalışmayı da yararlı buluyoruz. Bir Java çevirmeni için en zor iki görev şunlardır: 1) Java kaynağını doğru şekilde ayrıştırma, tür kontrolü ve çözümleme ve 2) uyumlu bir Java çalışma zamanı ortamı sağlamak. İlk görev javac derleyicisi tarafından iyi işlenir ve çalışma zamanı ortamı (birim testleri de dahil) Android libcore kitaplığına dayanır. Bu bize işin eğlenceli kısmını bırakır: soyut söz dizimi ağaçlarını değiştirmek ve hata ayıklaması kolay kaynak çıktısı oluşturmak. Java araçları veya derleyicileriyle ilgileniyorsanız bize katılın! Hâlâ daha yapılacak çok şey var, yardım almak isteriz.