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


92

อย่างไรก็ตามฉันได้คอมไพล์กรอบงานใหม่โดยใช้ Xcode เดียวกันและยังคงให้ข้อผิดพลาดนี้แก่ฉัน

  • Base SDK iOS 11.1 สำหรับทั้งคู่
  • เวอร์ชันภาษา Swift Swift 4.0 สำหรับทั้งคู่
  • ไม่ใช้ Pods / Carthage

ฉันหวังว่าจะมีคนรู้


ดูเหมือนว่า Apple ต้องพิจารณาอีกครั้งว่าประกาศเลิกใช้งาน 10 ปีสำหรับ Objective C: ^) สิ่งนี้ทำให้ฉันใน> 1 โครงการในขณะนี้และทั้งสองนี้เป็นกรอบไบนารีของบุคคลที่ 3
Anton Tropashko

คำตอบ:


139

อัปเดต:

สำหรับ Xcode รุ่นที่วางจำหน่าย:

ข้อผิดพลาดนี้ (และข้อผิดพลาดที่คล้ายกันเกี่ยวกับ Swift 4.1, 4.2 และอื่น ๆ ) จะเกิดขึ้นเมื่อเปิดโปรเจ็กต์ด้วย Xcode 9.1, 9.2, 9.3, 9.4, 10 ฯลฯ ที่ใช้เฟรมเวิร์กที่สร้างขึ้นด้วยเครื่องมือ Xcode รุ่นก่อนหน้า

ในการแก้ไขปัญหาให้อัปเดตและสร้างเฟรมเวิร์กใหม่โดยใช้ Carthage ( carthage update --platform iOS), Cocoapods ( pod updateหรือpod install) หรือด้วยตนเองด้วยเครื่องมือ Xcode ที่อัปเดตใหม่ ควรอัปเดตเครื่องมือโดยอัตโนมัติเมื่อคุณอัปเดต Xcode แต่หากไม่เป็นเช่นนั้นคุณสามารถทำตามขั้นตอนที่ระบุไว้ด้านล่างในคำตอบเดิม

คุณอาจต้องล้างโปรเจ็กต์ของคุณcmd + shift + kและอาจเป็นโฟลเดอร์cmd + option + shift + kบิลด์ของคุณเพื่อรับ Xcode เพื่อไม่ใช้บิลด์เฟรมเวิร์กที่แคชไว้

ในบางกรณีคุณอาจต้องลบโฟลเดอร์ข้อมูลที่ได้รับของคุณ (พบได้ง่ายโดยไปที่ Xcode Preferences -> Locations -> Derived Data Folder ( ขอบคุณ Stunner )

สำหรับ Xcode รุ่นเบต้า:

ดูคำตอบเดิมด้านล่างจากนั้นทำตามขั้นตอนด้านบน

คำตอบเดิม:

คุณอาจยังมีเครื่องมือ xcodebuild ของคุณที่ตั้งค่าเป็น Xcode 9.0 ซึ่งสร้างด้วย Swift 4.0 และเข้ากันไม่ได้กับ Swift 4.0.1 ของ Xcode 9.1 beta

ตรวจสอบในเทอร์มินัลโดยใช้คำสั่ง:

xcodebuild -version

หรือไปที่การตั้งค่า Xcode -> สถานที่และตรวจสอบ / เปลี่ยนเครื่องมือบรรทัดคำสั่งเป็น Xcode 9.1 คุณควรตั้งค่าแล้ว


1
ฉันยังล้างข้อมูลที่ได้รับและทำความสะอาดโครงการไม่รู้ว่าจำเป็นสำหรับทุกคนหรือไม่ แต่ดูเหมือนจะเป็นเช่นนี้ ขอบคุณ
Simon

3
สวัสดี @Zig. repo ที่ฉันใช้บน github (mattdonnelly / swifter) อยู่ที่ Swift 4.0 แต่เห็นได้ชัดว่ามีการรวบรวมโดยใช้ XCode 9.0 ดังนั้นฉันจึงได้รับปัญหานี้ ขั้นตอนที่จำเป็นในการคอมไพล์ cocoapod ของคนอื่นใหม่บน Github สำหรับ XCode 9.1 ขึ้นไปคืออะไร?
คุณแม่ของ Joseph Beuys

1
มีวิธีเพิ่มเครื่องมือบรรทัดคำสั่งหรือไม่? ฉันมี Xcode 9.3 ในรายการแบบเลื่อนลงบรรทัดคำสั่ง และฉันก็มีปัญหานี้เช่นกัน
tara tandel

1
บางส่วนของฝักของฉันยังไม่พร้อมสำหรับสวิฟท์ 4.2 เพราะฉะนั้นผมต้องปักSwift Language VersionไปSwift 4สำหรับผู้ที่ จากนั้นก็ใช้งานได้
skofgar

1
บวก 1 สำหรับทางลัดในการทำความสะอาดโฟลเดอร์บิลด์ - ไม่ใช่สิ่งที่ฉันรู้ว่าต้องทำอย่างไร
Matt

25

ปัญหาของฉันเกิดจากเฟรมเวิร์กภายนอกไม่ได้รวบรวมสำหรับ Swift 4.0.2 ฉันได้เพิ่มไฟล์นี้ผ่านCarthageแล้วดังนั้นการรัน:

carthage update --platform iOS

จากนั้นทำความสะอาดโปรเจ็กต์cmd + shift + kและสร้างโฟลเดอร์cmd + option + shift + kและลบโฟลเดอร์ข้อมูลที่ได้รับ (เพียงแค่ย้ายไปที่ถังขยะก็ใช้ได้เช่นกัน)


2
แท้จริงแล้วนี่คือทางออก สิ่งเดียวกันนี้เพิ่งเกิดขึ้นในวันนี้ (18 เมษายน) เนื่องจากการอัปเดตที่รวดเร็วล่าสุดของ Apple! :)
Fattie

