Xcode: Apa itu target dan skema dalam bahasa biasa?

Jawaban:

309

Saya telah menambahkan di Workspace and Project juga!

  • Ruang Kerja - Berisi satu atau lebih proyek . Proyek-proyek ini biasanya berhubungan satu sama lain
  • Project - Berisi kode dan sumber daya, dll. (Anda akan terbiasa dengan ini!)
  • Target - Setiap proyek memiliki satu atau lebih target.
    • Setiap target mendefinisikan daftar pengaturan build untuk proyek itu
    • Setiap target juga mendefinisikan daftar kelas, sumber daya, skrip khusus, dll untuk disertakan / digunakan saat membangun.
    • Target biasanya digunakan untuk distribusi yang berbeda dari proyek yang sama.
      • Misalnya, proyek saya memiliki dua target, build "normal" dan build "office" yang memiliki fitur pengujian tambahan dan mungkin berisi beberapa trek musik latar belakang dan tombol untuk mengubah trek (seperti yang saat ini dilakukan).
      • Anda akan terbiasa menambahkan kelas dan sumber daya ke target default Anda saat Anda menambahkannya.
      • Anda dapat memilih kelas mana yang ditambahkan ke target yang mana.
        • Dalam contoh saya, saya memiliki kelas "DebugHandler" yang ditambahkan ke gedung kantor saya
      • Jika Anda menambahkan tes, ini juga menambah target baru.
  • Skema - Skema menentukan apa yang terjadi ketika Anda menekan "Build", "Test", "Profile", dll.
    • Biasanya, setiap target memiliki setidaknya satu skema
    • Anda dapat membuat sendiri skema untuk target Anda dengan masuk ke Skema> Kelola Skema dan menekan "Skema Autocreate Sekarang"
James Webster
sumber
Mari kita coba jika saya mengerti dengan benar ... Saya sedang memprogram aplikasi dan membuat dua target. Yang akan saya unggah ke app store dan yang saya kembangkan sudah versi selanjutnya dari aplikasi yang sama. Dan dalam skema saya membuat misalnya satu skema di kedua target untuk menjalankan dan satu skema untuk debug? Tetapi mengapa saya membutuhkan skema yang berbeda untuk itu? Saya tidak mengerti keuntungan dari BJ Homer ..
MichiZH
FWIW, saya tidak menggunakan skema berbeda untuk rilis dan debug kecuali saya menambahkan fitur debug tambahan seperti yang saya jelaskan dalam jawaban saya.
James Webster
2
Penjelasan hebat! ! !
Sagar Kalathil
6
apa maksud Anda bahwa gedung kantor Anda memiliki tombol musik di bagian bawah. Apakah aplikasi Anda yang sebenarnya memiliki kode tambahan yang hanya diaktifkan di kantor atau musik dijalankan di mac Anda. Maaf saya bingung
3366784
Jenis ini mendefinisikan hal-hal apa yang membentuk setiap konsep, tetapi bukan tujuan dari setiap item. Bagi saya, itulah yang ditanyakan OP.
O'Rooney
66

Sebuah target yang merupakan produk akhir yang diciptakan dengan menjalankan "membangun" di Xcode. Mungkin aplikasi, atau kerangka kerja, atau perpustakaan statis, atau bundel uji unit. Apa pun itu, umumnya terkait dengan satu item dalam folder "produk yang dibangun".

Sebuah skema merupakan koleksi target yang Anda bekerja dengan bersama-sama. Ini mendefinisikan target mana yang digunakan ketika Anda memilih berbagai tindakan dalam Xcode (Jalankan, Uji, Profil, dll.) Sering kali, Anda hanya akan memiliki satu skema, yang menggunakan target aplikasi utama untuk tindakan Jalankan, Arsip, dan Profil, dan target uji unit untuk aksi Tes. Jika Anda membuat dua aplikasi terkait, Anda mungkin memiliki dua skema yang menggunakan bundel pengujian unit yang sama tetapi target aplikasi yang berbeda.

Manfaat utama skema (diperkenalkan dalam Xcode 4) adalah skema memungkinkan Anda beralih antara menjalankan aplikasi dan pengujian unit tanpa harus mengaktifkan target yang dipilih.

BJ Homer
sumber
61

Saya orang yang visual, maka untuk menjelaskan konsep saya akan menggunakan diagram.

Ketika Anda memiliki banyak target, mereka dapat dicocokkan dengan Xcode's Run, Test, Profile tindakan, konsep ini mendefinisikan skema

masukkan deskripsi gambar di sini

Sebuah Target adalah versi Anda Project , target yaitu sedikit berbeda di kelas & sumber daya untuk digunakan selama waktu dibangun. Suatu proyek dapat memiliki beberapa pengaturan waktu dibangun untuk persyaratan distribusi yang terpisah.

Abhinav Singh
sumber
7
Diagram ini sepertinya salah. Skema harus dikaitkan dengan target tertentu, saya tidak melihat di mana dalam skema Anda dapat memiliki beberapa target.
Boon
6
@Boon Tidak, sembronoChoosy benar. Di editor skema, klik item 'bangun' di sebelah kiri. Di area sebelah kanan, klik '+' dan Anda dapat menambahkan lebih banyak target ke skema ini. Centang kotak yang diinginkan. Eksekusi target ini kemudian tersedia di tindakan lain (Jalankan, Profil, dll) di drop-down yang dapat dieksekusi.
occulus
Ini bagus tetapi tidak ada bagian konfigurasi build dari skema. Saya pikir skema sebagai kumpulan bagaimana tindakan (Jalankan, Uji, Profil) cocok dengan kombinasi target dan membangun konfigurasi (debug, rilis, qa, prod, dll).
Steve Moser
3

Workspace( .xcworkspace) - adalah wadah berganda projects. Itu dibuat sebagai langkah selanjutnya dari cross-project references[Tentang]

  • Workspaceberisi semua schemesdari yang disertakanprojects
  • Workspacemenangani semua implicit dependencies[Tentang]

Pengamatan:

  • Aman untuk bekerja dengan berbagai proyek di dalam yang sama workspacedan tidak menangkapCouldn't load Project.xcodeproj because it is already opened from another project or workspace
  • Cocoapods[Tentang] bekerja denganworkspacetempat membuat Podsproyek

Project( .xcodeproj) - Ini adalah wadah untuk targetsdan scheme. Ini mendefinisikan file kode, sumber daya ...

Target- PBXNativeTargetbagian. Menentukan serangkaian pengaturan bangunan tertentu yang menghasilkan:

  • Application target
  • Library and framework targets
  • Test
  • Aggregate[Tentang] . Misalnya digunakan untuk membuatUniversal frameworkatauUmbrella framework

Scheme- Project'skonfigurasi untuk tindakan dalam Xcode: menjalankan , menguji , profil , menganalisis dan mengarsipkan . Schemadapat dibagikan yang membantu Anda dalam CI, Carthage... dan berlokasi:

<project_path>/<project_name>.xcodeproj/xcshareddata/xcschemes

Dependency- Targetsbisa punya dependencies. Ketergantungan adalah tautan sumber terhadap. Ketergantungan ini dapat dihubungkan secara statis atau dinamis [Tentang] Ada dua jenis:

  • Explicit Dependency[Tentang] - Kode sumber ketergantungan yang terletak di proyek yang sama atau proyek bersarang
  • Implicit Dependency[Tentang] - Sumber / kode tertutup dari ketergantungan yang terletak di proyek yang merupakan bagian dari ruang kerja yang sama.

[Kosa kata]

yoAlex5
sumber