Kesalahan Validasi: Bundel Tidak Valid. Bundel di ... berisi file 'Kerangka' yang tidak dibolehkan

165

Saya mencoba mengirimkan aplikasi dengan Xcode6 GM, dan saya mendapatkan kesalahan ini saat validasi. Aplikasi ini memiliki ekstensi tindakan dan kerangka kerja dinamis yang dibagikan antara ekstensi dan aplikasi itu sendiri.

Saya tidak memiliki file yang disebut 'Kerangka Kerja' di mana saja dalam proyek ini, jadi saya benar-benar tidak yakin apa artinya ini. Adakah yang mendapatkan masalah ini atau punya ide?inilah kesalahannya

Mike
sumber
Bagaimana dengan folder bernama Kerangka?
borrrden
Ada 'grup' di proyek yang disebut Frameworks, tetapi tidak ada folder. Saya menghapusnya, mengarsip ulang, dan saya masih mendapatkan kesalahan yang sama.
Mike

Jawaban:

308

Ternyata kesalahan itu terkait dengan menggunakan Swift (baik aplikasi dan ekstensi memanfaatkan Swift).

Untuk aplikasi, saya harus mengatur:

Embedded Content Contains Swift Code: YES

dan untuk ekstensi:

Embedded Content Contains Swift Code: NO

Xcode 8 dan 9

Sepertinya ini telah diubah namanya menjadi Always Embed Swift Standard Librariesdi Xcode 8 dan 9. Jadi, untuk aplikasi:

Always Embed Swift Standard Libraries: YES

dan untuk ekstensi:

Always Embed Swift Standard Libraries: NO
Mike
sumber
7
Anda adalah penyelamat saya. "Tertanam" berarti ekstensi dalam bundel, dan karena ekstensi tidak mengandung lebih banyak ekstensi, ekstensi tidak mengandung kode cepat.
Chris Truman
2
Ini tidak menyelesaikan masalah bagi saya. Saya juga menggunakan CocoaPods. Adakah yang melihat masalah yang berkaitan dengan itu? Ada ide lain?
timschmitz
8
Jangan lupa dengan ekstensi WatchKit untuk memastikan bahwa Runpath Search Path telah@executable_path/../../Frameworks
Tn. Rogers
1
@ Mr.Rogers Inilah yang memecahkan masalah saya setelah mengikuti jawabannya. Saya memiliki aplikasi objC dengan arloji cepat. Akan berjalan dengan baik tanpa mengatur konten yang disematkan, namun mendapat penolakan dari apple. Mengatur konten yang disematkan dengan benar, hancurkan aplikasi. Jalur pencarian inilah yang memperbaikinya.
Beau Nouvelle
1
Ini tidak bekerja untuk saya, saya perlu melakukan sesuatu yang lain dan berada di ekstensi Target yang memiliki masalah, saya menghapus skrip pada "[CP * Embed Pods Frameworks" setelah ini Ini berfungsi dengan benar !!
A. Trejo
122

Satu-satunya solusi yang berhasil bagi saya adalah menambahkan Run Script ini ke target Ekstensi Aplikasi:

cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then 
    rm -fr Frameworks
fi

masukkan deskripsi gambar di sini Sumber: https://github.com/CocoaPods/CocoaPods/issues/4203

Roma
sumber
7
Aplikasi saya tidak menggunakan Swift jadi ini adalah satu-satunya perbaikan yang bekerja untuk saya juga.
Dan Loughney
6
Layak disebutkan bahwa ini hanya perlu ditambahkan ke ekstensi, bukan target utama.
theDuncs
3
Ini memang memecahkan masalah, tetapi memberikan masalah lain yaitu saya tidak dapat menjalankan aplikasi saya di simulator maupun di perangkat saya. Ini memberikan kesalahan: dyld: Library not loaded: ... Image not foundAdakah yang bisa membantu saya?
Subkhan Sarif
4
Apakah hanya saya atau ini yang gila?
bkbeachlabs
1
Tetap pada validasi .ipa tetapi gagal pada pemasangan dengan pesan kesalahan: dyld: Library tidak dimuat: @ rpath / AFNetworking.framework / AFNetworking Dirujuk dari: / var / container / Bundle / Aplikasi / .... Alasan: gambar tidak ditemukan
Aleem
45

