ฉันกำลังพยายามใช้การ@testableประกาศใหม่ของ Swift 2 เพื่อแสดงชั้นเรียนของฉันไปยังเป้าหมายการทดสอบ อย่างไรก็ตามฉันได้รับข้อผิดพลาดของคอมไพเลอร์นี้:

Intervalsเป็นโมดูลที่มีชั้นเรียนที่ฉันพยายามเปิดเผย ฉันจะกำจัดข้อผิดพลาดนี้ได้อย่างไร
ฉันกำลังพยายามใช้การ@testableประกาศใหม่ของ Swift 2 เพื่อแสดงชั้นเรียนของฉันไปยังเป้าหมายการทดสอบ อย่างไรก็ตามฉันได้รับข้อผิดพลาดของคอมไพเลอร์นี้:

Intervalsเป็นโมดูลที่มีชั้นเรียนที่ฉันพยายามเปิดเผย ฉันจะกำจัดข้อผิดพลาดนี้ได้อย่างไร
คำตอบ:
ในเป้าหมายหลักของคุณคุณต้องตั้งค่าEnable Testabilityตัวเลือกการสร้างเป็นใช่
ตามความคิดเห็นโดย @earnshavian ด้านล่างสิ่งนี้ควรใช้กับบิลด์ debug ตามแอปเปิ้ลรีลีสโน้ต: "การตั้งค่าเปิดใช้งานการสร้าง Testability ควรใช้ในการกำหนดค่า Debug ของคุณเท่านั้นเพราะมันห้ามการปรับให้เหมาะสม แอปหรือกรอบงาน " https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326
@testable) แต่ต้องส่งไปที่ App Store ถ้าEnable Testabilityเป็นเพียงแค่การดีบักบิวด์อะไรคือสิ่งที่รอบนี้ ฉันต้องดึงรหัสทดสอบออกมาเพื่อปล่อยหรือไม่
ในกรณีของฉันฉันใช้การกำหนดค่าการสร้างที่กำหนดเองสำหรับการทดสอบ (เรียกว่าTest) และยังcocoapodsเป็นผู้จัดการการพึ่งพา
ฉันต้องเพิ่มบรรทัดต่อไปนี้ที่ส่วนท้ายของฉันPodfileเพื่อให้สามารถทดสอบได้
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
if config.name == 'Test'
config.build_settings['ENABLE_TESTABILITY'] = 'YES'
end
end
end
end
โดยค่าเริ่มต้นcocoapodsกำหนดENABLE_TESTABILITYเป็นYESสำหรับการDebugสร้างเท่านั้น
ตรวจสอบให้แน่ใจว่าคุณตั้งค่าช่องทำเครื่องหมายของคุณอย่างถูกต้องภายใต้รูปแบบแอพของคุณ คุณควรปลดล็อคเป้าหมายการทดสอบของคุณสำหรับ Build Build
สำหรับผู้ที่กำลังประสบกับปัญหานี้เฉพาะเมื่อใช้งาน Xcode Profiler: สลับการกำหนดค่าการสร้างโปรไฟล์ในการจัดการแบบแผนของคุณไปเป็นแบบที่เปิดใช้งานการทดสอบ - และนั่นจะเป็นการดีบั๊กในกรณีส่วนใหญ่:
นี่อาจจะเป็นเพราะเป้าหมายหลักของคุณถูกตั้งค่าให้Enable Testability NOคุณควรกำหนดให้YESเป็นรูปแบบการดีบัก (ซึ่งใช้สำหรับการทดสอบของคุณ)
หากคุณใช้คาร์เธจปัญหานี้อาจเกิดจากการนำเข้าเฟรมเวิร์กด้วย@testableเนื่องจากมันถูกสร้างขึ้นด้วยแบบแผนการวางจำหน่าย
ส่วนใหญ่เป็นการดีที่จะนำเข้าเฟรมเวิร์กด้วยส่วนนำหน้านั้นดังนั้นคุณจึงสามารถหลีกเลี่ยงได้ หากคุณไม่สามารถทำได้คุณควรEnable Testabilityอยู่ในรูปแบบการเปิดตัวของเฟรมเวิร์ก https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326
ฉันเริ่มได้รับข้อผิดพลาดนี้เมื่อทำการทดสอบโดยใช้ Bitrise
ซึ่งแตกต่างจากผู้ใช้อื่น ๆ กล่าวว่านี้ไม่ได้ต่อTargetพื้นฐานหรือต่อSchemaพื้นฐานก็คือต่อConfigurationพื้นฐาน เลือกTarget-> Build Settingsแท็บ -> มองหาtestability-> เปิดใช้งานได้ในการกำหนดค่าที่คุณกำลังใช้
โปรดสังเกตว่า Apple แนะนำให้เปิดใช้งานสิ่งนี้กับการกำหนดค่าที่คุณใช้สำหรับการดีบักไม่ใช่สำหรับ AppStore
หากคุณพยายามทดสอบเฟรมเวิร์ก:
ไปที่เป้าหมายการทดสอบ -> สร้างเฟส -> สร้างเฟสสำเนาไฟล์ใหม่ -> เลือกเฟรมเวิร์ก -> เพิ่มเฟรมเวิร์กที่ใช้ซ้ำทั้งหมด
หากมีโอกาสคุณมี
install! 'cocoapods',
generate_multiple_pod_projects: true,
incremental_installation: true
จากนั้นนี่เป็นวิธีที่จะทำ
# generated_projects only returns results if the we run "pod install --clean-install"
# or install a pod for the first time
installer.generated_projects.each do |project|
project.build_configurations.each do |configuration|
configuration.build_settings["ENABLE_TESTABILITY"] = "YES"
end
end
สิ่งนี้ไม่ได้เกิดขึ้นในโครงการของฉันก่อนหน้า Xcode 8 แต่หลังจากฉันอัพเกรดเป็น Xcode 8 มันทำให้ฉันงุนงง
คำตอบที่โพสต์ที่นี่ไม่ได้รับการแก้ไขปัญหาของฉัน สำหรับฉันฉันเพิ่งทำการทดสอบเหล่านี้เนื่องจากไม่จำเป็น ดังนั้นให้ยกเลิกการเลือกปุ่มทดสอบ: