โมดูลที่คอมไพล์ด้วย Swift 5.1 ไม่สามารถนำเข้าโดยคอมไพเลอร์ Swift 5.1.2


91

ฉันมีกรอบ (ในกรณีนี้คือ RxSwift) ซึ่งฉันได้รวบรวมโดยใช้ Xcode 11.0 เป็นRxSwift.frameworkแพ็คเกจสไตล์ดั้งเดิม

สิ่งนี้นำเข้าที่ดีใน Xcode 11.0 และ 11.1 ไม่เคยมีปัญหาใด ๆ กับมัน

วันนี้เมื่อเปิดตัว Xcode 11.2 ของ Apple ฉันได้รับการอัพเกรดและมีข้อผิดพลาด:

โมดูลที่คอมไพล์ด้วย Swift 5.1 ไม่สามารถนำเข้าโดยคอมไพเลอร์ Swift 5.1.2

ฉันใช้ไม่ตรงกันรวดเร็วคอมไพเลอร์และฉันรู้ฉันก็สามารถคอมไพล์ RxSwift ใช้ Xcode 11.2 และดำเนินการใน แต่คุณลักษณะพาดหัวของสวิฟท์ 5.1 เป็นความมั่นคงโมดูล

ฉันรู้สึกว่าตอนนี้เรามีความเสถียรของโมดูลแล้วเฟรมเวิร์กไม่จำเป็นต้องทำการคอมไพล์ใหม่ด้วย Xcode ใหม่ทุกครั้ง แต่นี่ไม่ใช่กรณีที่ชัดเจน

หากใครสามารถอธิบายสิ่งที่เกิดขึ้นที่นี่ฉันจะขอบคุณมันมาก Xcode 11.2 แสดงข้อผิดพลาดหรือไม่? หรือฉันต้องการที่จะบอกว่าฉันต้องการเสถียรภาพโมดูลเมื่อฉันรวบรวมด้วย Xcode 11.0?



สำหรับฉัน Toolchain ที่มีเวอร์ชัน swift รุ่นเก่าใช้งานได้: stackoverflow.com/a/43142147/5846135
Zeero0

คำตอบ:


107

ตกลงปรากฎว่าคุณดูวิดีโอ WWDC พวกเขาอธิบาย: https://developer.apple.com/videos/play/wwdc2019/416/

คุณต้องตั้งค่าตัวเลือกBuild Libraries for Distributionเป็นYesในการตั้งค่า build ของเฟรมเวิร์กมิฉะนั้นคอมไพเลอร์ swift จะไม่สร้าง.swiftinterfaceไฟล์ที่จำเป็นซึ่งเป็นกุญแจสำคัญในการคอมไพเลอร์ในอนาคตที่สามารถโหลดไลบรารี่เก่าของคุณได้

สิ่งนี้จะจบลงในไฟล์ project.pbxproj ของคุณดังนี้:

BUILD_LIBRARY_FOR_DISTRIBUTION = YES;

หลังจากตั้งค่าสถานะนี้กรอบงานที่ฉันคอมไพล์โดยใช้ Xcode 11.0 (swift 5.1) ก็สามารถใช้งานได้โดย Xcode 11.2 (swift 5.1.2) และทุกอย่างดูเหมือนจะทำงานอย่างถูกต้อง

หวังว่าคำถาม / คำตอบนี้จะใช้เป็นข้อมูลอ้างอิงที่เป็นประโยชน์สำหรับทุกคนที่ไม่ได้ดูวิดีโอ WWDC ทั้งหมด

หากข้อผิดพลาดยังคงมีอยู่ไปที่ผลิตภัณฑ์ > ล้างโฟลเดอร์สร้างและสร้างอีกครั้ง


1
! น่ากลัว ตอนนี้หวังว่านักพัฒนาเฟรมเวิร์กของบุคคลที่สามจะค้นพบสิ่งนี้ - ฮ่าฮ่า :)
Mihai Fratu

