ข้อผิดพลาดคอมไพเลอร์ Swift:“ ส่วนหัวที่ไม่ใช่แบบแยกส่วนภายในโมดูลกรอบงาน”


204

ตอนนี้ฉันต้องการย้ายกรอบงาน ObjC ของฉันไปที่ Swift และฉันได้รับข้อผิดพลาดดังต่อไปนี้:

include of non-modular header inside framework module 'SOGraphDB'

การอ้างอิงคือไฟล์ส่วนหัวซึ่งเพิ่งกำหนดโปรโตคอลและฉันใช้ไฟล์ส่วนหัวนี้ในบางคลาสเพื่อใช้โปรโตคอลนี้

ดูเหมือนว่าจะเกี่ยวข้องกับคุณสมบัติของโมดูล แต่ในขณะนี้ยังไม่ชัดเจนว่าจะแก้ไขอย่างไรคุณรู้วิธีแก้ปัญหาหรือไม่?

UPDATE:

นี่เป็นข้อผิดพลาดของคอมไพเลอร์ Swift

อัปเดต 2:

การแก้ไขอย่างรวดเร็ว (แต่ไม่ได้แก้ไขสาเหตุของปัญหา) คือการตั้งค่าการตั้งค่าต่อไปนี้เป็นใช่: CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = ใช่


3
ดูเหมือนว่าจะมีการตั้งค่าการสร้างใหม่สำหรับ "CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES"
Stephan

1
มีใครเห็นสิ่งนี้รวมถึงที่เป็นสาธารณะและ modular? ฉันเห็นสิ่งนี้กับโครงการวานิลลา (cocoapods): github.com/CocoaPods/CocoaPods/issues/3092และdropbox.com/s/trhe5vwhzoa9bf5/ …
Chris Conover

มีใครสร้างสคริปต์ด่วนที่เปิดใช้งานโดยอัตโนมัติหรือไม่
fatuhoku

@fatuhoku ใช่
funroll

วิธีแก้ปัญหาเหล่านี้ไม่เหมาะกับฉันเลยดูเหมือนว่ามันจะเป็นการชนแบบกลอนประตูในกรณีของฉัน การลบมันแก้ปัญหาได้: stackoverflow.com/a/33114309/3324388
Aggressor

คำตอบ:


316

ส่วนหัวของคุณเป็นสาธารณะหรือไม่

เลือกไฟล์ส่วนหัวใน project explorer จากนั้นในส่วนด้านขวาใน xcode คุณจะสังเกตเห็นว่ามีรายการแบบเลื่อนลงถัดจากเป้าหมาย เปลี่ยนจาก "โครงการ" เป็น "สาธารณะ" สิ่งนี้ใช้ได้สำหรับฉัน

ส่วนหัวสาธารณะ


ฉันยอมรับคำตอบนี้แม้จะเป็นเช่นเดียวกับที่ฉันระบุ
เตฟาน

คุณยังสามารถไปที่ส่วนหัวสร้างเฟสของกรอบงานของคุณและดูว่าส่วนหัวใดเป็นสาธารณะโครงการและส่วนตัว
Jose Ibanez

ฉันไม่คิดว่างานง่าย ๆ อาจจะเป็นทางออกที่ฉันได้ต่อสู้มานานกว่าชั่วโมงก่อนที่จะมาที่นี่ ดูเถิดและนี่คือทางออกที่แน่นอนและทำงานได้ทันที
TMC

1
และถ้าฉันต้องการให้ส่วนหัวเหล่านี้เป็นภายใน
Raphael

2
สิ่งนี้สามารถแก้ไขปัญหาของฉันได้ด้วย! ในกรณีของฉันฝักหนึ่งของฉันที่ขึ้นอยู่กับฝักอื่นไม่สามารถนำเข้าได้เนื่องจากปัญหาแบบแยกส่วน ดังนั้นฉันจึงได้รวมส่วนหัวไว้เป็นเป้าหมายสำหรับพ็อดอื่นโดยใช้โหมดสาธารณะ และมันแก้ปัญหาได้!
เฉินหลี่หยง

135

นี่เป็นพฤติกรรมของคอมไพเลอร์ที่คาดหวังและด้วยเหตุผลที่ดีมาก