Jadi 3 langkah untuk memperbaikinya dari pengaturan build

  1. Aplikasi kontainer: Embedded Content Contains Swift Code: YES
  2. Perpanjangan: Embedded Content Contains Swift Code: NO
  3. Ekstensi: Jalur Pencarian Runpath = @executable_path/../../Frameworks
Vincent Song
sumber
2
Container vs Extension, saya baru mengenal Xcode. di mana itu, apakah pod kakao ekstensi? atau di mana dua hal ini berada?
Serge Pedroza
16

Dalam kasus saya, saya baru saja memutakhirkan ke CocoaPods 1.0.1 dan ini tampaknya merupakan bug baru.

Pembaruan Pod menambahkan skrip run ke target Extension saya yang membuat folder Frameworks. Saya menemukannya ketika saya hendak menambahkan skrip run @ Roman untuk menghapusnya.

Solusi adalah menghapus skrip ini dari fase build ekstensi saya. Inilah yang harus pergi ...

masukkan deskripsi gambar di sini

Dan Loughney
sumber
7
Memecahkannya untukku! Sekali lagi CocoaPods membuat saya harus membayar lebih dari satu jam untuk mencari tahu apa yang salah. Saya memiliki hubungan cinta dan benci yang serius dengan produk itu.
fguchelaar
2
Meng-upgrade Cocoapods untuk 1.1.0.rc.2menyelesaikan masalah bagi saya.
Otávio
1
Menghapus Kerangka Pod Embed di bawah Fase Build extention Keyboard berfungsi untuk saya! Saya menggunakan Xcode 8 dan CocoaPods v1.0.1. Terima kasih!
Storm Factory
13

Hapus Setiap Fase Pembuatan untuk ekstensi Anda yang memiliki embedkata dalam judulnya.

Selain itu:

  • Konten tertanam berisi kode Swift harus diatur ke Yesuntuk target ekstensi.
Bartłomiej Semańczyk
sumber
11

Tidak ada jawaban di atas yang berfungsi untuk saya. Ini karena kesalahan itu bukan disebabkan oleh aplikasi induk atau ekstensi itu. Sebaliknya salah satu perpustakaan yang terhubung salah.

Untuk mengonfirmasi, arsipkan dulu menggunakan Xcode kemudian gunakan Agenda pilih entri dan cari menggunakan Show in Finder. Ini akan menampilkan .xcarchivefile.

Pilih file itu dan pilih "Tampilkan Isi Paket".

Pilih .app di folder Produk / Aplikasi dan pilih lagi "Tampilkan Isi Paket".

Temukan modul yang melanggar di folder Frameworks. Misalnya jika kesalahannya adalah:

ERROR ITMS-90206: "Invalid Bundle. The bundle at 'MyApp.app/Frameworks/MyLib.framework' contains disallowed file 'Frameworks'."

Maka di Frameworks/MyLib.frameworkbawah ini mungkin akan terlihat:

../Frameworks/libswiftContacts.dylib
../Frameworks/libswiftCore.dylib
../Frameworks/libswiftCoreData.dylib
../Frameworks/libswiftCoreGraphics.dylib
../Frameworks/libswiftCoreImage.dylib
../Frameworks/libswiftCoreLocation.dylib
../Frameworks/libswiftDarwin.dylib
../Frameworks/libswiftDispatch.dylib
../Frameworks/libswiftFoundation.dylib
../Frameworks/libswiftLocalAuthentication.dylib
../Frameworks/libswiftObjectiveC.dylib
../Frameworks/libswiftPassKit.dylib
../Frameworks/libswiftUIKit.dylib
../Frameworks/libswiftWebKit.dylib