cmd + option + shift + k คือเคล็ดลับอะไรหลังจากอัปเดต Carthage ขอบคุณ!
Leonardo Leite

15

ในกรณีของฉันฉันดาวน์โหลด xCode 11 เวอร์ชันเบต้าเพื่อทดสอบ SwiftUI เมื่อฉันรันโปรเจ็กต์ฉันได้รับข้อผิดพลาด"โมดูลที่คอมไพล์ด้วย Swift 5.1 ไม่สามารถนำเข้าโดยคอมไพเลอร์ Swift 5.0.1: ... "

เพื่อแก้ไขปัญหานี้ ฉันเปลี่ยนเครื่องมือบรรทัดคำสั่ง xCode เป็นเครื่องมือบรรทัดความคิดเห็น xCode 11 ใหม่ หลังจากนั้นคุณสามารถสร้างโครงการ xcode ใหม่ด้วย SwiftUI

Xcode -> ค่ากำหนด -> ตำแหน่ง -> เครื่องมือบรรทัดคำสั่ง XCode

Xcode ยกย่องเครื่องมือ Line

ฉันหวังว่านี่จะช่วยคนที่ต้องการทดสอบ freamework ใหม่ :)


9

ติดตั้ง Xcode toolchain เฉพาะรุ่น Xcode ซึ่งทำงานให้กับคุณจากที่นี่

Xcode toolchain ประกอบด้วยสำเนาของคอมไพเลอร์ lldb และเครื่องมือที่เกี่ยวข้องอื่น ๆ ที่จำเป็นเพื่อมอบประสบการณ์การพัฒนาที่สอดคล้องกันสำหรับการทำงานใน Swift เวอร์ชันเฉพาะ

เปิดการตั้งค่าของ Xcode ไปที่ Components> Toolchains และเลือก Swift toolchain ที่ติดตั้ง

ซึ่งจะช่วยให้คุณสามารถรวบรวมและเรียกใช้แอปได้ในตอนนี้


หลังจาก 2 วันในการค้นหาและลองใช้ทุกวิธีที่เป็นไปได้ด้วยการอัปเดตคาร์เธจบูตสแตรปการตั้งค่าภาษาที่รวดเร็วและอื่น ๆ ฉันพบคำตอบที่ถูกต้องที่นี่ :)
memresubasi

7

ฉันพบปัญหานี้กับ Xcode 10 beta ซึ่งเพิ่ม Swift 4.2 ปัญหาของฉันไม่เกี่ยวข้องกับ Carthage หรือการอ้างอิงภายนอกใด ๆ

ไปที่YourTarget > Build Settings > Swift Language Versionเป้าหมาย Xcode ทั้งหมดของคุณ

Swift 4เหมืองแร่ทั้งหมดถูกตั้งค่าให้

หลังจากเพิ่ม Copy Files Build Phase แล้วฉันเริ่มได้รับข้อผิดพลาด

: 0: ข้อผิดพลาด: ไม่สามารถนำเข้าโมดูลที่คอมไพล์ด้วย Swift 4.1.2 โดยคอมไพเลอร์ Swift 4.2: /Users/user/Library/Developer/Xcode/DerivedData/MyApp-faskfrihumfcdibjxisjvbfshppp/Build/Intermediates.noindex/MyApp.build/Debug/ MyAppExtension.build/Objects-normal/x86_64/MyClass~partial.swiftmodule

คำสั่ง MergeSwiftModule ล้มเหลวด้วยรหัสออกที่ไม่ใช่ศูนย์

จากนั้นผมก็ตั้งเป้าแต่ละของSwift Language VersionการSwift 4.2ซึ่งกำจัดข้อผิดพลาด

ฉันไม่แน่ใจว่าเหตุใดจึงเกิดข้อผิดพลาดตั้งแต่แรกเนื่องจากการตั้งเป้าหมายทั้งหมดSwift 4ควรจะถูกต้องเท่ากัน


1
ฉันมีปัญหาในการค้นหาBuild Settings
Chandrew

@Chandrew คลิกที่เป้าหมายของคุณก่อน คำตอบที่อัปเดต
pkamb

3

ในกรณีของฉัน (Xcode 9.2):

ฉันไปที่ Xcode Preferences > Locations > Derived Data

จากนั้นฉันก็ลบข้อมูลและสร้างใหม่ทั้งหมดและก็โอเค


1

ในกรณีของฉันฉันใช้ CocoaPods กับปลั๊กอินcocoapods-binaryเพื่อสร้างไลบรารีล่วงหน้าเป็นไบนารี หลังจากที่ฉันอัปเกรด Xcode จาก 10 เป็น 11 Xcode ให้ข้อผิดพลาดนี้แก่ฉัน:

Module compiled with Swift 5.0.1 cannot be imported by the Swift 5.1 compiler

ฉันจะแก้ไขได้โดยการลบไดเรกทอรีและทำงาน/Podspod install


0

ในกรณีของฉันฉันรวบรวมเฟรมเวิร์กใหม่โดยใช้เวอร์ชันใดก็ตามที่บ่น

ในการคอมไพล์ใหม่เรียกใช้pod updateหรืออัปเดตคาร์เธจ (ที่คุณเคยใช้อยู่) และสร้างโปรเจ็กต์

จากนั้นค้นหากรอบในตัวค้นหา คัดลอกและวางลงในtheFramework.frameworkโครงการของคุณและอย่าลืม "คัดลอกรายการหากจำเป็น" สร้างโครงการอีกครั้งและควรใช้งานได้

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