ผมคิดว่าคนส่วนใหญ่ทำงานเป็นปัญหานี้จะเกิดขึ้นหลังจากที่พวกเขาเปลี่ยนจากApplication TargetไปFramework Targetและเริ่มต้นการเพิ่ม C และส่วนหัววัตถุประสงค์ C ในกรอบของหัวร่มคาดหวังว่ามันจะมีพฤติกรรมเช่นเดียวกับโปรแกรม Bridging ส่วนหัวซึ่งทำงานแตกต่างกัน ส่วนหัวของร่มนั้นได้รับการกำหนดให้ผสมกรอบอย่างรวดเร็ว obj-c และจุดประสงค์ของมันคือการเปิดเผย API ไปสู่โลกภายนอกที่กรอบงานของคุณมีในวัตถุประสงค์ -c หรือ c นั่นหมายความว่าส่วนหัวที่เราใส่ควรอยู่ในขอบเขตสาธารณะ

ไม่ควรใช้เป็นสถานที่ที่แสดงถึงส่วนหัว Objective-C / C ที่ไม่ได้เป็นส่วนหนึ่งของกรอบงานของคุณไปยังรหัสที่รวดเร็วของกรอบงานของคุณ เพราะในกรณีนี้ส่วนหัวเหล่านี้จะได้รับการเปิดเผยเป็นส่วนหนึ่งของโมดูลกรอบงานของเรากับโลกภายนอกซึ่งมักจะไม่ใช่สิ่งที่เราต้องการทำเพราะมันทำลายส่วนย่อย (และนั่นคือเหตุผลที่อนุญาตให้ใช้แบบไม่รวมในค่าเริ่มต้นเป็นโมดูลกรอบไม่ใช่ )

ในการแสดงไลบรารี่ Objective-C / C ไปยังโค้ดเฟรมเวิร์กของคุณเราควรกำหนดโมดูล swift แยกต่างหากสำหรับไลบรารี่ดังกล่าว จากนั้นสวิฟท์มาตรฐานimport YourLegacyLibraryสามารถใช้ได้

ให้ฉันแสดงสิ่งนี้ในสถานการณ์ทั่วไป: ฝังlibxml2เข้าไปในกรอบงานของเรา

1.ก่อนอื่นคุณต้องสร้างmodule.modulemapไฟล์ซึ่งจะมีลักษณะดังนี้:

สำหรับกรอบ OSX:

module SwiftLibXML2 [system] {
  header "/usr/include/libxml2/libxml/xpath.h"
  export *
}

สำหรับเฟรมเวิร์ก iOS:

module SwiftLibXML2 [system] {
  header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/libxml2/libxml/xpath.h"
  export *
}

สิ่งที่มันทำคือห่อหุ้มส่วนหัวและส่วนหัวอื่น ๆ ที่อ้างถึงในโมดูล swift ดังนั้น swift จะสามารถสร้างการเชื่อมแบบ swift สำหรับอินเตอร์เฟส C เหล่านี้ได้

2.จากนั้นในไดเรกทอรีโครงการ xcode ของคุณสร้างโฟลเดอร์SwiftLibXML2และใส่ module.modulemap นี้ไว้

3.ในการตั้งค่าการสร้างเพิ่ม$(SDKROOT)/usr/include/libxml2ไปยังเส้นทางการค้นหาส่วนหัว

4.ในBuild Settingsเพิ่ม$(SRCROOT)/SwiftLibXML2ไปที่Import Paths

5.ภายใต้โครงการทั่วไปแท็บเพิ่มlibxml2.tbdเพื่อกรอบที่เชื่อมโยงและห้องสมุด

ตอนนี้คุณนำเข้าโมดูลนี้เมื่อจำเป็นด้วย:

import SwiftLibXML2

(ถ้าคุณต้องการดูตัวอย่าง module.map ที่สมบูรณ์ยิ่งขึ้นฉันขอแนะนำให้อ้างอิง module.modulemap ของดาร์วินที่/usr/include/module.modulemapคุณจะต้องมีเครื่องมือบรรทัดคำสั่ง Xcode ติดตั้งเพื่อไปที่นั่นอ้างอิงMissing / usr / include ใน OS X El Capitan )