Ini hadir karena pustaka tertaut - atau modul - yang menyertakan aplikasi induk memiliki EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;

Temukan modul dependen dalam Xcode dan perbarui benderanya:

masukkan deskripsi gambar di sini

Perhatikan bahwa setelah mengatasi masalah ini aplikasi masih dapat ditolak dengan email penjelasan dari iTunes Store:

Invalid Swift Support - The Watch OS application has Swift libraries at both...

Sekali lagi ini kembali ke EMBEDDED_CONTENT_CONTAINS_SWIFTbendera. Pastikan hanya aplikasi induk yang diatur untuk ini YES. Aplikasi dan ekstensi WatchKit harus memiliki flag ini NO. Ini sebagaimana dirinci dalam jawaban @ Mike di atas.

Max MacLeod
sumber
10

Dalam kasus saya, ada satu pustaka CocoaPod "Blockly" yang menentukan Ya untuk "Pustaka Standar Selalu Tanam Swift". Setelah membuat TIDAK untuk opsi, itu berhasil.masukkan deskripsi gambar di sini

suztomo
sumber
9

Dalam kasus saya, solusinya adalah menghapus kerangka kerja saya dari Binari Tertanam ekstensi saya dan menambahkannya ke Kerangka dan Pranala Tertaut ekstensi saya. (Keduanya dapat ditemukan di tab Umum ekstensi.)

Pim
sumber
7

Jika Embed Pods Frameworks script dan Roman's script keduanya ada di target yang sama.

Silakan periksa apakah Kerangka Pod Embed menempatkan sebelum yang lain. Jika tidak, cukup pindahkan skrip Roman ke yang terakhir.

