Xcode Derleme Kuralları

Çoğu Xcode proje türü, geliştiricilerin değişiklik yapmasına olanak tanıyan derleme kurallarını destekler mevcut dosya türlerinin nasıl oluşturulduğunu ve yeni dosya türlerinin nasıl oluşturulduğunu tanımlayabilirsiniz. J2ObjC komut dosyaları, kasıtlı olarak Xcode gibi derleme sistemlerine bağlanmak üzere tasarlanmıştır.

j2objc-sample-reversi projesi basit bir iOS oyununa Java kaynakları eklemeyi gösteren bir örnek.

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

Derleme Ayarlarını Güncelleme

  1. Project Navigator'da projeyi tıklayarak Project Editor'ı açın ve uygulama hedefi seçildi.
  2. Build Settings (Derleme Ayarları) sekmesini tıklayın.
  3. Diğer Bağlayıcı İşaretleri'ne -ljre_emul ekleyerek JRE emülasyon kitaplığını (jre_emul) bağlayın. Aşağıdaki gibi 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 konumuna ayarlayın. Bu release zip dosyasının açılmasıyla oluşturulan klasör olabilir. Kaynaktan derlediyseniz ve kök dosyanız j2objc ise j2objc/dist klasörü.
  6. Arama Yolları altında şu değişiklikleri yapın:
    • Çerçeve Çalışması Arama Yolları, ${J2OBJC_HOME}/frameworks ekler
    • Kitaplık Arama Yolları, her derleme yapılandırması için ${J2OBJC_HOME}/lib değerini ekler.
    • Kullanıcı Üstbilgisi Arama Yolları ${J2OBJC_HOME}/include ekler.
  7. J2OBJC_HOME araması yaparak ayarlarınızı onaylayın. Şuna benzer bir kod 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 Kök dizin, paketinin tamamını ekleyin.

    • Git kullanıyorsanız ve Java dosyalarınızı başka bir git projesinden almak isterseniz, projeyi Java ile izleyen bir alt modül ekleyin kaynaklar. Örneğin, Xcode projenizin (xcodeproj) ~/dev/MyProject içinde olduğunu, ardından muhtemelen Objective-C kaynağınızla başka bir MyProject dizinine sahip olursunuz. ~/dev/MyProject/MyProject dizini çalıştırma git submodule add git@github.com:user/javaproject - Java projeniz için kaynakla bir ~/dev/MyProject/MyProject/javaproject dizini oluşturun birlikte kullanabilirsiniz. Daha sonra bu klasörü Xcode projenize sürükleyebilirsiniz (Xcode, dosya sisteminizi yansıtan Xcode'un bulunduğu MyProject grubuna aittir). ${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__.

    • Şüpheye düşerseniz söz konusu grubu veya dizini sağ tıklayın ve Finder'da Göster'i seçerek dizini oluşturun ve mutlak yolu kullanın.

    • Örneğin, ~/myproject/src adlı dizinde foo.bar Java paketiniz varsa bu paketin Java dosyalarının ~/myproject/src/foo/bar/**.java içinde olması gerekir. Yani ~/myproject/src, projenizin kök dizinidir.

    • Java kaynak dosyaları Xcode projesinin dışındaysa, bir Terminal penceresinde listelemesini sağlar.

  2. Project Navigator'da projeyi tıklayarak Project Editor'ı açın ve uygulama hedefi seçildi.

  3. Build Rules (Kural Oluştur) sekmesini tıklayın.

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

  5. Yeni kuralın Process (İşlem) seçeneği için "Java source files"ı (Java kaynak dosyaları) seçin. Kullanılıyor seçeneği "Özel komut dosyası:" olmalıdır.

  6. Özel komut dosyası metin kutusuna şunu ekleyin ($source-root değerinin yerine koymayı 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 öğesini ekleyin.

İşiniz bittiğinde, ayarlar paneli şu şekilde görünmelidir (not: 10.2 itibarıyla Xcode hâlâ DERIVED_FILES_DIR değişkeni, geriye dönük uyumluluk için DERIVED_FILE_DIR ile aynıdır):

Xcode Derleme Kuralları

Ek Kitaplıkları Bağlama

Bağlantı derleme adımı (Xcode'un "İkili Program ile Kitaplıkları Bağla" derleme aşaması) J2ObjC'ye özel işaretler. Bunlar, uygulamanızın çevrilmiş Java sınıflarını nasıl kullandığına bağlı olarak değişir. Tam liste için Gerekli Bağlantı Ayarları'na bakın. Birkaç örneği Hangi ek kitaplıkların bağlanması gerektiğini gösteren örnekler:

  • java.util.zip paketini kullanmak için şunu ekleyerek libz.dylib kitaplığını bağlamanız gerekir: Diğer Bağlayıcı İşaretlerinize -ljre_zip ekleyin.
  • 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, hangi komut satırının daha ayrıntılı bir şekilde ifadesi yürütüldü. Aşağıda sık karşılaşılan birkaç hata verilmiştir:

  • 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 Java kaynak dosyalarınızın kök dizinidir.

  • "JreEmulation.h" dosya bulunamadı - Büyük olasılıkla sorun kötü bir Kullanıcı Üstbilgisi Araması Paths değerine ayarlanır. Derleme komutunda yolu içeren -I seçeneğini arayın; sizin için uygun görünüyorsa yolu (-I değil) kopyalayın ve bir terminal penceresinde, doğrulama için bu yol ile ls komutunu çalıştırın yazım hatası değildir.

  • "_IOSClass_FromClass", referans verilen kaynak: veya "_OBJCCLASS$_Java" - Kitaplık Arama Yolları yanlıştır veya Diğer Bağlayıcı İşaretleri'ni -ljre_emul hesabına ekleyin. Başka kitaplıklar da bağlamanız gerekebilir.

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

Hâlâ sorun yaşıyorsanız j2objc-tartışma grubuna gidin.