การสนับสนุน Swift ไม่ถูกต้อง - ไฟล์ไม่ตรงกัน


116

ฉันเพิ่งเขียนแอปใหม่ใน Swift 2 ฉันกำลังพยายามอัปโหลดแอปไปยัง iTunesConnect (ผ่าน Xcode 7 GM) เพื่อทำการทดสอบภายใน

ฉันพบข้อผิดพลาด "Invalid Swift Support" มาสักพักแล้ว ( ซึ่งมีคำถามอื่น ๆ ที่เกี่ยวข้อง ) ... แต่ตอนนี้มันเปลี่ยนไปเล็กน้อย

ข้อผิดพลาดจาก Apple ตอนนี้บอกว่า:

การสนับสนุน Swift ไม่ถูกต้อง

ไฟล์ libswiftCoreLocation.dylib, libswiftCoreMedia.dylib, libswiftCoreData.dylib, libswiftAVFoundation.dylib ไม่ตรงกัน

/Payload/App.app/Frameworks/libswiftCoreLocation.dylib, /Payload/App.app/Frameworks/libswiftCoreMedia.dylib, /Payload/App.app/Frameworks/libswiftCoreData.dylib, /Payload/App.app/Frameworks/AV dylib

ตรวจสอบให้แน่ใจว่าไฟล์ถูกต้อง (?) สร้างแอพของคุณใหม่และส่งใหม่

อย่าใช้หลังการประมวลผลกับ

/Payload/App.app/Frameworks/libswiftCoreLocation.dylib, /Payload/App.app/Frameworks/libswiftCoreMedia.dylib, /Payload/App.app/Frameworks/libswiftCoreData.dylib, /Payload/App.app/Frameworks/AV dylib

ฉันไม่พบข้อผิดพลาดที่คล้ายกันนี้โดยค้นหา "ไม่ใช้ขั้นตอนหลังการประมวลผล" "ตรวจสอบว่าไฟล์ถูกต้องสร้างแอปของคุณใหม่และส่งใหม่" ฯลฯ

มีใครทราบบ้างว่าฉันสามารถ "ตรวจสอบว่าไฟล์ถูกต้อง" หรือมีคำแนะนำอื่น ๆ ได้อย่างไร ขอบคุณ.


ฉันมีปัญหาเดียวกัน วิธีแก้ปัญหาใด ๆ
Beny Boariu

คุณจะลาออกจากแอพนี้หรือไม่? นี่เป็นการอัปโหลดโดยตรงจาก Xcode หรือไม่
Andy

@Andy อัปโหลดโดยตรงจาก Xcode ทันทีหลังจากเก็บถาวร
แดน

คำตอบ:


82

ปัญหาเดียวกันที่นี่ ฉันคิดว่านี่น่าจะเป็นจุดบกพร่องของเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ที่เกี่ยวข้องกับ Bitcode

ฉันเพิ่งพบวิธีแก้ปัญหาสำหรับสิ่งนี้

  1. เก็บแอปของคุณด้วยหมายเลขรุ่นใหม่ :(
  2. ค้นหาที่เก็บถาวร (ไฟล์. xcarchive) ใน Finder จาก Organizer“ Show in Finder”
  3. เปิดแพ็คเกจและค้นหาไดเร็กทอรีเช่นProducts/Applications/YourApp.ipa/Frameworks/และSwiftSupport/iphoneos/
  4. คัดลอกlibswiftXxx.dylibไฟล์ทั้งหมดจากSwiftSupport/iphoneos/ลงในProducts/Applications/YourApp.ipa/Frameworks/และเขียนทับ
  5. ตอนนี้อัปโหลดไปยัง App Storeจาก Organizer

ด้วยกระบวนการนี้ฉันประสบความสำเร็จในการอัปโหลดงานสร้างของฉัน ตอนนี้ฉันกำลังรอการตรวจสอบ

บันทึก:

ฉันใช้ CocoaPods และENABLE_BITCODEตัวเลือกคือ NO


คุณกำหนดเป้าหมาย iOS SDK แบบใด ฉันคิดว่าคุณไม่สามารถส่งไปที่ร้านได้โดยปิดการใช้งาน bitcode
JAL

3
ในกรณีของฉัน SwiftSupport / iphoneos / ว่างเปล่า
Lim Thye Chean

2
การตรวจสอบความถูกต้องสำหรับฉันสำเร็จแล้ว แต่การสร้างยังอยู่Processingหลังจาก ~ 12 ชั่วโมงในส่วนก่อนวางจำหน่ายของ iTunes Connect
ldiqual

2
เฮ้ขอบคุณสำหรับสิ่งนี้! ฉันยังคงได้รับคำเตือนเกี่ยวกับไฟล์การวิเคราะห์ API ที่มีขนาดใหญ่เกินไปcl.ly/image/0s0N0s441s0Xแต่สิ่งสำคัญคือมันยังผ่านและสามารถเข้าสู่ TestFlight ได้
ded

1
ฉันควรทำอย่างไรหากไม่มีโฟลเดอร์ SwiftSupport / iphoneos / ใน. ipa ของฉัน
Alexander Yakovlev

51

แก้ไข: CocoaPods 0.39.0ได้รับการเผยแพร่ซึ่งแก้ไขปัญหานี้ได้!

ในฐานะที่เป็นที่กล่าวถึง @orkensteinมีวิธีการแก้ปัญหาที่ง่ายPod-frameworks.shโดยการแสดงความคิดเห็นออกรหัสบางอย่างใน ฉันรวมรายละเอียดเพิ่มเติมไว้ที่นี่

ในไดเรกทอรีโครงการ Xcode ของคุณเปิด Pods/Target Support Files/Pods/Pods-frameworks.sh

แสดงความคิดเห็นตามบรรทัดต่อไปนี้:

# Embed linked Swift runtime libraries
local basename
basename="$(basename "$1" | sed -E s/\\..+// && exit ${PIPESTATUS[0]})"
local swift_runtime_libs
swift_runtime_libs=$(xcrun otool -LX "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/${basename}.framework/${basename}" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
for lib in $swift_runtime_libs; do
  echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
  rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
  code_sign_if_enabled "${destination}/${lib}"
done

=>

# Embed linked Swift runtime libraries
# local basename
# basename="$(basename "$1" | sed -E s/\\..+// && exit ${PIPESTATUS[0]})"
# local swift_runtime_libs
# swift_runtime_libs=$(xcrun otool -LX "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/${basename}.framework/${basename}" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
# for lib in $swift_runtime_libs; do
#   echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
#   rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
#   code_sign_if_enabled "${destination}/${lib}"
# done

ประหยัดPods-frameworks.shและคุณควรจะไป!


4
สิ่งนี้ได้ผลสำหรับฉัน โปรดทราบหากคุณเรียกใช้ pod-install หรือ pod-update คุณอาจต้องแสดงความคิดเห็นอีกครั้ง!
Max Alexander

ปัญหา Cocoapods ที่นี่: github.com/CocoaPods/CocoaPods/issues/4188คุณสามารถลองใช้ PR นี้: github.com/CocoaPods/CocoaPods/pull/4221พร้อมคำแนะนำเหล่านี้: guide.cocoapods.org/using/unreleased-features
ldiqual

อัปเดต CocoPods 0.39.0 และไม่สามารถแก้ไขปัญหานี้ให้ฉันได้
nwales

@DJ Tarazona ขอบคุณสำหรับสูตรของคุณ !! มันเป็นเคล็ดลับสำหรับฉันโดยสิ้นเชิงแม้ว่าฉันจะอัปเดตอัญมณี cocopods เป็นเวอร์ชันล่าสุด
Jorge Vicente Mendoza

16

การแก้ไขสำหรับปัญหานี้ได้รวมเข้าด้วยกันและพร้อมใช้งานใน CocoaPods เวอร์ชันล่าสุด 0.39.0.beta.5

https://github.com/CocoaPods/CocoaPods/pull/4268

เพื่อรับ CocoaPods เวอร์ชันล่าสุดให้ทำงาน gem install cocoapods --pre

หรือทำตามคำแนะนำในการเรียกใช้คุณสมบัติที่ยังไม่ได้เผยแพร่: http://guides.cocoapods.org/using/unreleased-features

เมื่อคุณมี CocoaPods เวอร์ชันล่าสุดแล้วให้เรียกใช้pod installอีกครั้ง


นี่คือผู้ผลิตเงิน
tommybananas

น้ำตากำลังจะมา ขอบคุณ!
MQLN

ข้อผิดพลาดไม่ได้เกี่ยวข้องกับ CocoaPods โดยเฉพาะ เรากำลังประสบปัญหาเดียวกันและไม่ได้ใช้ CocoaPods
devios1

8

ฉันใช้ fastlane gym 1.9.0 เพื่อสร้างแอปของฉันและแอปเปิ้ลยังคงถูกปฏิเสธเนื่องจากไฟล์ไม่ตรงกันในขณะที่ฉันอัปโหลดผ่าน XCode 8 จะได้รับการยอมรับ ฉันตรวจสอบ libs ที่รวดเร็วในโฟลเดอร์การสนับสนุนที่รวดเร็วของ ipa และในโฟลเดอร์ Frameworks ฉันพบว่า libs ในโฟลเดอร์การสนับสนุนที่รวดเร็วนั้นมีไว้สำหรับ swift 2.3 ในขณะที่อยู่ในโฟลเดอร์ Frameworks นั้นรวดเร็ว 3 ดังนั้นในไฟล์ยิมของฉันฉันจึงเพิ่ม toolchain ตัวเลือก:

gym(
  scheme: "CoCadre", 
  configuration: "Production Release",
  clean: true,
  use_legacy_build_api: false,
  toolchain: "com.apple.dt.toolchain.Swift_2_3"
)

* โปรดทราบว่าฉันต้องเปลี่ยน use_legacy_build_api เป็น false เพื่อใช้ตัวเลือก toolchain

ในการใช้ตัวเลือก toolchain ต้องตั้งค่า use_legacy_build_api: false https://github.com/fastlane/fastlane/issues/6003#issuecomment-244792185


ขอบคุณ! ฉันใช้ Fastlane และ Gym ด้วยและสิ่งนี้ได้แก้ไขปัญหาแล้ว
Eystein Bye

ขอบคุณที่ช่วยแก้ไขปัญหาเมื่อใช้ยิมเช่นกัน โปรดทราบว่าฉันยังคงสามารถใช้โซลูชันนี้กับ use_legacy_build_api: true
Viktor Malyi

6

มีวิธีแก้ปัญหาที่ซับซ้อนน้อยกว่าเล็กน้อยที่พบในGitHub :

ฉันดูรอบ ๆ ในPods-frameworks.shและพบส่วนที่แสดงความคิดเห็นเป็น:

ฝังไลบรารีรันไทม์ Swift ที่เชื่อมโยงการ
แสดงความคิดเห็นบล็อกของรหัสที่คัดลอกไลบรารีเหล่านี้ไปทั่ว (และรหัสลงนาม) ดูเหมือนจะแก้ไขปัญหาในการส่งของฉัน ฉันยังไม่ได้เจาะลึกลงไปเพื่อดูว่าเป็นเพียงการคัดลอกซึ่งทำให้เกิดปัญหาหรือเป็นการเซ็นโค้ด ฉันเริ่มจากส่วนลึกของฉันที่นั่น


4
  1. อัปเดต cocoapods ของคุณเป็นเวอร์ชันล่าสุดพิมพ์sudo gem install cocoapodsในเทอร์มินัล
  2. เรียกใช้pod updateภายใต้ไดเรกทอรีของโครงการของคุณ
  3. อย่าลืมตั้งค่าEnable Bitcodeเป็นNOสำหรับDebugตัวเลือกสำหรับพ็อดทั้งหมดของคุณ
  4. แก้ไขแล้ว

ปัญหาได้รับการแก้ไขเนื่องจากรหัสต่อไปนี้ในPods-frameworks.sh:

# Embed linked Swift runtime libraries
local basename
basename="$(basename "$1" | sed -E s/\\..+// && exit ${PIPESTATUS[0]})"
local swift_runtime_libs
swift_runtime_libs=$(xcrun otool -LX "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/${basename}.framework/${basename}" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
for lib in $swift_runtime_libs; do
  echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
  rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
  code_sign_if_enabled "${destination}/${lib}"
done

ถูกเปลี่ยนเป็น:

# Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
    local swift_runtime_libs
    swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
  for lib in $swift_runtime_libs; do
    echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
    rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
    code_sign_if_enabled "${destination}/${lib}"
  done
fi

2

ทางออกของฉันสำหรับสิ่งนี้:

ฉันใช้ Reveal ผ่าน Cocoapods และ Reveal จำเป็นต้องปิดการใช้งาน Bitcode ดังนั้นฉันจึงรวม Reveal (ควรใช้กับ Framwork อื่น ๆ ) สำหรับ Debug เท่านั้น:

pod 'Reveal-iOS-SDK', :configurations => ['Debug']

เนื่องจากตอนนี้ Reveal ของฉันถูกกำหนดค่าสำหรับ Debug เท่านั้นฉันจึงปิดใช้งาน Bitcode สำหรับ Debug เท่านั้น

ใส่คำอธิบายภาพที่นี่

ด้วยการตั้งค่านี้ทุกอย่างทำงานได้ดีไม่มีแฮ็กใด ๆ ...


0

ฉันเคยเห็นข้อผิดพลาดนี้เกิดขึ้นเมื่อรวมไลบรารีที่ไม่รองรับ bitcode (เช่น New Relic เวอร์ชันเสถียรปัจจุบัน) วิธีแก้ปัญหาคือการลบไลบรารีปิดการใช้งาน bitcode (และอาจไม่สามารถส่งไปยังร้านค้าได้) หรือรอไบนารีที่อัปเดตซึ่งรองรับ bitcode จากผู้จำหน่ายห้องสมุดของคุณ


0

ข้อผิดพลาดสำหรับฉันคือฉันสร้างด้วยโปรไฟล์ Adhoc แทนที่จะเป็นโปรไฟล์ App Store สำหรับการอัปโหลดสปาไปยัง App Store

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.