Secara jarak jauh mendistribusikan aplikasi iOS yang dikompilasi dalam Xcode 7 tanpa App Store, sub program pengembang, atau jailbreak?

10

Mengikuti instruksi ini (lihat juga dokumentasi pengembang Apple dan jawaban BoltClock untuk menguji aplikasi iOS pada perangkat tanpa program pengembang apple atau jailbreak ), saya dapat mengkompilasi aplikasi iOS (dalam hal ini asalnya , aplikasi emulator konsol video game yang tidak memenuhi pedoman Apple dan tidak akan pernah diizinkan di App Store Apple) di Xcode 7, menandatanganinya dengan akun iCloud pribadi saya, memasukkannya ke iPhone saya (dengan menghubungkannya ke Mac saya dengan USB, dan memilih iPhone saya di menu xcode -> Produk -> Tujuan), dan izinkan ponsel saya untuk mengeksekusinya dengan "mempercayai" aplikasi dengan tanda tangan ini di Pengaturan -> Umum -> Profil, yang memasang sertifikat yang terkait dengan akun icloud saya ke perangkat.

Saya ingin meniru langkah-langkah ini dengan unduhan melalui udara. Bisakah saya mendapatkan Xcode untuk menghasilkan executable yang dapat saya bagikan dengan saudara saya, yang memiliki iPhone, tetapi tidak memiliki akses ke Mac dengan Xcode?

