ฉันกำลังพยายามใช้การ@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 มันทำให้ฉันงุนงง
คำตอบที่โพสต์ที่นี่ไม่ได้รับการแก้ไขปัญหาของฉัน สำหรับฉันฉันเพิ่งทำการทดสอบเหล่านี้เนื่องจากไม่จำเป็น ดังนั้นให้ยกเลิกการเลือกปุ่มทดสอบ: