Saya memiliki masalah keingintahuan.
Saya memiliki proyek yang telah saya kerjakan dan selalu dibangun dari XCode IDE, dan itu bekerja dengan baik. Sekarang saya menyiapkan Bamboo untuk membangun proyek dan dengan demikian saya membangunnya dari baris perintah.
Masalahnya adalah, jika saya memeriksa kode saya dari GIT dan kemudian menggunakan xcodebuild untuk membangunnya, dikatakan bahwa skema tidak dapat ditemukan, tetapi jika saya membuka proyek, itu membangun dan jika saya kemudian mencoba membangunnya lagi dari baris perintah dengan perintah yang sama, itu berhasil.
Keajaiban apa yang dilakukan XCode ketika saya membuka proyek atau apakah saya melakukan sesuatu yang bodoh, mungkin mengecualikan file di .gitignore yang seharusnya tidak saya lakukan?
sumber
Jawaban:
Anda pasti berada di jalur yang benar sehubungan dengan file .xcscheme - Saya mengalami masalah ini muncul saat menyiapkan proyek saya sendiri!
Untuk anak cucu, atau setidaknya siapa pun yang sampai di sini dari pencarian, berikut adalah dua versi dari hal-hal - versi "Saya sibuk, jadi tolong fakta-fakta saja" dan diskusi dan alasan yang lebih terlibat. Kedua versi ini menganggap Anda mencoba membangun dari file Workspace; jika Anda tidak maka saya mohon maaf karena ini sebagian besar berlaku untuk proyek berbasis ruang kerja.
Versi 'Fix-it' yang kental
Akar penyebabnya adalah bahwa perilaku default Skema adalah menjaga skema 'pribadi' hingga secara khusus ditandai sebagai dibagikan. Dalam kasus build yang dimulai dengan command line, Xcode UI tidak pernah berjalan dan alat xcoderun tidak memiliki cache Skema sendiri untuk digunakan. Tujuannya adalah untuk menghasilkan, membagikan, dan menjalankan skema yang Anda inginkan untuk dijalankan oleh Bamboo:
Diskusi dan Dasar Pemikiran yang Lebih Dalam
Xcode 4 memperkenalkan Ruang Kerja dan Skema sebagai cara untuk membantu mencoba dan menjinakkan beberapa kekacauan yang melekat dalam menangani mekanisme proyek Xcode terkait kabel, membangun target, dan membangun konfigurasi bersama-sama. Ruang kerja itu sendiri memiliki kumpulan data konfigurasinya sendiri yang mendeskripsikan setiap 'kotak' kecil dari data yang dikandungnya dan bertindak sebagai kerangka untuk melampirkan file .xcodeproj dan sekumpulan data konfigurasi bersama yang dicerminkan ke setiap mesin pengembang atau sistem CI . Ini adalah kekuatan dan kelemahan Workspaces - ada 1) banyak cara di mana seseorang dapat mengkonfigurasi 100% dengan benar, tetapi dimasukkan ke dalam penampung yang salah atau 2) dimasukkan ke dalam penampung yang benar, tetapi dikonfigurasi dengan tidak tepat sehingga merender data tidak dapat diakses oleh bagian lain dari sistem!
Perilaku default skema Xcode 4 adalah secara otomatis menghasilkan skema baru saat proyek ditambahkan ke file Workspace. Anda yang telah menambahkan beberapa file .xcodeproj mungkin telah memperhatikan bahwa daftar skema Anda dengan cepat menjadi sulit diatur terutama saat file proyek ditambahkan, kemudian dihapus, dan kemudian dibaca kembali ke ruang kerja yang sama. Semua skema, dibuat secara otomatis atau dibuat secara manual, defaultnya adalah skema 'pribadi' yang hanya terlihat oleh pengguna saat ini bahkan ketika file .xcuserdata dijalankan dengan data dan konfigurasi proyek. Ini adalah akar penyebab dari kesalahan build samar Laporan Bamboo dari xcodebuild - Karena Bamboo mengoperasikan build melalui baris perintah dan bukan UI Xcode, ini tidak memiliki kesempatan untuk Skema untuk dibuat secara otomatis dan hanya bergantung pada yang ditentukan di ruang kerja itu sendiri.
xcodebuild pergi mencari file <'scheme' Parameter Value> .xcscheme yang ada di <'workspace' Parameter Value> / xcshareddata / xcschemes.
Jelas ada banyak cara di mana seseorang dapat mengonfigurasi Bamboo dan ruang kerja, jadi perlu diingat bahwa konfigurasi unik Anda mungkin tidak memetakan 100% ke apa yang disajikan di sini. Poin utama:
Kotak 'Bersama' sudah dicentang ... sekarang apa?
Saya mengalami masalah yang sama di instance Bamboo saya sendiri; ternyata skema yang dilakukan di repositori saya sudah usang dan versi terbaru dari alat baris perintah tidak menanganinya dengan baik. Karena ini ada sebelumnya, saya melihat melalui pengaturan untuk memastikan tidak ada sesuatu yang sangat khusus tentang skema, menghapus dan membuat ulang skema memastikan bahwa saya menandainya sebagai 'Dibagikan', dan memasukkan kembali file .xcscheme baru ke gudang.
Jika semuanya terlihat baik dan membangunnya kembali tidak menyelesaikan masalah, periksa kembali pengaturan kontainer - sangat mudah untuk memasang skema itu ke kontainer yang salah dalam hierarki!
sumber
Debug masalah seperti ini:
atau jika Anda menggunakan ruang kerja (mis. dengan pod)
Jika skema Anda tidak terdaftar perbaiki seperti ini:
sumber
xcodebuild -list
... terima kasih!Sebagian besar jawaban menyarankan Anda untuk membuat skema Anda dibagikan menggunakan Xcode, lalu lakukan perubahan pada repo. Itu berfungsi, tentu saja, tetapi hanya jika Anda memiliki akses ke kode sumber dan memiliki hak untuk melakukan perubahan, dan beberapa asumsi lainnya.
Tapi ada sejumlah " bagaimana jika " yang perlu dipertimbangkan
Ini sebenarnya cukup sering terjadi. Jika Anda menggunakan kerangka kerja otomatisasi pengujian, seperti Calabash, Anda biasanya akan menduplikasi target yang ada, yang secara otomatis menduplikasi skema juga, dan skema baru tidak dibagikan, meskipun skema aslinya digunakan.
Permata Ruby & xcodeproj
Saya akan merekomendasikan menggunakan permata xcodeproj Ruby. Ini adalah alat open source yang sangat keren yang dapat membantu Anda mengotomatiskan banyak tugas terkait Xcode.
Btw, ini adalah permata yang digunakan oleh CocoaPods untuk mengotak - atik proyek dan ruang kerja Xcode Anda.
Jadi instal
Kemudian tulis skrip Ruby sederhana untuk membagikan kembali semua skema, permata tersebut memiliki metode reinate_user_schemes untuk tujuan itu
Itu tidak hanya menyalin file skema dari folder pengguna ke xcshareddata / xcschemes , tetapi juga membuat file-file itu terlebih dahulu dengan mengurai file pbxproj .
sumber
recreate_user_schemes
tidak menangani target pengujian dengan benar. Saya telah mengajukan laporan bug tentang itu .xcodebuild -project Finance.xcodeproj -scheme "Finance" -configuration Release clean archive CODE_SIGN_IDENTITY="My Identity"
saya mendapat 'Scheme <IDEScheme: 0x7fc9ea5e5fd0:' Finance '> diminta untuk membuat dan mengarsipkan, tetapi tujuan yang dijalankan <IDERunDestination: 0x7fc9eb47c6c0:' iPad 2 '> bukanlah platform penerapan dan tindakan ini seharusnya tidak telah diizinkan '. Tetapi ketika saya membuka XCode semuanya berfungsi dengan baikarchive
tindakan selalu melibatkan penandatanganan dan tujuan harus diatur ke perangkat nyata. Dalam kasus Anda, tujuannya adalahiPad 2
, yang menurut saya simulator, jadi tidak ada pengarsipan yang memungkinkan. Ada satu opsi penting yang hilang dari perintah Anda, itu-sdk iphoneos
coba dulu dan lihat bagaimana kelanjutannya. Saat Anda menjalankannya dari Xcode IDE, Anda mungkin memiliki tujuan yang ditetapkaniOS Device
atau mungkin Anda memiliki perangkat asli yang dicolokkan sehingga ditetapkan sebagai tujuan. Itulah mengapa pengarsipan bekerja dari IDE. Baris perintah lebih "bodoh" dan terkadang dapat menggunakan opsi "salah" secara default sehingga Anda harus lebih spesifik.Ok saya tahu 2 menit kemudian tetapi saya menemukan stack overflow lain yang mengatakan skema harus diatur untuk dibagikan ... Di mana Xcode 4 menyimpan Data Skema?
sumber
Salah satu alasan umum hilangnya skema adalah lupa untuk mendorong komitmen ke asalnya. Jika Anda mendapatkan pesan skema yang hilang, Anda harus terlebih dahulu memverifikasi bahwa skema tersebut dibagikan, lalu verifikasi bahwa Anda telah melakukan perubahan DAN mendorongnya ke server asal.
sumber
Saya mengalami kesalahan ini saat mengimplementasikan CI. Pertanyaan di atas identik dengan masalah saya kecuali saya menggunakan alat CI Gitlab sendiri. Anda dapat memeriksa apakah ada file seperti itu di Bamboo.
Saya menyelesaikannya dengan membuat beberapa perubahan pada
gitlab-ci.yml
file.Setelah Anda membuat
scheme
ketersediaan dengan berbagi. Di Xcode BukaProducts>Scheme>Manage Scheme
dan centang bagikan untuk dibagikan.Perubahan
sumber
Punya masalah yang sama tetapi selama membangun dengan xcode sebagai subproyek utama. Membuat subproyek dalam xcode standalone - setelah itu kesalahan ini menghilang.
sumber
Saya menghadapi masalah ini dan bahkan jika beberapa jawaban di sini benar-benar memberikan solusi, saya tidak merasa sangat jelas. Jadi saya hanya akan menambahkan satu lagi. Singkatnya, cara berbagi skema dari excode.
Arahkan ke
Product
>Scheme
>Manage Schemes
Anda kemudian akan ditampilkan daftar skema, dengan masing-masing dilambangkan sebagai yang dibagikan atau tidak. Cukup centang yang ingin Anda bagikan (mungkin berbeda untuk build dev dan prod)
Gambar diambil dari artikel ini https://developer.nevercode.io/docs/sharing-ios-project-schemes
sumber
Saya ingin menambahkan solusi untuk kasus saya terkait dengan utas ini. Yang ini untuk Anda yang mengkloning proyek yang ada, dengan semua skema yang Anda butuhkan sudah dibagikan:
, dengan
fastlane lanes
menampilkan semua jalur Anda dengan benar termasuk semua skema Anda:, tetapi
fastlane gym
hanya tampilkan skema utama (bukan skema dev dan pengujian):Solusinya adalah hapus centang opsi bersama untuk skema yang tidak terdaftar oleh
fastlane gym
dan kemudian periksa lagi . Ini akan menghasilkan .xcscheme untuk skema:Sekarang, jika Anda memeriksa
fastlane gym
, semua skema akan terdaftar:Kemudian Anda harus memasukkan file .xcshemes tersebut ke repositori, sehingga pengembang lain yang mengkloning proyek akan mendapatkan file tersebut.
sumber
Bagi siapa pun dengan Xcode 11.4 yang mencoba menemukan tombol "Shared" pada skema, sekarang dipindahkan ke skema individual.
sumber