Jadi saya mencoba menggunakan API Shopify. Ketika saya mengarsipkan aplikasi dan memvalidasinya maka tidak ada masalah tetapi ketika saya mengirimkannya ke app store maka itu memberi saya masalah berikut.
- ERROR ITMS-90087: "Arsitektur Tidak Didukung. Eksekusi Anda mengandung arsitektur yang tidak didukung '[x86_64, i386]'."
- ERROR ITMS-90209: "Alignment segmen tidak valid. App Binary di SJAPP.app/Frameworks/Buy.framework/Buy tidak memiliki keselarasan segmen yang tepat. Cobalah membangun kembali aplikasi dengan versi Xcode terbaru." (Saya sudah menggunakan versi terbaru.)
- GALAT ITMS-90125: "Biner tidak valid. Info enkripsi di perintah load LC_ENCRYPTION_INFO hilang atau tidak valid, atau biner sudah dienkripsi. Biner ini sepertinya tidak dibuat dengan Apple's Linker."
- PERINGATAN ITMS-90080: "Payload yang Dapat Dieksekusi / ........../ Buy.framework bukanlah Posisi yang Dapat Dieksekusi Independen. Harap pastikan bahwa pengaturan build Anda dikonfigurasikan untuk membuat executable PIE."
Jawaban:
Masalahnya adalah bahwa kerangka kerja Beli berisi build untuk simulator (x86_64) dan perangkat yang sebenarnya (ARM).
Tentu saja, Anda tidak diperbolehkan mengirimkan binari untuk App Store ke arsitektur yang tidak didukung, jadi solusinya adalah "secara manual" menghapus arsitektur yang tidak dibutuhkan dari biner terakhir, sebelum mengirimkannya.
Daniel Kennett menghasilkan solusi yang bagus dan menyediakan skrip ini untuk ditambahkan ke tahap pembuatan:
Saya menggunakannya dan itu bekerja dengan sempurna.
EDIT: pastikan Anda melihat skrip yang dimodifikasi diposting oleh Varrry, karena ini memiliki beberapa masalah kecil.
sumber
Jawaban yang diberikan oleh pAkY88 berfungsi, tetapi saya menghadapi masalah yang sama dengan Mario A Guzman di https://stackoverflow.com/a/35240555/5272316 : setelah kami memotong arsitektur yang tidak digunakan, kami tidak dapat menjalankan skrip lagi karena mencoba menghapusnya tidak ada irisan, karena xcode tidak menanamkan kembali biner setiap saat. Gagasannya adalah - cukup hapus irisan i386 dan x86_64 saat membuat arsip, jadi saya memodifikasi skrip:
Skrip ini hanya menghapus irisan i386 dan x86_64 dari biner gemuk (jika ada) jika berjalan bukan untuk simulator (itu berarti folder tujuan tidak seperti "Debug-iphonesimulator").
Maaf, saya tidak terbiasa dengan skrip shell, jadi mungkin seseorang bisa menulisnya dengan cara yang lebih elegan. Tapi berhasil)
sumber
case "${TARGET_BUILD_DIR}" in *"iphonesimulator") echo "Skip simulator target"; continue ;; esac
dan itu bekerja seperti pesona.TARGET -> Build Phases -> [CP] Embedded Pods Frameworks
tetapi tidak berhasil dan saya masih mengunggah kesalahan iTunesConnect. Bagaimana cara menjalankan skrip ini?Jika Anda menggunakan Carthage maka Anda mungkin mengalami masalah ini karena proyeknya adalah:
carthage copy-frameworks
fase pembuatan.Tindakan ini menyaring kerangka kerja ke daftar arsitektur (kode) yang valid .
Menyiapkan fase pembuatan kerangka kerja salinan
Dari gedung Carthage untuk langkah-langkah iOS :
sumber
$(SRCROOT)/Carthage/Build/iOS/Marshal.framework
berhasilSaya menyelesaikan kesalahan ITMS-90080 dengan menghapus kerangka kerja (SVProgressHUD yang sangat baik) dari bagian Embedded Binaries (target Xcode -> tab General).
sumber
Jika Anda menggunakan
Carthage
pastikan AndaEmbed Frameworks
Build Step
sebelumCarthage
copy-frameworks
Dalam beberapa kasus yang tidak biasa (contoh: Lottie-iOS framework):
Anda akan memilikinya hanya di "Link Library" seperti biasa.
Namun Anda juga harus menambahkannya secara eksplisit di "Kerangka Kerja Sematan" (meskipun tampaknya tidak ada gunanya, karena ia bekerja dengan sempurna saat Anda hanya memilikinya di "Kerangka Kerja Sematan"),
dan letakkan di copy-frameworks
dan memastikan copy-framework setelah "Embed Frameworks"
sumber
Hapus [x86_64, i386] dari framework menggunakan langkah di bawah ini. [x86_64, i386] digunakan untuk simulator.
Buka
Terminal
buka jalur seret proyek Anda dari masing-masing kerangka kerja ke Terminal
contoh:
cd /Users/MAC/Desktop/MyProject/Alamofire.framework
setel nama Kerangka Anda di bawah perintah dan jalankan
lipo -remove i386 Alamofire -o Alamofire && lipo -remove x86_64 Alamofire -o Alamofire
sumber
Saya akan menambahkan 2 sen saya di sini (dengan cara yang kurang menakutkan :-). Saya telah menemukan cukup banyak perpustakaan gemuk dari Vendor yang (karena alasan tertentu) tidak berfungsi seperti biasa dengan menambahkannya ke
Frameworks
direktori seperti yang didokumentasikan oleh Apple. Satu-satunya cara kita telah mampu membuat pekerjaan mereka adalah dengan menarik.framekwork
tepat ke direktori proyek dan menghubungkanEmbedded Frameworks
danLink Binary with Libraries
manual di Settings Build. Ini tampaknya telah bekerja tanpa masalah, karena dengan perpustakaan gemuk mereka datang dengan Simulator Arsitektur asingi386
danx86_64
bersama denganarm
arsitektur.Cara cepat untuk memeriksa arsitektur di perpustakaan gemuk adalah
Yang mana harus mengeluarkan output seperti ini
Ini menegaskan bahwa Anda perlu "memotong lemak" (yaitu
i386
&x86_64
) dari kerangka kerja Anda sebelum mengunggah iTunesConnect Archival, yang tidak mengizinkan arsitektur ini (karena tidak didukung untuk iOS).Sekarang, semua jawaban (atau paling tidak beberapa jawaban) di sini memberikan Run Script yang luar biasa yang saya yakin berfungsi dengan sangat baik, tetapi hanya jika Kerangka Anda berada di
Frameworks
direktori. Sekarang kecuali Anda pecandu skrip shell, skrip tanpa modifikasi, tidak akan berfungsi untuk skenario yang saya jelaskan di atas. Namun, ada cara yang sangat sederhana untuk menyingkirkani386
&x86_64
arsitektur dari framework.Buka terminal di direktori proyek Anda.
Ubah direktori langsung menjadi
.framekwork
, seperticd YourProjectDir/YourProject/YourLibrary.framework
Jalankan serangkaian perintah seperti yang ditunjukkan di bawah ini-
Beberapa hal yang perlu diperhatikan di sini -
lipo -remove
harus dilakukan sekali agar setiap arsitektur dihapus.lipo
tidak memodifikasi file input, itu hanya menghasilkan file sehingga Anda harus menjalankanlipo -remove
satu kali untukx86_64
dani386
. Perintah di atas hanya melakukan itu dengan terlebih dahulu mengubah nama executable dan kemudian akhirnya menghapus lengkungan yang diinginkan, dan kemudian membersihkan sisa file. Dan itu saja, Anda seharusnya sekarang melihat tanda centang hijau di unggah Application Loader Archival ke iTunesConnect.Hal-hal yang perlu diingat : Langkah-langkah di atas hanya boleh dilakukan saat produksi membangun, karena
.framework
akan dilucuti dari arsitektur simulator, membangun di atas simulator akan berhenti bekerja (yang diharapkan). Dalam lingkungan pengembangan, seharusnya tidak perlu menghapus arsitektur dari.framework
file karena Anda ingin dapat menguji pada Simulator dan perangkat fisik. Jika pustaka Anda berada diFrameworks
folder dalam proyek maka silakan lihat jawaban yang diterima.sumber
Saya memiliki masalah yang sama bahkan setelah menambahkan skrip dan memperbarui kerangka kerja beberapa kali.
Pastikan di xCode, skrip ditambahkan di akhir, setelah embed. Saya pikir saya tidak sengaja memindahkan skrip sebelum kerangka kerja tertanam.
Catatan: Saya punya xCode 9.1
sumber
Hanya saja Anda harus menghapus framework dari Embedded Binaries dan cukup menambahkannya ke Linked Frameworks and Libraries.
Lihat tangkapan layar di bawah ini;
sumber
Terima kasih untuk semua jawaban di atas. Berikut ini skrip yang berfungsi dengan swift 4.2 dan 5 . Ganti string Your_Framework_Name dengan nama asli Framework Anda.
sumber
Masalah ini diselesaikan untuk saya dengan sedikit memodifikasi skrip run dari jawaban pAky88 dan mengeksekusi setelah menyertakan kerangka kerja. Pastikan juga untuk tidak mencentang kotak "Jalankan Script saja saat menginstal".
sumber
Saya menghapus arsitektur i386 & x64_86 dari Build Settings - Valid Architecture - Release, dan semuanya bekerja dengan baik.
Sekarang satu-satunya masalah adalah Anda tidak dapat menjalankan build RELEASE untuk tujuan pengujian pada SIMULATOR . Tetapi semudah Anda menghapus lengkungan, Anda dapat menambahkannya kembali jika Anda mau.
sumber
solusi sederhana yang berhasil untuk saya adalah
selesai!
sumber
Kesalahan ini (ITMS-90240) juga dapat disebabkan oleh pustaka statis (.a). inilah skrip untuk menghapus kelebihan arsitektur. Dalam Xcode tambahkan ini ke Target> BuildPhases> Klik tanda + dan pilih Run Script. Kemudian tempel ini ke dalam kotak skrip.
Script mencari file .a, memeriksa untuk melihat apakah itu berisi arsitektur yang menyinggung, kemudian jika itu membuat file .a baru tanpa arsitektur itu.
Untuk macOS:
Untuk iOS:
sumber
Saya memiliki masalah yang sama. Bahkan itu tidak berfungsi setelah menambahkan Run Script yang diberikan. Itu masalah terkait Xcode. Saya menggunakan Xcode versi 9.0 tetapi versi terbaru 9.2.
Jadi saya menginstal Xcode terbaru (9.2) dan berhasil.
sumber
Kerangka kerja Anda mengandung keduanya
ARM
danx86
kode, yang memungkinkan Anda untuk menggunakannya di perangkat atau di simulator. Jika Anda bermaksud untuk mengirimkan aplikasi ke App Store, jalankan skrip berikut untuk menghapus kode tidak aktif dari biner.1. Pilih target Anda di Project Navigator, dan klik Build Phases di bagian atas editor proyek.
2. Dari menu Editor, pilih Tambahkan Fase Pembuatan, lalu Tambahkan Fase Pembuatan Skrip Jalankan (atau klik tombol + di sudut kiri atas editor Bangun Fase).
3.Perbesar segitiga pengungkapan di sebelah fase pembuatan Run Script baru yang baru saja ditambahkan. Di kotak editor skrip, rekatkan yang berikut ini: bash
sumber
Berikut ini adalah skrip yang saya gunakan untuk secara khusus menghapus arsitektur satu kerangka saja dari file yang dapat dieksekusi.
Tambahkan skrip ini ke proyek Anda "Bangun Fase" dari target proyek Anda. Pastikan untuk mencentang kotak: "Jalankan skrip hanya saat menginstal"
sumber