Xcode Derleme Kuralları

Çoğu Xcode proje türü, geliştiricilerin mevcut dosya türlerinin oluşturulma şeklini değiştirmelerine ve yeni dosya türlerinin nasıl oluşturulacağını tanımlamalarına olanak tanıyan derleme kurallarını destekler. J2ObjC komut dosyaları özellikle Xcode gibi derleme sistemlerine bağlanmak için tasarlanmıştır.

j2objc-sample-reversi projesi, basit bir iOS oyununa Java kaynaklarının nasıl ekleneceğini gösteren bir örnektir.

Minimum derleme için derleme ayarlarının güncellenmesi ve ardından bir J2ObjC derleme kuralı eklenmesi gerekir.

Derleme Ayarlarını Güncelleme

  1. Proje Düzenleyici'yi açmak için Proje Gezgini'nde projeyi tıklayın ve uygulama hedefinin seçildiğinden emin olun.
  2. Derleme Ayarları sekmesini tıklayın.
  3. -ljre_emul öğesini Diğer Bağlayıcı İşaretleri'ne ekleyerek JRE emülasyon kitaplığını (jre_emul) bağlayın. Şöyle görünecektir: Xcode'da JRE Emülasyon Kitaplığını Bağlama
  4. + işaretini tıklayıp Kullanıcı Tanımlı Ayar Ekle'yi seçin.
  5. Ayara J2OBJC_HOME adını verin ve değerini J2ObjC'nin konumuna ayarlayın. Bu, sürüm zip dosyasının açılmasından kaynaklanan klasör veya kaynaktan derlediğiniz ve kök klasörünüz j2objc ise j2objc/dist klasörü olmalıdır.
  6. Arama Yolları altında aşağıdakileri değiştirin:
    • Çerçeve Arama Yolları şunu ekler: ${J2OBJC_HOME}/frameworks
    • Kitaplık Arama Yolları, ${J2OBJC_HOME}/lib değerini ekler (her derleme yapılandırması için).
    • Kullanıcı Başlığı Arama Yolları ${J2OBJC_HOME}/include değerini ekler.
  7. J2OBJC_HOME araması yaparak ayarlarınızı onaylayın. Şuna benzer bir sonuç görürsünüz: Xcode Derleme Ayarları