25
สิ่งนี้ไม่ได้ช่วยในกรณีของฉัน ฉันตั้งค่าเป็น "ใช่" แต่ฉันยังคงได้รับข้อผิดพลาด ความคิดใด ๆ
davidOhara

3
ฉันทำงานกับCarthageและ 10 framework ... ish คือcarthageพอสมาร์ทเลือกนี้ขึ้นจากฉัน .pbxprojไฟล์หรือเป็น @MihaiFratu กล่าวข้างต้นทำทุกพัฒนากรอบการทำงานของบุคคลที่สามจะต้องตั้งค่านี้ตัวเองอยู่ในกรอบโครงการของพวกเขา?
nteissler

9
@davidOhara ในกรณีของฉันเกี่ยวกับปัญหาที่ทราบนี้ใน Xcode 11.2: หากโมดูลถูกสร้างขึ้นด้วย BUILD_LIBRARIES_FOR_DISTRIBUTION และมีประเภทสาธารณะที่มีชื่อเดียวกันกับตัวโมดูลลูกค้าจะล้มเหลวในการนำเข้าโมดูล (19481048) (FB5863238) ในบันทึกย่อประจำรุ่น Xcode 11.2: developer.apple.com/documentation/xcode_release_notes/…
Richard Chirino

2
@davidOhara น่าเสียดายที่ฉันไม่พบวิธีแก้ปัญหา สำหรับเราการเปลี่ยนชื่อคลาสนั้นไม่สามารถทำได้เนื่องจากเป็นคลาสหลักของกรอบงานของเราและจะทำลายรหัสลูกค้าของเรา ถ้าฉันสร้างเฟรมเวิร์กโดยใช้ Xcode 11.2 มันจะทำการคอมไพล์บน Xcode 11.2 แต่มันจะไม่คอมไพล์ในวันที่ 11.1 หรือก่อนหน้า Xcode 11.2.1 รุ่น GM วันนี้ไม่ได้แก้ไขปัญหา นี่คือตั๋วในตัวติดตามปัญหา swift ในกรณีที่คุณต้องการจับตามัน: bugs.swift.org/browse/SR-11704นอกจากนี้ยังมีเรดาร์ติดอยู่ด้วย
Richard Chirino

2

ฉันมีข้อผิดพลาดเดียวกันในการนำเข้าห้องสมุดบุคคลที่สาม ฉันคงได้โดยใช้ toolchains ใน Xcode และการเปิดตัว 19 กันยายน 2019 จากที่นี่https://swift.org/download/#releases หลังจากนั้นฉันต้องนำเข้าห้องสมุดของฉันอีกครั้งและใช้งานได้


นี่เป็นทางออกที่ง่ายที่สุดขอบคุณมัด
Krishan Patel

ฉันมีปัญหาเกี่ยวกับเฟรมเวิร์กโมดูลที่คอมไพล์ด้วย Swift 5.1.2 ไม่สามารถอิมพอร์ตโดย Swift 5.2.2 เราจะแก้ปัญหานี้ได้อย่างไร?
Kishan Suthar

0

คุณสามารถใช้ Carthage เพื่อเพิ่มกรอบงาน RxSwift

โดยทั่วไปคาร์เธจจะช่วยให้คุณคล้ายแพคเกจสไตล์ RxSwift.framework แบบดั้งเดิม

carthage update --no-use-binariesแล้วลอง


ลงคะแนนเพราะด้วย carthage คุณเพิ่งสร้างห้องสมุดของคุณใหม่ในคอมไพเลอร์ใหม่ คำถามชัดเจนเกี่ยวกับการโหลดไลบรารีไบนารีที่สร้างโดยคอมไพเลอร์ก่อนหน้า
Orion Edwards

0

ทำให้ข้อผิดพลาดคอมไพเลอร์ของฉันหายไป

  1. carthage bootstrap --platform ios
  2. brew bundle
  3. pod repo update

brew bundle? มันทำอะไร?
skywinder

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