Reeonce Zeng
sumber
Anda luar biasa @Reeonce Zeng, selamatkan hari saya!
mgyky
Haruskah saya menyimpan kedua skrip di sana atau hanya bagian terakhir? "$ {SRCROOT} / Pods / File Dukungan Target / Pods-Orsys Extension WatchKit / Pods-Orsys WatchKit Extension-frameworks.sh" cd "$ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /" ["] ]; kemudian rm -fr Frameworks fi
@stack, Anda harus menambahkan fase skrip run baru, dan isi dengan: `cd" $ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} / "jika [[-d" Frameworks "]]; lalu rm -fr Frameworks fi `
Reeonce Zeng
apa maksudmu dengan menjalankan skrip baru? kami sudah memiliki skrip di sana. baik ? mengganti script lama, haruskah saya menjalankan proyek sekali dengan mengganti teks Anda. APAKAH saya harus memilih opsi "menjalankan skrip saat menginstal program" di sana?
tolong, bantu saya sedikit lagi. Saya mendapat kesalahan untuk ekstensi wathckit. Dalam proyek ekstensi watchkit saya, tidak ada opsi / menu / tab "perbaiki appex yang tidak diizinkan ..." di proyek saya. dimana saya bisa menemukannya? Saya hanya memiliki "Kerangka kerja pod sematan" dan "copy kerangka kerja pod". Tolong bantu.
6

Saya tidak dapat menemukan pengaturan apa pun untuk Embedded Content Contains Swift Codetetapi saya dapat menemukan pengaturan Always Embed Swift Standard Librariesdan pengaturan ini untuk TIDAK untuk kerangka kerja saya memang memperbaiki masalah ini.

Gujamin
sumber
4
  1. Aplikasi Kontainer: Pengaturan Bangun -> Konten Tertanam Berisi Kode Swift: YES
  2. Ekstensi: Pengaturan Bangun -> Konten Tertanam Berisi Kode Swift: NO
  3. Extension: Build Phase -> menambahkan Run Script berikut di

cd "$ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /" jika [[-d "Frameworks"]]; kemudian rm -fr Frameworks fi

  1. (Penting) Ekstensi: Bangun Fase -> pindahkan Run Script ke Last (setelah skrip Embed Pods Frameworks)
Yongxiang Ruan
sumber
"Sampai Terakhir" adalah bagian yang penting bagi saya, terima kasih.
Andy Obusek
3

Jika Anda menggunakan CocoaPods, saya akan mempertimbangkan menghapus fase membangun kerangka kerja Embed pada target yang bermasalah (ekstensi), ini memperbaiki masalah bagi saya.

Kurt J
sumber
2

Saya mendapatkan kesalahan yang sama, dan itu karena saya menyalin kerangka kerja ke dalam bundel ekstensi. Ternyata, kerangka kerja yang digunakan oleh ekstensi harus disalin ke bundel Aplikasi Utama dan hanya ditautkan dalam pengaturan build ekstensi (tidak disalin). Pastikan untuk memiliki jalur pencarian '@executable_path /../../ Kerangka Kerja' dalam pembuatan ekstensi. Saya pikir jalur itu ditambahkan secara otomatis oleh XCode 10.

Zatman
sumber
1

Saya menemukan banyak pertanyaan seperti ini dan tidak ada yang membantu saya memperbaiki masalah saya, jadi semoga ini dapat membantu seseorang.

Saya membuat aplikasi yang memiliki ekstensi Intent (untuk pintasan Siri) dan saya menggunakan kerangka kerja untuk kode yang dibagikan antara ekstensi dan aplikasi saya, seperti yang direkomendasikan oleh Apple.

Saya telah menambahkan kerangka kerja saya ke ekstensi saya di bagian "Kerangka Kerja dan Perpustakaan" pada pengaturan "Umum" untuk target. Saat Anda menambahkan kerangka kerja di sini, ada dua kolom. Satu mengatakan nama kerangka kerja dan yang lainnya berjudul "Sematkan". Saya tidak menemukan apa pun di kolom "Sematkan" jadi saya pikir itu baik-baik saja, tetapi saya harus secara eksplisit memilih opsi "Jangan Sematkan" untuk kolom itu untuk kerangka kerja saya. Ketika saya melakukan itu dan mengarsipkan dalam Xcode, saya bisa melihat selama validasi bahwa framework tidak terdaftar dalam konten ipa saya di bawah setiap target lagi, tetapi hanya sekali, dan validasi akhirnya berhasil.

Belle B. Cooper
sumber
0

Saya mengalami masalah ini pertama kali dengan XCode 7.1.1 untuk aplikasi saya yang memiliki Ekstensi Hari Ini (tidak ada Swift dalam proyek saya). Skrip ( https://github.com/CocoaPods/CocoaPods/issues/4203 ) tidak berfungsi untuk saya.

Menurunkan versi cocoapods ke versi 0.39.0.beta.3, menjalankan pod install, dan kemudian mengarsipkan kembali menyelesaikan masalah.

andreacipriani
sumber
0

Saya mendapatkan kesalahan yang sama, bersama dengan

Tidak dibolehkan galat kumpulan yang disarangkan

Masalah saya adalah dengan SquareReaderSDK.frameworkspesifik tetapi saya harus menambahkan skrip run baru sesuai instruksi mereka:

FRAMEWORKS="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}"
"${FRAMEWORKS}/SquareReaderSDK.framework/setup"
jujur
sumber
0

Tidak ada Pengaturan Bangun yang tercantum di sini yang menyelesaikan masalah ini untuk saya. Namun, saya berhasil menjalankannya setelah memindahkan beberapa kerangka kerja dari "Biner Tertanam" ke "Kerangka Kerja Tertaut dan Pustaka".

Tampaknya aplikasi utama saya dan salah satu kerangka kerja kustom saya memiliki ketergantungan kerangka kerja yang sama di keduanya dan yang tampaknya menjadi Tidak, tetapi memindahkannya di aplikasi utama saya dari area Tertanam ke area Tertaut memungkinkan saya untuk mengunggah aplikasi dengan sukses dengan tidak ada kesalahan.

Travis M.
sumber