Pembuatan otomatis kami berjalan di Jenkins. Build itu sendiri berjalan di atas slave, dengan slave dieksekusi melalui SSH.
Saya mendapatkan kesalahan:
00:03:25.113 [codesign-app] build/App.app: User interaction is not allowed.
Saya telah mencoba setiap saran yang saya lihat sejauh ini di posting lain di sini:
- Menggunakan keamanan membuka kunci-rantai segera sebelum masuk untuk membuka kunci rantai.
- Memindahkan kunci masuk ke gantungan kunci sendiri.
- Memindahkan kunci masuk ke gantungan kunci login.
- Memindahkan kunci masuk ke gantungan kunci sistem.
- Secara manual mengatur daftar-gantungan kunci hanya gantungan kunci yang berisi kunci.
Dalam semua kasus, saya mendapatkan kesalahan yang sama.
Dalam upaya untuk mendiagnosis masalah ini, saya mencoba menjalankan perintah "keamanan membuka-gantungan kunci" di terminal lokal saya dan menemukan bahwa itu tidak benar-benar membuka kunci-kunci - jika saya melihat di Akses Keychain, simbol kunci masih ada. Ini adalah kasus apakah saya meneruskan kata sandi pada baris perintah atau apakah saya membiarkannya meminta saya untuk itu. Membuka kunci rantai yang sama menggunakan GUI akan meminta saya untuk kata sandi dan kemudian membukanya. Selain itu, jika saya menjalankan "keamanan kunci-gantungan kunci", saya lakukan melihat kunci tombol segera setelah menjalankan perintah. Ini membuat saya berpikir bahwa membuka kunci-kunci tidak benar-benar berfungsi. Saya mengalami perilaku yang sama pada Lion (yang kami gunakan untuk build slave) dan Mavericks (yang sedang saya kembangkan.)
Selanjutnya, saya mencoba menambahkan -v ke semua perintah keamanan:
list-keychains "-d" "system" "-s" "/Users/tester/.secret/App.keychain"
Listing keychains to see if it was added: ((
"/Library/Keychains/System.keychain"
))
unlock-keychain "-p" "**PASSWORD**" "/Users/tester/.secret/App.keychain"
build/App.app: User interaction is not allowed.
Dari sini, tampaknya gantungan kunci daftar adalah yang tidak berfungsi. Mungkin tidak berhasil. : /
Ada pertanyaan serupa di sini . Solusinya menarik - set "SessionCreate" menjadi true di launchctl. Tapi saya tidak membangun pada master - proses build saya dimulai dari SSH pada mesin slave build. Mungkin ada cara baris perintah untuk melakukan apa yang launchctl lakukan ketika Anda menjalankan "SessionCreate"?
sumber
Jawaban:
Saya juga telah berjuang ini. Tidak ada yang membantu sampai saya mencoba saran di http://devnet.jetbrains.com/thread/311971 . Terima kasih ashish agrawal!
Login pengguna bangunan Anda melalui GUI dan buka Akses Keychain. Pilih kunci pribadi penandatanganan Anda, klik kanan, pilih Dapatkan Info, ubah ke tab Kontrol Akses dan pilih "Izinkan semua aplikasi mengakses item ini".
sumber
codesign
ke daftar "Selalu Izinkan".security unlock-keychain
, jugaYah, saya kira saya bisa menjawab pertanyaan saya sendiri hari ini, karena setelah menusuknya selama dua setengah hari, salah satu hal yang saya coba tampaknya berhasil. Saya hanya akan mundur darinya sekarang dan berharap itu terus bekerja.
Pada dasarnya, sepertinya
-d system
tidak berfungsi. Jadi banyak jawaban untuk pertanyaan lain di sekitar sini mungkin harus diperbarui untuk mencerminkan hal itu.sumber
codesign
melalui ssh tanpa benar-benar menyimpan kata sandi login di dalam beberapa skrip?.env
file tidak terlalu buruk, karena.env
file tersebut sudah berisi kunci sensitif misalnya. AWS dan Heroku. Dalam kasus kami kredensial tanda kode build terkait disimpan di Keychain yang baru dibuat yang kemudian dihapus setelah build. Kemudian dibuat kembali untuk bangunan berikutnya. Namun,login
gantungan kunci masih harus dibuka, begitusecurity unlock-keychain -p pass login.keychain
juga tautan yang hilang di sini. Terima kasih!Tidak ada jawaban lain yang bekerja untuk saya.
Apa yang akhirnya menyelamatkan saya adalah pos ini
Singkatnya, ini bisa disebabkan oleh batas waktu default 5 menit, yang akan memicu kesalahan ini setelah lama dibangun.
Memperbaiki:
sumber
Confirm
bahkan setelah saya mengubah akses. : /Cobalah untuk menelepon
security unlock-keychain
dancodesign
sebagai perintah satu baris. Ini membantu saya. Sesuatu seperti:sumber
sshexec
dan setiap kali itu membuat sesi ssh baru.Menggunakan Keamanan untuk membuat Keychain untuk / usr / bin / codesign
Mengimpor sertifikat dan membuatnya bekerja dengan codesign terprogram tidak masalah menggunakan login atau gantungan kunci Sistem atau berdoa kepada beberapa dewa codesign. Anda hanya perlu mengatur izin yang benar. Saya merekomendasikan membuat gantungan kunci baru khusus untuk keperluan codesign.
Hari-hari ini
codesign
untuk tidak menghasilkanerrSecInternalComponent
Anda perlu mendapatkan daftar partisi (ACL) yang benar. Saya akan berjalan melalui langkah-langkah:Buat Keychain
pada titik ini gantungan kunci tidak terkunci tetapi tidak akan muncul
Keychain Access
.Tambahkan Keychain baru ke daftar pencarian
Tambahkan Keychain baru ke daftar. Jika Anda tidak pertama-tama mengambil daftar asli dari
list-keychains
Anda tidak akan lagi adalogin.keychain
dalam daftar pencarian Anda.Buka kunci rantai kunci
Ini berlebihan jika Anda membuat Keychain di atas, tetapi jika Keychain sudah ada maka perlu.
Hapus default dari Gantungan Kunci
Dengan tidak menentukan argumen apa pun, ini akan mengatur batas waktu kunci otomatis menjadi tidak terbatas dan menghapus kunci otomatis saat tidur.
Impor sertifikat penandatanganan Anda dari .p12
Impor sertifikat dan berikan
codesign
akses melalui-T
opsi.Atur ACL pada gantungan kunci
Ini adalah persyaratan yang banyak orang lewatkan. Anda dapat melihat apa yang dilakukan macOS dengan menggunakan dump-keychain. Yang mana dalam hal penandaan kode memerlukan
apple:
danapple-tool:
.-s
mengacu pada sertifikat penandatanganan.Gitlab-Runner, Jenkins dan sejenisnya
Satu hal yang sangat penting untuk setiap pelari tipe CI atau sistem pembangunan adalah untuk memastikan proses dimulai dari
launchd
dengan benar. Pastikan daftar Anda berisi<SessionCreate> </true>
.Tidak benar mencocokkan pemilik gantungan kunci dengan proses pembuatan dan memastikan sesi keamanan dibuat akan menghasilkan semua jenis sakit kepala. Berbicara secara diagnostik, Anda dapat memperkenalkan
list-keychains
dan melihat apakah hasilnya sesuai dengan harapan Anda.Ini dari halaman
launchd.plist
manual:SessionCreate <boolean>
UserName <string>
GroupName <string>
Akhirnya codesign
Anda dapat mencari hash sertifikat penandatanganan menggunakan
find-identity
Menyandikan kerangka kerja, dylib, dll.
Codesign bundel aplikasi
Catatan akhir - jika Anda melihat bagaimana Xcode melakukannya mereka mengatur
CODESIGN_ALLOCATE
untuk menggunakan yang ada dalam Xcode, bukan di/usr/bin
.Jalur pencarian diatur ke
${PLATFORM_PATH}:${TOOLCHAIN_PATH}:${PATH}
, di mana jalur PLATFORM adalah direktori / usr / bin untuk SDK target yang diberikan dan TOOLCHAIN_PATH adalah / usr / bin untuk alat host Xcode.sumber
Masukkan kunci Anda di gantungan kunci Sistem
sumber
Jadi ini adalah perintah yang berfungsi.
-A
adalah untuk mencegah Mac dari meminta kata sandi. Mengimpor ke system.keychain tidak memerlukan GUI.sudo security import <cert.p12> -k "/Library/Keychains/System.keychain" -P <passphrase> -A
sumber
Gantungan kunci saya terkunci. Itu menolak kemajuan saya untuk mengubah fakta itu ...
Keychain Access
->Keychain First Aid
->Repair
, dan voilá !sumber
Membuka kunci rantai tidak cukup. Anda juga harus mengatur akses kunci pribadi ke "Izinkan semua aplikasi mengakses item ini". Dan untuk melakukan itu dari command line memerlukan mengimpor kembali kunci. Jadi untuk mengambil beberapa hal sekaligus:
Buka kunci rantai masuk jika terkunci. Seharusnya tidak dikunci, tapi bagaimanapun juga begini caranya:
Jika karena alasan tertentu mesin build Anda memiliki kunci masuk login, dan Anda tidak ingin mengekspos kata sandi itu dalam sebuah skrip, maka Anda harus menggunakan gantungan kunci yang berbeda. Anda dapat membuat satu di tempat dan menggunakannya di perintah sebelumnya dan berikut. Untuk membuat satu di tempat:
Kemudian impor sertifikat Anda dan kunci pribadi terkait ke gantungan kunci login menggunakan parameter -A. Perhatikan bahwa Anda tidak perlu sudo untuk semua ini ...
Parameter -A adalah apa yang akan membuat kunci pribadi Anda diatur ke "Izinkan semua aplikasi mengakses item ini"
Jadi, dengan menggunakan semua ini, Anda harus dapat membuat skrip yang menginstal sertifikat yang diperlukan untuk membuat rilis ipa dan menandatanganinya tanpa cepat. Anda dapat menyimpan file .p12 di repo Anda, sehingga mesin apa pun dapat membangun ipa Anda tanpa memerlukan pengaturan manual.
sumber
Selain membuka kunci gantungan kunci (sebagaimana disebutkan dalam jawaban lain), Anda harus mengizinkan akses dari semua aplikasi ke token autentikasi Xcode di gantungan kunci:
sumber
Impor kunci Anda ke gantungan kunci Sistem. Anda dapat menggunakan perintah ini:
sumber
Jadi saya mencoba setiap jawaban di sini dan ada sesuatu yang tidak bertambah. Akhirnya saya menemukan ketika saya me-reboot layanan CI saya, itu berjalan di bawah pengguna yang berbeda dari yang saya harapkan. Mengubah ke pengguna yang benar-benar memiliki akses ke kunci dalam rantai masuk mereka memperbaiki segalanya. Ini mungkin bukan masalah umum, tetapi ingin mendokumentasikan alasan spesifik saya untuk kesalahan ini, kalau-kalau itu terjadi pada orang lain.
sumber
Bagi saya tidak ada yang berhasil tampaknya harus menginstal ulang Xcode lagi. Jenkins terus memberikan kesalahan yang sama. Anda akan menghemat banyak waktu jika Anda hanya memindahkan instalasi Xcode ke Trash dan menginstal ulang. Pastikan Anda menjalankan perintah codesign dari baris perintah setidaknya sekali.
Bahkan setelah jika Anda mendapatkan kesalahan yang sama cobalah mengatur 'Buka Kunci Keychain?' properti dalam Jenkins dan berikan path ke login.keychain Anda di bawah / Pengguna /${USER}/Library/Keychains/login.keychain
Saya harap Tuhan bersamamu setelah itu.
sumber
Dalam kasus saya, ini disebabkan oleh gantungan kunci yang dibuat dengan batas waktu default 300-an dan kompilasi xcode panjang yang berlangsung lebih dari 300-an. Solusinya, bagi saya, adalah untuk memohon:
security set-keychain-settings -t <longer timeout in seconds> <keychain>
segera setelah membuat gantungan kunci sementara.
sumber
Saya menjalankan semua saran ini dan masih mengalami masalah menggunakan fastlane
gym
dalam pekerjaan Jenkins. Saya memiliki sertifikat yang diinstal dan gantungan kunci tidak terkunci, dan dapat men-codesign pada slave ketika saya secara manual menjalankan perintah codesign pada baris perintah.Sebagai solusinya, jika Jenkins terhubung ke budak menggunakan JNLP, bukan SSH, Anda akan bisa untuk codesign.
sumber
Bagi saya itu terjadi ketika ada gantungan kunci kedua ditambahkan secara manual dan terkunci. Untuk beberapa alasan
codesign
mencoba mengakses gantungan kunci yang terkunci dan gagal meskipun sertifikat ada di gantungan kunci masuk (dan tidak dikunci). Membuka kunci yang kedua memecahkan masalah. Tidak masuk akal bagi saya.sumber
Setelah mencoba sejumlah solusi di atas. Saya menyadari bahwa satu faktor yang saya miliki, adalah bahwa saya mulai membangun menggunakan ION Console. Ketika saya kembali membuat pembuatan dari aplikasi Terminal, semuanya bekerja dengan baik.
sumber