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


87

ฉันอัปเกรด Xcode เป็น 8.1 GM และตอนนี้ฉันได้รับข้อผิดพลาดด้านล่างสำหรับ SwiftyJSON เฟรมเวิร์กอื่น ๆ ที่นำเข้าดูเหมือนจะใช้งานได้ มีวิธีบังคับให้สิ่งนี้ทำงานใน Swift 3 จนกว่า SwiftyJSON จะอัพเกรดเฟรมเวิร์คหรือไม่? ฉันใช้ Carthage เพื่อนำเข้า / อัปเดตเฟรมเวิร์ก ฉันยังลองเปลี่ยนUse Legacy Swift language versionเปิดและปิดก็ไม่มีประโยชน์

ไม่สามารถนำเข้าโมดูลที่คอมไพล์ด้วย Swift 3.0 ใน Swift 3.0.1: Modules / SwiftyJSON.swiftmodule / arm64.swiftmodule

คำตอบ:


171

กำลังดาวน์โหลด SwiftyJson precompiled โดย carthage การดาวน์โหลดที่คอมไพล์ล่วงหน้ามาพร้อมกับ Swift เวอร์ชัน 3.0 นั่นทำให้คอมไพเลอร์บ่นว่าเวอร์ชันไม่ถูกต้อง ใช้คำสั่งต่อไปนี้:

carthage update --platform iOS --no-use-binaries

SwiftyJson (และเฟรมเวิร์กอื่น ๆ ทั้งหมดภายใน Carthage) จะถูกคอมไพล์ในเครื่องโดยใช้ Swift (3.0.1) เวอร์ชันท้องถิ่นและคอมไพเลอร์จะไม่บ่นอีกต่อไป


7
คุณน่าจะช่วยฉันได้หนึ่งชั่วโมงในการค้นหา ขอขอบคุณ.
djv

24
ยินดี. ตามความจริงแล้วคาร์เธจควรฉลาดกว่านี้เล็กน้อยและตรวจสอบหมายเลขเวอร์ชันที่รวดเร็ว
zirinisp

ความคิดอื่น ๆ ? เนื่องจากสิ่งนี้ไม่ได้ผลสำหรับฉันแม้ว่าในกรณีของฉันฉันกำลังมีปัญหากับ Unbox
Xernox

ยอดเยี่ยมมาก มีวิธีฝังสิ่งนี้ไว้Cartfileเพื่อให้ฉันพิมพ์ได้carthage updateโดยที่นักพัฒนาคนอื่นไม่จำเป็นต้องรู้ / กังวลเกี่ยวกับแฟล็กเพิ่มเติมหรือไม่?
Craig Otis

1
ฉันมีข้อผิดพลาดที่คล้ายกันกับ PromiseKit 4.0 หลังจากอัปเดตจาก XCode 8.0 เป็น XCode 8.1 ฉันมีข้อผิดพลาด EXC_BAD_ACCESS ในท้ายที่สุด PromiseKit จะต้องคอมไพล์ใหม่ด้วย swift 3.0.1 และปัญหาได้รับการแก้ไข
Ricardo Anjos

21

ลบ app chache จาก DerivedData และสร้างใหม่ ข้อผิดพลาดอาจได้รับการแก้ไข

พา ธ DerivedData ดังนี้:

~/Library/Developer/Xcode/DerivedData/

ทำงานให้ฉันฉันลบฟอลเตอร์นี้ลบโฟลเดอร์พ็อดและใช้ "pod install" และคงที่.
Jose Pose S

สวัสดี. วิธีนี้ใช้ได้ผลสำหรับฉัน คุณอธิบายรายละเอียดได้ไหมว่าจะเกิดอะไรขึ้นเมื่อเราล้างข้อมูลที่ได้มา ข้อผิดพลาดหายไปได้อย่างไร?
iPhoneDeveloper

ทำงานให้ฉันด้วยขอบคุณ
Hasya

10

ตรวจสอบให้แน่ใจว่าคุณได้วางแพ็คเกจ XCode 8.1 GM ใหม่ไว้ในโฟลเดอร์ Applications แล้ว เราพบปัญหานี้เมื่อหนึ่งในพวกเราใช้ Carthage เพื่ออัปเดตการอ้างอิงของเรา แต่ไม่ได้แทนที่แอปพลิเคชัน XCode 8.0 เก่าในโฟลเดอร์แอปพลิเคชัน (8.1 GM กำลังทำงานจากเดสก์ท็อป)

คุณต้องการให้แน่ใจว่าเมื่อคุณทำงานต่อไปใน terminal: ว่าผลตอบแทนxcrun swift -versionApple Swift version 3.0.1


สิ่งนี้ได้ผลสำหรับฉันขอบคุณ! นอกจากนี้คำสั่งที่ทำงานในเทอร์มินัลก็คือ xcrun swift
-version

2
ยังคงได้รับปัญหาเดิม ข้อเสนอแนะอื่น ๆ
rough_v

2
คำสั่งนี้ใช้ได้กับฉัน: การอัปเดต carthage - แพลตฟอร์ม iOS - ไม่มีการใช้งานไบนารี
HH887

2
ฉันทำแล้วcarthage update --platform iOS --no-use-binariesก็ยังไม่ได้ผล ฉันทำความสะอาดโปรเจ็กต์ของฉันและรีสตาร์ท Xcode แล้ว แต่ยังคงได้รับข้อผิดพลาด มีอะไรให้ลองอีกไหม
Clifton Labrum

1
ฉันพยายามแล้ว มันกลับมาApple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Target: x86_64-apple-macosx10.9
Clifton Labrum

9

การอัปเดตค่าเริ่มต้นเป็นค่าเริ่มต้นXcodeใหม่บนเทอร์มินัลใช้ได้ผลสำหรับฉัน

ขั้นตอนที่ 1:ใช้คำสั่งต่อไปนี้เพื่ออัปเดต Xcode เวอร์ชันล่าสุดบน Terminal อ้างอิง

sudo xcode-select -switch <path/to/>Xcode.app

ขั้นตอนที่ 2:ลองใช้คำสั่งอัพเดตคาร์เธจ

carthage update --platform iOS

9

เพียงเพื่อให้การอัปเดตล่าสุด:

Carthage ได้เผยแพร่เวอร์ชัน 0.20เมื่อวันที่ 27 กุมภาพันธ์ 2017

คาร์เธจในขณะนี้เพียงใช้ก่อนสร้างไบนารีถ้ามีก่อนสร้างไบนารีเข้ากันได้

ดังที่กล่าวไปแล้วคุณไม่จำเป็นต้องใช้อีกต่อไป: --no-use-binariesเพื่อหลีกเลี่ยงกรอบงานสร้างล่วงหน้าที่เข้ากันไม่ได้

ดังนั้นตรวจสอบให้แน่ใจว่าคุณมีเวอร์ชันคาร์เธจที่มากกว่า0.20และเพียงแค่ทำ:

carthage update --platform iOS

XCode 8.3.3 หลังจากอัปเดต Carthage เป็นเวอร์ชัน 0.25 และหลังจากทำด้านล่างแล้วมันใช้งานได้สำหรับฉันอัปเดตคาร์เธจ - แพลตฟอร์ม iOS - ไม่มีการใช้งานไบนารี
anoop4real

@ anoop4real มันไม่ได้ผลสำหรับคุณถ้าไม่มี--no-use-binaries? คาร์เธจควรตรวจสอบได้ว่าไบนารีเข้ากันได้กับเวอร์ชันคอมไพเลอร์ของคุณหรือไม่ หากเข้ากันไม่ได้ก็ควรจะทิ้งไบนารีที่ดาวน์โหลดมาโดยอัตโนมัติและสร้างเฟรมเวิร์กในเครื่อง
kanekin

5

เช่นเดียวกับที่ @zirinisp กล่าวว่า:

  1. คุณสามารถใช้คำสั่งต่อไปนี้:carthage update --platform iOS --no-use-binaries
  2. ใช้คำสั่งต่อไปนี้: xcrun swift -versionเพื่อดูเวอร์ชัน Swift
  3. ทำสิ่งนี้: Xcode->preferences->locationsเพื่อล้างข้อมูลที่ได้รับและข้อมูลที่เก็บถาวรสิ่งที่สำคัญที่สุดในการเปลี่ยนเครื่องมือบรรทัดคำสั่งเป็น " Xcode 8.1"
  4. ใช้คำสั่งต่อไปนี้: xcrun swift -versionคุณจะเห็นเวอร์ชันที่รวดเร็วคือ 3.0.1
  5. ชุด Use Legacy Swift Language Version = NO

ฉันหวังว่ามันจะช่วยคุณได้


1
  1. ย้ายเวอร์ชันเบต้า / GM หากโฟลเดอร์ Xcode ไปที่ / Applications และตั้งชื่อว่าXcode-beta

  2. ตรวจสอบผลลัพธ์ของ:

    xcrun swift --version

ด้วยการรันคำสั่งนี้ในเทอร์มินัลเอาต์พุตควรตรงกับเวอร์ชันที่รวดเร็วที่คุณต้องการให้แอปรวบรวมเนื่องจากคาร์เธจใช้เอาต์พุตของคำสั่งนี้เพื่อกำหนดเวอร์ชัน Swift ในเครื่อง

  1. อัปเดต Xcode เป็นเวอร์ชันล่าสุดบน Terminal โดยเรียกใช้คำสั่งต่อไปนี้:

    sudo xcode-select -s /Applications/Xcode-beta.app/

  2. สร้างไลบรารีสำหรับ iOS และป้องกันไม่ให้ Carthage ดาวน์โหลดไบนารีที่คอมไพล์ล่วงหน้าที่มีอยู่ (แต่เข้ากันไม่ได้) โดยรันคำสั่งต่อไปนี้:

    carthage update --platform iOS --no-use-binaries

  3. ทำความสะอาดและสร้าง


0

ฉันมีปัญหาเดียวกันกับห้องสมุดXCTest_Gherkinสิ่งที่ได้ผลสำหรับฉันคือ:

  1. Product-> Scheme->XCTest-Gherkin
  2. Product -> Build

หวังว่าจะช่วยได้ ฉันใช้ Cocoapods


0

ใน Xcode Build Settingsตรวจสอบให้แน่ใจว่าFramework Search Pathsของคุณมีโฟลเดอร์ Carthage Build ที่เหมาะสม:

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