Jadi saya mencoba untuk menggunakan shopify API. Ketika saya arsip aplikasi dan memvalidasi itu maka tidak ada masalah tapi ketika saya submit ke app store maka itu memberi saya masalah berikut.
Masalahnya adalah bahwa Membeli kerangka mengandung membangun untuk kedua simulator (x86_64) dan perangkat yang sebenarnya (ARM).
Tentu saja, anda tidak't diperbolehkan untuk mengirimkan ke App Store biner yang didukung arsitektur, sehingga solusinya adalah dengan "manual" hapus bagian yang tidak dibutuhkan arsitektur dari biner akhir, sebelum mengirimkan itu.
Daniel Kennett datang dengan solusi yang bagus dan menyediakan script ini untuk menambahkan untuk membangun tahap:
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done
Saya menggunakannya dan itu bekerja dengan sempurna.
EDIT: pastikan anda melihat modifikasi script diposting oleh Varrry, seperti yang satu ini memiliki beberapa masalah kecil.
Jawaban yang diberikan oleh pAkY88 bekerja, tapi saya menghadapi masalah yang sama seperti Mario Yang Guzman di https://stackoverflow.com/a/35240555/5272316: setelah kita memotong yang tidak terpakai arsitektur kita bisa't menjalankan script lagi karena mencoba untuk menghapus tidak ada irisan, karena xcode doesn't re-cantumkan biner setiap waktu. Ide itu - hanya menghapus i386 dan x86_64 irisan ketika gedung arsip, jadi saya modifikasi script:
echo "Target architectures: $ARCHS"
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
echo $(lipo -info "$FRAMEWORK_EXECUTABLE_PATH")
FRAMEWORK_TMP_PATH="$FRAMEWORK_EXECUTABLE_PATH-tmp"
# remove simulator's archs if location is not simulator's directory
case "${TARGET_BUILD_DIR}" in
*"iphonesimulator")
echo "No need to remove archs"
;;
*)
if $(lipo "$FRAMEWORK_EXECUTABLE_PATH" -verify_arch "i386") ; then
lipo -output "$FRAMEWORK_TMP_PATH" -remove "i386" "$FRAMEWORK_EXECUTABLE_PATH"
echo "i386 architecture removed"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_TMP_PATH" "$FRAMEWORK_EXECUTABLE_PATH"
fi
if $(lipo "$FRAMEWORK_EXECUTABLE_PATH" -verify_arch "x86_64") ; then
lipo -output "$FRAMEWORK_TMP_PATH" -remove "x86_64" "$FRAMEWORK_EXECUTABLE_PATH"
echo "x86_64 architecture removed"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_TMP_PATH" "$FRAMEWORK_EXECUTABLE_PATH"
fi
;;
esac
echo "Completed for executable $FRAMEWORK_EXECUTABLE_PATH"
echo $(lipo -info "$FRAMEWORK_EXECUTABLE_PATH")
done
Script ini hanya menghilangkan i386 dan x86_64 irisan dari lemak biner (jika ada) jika berjalan tidak untuk simulator (yang berarti folder tujuan isn't seperti "Debug-iphonesimulator").
Maaf, saya'm tidak akrab dengan shell script, jadi mungkin seseorang bisa menulis dengan cara yang lebih elegan. Tetapi bekerja)
Jika anda're menggunakan Carthage maka anda mungkin mengalami masalah ini karena proyek ini adalah:
carthage copy-kerangka
membangun tahap.Tindakan ini filter kerangka kerja untuk daftar arsitektur yang masih berlaku (code).
Dari Carthage bangunan untuk iOS langkah-langkah:
Pada aplikasi anda target' "Membangun Fase" tab pengaturan, klik "+" dan pilih icon "Baru Menjalankan Script Fase". Membuat Menjalankan Script di yang anda tentukan shell anda (ex: bin/sh), tambahkan isi sebagai berikut untuk script di bawah shell:
/usr/local/bin/carthage copy-kerangka
dan menambahkan path ke kerangka kerja yang ingin anda gunakan pada "Input File", misalnya:
$(SRCROOT)/Carthage/Membangun/iOS/Kotak.kerangka
$(SRCROOT)/Carthage/Membangun/iOS/Hasil.kerangka
$(SRCROOT)/Carthage/Membangun/iOS/ReactiveCocoa.kerangka
script Ini bekerja di sekitar sebuah Toko Aplikasi pengajuan bug dipicu oleh universal binari dan memastikan bahwa diperlukan bitcode-file yang terkait dan dSYMs disalin ketika pengarsipan.
Jika anda menggunakan Carthage
pastikan Cantumkan Kerangka
Membangun Langkah
sebelum Carthage
copy-kerangka
Dalam beberapa kasus yang tidak biasa (contoh: Lottie-iOS framework):
anda akan memiliki itu hanya di "Link Library" seperti biasa.
Namun anda harus juga **** secara eksplisit menambahkan "Cantumkan Kerangka" (meskipun itu tampaknya sia-sia, karena ia bekerja dengan sempurna bila anda memiliki itu hanya di "Cantumkan Kerangka"),
dan meletakkannya di copy-kerangka
dan memastikan copy-frameworks setelah "Cantumkan Kerangka"
Menghapus [x86_64, i386] dari kerangka dengan menggunakan langkah di bawah ini. [x86_64, i386] digunakan untuk simulator.
Buka Terminal
buka proyek anda drag jalan masing-masing framework untuk Terminal
contoh : cd /Pengguna/MAC/Desktop/MyProject/Alamofire.kerangka
lipo -menghapus i386 Alamofire -o Alamofire && lipo -menghapus x86_64 Alamofire -o Alamofire
Saya akan menambahkan saya 2 sen di sini (dalam kurang menakutkan cara :-). Saya telah mengalami cukup banyak lemak perpustakaan dari Vendor yang (untuk beberapa alasan) tidak bekerja dengan cara normal dengan menambahkan mereka ke Kerangka
direktori seperti yang didokumentasikan oleh Apple. Satu-satunya cara kita telah mampu untuk membuat mereka bekerja dengan menarik .framekwork
kan ke direktori proyek dan menghubungkan Tertanam Kerangka
dan Link Biner dengan Perpustakaan
secara manual pada Build Settings. Hal ini tampaknya telah bekerja tanpa masalah apapun, namun, seperti dengan lemak perpustakaan mereka datang dengan asing Simulator Arsitektur i386
dan x86_64
bersama dengan arm
arsitektur.
Cara cepat untuk memeriksa arsitektur pada lemak perpustakaan
$ cd 'Project_dir/Project'
$ lipo -info 'YourLibrary.framework/YourLibExec`
Yang harus meludah output seperti ini
Architectures in the fat file: YourLibrary.framework/YourLibExec are: i386 x86_64 armv7 arm64
Hal ini menegaskan bahwa anda akan perlu untuk "memangkas lemak" (yaitu i386
& x86_64
) dari kerangka sebelum iTunesConnect Arsip tanggal, yang doesn't memungkinkan arsitektur ini (karena mereka tidak didukung untuk iOS).
Sekarang, semua jawaban (atau minimal beberapa jawaban) di sini menyediakan indah ini Menjalankan Script yang saya yakin bekerja dengan sangat baik, tetapi hanya jika anda Framework berada di Kerangka
direktori. Sekarang kecuali anda adalah shell script pecandu, mereka script tanpa modifikasi, won't bekerja untuk skenario yang saya jelaskan di atas. Namun, ada cara yang sangat sederhana untuk menyingkirkan i386
& x86_64
arsitektur dari kerangka.
.framekwork
, seperticd YourProjectDir/YourProject/YourLibrary.kerangka
$ mv YourLibrary YourLibrary_all_archs
$ lipo -menghapus x86_64 YourLibrary_all_archs -o YourLibrary_some_archs
$ lipo -menghapus i386 YourLibrary_some_archs -o YourLibrary
$ rm YourLibrary_all_archs YourLibrary_some_archs
Beberapa hal yang perlu diperhatikan di sini - lipo -menghapus
harus dilakukan sekali untuk setiap arsitektur untuk menghapus. sedot
tidak memodifikasi file input, itu hanya menghasilkan sebuah file sehingga anda harus menjalankan lipo -menghapus
sekali x86_64
dan i386
. Perintah di atas hanya melakukan hal itu dengan terlebih dahulu mengubah nama executable dan kemudian akhirnya menghapus yang diinginkan gapura, dan kemudian membersihkan bagian kiri atas file. Dan yang's ini, anda sekarang harus melihat tanda centang hijau di Aplikasi Loader Arsip meng-upload ke iTunesConnect.
Hal yang perlu diingat : langkah-langkah di atas hanya boleh dilakukan saat produksi membangun, karena .kerangka
akan menanggalkan simulator arsitektur, membangun simulator akan berhenti bekerja (yang diharapkan). Dalam pengembangan lingkungan, harus ada tidak perlu untuk strip arsitektur off .kerangka
file karena anda ingin untuk dapat menguji pada kedua Simulator dan perangkat fisik. Jika anda lemak perpustakaan berada di Kerangka
folder dalam project maka silahkan lihat jawaban yang diterima.
Aku punya masalah yang sama bahkan setelah menambahkan script dan memperbarui kerangka beberapa kali.
Pastikan di xCode script yang ditambahkan di akhir, setelah cantumkan. Aku pikir aku sengaja pindah script sebelum tertanam framework.
Catatan: saya memiliki xCode 9.1
Masalah ini diatasi untuk saya dengan sedikit memodifikasi menjalankan script dari pAky88's jawaban dan mengeksekusi setelah embedding kerangka. Juga pastikan untuk hapus centang pada kotak untuk "Menjalankan Script hanya ketika menginstal".
/usr/local/bin/carthage copy-frameworks
#!/usr/bin/env bash
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
if [ ! -f "${FRAMEWORK_EXECUTABLE_PATH}" ]; then
continue
fi
if xcrun lipo -info "${FRAMEWORK_EXECUTABLE_PATH}" | grep --silent "Non-fat"; then
echo "Framework non-fat, skipping: $FRAMEWORK_EXECUTABLE_NAME"
continue
fi
echo "Thinning framework $FRAMEWORK_EXECUTABLE_NAME"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
xcrun lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
xcrun lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done
Saya dihapus arsitektur i386 & x64_86 dari Membangun Pengaturan - Sah Arsitektur - Rilis, dan semuanya bekerja baik-baik saja.
Sekarang satu-satunya masalah adalah bahwa anda dapat't menjalankan RILIS membangun untuk tujuan pengujian pada SIMULATOR. Tapi semudah anda dihapus gapura, anda dapat menambahkan mereka kembali jika anda ingin.
Terima kasih untuk semua jawaban diatas. Berikut ini adalah script bekerja dengan swift 4.2 dan 5
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
FRAMEWORK_NAME="Your_Framework_Name.framework"
# Check if Framework is present.
FRAMEWORK_LOCATION=$(find "$APP_PATH" -name "$FRAMEWORK_NAME" -type d)
if [ -z $FRAMEWORK_LOCATION ]; then
echo "Couldn't find Your_Framework_Name.framework in $APP_PATH. Make sure 'Embed Frameworks' build phase is listed before the 'Strip Unused Architectures' build phase."
exit 1
fi
# This script strips unused architectures
find "$APP_PATH" -name "$FRAMEWORK_NAME" -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done
Aku punya masalah yang sama. Bahkan itu tidak bekerja setelah menambahkan diberikan Menjalankan Script. Itu Xcode terkait masalah ini. Saya menggunakan Xcode versi 9.0 tapi terbaru versi 9.2.
Jadi saya instal Xcode terbaru (9.2) dan itu berhasil.
Kesalahan ini (ITMS-90240) juga dapat disebabkan oleh statis (.a) perpustakaan. heres script untuk menghapus kelebihan arsitektur. Dalam Xcode menambahkan ini ke Target > BuildPhases > Klik tanda + dan pilih Run Script. Kemudian paste ke script kotak.
Script pencarian untuk .sebuah file, memeriksa untuk melihat jika itu berisi menyinggung arsitektur, maka jika itu tidak membuat yang baru .file tanpa arsitektur itu.
Untuk macOS:
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
STRIPARCHS="armv7 armv7s arm64"
for t in $STRIPARCHS
do
if find "$APP_PATH" -name '*.a' -exec lipo -info {} \; | grep $t ; then
find "$APP_PATH" -name '*.a' -exec lipo -remove $t {} -output {}2 \; -exec rm {} \; -exec mv {}2 {} \; ;
fi
done
exit 0
Untuk iOS :
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
STRIPARCHS="x86_64 i386"
for t in $STRIPARCHS
do
if find "$APP_PATH" -name '*.a' -exec lipo -info {} \; | grep $t ; then
find "$APP_PATH" -name '*.a' -exec lipo -remove $t {} -output {}2 \; -exec rm {} \; -exec mv {}2 {} \; ;
fi
done
exit 0
Anda framework berisi LENGAN
dan 86
code, yang memungkinkan anda untuk menggunakannya pada perangkat atau di simulator. Jika anda berniat untuk mengirimkan aplikasi anda ke App Store, jalankan script berikut ke jalur yang tidak aktif kode biner.
1.Pilih target anda dalam Proyek Navigator, dan klik Membangun Fase di atas proyek editor.
2.Dari menu Editor, pilih Tambahkan Membangun Fase, kemudian Tambahkan Menjalankan Script Membangun Fase (atau klik tombol + di pojok kiri atas dari Membangun Fase editor).
3.Memperluas pengungkapan segitiga di sebelah baru Menjalankan Script membangun fase yang baru saja ditambahkan. Dalam kotak editor skrip, paste kode berikut: bash
${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/"YourframeworkName.framework"/strip-frameworks.sh
Berikut ini adalah script yang saya digunakan khusus untuk menghapus salah satu framework's arsitektur dari file executable.
``bash
FRAMEWORK_EXECUTABLE_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}/Frameworks/YourApp.framework/YourApp"
echo "$FRAMEWORK_EXECUTABLE_PATH"
cp "$FRAMEWORK_EXECUTABLE_PATH", "${FRAMEWORK_EXECUTABLE_PATH}_X86_64"
echo "Melaksanakan perintah berikut untuk menghapus x86_64 lengkungan dari YourApp kerangka eksekusi" echo "lipo -menghapus x86_64 \"$FRAMEWORK_EXECUTABLE_PATH\" -o \"${FRAMEWORK_EXECUTABLE_PATH}_X86_64\""
lipo -menghapus x86_64 "${FRAMEWORK_EXECUTABLE_PATH}_X86_64" -o "$FRAMEWORK_EXECUTABLE_PATH"
rm "${FRAMEWORK_EXECUTABLE_PATH}_X86_64"
``
Tambahkan script ini untuk proyek-proyek anda "Membangun Fase" proyek anda target. Pastikan untuk memeriksa kotak: "Menjalankan script hanya ketika menginstal"