StackExchange Network menyelesaikan sesuatu seperti ini tampaknya untuk program beta aplikasi iOS-nya, dengan menggunakan distribusi perusahaan Apple melalui Manajemen Perangkat Seluler, sebagaimana disebutkan dalam pertanyaan ini . Ada juga BuildStore ( http://builds.io/ ), yang seharga $ 10 / tahun juga memungkinkan fungsi ini, tampaknya dengan menambahkan pengguna ke "tim pengembang" yang terkait dengan akun Program Pengembang Apple berbayar (lihat Apple dev docs ) . Dengan Xcode 7, mungkinkah melakukan hal seperti itu tanpa perusahaan atau bahkan akun pengembang berbayar biasa?

pembaruan: Terima kasih atas bantuan Stacksza, saya telah membuat beberapa kemajuan, yang akan saya ringkas di sini.

  1. XCode akan membuat arsip (Produk -> Arsip), tetapi itu tidak memungkinkan Anda untuk mengekspor arsip ke file .ipa untuk distribusi ad hoc tanpa berlangganan tier akun ADP berbayar.
  2. Tidak masalah, karena alat xcode baris perintah memang membuat .ipa dapat dieksekusi, bahkan tanpa akun ADP berbayar. Gunakan perintah seperti xcodebuild -exportArchive -archivePath Provenance-Release\ 11-20-15\,\ 22.24.xcarchive/ -exportOptionsPlist ~/manifest.plist -exportPath ~/Provenance(lihat jawaban Khawar di Cara membuat ipa di xcode 6 tanpa akun Pengembang Apple? )
  3. Tetapi perintah ini mengharuskan Anda untuk menentukan file .plist manifes. Jawaban oleh Razvan di Over The Air (OTA) iOS, Distribusi File IPA Untuk Umum? berisi contoh manifest.plist, serta instruksi untuk format hyperlink yang diperlukan untuk menyediakan tautan pengunduhan, yang harus di-host pada halaman web SSL. Mungkin URL SSL harus menghitung id bundel aplikasi, saya tidak yakin.
  4. Tetapi hal di atas hanya berfungsi jika aplikasi disediakan untuk perangkat yang mengunduhnya, dan perangkat telah menginstal sertifikat pengembang. Jadi misalnya perangkat yang sebelumnya terhubung melalui USB ke Xcode saya sekarang dapat mengunduh aplikasi melalui udara, yang sangat bagus. Ini adalah kemajuan. Tetapi untuk perangkat yang bersih, saya mendapatkan kesalahan Could not install embedded profile: 0xe8008012 (This provisioning profile cannot be installed on this device.)(seperti yang terlihat di konsol perangkat, yang dapat dilihat di Xcode -> Window -> Devices, atau yang lain di aplikasi Apple Configurator).
  5. Agar aplikasi disediakan untuk perangkat, aplikasi tersebut harus berisi UDID perangkat dalam embedded.mobileprovisionfile, lihat Bagaimana Anda Menyematkan Profil Penyedia dalam Aplikasi iOS , Bagaimana mengotomatiskan memeriksa bidang dalam embedded.mobileprovision suatu ipa? , Bagaimana cara mengetahui profil apa yang digunakan untuk membuat file * .ipa? , dan Apakah ada cara untuk melihat UDID apa yang termasuk dalam build? . Anda tidak dapat hanya mengedit file ini untuk menambahkan UDID, karena CODESIGNATURE aplikasi tidak cocok, dan perangkat akan melaporkan kesalahanFailed to verify code signature of /private/var/mobile/Library/Caches/com.apple.mobile.installd.staging/temp.7jBjpk‌​/extracted/Payload/Provenance.app : 0xe8008017 (A signed resource has been added, modified, or deleted.)}
  6. Oke, jadi kami harus mengundurkan diri dari aplikasi. Xcode menyediakan alat baris perintah yang disebut codesignyang dapat melakukan ini. Petunjuk ada di Cara menandatangani ulang file ipa? dan Tandatangani kembali IPA (iPhone) dan Mundur dari Aplikasi iPhone, masukkan ID Bundel baru dan kirim ke Xcode Organizer untuk Unggah dan Cara menandatangani ulang IPA secara manual dengan profil penyediaan yang baru . Saya harus menentukan sertifikat pengembang saya, nama tepatnya yang dapat ditemukan di Akses Keychain, di bawah tab Sertifikat, dan terlihat seperti "Pengembang iPhone: [email protected] (ABCDEFGHIJ)". Maka perintahnya seperti codesign -f -s "iPhone Developer: [email protected] (ABCDEFGHIJ)" Payload/Provenance.app. Contoh perintah dalam instruksi di atas termasuk bendera yang disebut--resource-rules, tapi saya tidak menemukan file seperti itu di aplikasi saya yang dikompilasi, jadi saya menghapus bendera itu. Saya bertanya-tanya apa fungsinya, dan apakah perlu. Sunting: Posting blog yang luar biasa Penandatanganan Kode Di Dalam oleh Thomas Kollbach menjelaskan bahwa --resource-rulesbendera yang digunakan untuk menyatakan bagian mana dari aplikasi yang harus ditandatangani, tetapi karena iOS8 sudah tidak digunakan lagi, dan seluruh aplikasi harus ditandatangani.
  7. Sekarang aplikasi telah menambahkan UDID dan ditandatangani, mengunduhnya di perangkat baru memberikan kesalahan Could not install embedded profile: 0xe8008003 (This provisioning profile is malformeddan A valid provisioning profile for this executable was not found. Dugaan saya, masalahnya sekarang adalah perangkat masih belum menginstal sertifikat pengembang. Saat berhenti melalui Xcode, sebelum aplikasi akan dijalankan, Anda harus menemukan sertifikat yang terpasang di Pengaturan -> Umum -> Profil, pilih sertifikat Anda dan ketuk "trust". Namun opsi ini tidak muncul setelah pengunduhan aplikasi ad hoc over-the-air, jadi saya tidak yakin bagaimana untuk melanjutkan. Saya rasa saya perlu beberapa cara untuk menginstal sertifikat pengembang di perangkat. Menurut Menginstal profil penyediaan di iOS 8.0.2, dulu mungkin hanya dengan mengirim email sertifikat ke perangkat, tetapi itu tidak lagi berfungsi pada iOS 8. Saya belum mencoba mengkonfirmasi. Bagaimana saya bisa menginstal sertifikat pengembang saya ke perangkat iOS dari jarak jauh?
  8. Saya mencoba mengekspor sertifikat pengembang iPhone dari Keychain Access, dan mengirimkannya melalui email ke perangkat. Perangkat dapat menginstal sertifikat, tetapi ditampilkan dengan peringatan merah bahwa itu tidak ditandatangani, sedangkan ketika sertifikat diinstal melalui Xcode / USB tidak memiliki peringatan seperti itu. Menurut Rhythmic Fistman, apakah mungkin untuk mengenkripsi ulang file embedded.mobileprovision? , profil harus ditandatangani oleh Apple untuk berfungsi. Ini mungkin titik tusuk. Apple hanya akan menandatangani sertifikat Anda jika Anda memiliki akun ADP berbayar.
  9. Posting blog tentang provisi oleh Sean Heber ini sangat menjelaskan tentang teori umum sertifikat pengembang dan profil provisi (bersama dengan Kollbach, keduanya harus dibaca). Berisi paragraf ini:

    Alasan semua ini bekerja dan aman adalah karena Apple membuat profil penyediaan di portal dan kemudian menandatanganinya dengan kunci pribadi mereka sendiri sebelum mengirimkannya kepada Anda. Penandatanganan profil penyediaan adalah sesuatu yang hanya dapat dilakukan Apple. Karena itu file yang Anda unduh tidak dapat dirusak tanpa menjadikannya tidak sah. Profil penyediaan yang tidak valid tidak akan diterima oleh iOS dan dengan demikian Apple dapat mengontrol apa yang bisa dan tidak dapat disediakan oleh pengembang dengan hanya membatasi akses ke penandatanganan profil penyediaan untuk hal-hal yang diberikan izin kepada pengembang untuk mengonfigurasi di portal pengembang terlebih dahulu. place - meskipun profil penyediaan dapat mendukung sejumlah opsi luar biasa lainnya yang tidak dapat Anda gunakan tanpa jailbreaking. Inilah sebabnya mengapa Anda harus mendaftarkan perangkat pengujian di portal, tambahkan sertifikat Anda ke portal, dll - hanya hal-hal di portal (dan dengan demikian jumlah yang dapat dikontrol dan dibatasi secara sewenang-wenang oleh Apple) dapat dimasukkan dalam profil penyediaan yang dibuat dan ditandatangani dengan benar. Portal adalah tempat diberlakukannya kebijakan dan batasan Apple.

Ini sepertinya menjawab pertanyaan saya secara definitif (bisakah saya menjalankan aplikasi tanpa akun ADP berbayar) dengan "tidak". Meskipun artikel ini sebelum Xcode 7. Rupanya Xcode 7 akan mengirim UDID perangkat ke portal Apple, dan menerima sebagai tanggapan profil penyediaan yang ditandatangani oleh Apple, yang berisi UDID itu. Xcode 7 hanya melakukan ini ketika perangkat dicolokkan melalui USB dan dikenali oleh Xcode, tetapi orang bertanya-tanya apakah permintaan Xcode manual ke Apple dapat dibuat? Itu masuk lebih dalam ke rekayasa balik barang-barang Apple daripada saya nyaman dengan, dan mungkin melanggar ToS atau apa pun, jadi saya pikir saya puas dengan jawaban "tidak".

Menurut halaman tentang untuk BuildStore , mereka mengelola sesuatu yang serupa melalui email, jadi itu mungkin.

Xcode "Build and Archive" dari baris perintah sudah cukup lama (sekitar xcode 3), tetapi menyarankan menggunakan xcrundaripada xcodebuildyang telah saya gunakan.

ziggurisme
sumber
1
Silakan pertimbangkan untuk memisahkan ini. Pertanyaannya harus singkat, sederhana, dan mudah dimengerti. Semua jawaban / proses bagaimana Anda mendapatkan jawaban dan posting blog Anda harus di bagian jawaban.
bmike

Jawaban:

2

Jawabannya hampir YA!

Saya berhasil menginstal build baru dari aplikasi yang sama pada perangkat melalui Fabric.io tanpa berlangganan dev apple. (Saya kira Anda juga dapat mendistribusikannya dengan iTunes. Kirim ipa ke tester, dan itu harus dapat menginstalnya melalui iTunes.)

Satu-satunya kelemahan adalah bahwa Anda harus menghubungkan perangkat ke Xcode setidaknya sekali . Kemudian Anda dapat menginstal versi baru dari jarak jauh. (Saya tidak menemukan cara untuk melakukannya secara manual mengetahui udid)

Saat Anda menghubungkan perangkat "tidak dikenal" ke xcode 7, ada fix issuetombol di Target general settings. Perbaiki masalah ini dan Xcode akan menghasilkan profil Provisioning baru dengan perangkat ini disertakan. (Anda dapat menemukannya di ~/Library/MobileDevice/Provisioning Profiles)

Daripada Anda dapat menggunakan profil penyediaan ini untuk mendistribusikan aplikasi melalui Fabric.io

  1. Daftar di Fabric.io
  2. Setup Fabric untuk proyek Anda (ada panduan langkah demi langkah)
  3. Pastikan xcode menggunakan prov yang benar. profil untuk menandatanganinya. Automaticbekerja untukku.
  4. Xcode> proyek> arsip
  5. Penolong kain akan mendeteksi bangunan dan Anda akan dapat mendistribusikannya.

Maaf kawan yang tidak cukup mahir dengan Xcode, saya tidak punya banyak waktu untuk menambahkan lebih sedikit panduan rawan kesalahan, tapi saya harap jawaban ini akan membantu seseorang dengan ide.

TIP: gunakan plugin quicklook ini untuk melihat di dalam ipas dan prov. profil!

DanSkeel
sumber
1
Ya, jawaban ini konsisten dengan apa yang saya temukan dalam pengujian saya. Saya masih bertanya-tanya apakah mungkin untuk menyiasatinya "sambungkan perangkat ke xcode setidaknya satu kali langkah" dengan spoofing pesan yang dikirim Xcode ke server Apple dengan perangkat baru UDID
ziggurism
2

Pada beberapa versi iOS 9.x dirilis sejak jawaban saya awalnya diposting, ini bahkan tidak lagi mungkin. Apple sekarang membatasi unduhan OTA ke akun yang tidak bebas, seperti yang ditunjukkan oleh kesalahan pada log perangkat setelah instalasi gagal.

Saya telah menguji ini secara luas, karena ini akan luar biasa untuk aplikasi saya juga.

Dapatkah saya mendistribusikan aplikasi saya OTA tanpa Keanggotaan Program Pengembang (memerlukan biaya)?

Anda dapat membuat dan menandatangani IPA dan membuat file Manifest untuknya, tetapi gagal menginstalnya di perangkat. Alasan untuk ini adalah Xcode perlu mengkonfigurasi IPA untuk perangkat itu (seharusnya menandatanganinya dengan benar dengan UDID). Anda bahkan dapat melihat ini terjadi jika Anda mencoba menyambungkan perangkat baru ke Mac dan menjalankan aplikasi Anda melalui Xcode. Jawaban singkatnya adalah tidak.

Apa yang bisa saya lakukan untuk membuat ini bekerja?

Anda dapat mendaftar untuk Program Pengembang dengan Apple (membutuhkan biaya) dan menambahkan UDID perangkatnya ke profil Anda, lalu membuat IPA dan file manifes, mengunggahnya ke server web dan mengirimkan URL kepadanya.

Ini benar-benar untuk keamanan, karena penghalang harga biasanya yang menghentikan aplikasi jahat dari didistribusikan melalui web. Belum lagi menjaga sebagian besar unduhan aplikasi di App Store.

Saya sudah mendaftar untuk program pengembang? Bagaimana saya mendistribusikannya sekarang?

Anda harus memiliki server web HTTPS (dan sertifikat SSL tempat Anda dapat membuat root sendiri). Anda juga harus menambahkan UDID mereka ke profil Pengembang Anda (saya tidak yakin bagaimana melakukannya). Anda harus menggunakan Xcode untuk membuat IPA (Produk> Arsip> Ekspor> Simpan untuk Penempatan Ad-hoc> Masuk dengan Apple ID> Ikuti instruksi) dan Anda akan mendapatkan Plist dan file IPA. Letakkan keduanya di server Anda dan ubah nilainya dalam file Plist agar sesuai dengan URL HTTPS di server Anda. Kemudian Anda menggunakan tautan khusus untuk menautkan ke manifes Plist, dan itu akan muncul meminta pengguna untuk menginstal aplikasi Anda. Jika semuanya berjalan dengan baik, pengguna akan memiliki aplikasi Anda. Anda juga harus kode metode pembaruan Anda sendiri jika Anda menginginkannya.

Jika ini adalah aplikasi yang ingin Anda distribusikan pada titik ini, mungkin lebih masuk akal untuk benar-benar meletakkannya di App Store, atau jika ini untuk pengujian beta gunakan TestFlight. Jika Anda memiliki akun pengembang, Anda dapat menggunakan TestFlight dan lewati semua hal ini untuk pengujian aplikasi. Yang Anda butuhkan hanyalah surel mereka dan agar mereka menginstal aplikasi TestFlight dari App Store. TestFlight dapat dikelola dari iTunes Connect.

AppleBetas
sumber
Dan begitu Anda mendaftar untuk Pengembang, bagaimana Anda mendistribusikan aplikasi?
ziggurism
Memperbarui posting saya dengan instruksi.
AppleBetas
Terima kasih, itulah yang saya cari. Saya tahu Anda mengatakan perlu memiliki akun dev berbayar dan menyediakan UDID, tetapi saya ingin mencoba metode ini tanpa terlebih dahulu. Saya akan melaporkan kembali hasilnya.
ziggurisme
Mengikuti instruksi Anda untuk membuat arsip, tetapi tombol "Unggah ke toko aplikasi", "validasi", dan "ekspor" berwarna abu-abu, dengan tautan di bawahnya yang bertuliskan "Distribusi memerlukan pendaftaran dalam Program Pengembang Apple" yang ditendang saya ke halaman web untuk mendaftar ke ADP. Jadi di satu sisi, itu seperti yang Anda janjikan: langganan $ 99 untuk Program Pengembang Apple tampaknya diperlukan, bahkan jika Anda hanya ingin melakukan distribusi ad hoc over-the-air (OTA) aplikasi Anda. Gui XCode tidak akan membuat IPA dan profil penyediaan.
ziggurisme
Di sisi lain, di stackoverflow.com/questions/26928721/... pengguna Khawar mengklaim bahwa hal itu dapat dilakukan tanpa sub ADP menggunakan baris xcodebuildperintah yang akan membuat arsip .ipa serta menandatangani dan menyediakan aplikasi jika Anda menggunakan -exportProvisioningProfilebendera (lihat komentar Pankaj Rathor).
ziggurisme
1

Pada dasarnya, seseorang harus menandatangani aplikasi. Anda bisa mendapatkan file IPA, tetapi itu tidak akan berjalan pada perangkat yang sewenang-wenang. Fokuslah pada hal itu dan Anda akan dengan cepat memutuskan apakah Anda ingin menanggung kerumitan setiap orang menggunakan Xcode atau jika membayar untuk Apple untuk menandatangani aplikasi Anda masuk akal.

Jika Anda mengandalkan iOS 9 yang bukan pengembang menandatangani dengan ID Apple lama, penguji Anda semua harus masuk dengan ID Apple Anda untuk menjalankan aplikasi.

Anda dapat membayar Apple untuk menangani akun dan menandatanganinya dengan membayar selama satu tahun akun pengembang. Kemudian Anda dapat mengirim email, membuka aplikasi di server mana pun, menggunakan TestFlight atau metode lainnya yang lebih mudah bagi Anda selain membagikan ID Apple Anda kepada penguji / pengguna aplikasi.

Anda selalu dapat mengirim kode sumber ke saudara Anda jika ia memiliki Xcode, tetapi Anda menyebutkan bahwa maksudnya adalah tidak memiliki seseorang yang memiliki Mac untuk menginstal dan menandatangani aplikasi.

Memecah penjara lebih mudah daripada memalsukan rantai sertifikat Apple, tetapi saya tidak merekomendasikan hal itu.

bmike
sumber
Di mana penguji harus masuk dengan ID Apple saya, untuk menjalankan aplikasi yang tidak ditandatangani pengembang?
ziggurisme
Dalam Xcode menggunakan Mac Anda adalah yang termudah. Saya minta mereka mengirimi Anda ponsel mereka untuk memuat aplikasi jika tidak bisa ke Xcode ...
bmike
Ya, instalasi dari Xcode melalui USB berfungsi dengan baik. Pertanyaan saya adalah tentang kemungkinan distribusi / instalasi jarak jauh. StackExchange melakukannya untuk aplikasi beta mereka. Saya ingin melakukannya juga.
ziggurisme
@ziggurism SE membayar sertifikat perusahaan. Anda perlu sedikit dokumen hukum untuk mewujudkannya. Ditambah beberapa ratus $ setiap tahun. TestFlight adalah opsi yang lebih murah dan lebih sedikit area abu-abu. Apa yang SE lakukan sepertinya bukan "berdasarkan buku" sesuai dengan lisensi untuk sertifikat yang mereka gunakan, tetapi saya bukan pengacara ...
bmike