หลังจากอัปเดตเป็น Xcode 7.3 จะแสดงข้อผิดพลาดCannot create __weak reference in file using manual reference counting
ในไฟล์พ็อด มีใครแก้ปัญหานี้ได้บ้าง?
หลังจากอัปเดตเป็น Xcode 7.3 จะแสดงข้อผิดพลาดCannot create __weak reference in file using manual reference counting
ในไฟล์พ็อด มีใครแก้ปัญหานี้ได้บ้าง?
คำตอบ:
ตั้งค่าBuild Settings -> Apple LLVM 7.1 - Language - Objective C -> Weak References in Manual Retain Release
เป็นYES
.
นำมาจากฟอรัมนักพัฒนาของ Apple - Xcode 7.3b4 ไม่ใช่ส่วนโค้งไม่สามารถสร้างการอ้างอิง __weakได้
นี่คือคำตอบอย่างเป็นทางการจาก Apple จากลิงค์:
ปัญหานี้ทำงานตามที่ตั้งใจไว้โดยยึดตามสิ่งต่อไปนี้: เรากำลังอยู่ในขั้นตอนการนำการอ้างอิงที่อ่อนแอไปใช้ในโหมดภาษา Objective-C ทั้งหมด เนื่องจากในอดีต“ __weak” ถูกละเลยในโหมดภาษาที่ไม่ใช่ ARC (และไม่ใช่ GC) เราจึงได้เพิ่มข้อผิดพลาดนี้เพื่อชี้ให้เห็นสถานที่ที่ความหมายจะเปลี่ยนไปในอนาคต โปรดอัปเดตรายงานข้อบกพร่องของคุณเพื่อแจ้งให้เราทราบว่าปัญหานี้ยังคงเป็นปัญหาสำหรับคุณหรือไม่
โดยพื้นฐานแล้วหากคุณใช้ Pod สำหรับไลบรารีของบุคคลที่สามคุณต้องลบ __weak ในที่ไม่ใช่ ARC หรือรอการอัปเดต
อัปเดต @ 23/3
ฉันควรหาข้อมูลเพิ่มเติมเกี่ยวกับแฟล็กที่ฉันสามารถส่งผ่านไปยังผู้ปฏิบัติตามเพื่อข้ามสิ่งเหล่านี้ได้ แต่โดยพื้นฐานแล้วคุณไม่ควรใช้__weak
ในโหมดที่ไม่ใช่ ARC นับจากนี้เพื่อหลีกเลี่ยงความขัดแย้งที่ไม่คาดคิด สำหรับผู้ใช้ cocoapods คุณไม่จำเป็นต้องลบ__weak
หรือรอการอัปเดต แต่ตั้งค่าWeak References in Manual Retain Release
สถานะในการตั้งค่าการสร้างเป็นใช่เหมือนที่ Lean กล่าว หวังว่าจะช่วยได้
วิธีที่ดีที่สุดในการแก้ปัญหานี้คือการเพิ่มpost_install
สคริปต์ลงใน Podfile ของคุณที่ตั้งWeak References in Manual Retain Release
ค่าสถานะเป็นyes
ในพ็อดเป้าหมายทั้งหมดของคุณ โดยวางรหัสต่อไปนี้ที่ด้านล่างของPodfile
ไฟล์.
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['CLANG_ENABLE_OBJC_WEAK'] ||= 'YES'
end
end
end
-fobjc-weak is not supported on the current deployment target
บางครั้งการทำผลว่าในข้อผิดพลาด คุณสามารถแก้ไขได้โดยเพิ่มตัวเลือกการกำหนดค่าอื่นบังคับให้พ็อดทั้งหมดกำหนดเป้าหมายเวอร์ชันที่คุณต้องการ ( ตามคำตอบนี้ ):
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['CLANG_ENABLE_OBJC_WEAK'] ||= 'YES'
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.3'
end
end
end
วิธีแก้ปัญหาสำหรับการอ้างอิงที่อ่อนแอของ Facebook ใน FBSettings.m
สำหรับ Podfile เป็นไปได้ที่จะเขียนสคริปต์เพื่อรันหลังจากการติดตั้ง / อัปเดตพ็อดอธิบายสิ่งต่อไปนี้ที่นั่น
post_install do | installer |
classy_pods_target = installer.pods_project.targets.find {| target | target.name == 'Facebook-iOS-SDK'}
classy_pods_target.build_configurations.each do | config |
config.build_settings['CLANG_ENABLE_OBJC_WEAK'] ||= 'YES'
end
end
CLANG_ENABLE_OBJC_WEAK วิธีค้นหาคำพูดของเวทมนตร์นั้น .
ฉันได้พบสิ่งนี้
ฉันเดาว่ามันหมายถึงลบ __weak
https://forums.developer.apple.com/thread/38934
เอิ่มเคยมีสิ่งที่เป็นการอ้างอิงตัวแปรที่อ่อนแอภายใต้ MRR [manual Retirement-release] ไหม "__weak" หมายถึงหนึ่งหรือทั้งสองอย่าง:
ข้อมูลอ้างอิงที่ไม่เป็นที่รู้จัก (กล่าวคือไม่ได้แสดงถึงจำนวนที่คงไว้)
การอ้างอิงเป็นศูนย์ (กล่าวคือรันไทม์เป็นศูนย์เมื่ออ็อบเจ็กต์ที่อ้างอิงถูกยกเลิกการจัดสรร)
# 1 ใช้ไม่ได้กับ MRR เพราะคุณไม่ได้เก็บตัวแปรไว้
# 2 ใช้ไม่ได้กับ MRR เช่นกันเนื่องจากการสนับสนุนรันไทม์อยู่ใน GC และ ARC [การนับการอ้างอิงอัตโนมัติ] ซึ่งคุณไม่ได้ใช้
ดูเหมือนว่าตอนนี้คอมไพเลอร์จะบ่นว่าไม่สามารถทำในสิ่งที่ไม่เคยทำได้ (และในกรณีของผู้มอบสิทธิ์แอปคุณจะไม่สามารถบอกความแตกต่างได้ในขณะทำงานเนื่องจากโดยทั่วไปแล้วผู้มอบสิทธิ์แอปจะไม่ถูกจัดสรร)
เพียงแค่ไปที่เป้าหมายของคุณในแท็บ "Build Phases" ให้มองหาไฟล์พ็อดใน "Compile Sources" คลิกไฟล์เหล่านั้นและเพิ่มแฟล็กคอมไพเลอร์ "-fobjc-arc"
หรือเปลี่ยน__weak
เป็น__unsafeunretained
. วิธีนี้จะแก้ปัญหาตามประเพณี เนื่องจาก MRC (ก่อน xCode 4 -) __weak ไม่ได้อยู่ใน iOS
-Wall -Wextra -Wno-unused-parameter
แฟล็กคอมไพเลอร์อื่นที่แทนที่การตั้งค่านี้ที่ฉันอาจเปิดใช้งานได้หรือไม่ฉันเปิดใช้งานแฟล็กคำเตือนเหล่านี้