1
ชื่อไฟล์module.mapไม่ได้รับการสนับสนุนควรเปลี่ยนชื่อเป็นmodule.modulemap clang.llvm.org/docs/Modules.html#attributes
Hyperbole

วิธีการimport SwiftLibXML2ใน Objective-C ขอบคุณ!
Itachi

เช่นเดียวกับการนำเข้า obj-c อื่น ๆ : #import <libxml / xpath.h> แต่ให้แน่ใจว่าคุณได้ทำตามขั้นตอนที่ 3-5
ambientlight

เราทำสิ่งนี้ แต่แล้วสิ่งประดิษฐ์บิลด์ไม่สามารถเคลื่อนย้ายระหว่างเครื่องได้: โมดูล Objective-C (ย่อย) เชื่อมโยงอย่างชัดเจนโดยใช้พา ธ สัมบูรณ์ทำให้เกิดข้อผิดพลาดเมื่อรวบรวมพูดแอปที่ใช้เฟรมเวิร์กที่คุณจัดส่ง
Raphael

ข้อผิดพลาดเป็นไปได้มากที่สุดสำหรับกระบวนการสร้างของคุณนี่เป็นเพียงคำจำกัดความของโมดูลเพื่อให้ภาษา lvm ที่สนับสนุนโมดูลสามารถทำงานร่วมกับผู้อื่นได้ฉันไม่คิดว่ามันจะส่งผลกระทบต่อสิ่งประดิษฐ์ของคุณได้หรือไม่ ฉันผิด
ambientlight

55

ต่อไปนี้เป็นวิธีใช้การแก้ไขด่วนโดยอัตโนมัติเพื่อให้คุณไม่ต้องเปลี่ยนPods.xcodeprojด้วยตนเองหลังจากการแก้ไขแต่ละpod installครั้ง

เพิ่มตัวอย่างนี้ในส่วนท้ายของ Podfile ของคุณ:

post_install do |installer|
  installer.pods_project.build_configuration_list.build_configurations.each do |configuration|
    configuration.build_settings['CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] = 'YES'
  end
end

29

ทางออกสำหรับฉันคือไปที่เป้าหมาย -> สร้างการตั้งค่า -> อนุญาตการไม่รวมโมดูลาร์ในโมดูลโมดูลสลับเป็นใช่!


ยังทำงานร่วมกับ Cocoapods ที่นี่ ไม่จำเป็นต้องทำเวทมนต์จากคำตอบอื่น ๆ หลังจากติดตั้งพ็อด
ระดมสมอง

3
ฉันทำขั้นตอนนี้ไปแล้ว .. มันใช้งานได้สักพัก .. และตอนนี้มันไม่ทำงาน ... ฉันรวมขั้นตอนการติดตั้ง pod ไว้ด้วย แต่ตอนนี้มันล้มเหลวอีกครั้ง มีอะไรอีกบ้างที่ฉันควรตรวจสอบ? ฉันไม่เห็น GoogleMobileAds.Framework เป็นตัวเลือกสำหรับการเปลี่ยนส่วนหัวเป็นสาธารณะ
Michael Rowe

สิ่งนี้ไม่ได้ผลสำหรับฉัน ยังคงได้รับข้อผิดพลาดกับ Parse Xcode 7.3.1
C0D3

ฉันต้องรีสตาร์ท XCode หลังจากทำการเปลี่ยนแปลงนี้เพื่อให้ทำงานได้
John Fowler

1
การเปลี่ยนแปลงการตั้งค่านี้มีผลอย่างไร
nr5

15

ฉันคิดว่าฉันได้รอบนี้ ฉันมีบางรุ่นรหัสที่ใช้ sqlite3 ในกรอบ ในกรณีของฉันผู้ร้ายคือ <sqlite3.h>

ปัญหาคือว่าในส่วนหัว Module / Module.h ของฉันฉันนำเข้าส่วนหัวสาธารณะที่นำเข้า <sqlite3.h> วิธีแก้ไขคือซ่อนประเภท sqlite3_xxx ทั้งหมดและตรวจสอบให้แน่ใจว่าไม่ปรากฏในสาธารณะใด ๆ การอ้างอิงโดยตรงทั้งหมดไปยัง sqlite3 นั้นทำให้เป็นส่วนตัวหรือการมองเห็นโครงการ ตัวอย่างเช่นฉันมีซิงเกิลสาธารณะที่มีพอยน์เตอร์ sqlite3_stmt แขวนอยู่ ฉันย้ายสิ่งเหล่านั้นไปยังคลาสที่แยกต่างหากซึ่งขณะนี้เป็นเพียงการประกาศล่วงหน้าในส่วนหัวสาธารณะ ตอนนี้ฉันสามารถสร้าง

อนึ่งการตั้งค่า CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES ไม่ทำงาน ฉันพยายามตั้งค่าทั้งในกรอบงานและโครงการที่ต้องพึ่งพา การแก้ปัญหานี้เป็นสิ่งจำเป็น แต่ฉันไม่แน่ใจว่าทำไม


ทั้งหมดนี้ช่วย! ในกรณีของฉันมันคือการเข้าถึง
Daniel Brim

4
ฉันค่อนข้างมั่นใจว่านี่เป็นวิธีแก้ปัญหาของฉันเมื่อฉันพยายามรวม SSZipArchive ในโมดูลเฟรมเวิร์กของฉัน ส่วนหัวสาธารณะกำลังนำเข้า <zlib.h> และให้ข้อผิดพลาดเดียวกัน คุณช่วยโพสต์ซอร์สโค้ดของคุณได้ที่ไหนสักแห่งเพราะฉันพยายามดิ้นรนเพื่อให้ทำงานได้เพราะฉันเข้าใจเพียงบางส่วนของคำตอบของคุณ .. ขอบคุณ!
Bruce

15

ในสวิฟต์ :

1. แก้ไขโครงการ Xcode ของคุณและตั้งค่าการสร้างเป้าหมายตามที่ระบุไว้ด้านล่าง:

อนุญาต Non-modular รวมอยู่ในโมดูล Framework: No

เปิดใช้งาน Bitcode: ใช่

2. ใช้เวอร์ชันล่าสุดที่มีอยู่ใน GoogleMaps iOS SDK (ใช้ CocoaPods เพื่อรับมัน):

GoogleMaps (1.10.4)

3. แสดงความคิดเห็นการนำเข้าที่มีปัญหา:

//import GoogleMaps

4. สร้างหรือแก้ไขไฟล์ส่วนหัวบริดจ์ของคุณเพิ่มการนำเข้าที่มีปัญหา:

[ชื่อโครงการ Xcode ของคุณ] -Bridging-Header.h

// Use this file to import your target's public headers 
// that you would like to expose to Swift.
#import <GoogleMaps/GoogleMaps.h>

5. ทำความสะอาดและสร้างโครงการ Xcode ของคุณใหม่


1
สิ่งนี้ช่วยได้มาก! ยังทำงานได้ดีกับกรอบ GoogleMobilAds (กับ Cocoapods)
bluenowhere

สำหรับข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับวิธีสร้างไฟล์ส่วนหัวโปรดดูที่: stackoverflow.com/a/51227304/529663
lenooh

6

คำตอบนี้ล้าสมัย

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

ป้อนคำอธิบายรูปภาพที่นี่

คอมไพเลอร์ Swift ใช้ข้อมูลนี้เพื่อสร้างแผนที่ของสัญลักษณ์ที่ไม่เป็น mangled พร้อมกับข้อมูลประเภทที่เกี่ยวข้อง


สิ่งนี้ดูเหมือนจะเอาชนะวัตถุประสงค์ของการมีไฟล์ Framework แต่มันก็ใช้ได้กับฉัน Chartboost และ RevMob ทั้งคู่เพิ่งเริ่มใช้งานไฟล์ Framework แทนที่จะเป็น libs การคัดลอกทุกอย่างจากส่วนหัวไปยังส่วนหัวแอพของฉันแก้ไขปัญหาได้
เจสันสั้น

นี่เป็นทางออกเดียวหรือไม่? ฉันมี 6 กรอบและแต่ละกรอบมีประมาณ 20 ส่วนหัว มันสร้างความยุ่งเหยิง อะไรก็ได้?
vivin

1
มากกว่าที่เป็นไปได้ นี่อาจไม่เกี่ยวข้องอีกต่อไปเนื่องจากเป็นวิธีแก้ปัญหาในข้อผิดพลาด Xcode
seo


3

ไฟล์ส่วนหัวได้รับการจัดสรรไปยังเป้าหมาย แต่ถูกทำเครื่องหมายเป็นโครงการที่มองเห็นได้เพียงแค่เปลี่ยนเป็นข้อมูลสาธารณะเพื่อแก้ไขข้อผิดพลาดนี้


ฉันจะทำอย่างนั้นได้อย่างไร? ฉันมีปัญหากับไฟล์ส่วนหัว TwitterKit ของฉัน
Vinod Sobale

2

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

รวมส่วนหัวที่ไม่ใช่โมดูลาร์ภายในโมดูลเฟรมเวิร์ก

หลังจากดื่มกาแฟสองถ้วยและค้นคว้าตลอดทั้งวันฉันพบว่าตามบันทึกย่อประจำรุ่นของXcode 7.1 Beta 2 :

•หากคุณได้รับข้อผิดพลาดที่ระบุว่า "รวมส่วนหัวที่ไม่ใช่โมดูลาร์ภายในโมดูลเฟรมเวิร์ก" สำหรับเฟรมเวิร์กที่รวบรวมไว้ก่อนหน้านี้ตรวจสอบให้แน่ใจว่าการตั้งค่าการสร้าง "เส้นทางการค้นหาผู้ใช้เสมอ" ค่าเริ่มต้นคือ "ใช่" สำหรับเหตุผลดั้งเดิมเท่านั้น (22784786)

ฉันใช้ XCode 7.3 อยู่แล้ว แต่ดูเหมือนว่าข้อผิดพลาดนี้ยังไม่ได้รับการแก้ไข


นี่คือสิ่งที่ช่วยฉัน! ฉันต้องเปลี่ยนการนำเข้าบางส่วนหลังจากเปลี่ยนเป็นไม่ แต่ตอนนี้ฉันสามารถนำเข้ากรอบงานที่ต้องการได้แล้ว!
Pavel Gurov

2

การสลับการตั้งค่าบิลด์> อนุญาตให้ไม่รวมโมดูลาร์ในโมดูลเฟรมเวิร์กเป็นใช่! แก้ไขปัญหาเดียวกันสำหรับฉัน


2

ฉันต้องการเพิ่มประสบการณ์ของฉันด้วยปัญหาเช่นกัน

เพียงเพื่อสรุป:

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

ต่อไปนี้เป็นคำตอบ 2 ข้อของฉัน:

  • ตรวจสอบการนำเข้าในโครงการของคุณอย่างรอบคอบเพื่อดูว่าส่วนหัวใดที่นำเข้ากรอบงานของคุณโดยตรง (แทนที่จะใช้การประกาศล่วงหน้าหากเป็นไปได้) - ไม่ใช่วิธีที่ดีที่จะรวมไฟล์ส่วนหัวไว้ในไฟล์ส่วนหัวอื่น บางครั้งสิ่งนี้ทำให้เกิดปัญหาเพราะถ้าไม่ทำอย่างถูกต้องอาจนำไปสู่การรวมหลายของหนึ่งส่วนหัวและสร้างปัญหา linker
  • UPDATE: ตรวจสอบให้แน่ใจว่าสถาปัตยกรรมของห้องสมุดและของเป้าหมายที่คุณต้องการเชื่อมโยงเข้าด้วยกัน
  • และสุดท้ายหลังจากทำทุกอย่างที่กล่าวมาแล้วฉันยังคงชนกับความผิดพลาดนั้นอยู่ ดังนั้นฉันจึงขุดอีกเล็กน้อยและพบ (ในฟอรัมนักพัฒนาแอปเปิ้ล แต่ฉันสูญเสียลิงก์ :() ว่าถ้าคุณใส่ส่วนหัวในส่วนหัวของร่มไม่เช่นนี้<framework/headerName.h>แต่เป็นแบบนี้"headerName.h"ปัญหาจะหายไป

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


1

ฉันมีปัญหาตรงนี้เมื่อรวมกรอบงานของฉันเองในโครงการ แก้ไขได้โดยการนำเข้า sqlite3.h ทั้งหมดในไฟล์. m ไม่ใช่ไฟล์สาธารณะ. h ฉันสมมติว่าห้องสมุดอื่นอาจตั้งค่าสถานะปัญหาที่คล้ายกันกับ Xcode


1

ฉันมีปัญหาเฉพาะกับ Facebook 4.02 sdk และ FBSDKCoreKit

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

จากนั้นสร้างสำเนาของส่วนหัวโดยอัตโนมัติในตัวนำทางโครงการที่ด้านบน

ฉันลบมันออกจากขั้นตอนการสร้าง -> ส่วนหัวและลบไฟล์ใหม่และทำงานได้ดี

ชอบที่จะถูกลบหรืออะไรบางอย่าง


1

ในกรณีของฉัน (Xcode 9 beta 6 - Swift 4 - ใช้ Cocoapods) สิ่งนี้ได้รับการแก้ไขเมื่อฉันลบPodfile.lockและไดเรกทอรีPodsและวิ่งpod installอีกครั้ง


1

ฉันได้รับปัญหานี้หลังจากอัพเดตโครงการจาก swift2 เป็น swift3 ฉันใช้ XCode 8.3.2 เพื่ออัปเดตรหัสและไม่สามารถกำจัดข้อผิดพลาด“ ส่วนหัวที่ไม่เป็นโมดูลาร์ภายในโมดูลเฟรมเวิร์ก” เมื่อฉันเปิดโครงการเดียวกันใน XCode รุ่นอื่น (เวอร์ชั่น 9.0.1) ข้อผิดพลาดไม่ปรากฏขึ้น


0

โดยทั่วไปข้อผิดพลาดนี้เกิดจากคำตอบที่เลือก แต่ฉันมีข้อผิดพลาดนี้ปรากฏขึ้นโดยบังเอิญเมื่อลากไฟล์กรอบงานไปยังโฟลเดอร์โครงการใหม่ของฉัน ฉันคลิกเพื่อลบเฟรมเวิร์ก แต่กดโดยบังเอิญเพื่อ 'ลบการอ้างอิง' เฉพาะกับเฟรมเวิร์กแทนที่จะลบไฟล์ทั้งหมดอย่างสมบูรณ์ ณ จุดนี้ถ้าฉันเปิดโฟลเดอร์โครงการใน Finder ฉันเห็นไฟล์เช่น 'CoreLocation' และ 'AudioToolbox' ที่นั่น การลบไฟล์เหล่านี้ออกจากโฟลเดอร์โครงการและทำความสะอาดโครงการแก้ไขปัญหา


0

หลังจากอนุญาตให้นำเข้าที่ไม่ใช่โมดูลาร์รวมแล้วคุณสามารถลองนำเข้าโมดูลนั้นโดยใช้ส่วนหัว Bridging ของ Objective-C:

#import <YandexMobileMetrica/YandexMobileMetrica.h>

0

ฉันแก้ไขมันเอาModulesโฟลเดอร์ออกจากกรอบ

  • เรียกดูตำแหน่งเฟรมเวิร์กของคุณซึ่งมีอยู่ในโครงการแอพโดยใช้ตัวค้นหา

  • เข้าไปข้างในTest.frameworkโฟลเดอร์ (ในกรณีข้างต้นมันจะเป็นSOGraphDB.framework) & ลบModulesโฟลเดอร์

  • ทำความสะอาดและสร้างแอปขึ้นใหม่มันจะช่วยแก้ปัญหาได้


-1

ฉันมีปัญหานี้ในการนำเข้ากรอบการแยกวิเคราะห์ วิธีเดียวที่ฉันสามารถแก้ไขได้คือยกเลิกการเปลี่ยนแปลงทั้งหมดตั้งแต่การคอมมิทครั้งล่าสุด (เพียงแค่ลบเฟรมเวิร์กและการล้างโปรเจ็กต์ไม่ทำงาน) และเพิ่ม Parse อีกครั้ง (หลังจากดาวน์โหลด SDK ใหม่) ด้วยเฟรมเวิร์กอื่น ๆ

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