J2ObjC Derleme Kuralı Ekleme

  1. Java kaynak dosyalarınızın kök dizinini belirleyin. Bu dizine $source-root adını verin. Kök dizin, kaynak dosyalarınızın üst paketini içeren dizindir.

    • Git kullanıyorsanız ve Java dosyalarınızı başka bir git projesinden çekmek isterseniz Java kaynaklarınızla projeyi izleyen bir alt modül ekleyebilirsiniz. Örneğin, Xcode projenizin (xcodeproj) ~/dev/MyProject bölgesinde olduğunu ve Objective-C kaynağınızla birlikte başka bir MyProject dizininizin olduğunu varsayalım. ~/dev/MyProject/MyProject dizininde, Objective-C kaynaklarınızın hemen yanında Java projenizin kaynağını içeren bir ~/dev/MyProject/MyProject/javaproject dizini oluşturmak için git submodule add git@github.com:user/javaproject komutunu çalıştırın. Ardından bu klasörü, Xcode'un dosya sisteminizi yansıtan MyProject grubu altındaki Xcode projenize sürükleyebilirsiniz. ${PROJECT_DIR}/MyProject/javaproject/src, $source-root.

    • Java kaynaklarınız Xcode projenizdeki bir grup veya dizinde bulunuyorsa $source-root, ${PROJECT_DIR}/__group_or_directory_name__ şeklindedir.

    • Emin değilseniz ilgili grubu veya dizini sağ tıklayıp Finder'da Göster'i seçerek dizini görüntüleyin ve mutlak yolu kullanın.

    • Örneğin, ~/myproject/src adlı bir dizinde foo.bar Java paketiniz varsa bu paketin Java dosyaları ~/myproject/src/foo/bar/**.java konumunda olmalıdır. Bu, projenizin kök dizininin ~/myproject/src olduğu anlamına gelir.

    • Java kaynak dosyaları Xcode projesinin dışındaysa Terminal penceresinde listelenirken kullanılan tam yolu girin.

  2. Proje Düzenleyici'yi açmak için Proje Gezgini'nde projeyi tıklayın ve uygulama hedefinin seçildiğinden emin olun.

  3. Derleme Kuralları sekmesini tıklayın.

  4. Derleme kuralı eklemek için + işaretini tıklayın.

  5. Yeni kuralın İşleme seçeneği için "Java kaynak dosyaları"nı seçin. Kullanıyor seçeneği "Özel komut dosyası:" olmalıdır.

  6. Özel komut dosyası metin kutusuna aşağıdakileri ekleyin ($source-root yerine şunu eklemeyi unutmayın):

    if [ ! -f "${J2OBJC_HOME}/j2objc" ]; then echo "J2OBJC_HOME is not correctly defined, currently set to '${J2OBJC_HOME}'"; exit 1; fi;
    "${J2OBJC_HOME}/j2objc" -d ${DERIVED_FILE_DIR} -sourcepath "$source-root" --no-package-directories -g ${INPUT_FILE_PATH};
    
  7. Çıktı Dosyaları panelinde, + düğmesini tıklayın ve şunu ekleyin: ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h.

  8. + düğmesini tekrar tıklayın ve ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.m hesabını ekleyin.

İşlemi bitirdiğinizde, ayarlar paneli aşağıdaki gibi görünmelidir (not: 10.2'den itibaren Xcode, geriye dönük uyumluluk için DERIVED_FILES_DIR değişkenini yine DERIVED_FILE_DIR değişkeniyle aynı şekilde tanımlamaktadır):

Xcode Derleme Kuralları

Ek Kitaplıkları Bağlama

Bağlantı oluşturma adımı (Xcode'un "Link Binary with Libraries" derleme aşaması), uygulamanızın çevrilmiş Java sınıflarını nasıl kullandığına bağlı olarak değişen J2ObjC'ye özgü işaretler gerektirir. Tam liste için Gerekli Bağlantı Ayarları'na bakın. Bağlamanız gerekebilecek ek kitaplıklara birkaç örnek aşağıda verilmiştir:

  • java.util.zip paketini kullanmak için -ljre_zip öğesini Diğer Bağlayıcı İşaretleri'ne ekleyerek libz.dylib kitaplığını bağlamanız gerekir.
  • Güvenli karma oluşturma işlemi gerçekleştirmek için projenize Güvenlik Çerçevesi'ni eklemeniz gerekir.

Derleme Sorunlarında Hata Ayıklama

Xcode bu adımları uygulayarak bir derleme hatası bildirirse Sorun Gezgini'ni açın ve ayrıntıları incelemek için bir hatayı tıklayın. Bu komut, hangi komut satırı ifadesinin yürütüldüğüne dair ayrıntıları gösterir. Sık karşılaşılan birkaç hata aşağıda açıklanmıştır:

  • Sınıf çözümlenemiyor - Büyük olasılıkla, kullandığınız $source-path yanlıştı. Yürütülen komutta -sourcepath seçeneğini bulun ve bu seçeneğin, Java kaynak dosyalarınızın kök dizinini işaret ettiğinden emin olun.

  • "JreEmulation.h" dosyası bulunamadı - Büyük olasılıkla, sorunun bozuk Kullanıcı Üstbilgisi Arama Yolları değeri vardır. Derleme komutunda yol ile -I seçeneğini arayın. Doğru görünüyorsa yolu kopyalayın (-I'yi değil) ve bir terminal penceresinde yazım hatası olmadığını doğrulamak için bu yolla ls komutunu çalıştırın.

  • "_IOSClass_FromClass", referans kaynağı: veya "_OBJCCLASS$_Java" - Kitaplık Arama Yolları yanlıştır veya Diğer Bağlayıcı İşaretleri'ni -ljre_emul değerine ayarlayarak JRE emülasyon kitaplığını bağlamayı unuttunuz. Ek kitaplıklar bağlamanız da gerekebilir.

  • Tanımlanmamış simgeler: _iconv* - Gerekli iconv kitaplığında bağlantı.

Hâlâ sorun yaşıyorsanız j2objc-talk grubuna sorun.