Saya membuka bounty: "Mencari gambar jawaban dari sumber yang kredibel dan / atau resmi." tetapi belum menerima itu sejak saat itu.
Meskipun jawaban yang diberikan oleh @jackslash benar, ini hanya menceritakan sebagian dari cerita jadi saya ingin menulis sendiri dengan cara yang saya ingin lihat saat saya mengajukan pertanyaan ini.
Kenyataan dari jawaban ini adalah: Juli 2015. Kemungkinan besar segalanya akan berubah.
Pertama-tama mari kita tegaskan bahwa tindakan yang diperlukan untuk penandatanganan kode kerangka kerja yang benar harus dibagi menjadi langkah-langkah yang harus diambil oleh Pengembang kerangka kerja dan langkah-langkah yang harus diambil Konsumen kerangka kerja.
TLDR;
Untuk kerangka kerja OSX: Pengembang bebas mendistribusikan kerangka kerja OSX tanpa menandatanganinya karena Konsumen akan tetap menandatanganinya.
Untuk kerangka kerja iOS: Pengembang bebas untuk mendistribusikan kerangka kerja iOS tanpa menandatanganinya karena Konsumen akan tetap menandatanganinya, tetapi Pengembang dipaksa oleh Xcode untuk menandatangani kerangka kerja mereka ketika mereka membangun untuk perangkat iOS.
Karena radar: "kerangka kerja iOS yang berisi irisan simulator tidak dapat dikirimkan ke App Store" Konsumen kerangka iOS dipaksa untuk menjalankan skrip khusus seperti "copy_frameworks" atau "strip_frameworks" yang digunakan lipo -remove
untuk menghapus irisan simulator dari kerangka kerja iOS dan -codesigns dilucuti kerangka karena pada titik ini identitas penandatanganan kode apa pun itu (atau tidak) dihapus sebagai efek samping lipo -remove
manipulasi.
Jawaban yang lebih panjang mengikuti.
Jawaban ini bukanlah "penarikan dari sumber yang kredibel dan / atau resmi" tetapi lebih didasarkan pada sejumlah observasi empiris.
Pengamatan empiris # 1: Konsumen tidak peduli karena mereka akan membuat kode ulang kerangka kerja yang mereka terima dari Pengembang
Distribusi kerangka biner dari proyek sumber terbuka terkenal di Github tidak diberi tanda kode . Perintah codesign -d -vvvv
memberikan: "objek kode tidak ditandatangani sama sekali" pada semua kerangka kerja iOS dan OSX biner yang biasa saya jelajahi. Beberapa contoh: ReactiveCocoa and Mantle , Realm , PromiseKit .
Dari pengamatan ini jelas bahwa penulis kerangka kerja ini bermaksud agar mereka diberi tanda kode oleh Konsumen, atas nama mereka yaitu Konsumen harus menggunakan bendera "Tanda Kode Saat Disalin" dalam fase pembuatan "kerangka kerja Sematkan" yang disediakan oleh Xcode atau menggunakan beberapa kerangka khusus script yang melakukan hal yang sama secara manual: kerangka kode tanda tangan atas nama Konsumen.
Saya tidak menemukan satu pun contoh yang sebaliknya: kerangka kerja sumber terbuka yang akan didistribusikan dengan identitas penandatanganan kode di dalamnya sehingga di sisa jawaban saya mengasumsikan pendekatan yang diadopsi secara luas ini sebagai yang benar: tidak perlu pengembang kerangka kerja untuk mendistribusikan kerangka kerja mereka ke pengembang lain dengan identitas penandatanganan kode di dalamnya karena Konsumen tetap akan menandatanganinya ulang .
Pengamatan empiris # 2 yang hanya berlaku untuk iOS dan yang sepenuhnya menjadi perhatian Pengembang
Sementara Konsumen tidak peduli apakah kerangka yang mereka terima dari Pengembang codesigned atau tidak, Pengembang masih perlu codesign kerangka iOS mereka sebagai bagian dari proses membangun ketika mereka membangun untuk perangkat iOS karena jika tidak Xcode tidak membangun: CodeSign error: code signing is required for product type 'Framework' in SDK 'iOS 8.1'
. Mengutip Justin Spahr-Summers :
Kerangka OS X tidak perlu diberi tanda kode saat pembuatan ... Sayangnya, Xcode memang mengharuskan kerangka kerja iOS diberi tanda kode pada saat pembuatan.
Ini cukup menjawab pertanyaan saya # 2: Identitas "Pengembang iPhone" sudah cukup untuk membujuk Xcode sehingga akan membangun kerangka kerja iOS untuk perangkat. Komentar di Kartago # 339 ini mengatakan hal yang sama.
Pengamatan empiris # 3: alat lipo
Perilaku tertentu dari alat lipo: bila diterapkan kerangka biner, selalu rekursif menghapus setiap identitas codesign dari itu : lipo -create/-remove codesigned framework ... -> not codesigned framework
.
Ini bisa menjadi jawaban mengapa semua contoh dalam observasi # 1 sama sekali tidak diberi tanda kode: identitas penandatanganan kode mereka hilang setelah lipo diterapkan tetapi karena menurut pengamatan # 1 Konsumen tidak peduli itu baik-baik saja.
Pengamatan ini sangat relevan dengan pengamatan # 4 berikutnya tentang AppStore.
Pengamatan empiris # 4: Framework iOS yang berisi irisan simulator tidak dapat dikirimkan ke App Store
Ini dibahas secara luas di: Realm # 1163 dan Carthage # 188 dan radar dibuka: rdar: // 19209161 .
Ini sepenuhnya menjadi perhatian Konsumen: untuk kerangka kerja universal iOS yang disertakan Konsumen dalam aplikasinya, ketika aplikasi sedang dibangun, mereka harus menjalankan skrip khusus (Fase Jalankan Skrip khusus) yang menghapus potongan simulator dari biner kerangka kerja tersebut sehingga aplikasi dapat melewati validasi AppStore.
Contoh bagus untuk kerangka kerja biner yang saya temukan di Realm: strip-frameworks.sh .
Ini digunakan lipo
untuk menghapus semua irisan arsitektur selain ${VALID_ARCHS}
dan kemudian menandainya kembali dengan identitas Konsumen - di sinilah observasi # 3 dimulai: kerangka harus diberi kode ulang karena manipulasi lipo di atasnya.
Carthage memiliki skrip CopyFrameworks.swift yang melakukan hal yang sama ke semua kerangka kerja yang disertakan oleh Konsumen: ini menghapus kerangka simulator dan kerangka kode ulang atas nama Konsumen.
Juga ada artikel bagus: Melucuti Arsitektur Yang Tidak Diinginkan Dari Perpustakaan Dinamis Di Xcode .
Sekarang gambaran umum langkah-langkah yang diperlukan untuk menghasilkan iOS dan OSX dari perspektif Pengembang dan Konsumen. Pertama yang lebih mudah:
OSX
Pengembang:
- Membangun kerangka OSX
- Memberikannya kepada Konsumen
Tidak ada aktivitas penandatanganan kode yang diperlukan dari Pengembang.
Konsumen:
- Menerima kerangka OSX dari Pengembang
- Menyalin kerangka kerja ke Kerangka / direktori dan kode menandatanganinya secara otomatis atas, Konsumen, nama mereka sebagai bagian dari proses "Kode Masuk pada Salinan".
iOS
Pengembang:
- Membangun kerangka iOS untuk perangkat. Penandatanganan kode diperlukan oleh Xcode, identitas "Pengembang iPhone" sudah cukup.
- Membangun kerangka iOS untuk simulator.
- Menggunakan lipo yang menghasilkan kerangka iOS universal dari dua sebelumnya. Pada titik ini identitas penandaan kode dari 1 langkah hilang: kerangka kerja universal biner "tidak ditandatangani sama sekali" tetapi tidak masalah karena "Konsumen tidak peduli".
- Memberikannya kepada Konsumen
Konsumen:
- Menerima kerangka kerja iOS dari Pengembang
- Menyalin kerangka kerja ke direktori Frameworks / (langkah ini mungkin berlebihan tergantung pada skrip apa di langkah 3.)
- Menggunakan skrip khusus sebagai bagian dari proses build: simulator strip skrip ini memotong kerangka iOS dan kemudian menandainya ulang atas nama, Konsumen, mereka.