คำเตือนใหม่ใน iOS 9:“ bitcode ทั้งหมดจะลดลง”


387

ฉันมีคำเตือนใหม่เกี่ยวกับ Google Framework ในแอปของฉัน:

(null): ด่วน: บิตโค้ดทั้งหมดจะถูกลบเนื่องจาก '/ Users / myname / Library / เอกสารมือถือ / com ~ apple ~ CloudDocs / foldername / appname / GoogleMobileAds.framework / GoogleMobileAds (GADSlot + AdEvents.o)' ถูกสร้างโดยไม่มี bitcode . คุณต้องสร้างใหม่ด้วยการเปิดใช้งานบิตโค้ด (การตั้งค่า Xcode ENABLE_BITCODE) ขอรับไลบรารีที่อัปเดตจากผู้ขายหรือปิดใช้งานบิตโค้ดสำหรับเป้าหมายนี้ หมายเหตุ: นี่จะเป็นข้อผิดพลาดในอนาคต

Xcode 7 เตือนฉันถึง 204 คำเตือนเกี่ยวกับแนวคิดเดียวกันนี้และฉันไม่สามารถแก้ไขได้ ฉันมีปัญหาในการเข้าถึงเครือข่ายจากแอพของฉัน นี่เป็นข้อผิดพลาดจาก Debugging Area:

-canOpenURL: ล้มเหลวสำหรับ URL: "kindle: // home" - ข้อผิดพลาด: "แอพนี้ไม่ได้รับอนุญาตให้ทำการค้นหาจุดไฟ"

ปัญหาทั้งหมดเหล่านี้ไม่ได้มีอยู่ใน iOS 8


ดังนั้นคุณเปิดใช้งาน bitcode ในเป้าหมาย Xcode ของคุณหรือไม่
Droppy

ขอโทษฉันยังใหม่กับสิ่งนี้คุณช่วยบอกฉันทีว่าได้โปรด?
C.Farrugia

ฉันไม่เคยทำมัน แต่ดูเหมือนจะเป็นสิ่งที่คุณต้องตั้งอย่างตั้งใจ คุณดูเหมือนจะทำอย่างนั้น
Droppy

4
@Droppy AFAIK การตั้งค่าจะเปิดตามค่าเริ่มต้น แต่คุณสามารถปิดการใช้งานได้ตลอดเวลาในการตั้งค่าโครงการของคุณ
HAS

ฉันปิดพวกเขาและคำเตือนทั้งหมดก็หายไป ฉันค้นคว้าเล็กน้อยและ Google จำเป็นต้องอัปเดตเฟรมเวิร์กของพวกเขาเพื่อให้ข้อผิดพลาดนี้ถูกปิดจนกว่าจะถึงตอนนี้การปิดใช้งานจะใช้งานได้ ไม่มีใครรู้เกี่ยวกับ -canOpenURL: ล้มเหลวสำหรับ URL: "kindle: // home" - ข้อผิดพลาด: "แอพนี้ไม่ได้รับอนุญาตให้ค้นหาคำว่า kindle kindle" นี่ฉันไม่รู้ว่า Xcode กำลังพูดถึงอะไร
C.Farrugia

คำตอบ:


1023

ไลบรารีของคุณถูกคอมไพล์โดยไม่มี bitcode แต่ตัวเลือก bitcode นั้นถูกเปิดใช้งานในการตั้งค่าโครงการของคุณ พูดNOถึงEnable Bitcodeในการตั้งค่า Build เป้าหมายและการตั้งค่า Build Library เพื่อลบคำเตือน

สำหรับผู้ที่สงสัยว่าต้องเปิดใช้งานบิตโค้ดหรือไม่:

สำหรับแอป iOS บิตโค้ดเป็นค่าเริ่มต้น แต่เป็นตัวเลือก สำหรับแอพ watchOS และ tvOS จำเป็นต้องมีบิตโค้ด หากคุณระบุบิตโค้ดแอพและกรอบงานทั้งหมดในชุดแอป (เป้าหมายทั้งหมดในโครงการ) จะต้องมีบิตโค้ดด้วย

https://help.apple.com/xcode/mac/current/#/devbbdc5ce4f


@Centurion lib การวิเคราะห์ google ก่อนหน้านี้เลิกใช้แล้วและไม่ได้รวบรวมกับ xcode 7 / ios9 อย่างใดอย่างหนึ่ง
zonabi

1
@goelv ใช่คุณควรจะสามารถส่งแอปที่ปิดใช้งานบิตโค้ด มันเป็นตัวเลือกในขณะนี้ มันอาจกลายเป็นสิ่งจำเป็นในอนาคต
zonabi

2
ไม่ทำงานสำหรับฉันในการเก็บถาวร โปรเจ็กต์ XCODE 7 ก่อนหน้านี้ทำงานได้ดีตอนนี้ไม่สามารถเก็บได้แม้จะเปิดใช้งาน Bitcode ตั้งค่าเป็น NO นี่สำหรับห้องสมุด AWS
ort11

1
ยังคงได้รับข้อผิดพลาดหลังจากปิดใช้งาน Bitcode ในเป้าหมายทั้งหมด
datWooWoo

110

หลังจาก Xcode 7 ตัวเลือกบิตโค้ดจะถูกเปิดใช้งานตามค่าเริ่มต้น หากไลบรารีของคุณถูกคอมไพล์โดยไม่มี bitcode แต่ตัวเลือก bitcode นั้นถูกเปิดใช้งานในการตั้งค่าโครงการของคุณคุณสามารถ:

  1. อัปเดตห้องสมุดของคุณด้วยรหัสบิต
  2. พูดไม่ใช่เพื่อเปิดใช้งาน Bitcodeในการตั้งค่าการสร้างเป้าหมายของคุณ

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

และการตั้งค่า Library Build เพื่อลบคำเตือน

สำหรับข้อมูลเพิ่มเติมไปที่เอกสารของ bitcode ในห้องสมุดนักพัฒนา

และ WWDC 2558 เซสชัน 102: "สถานะแพลตฟอร์มของสหภาพ"

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


42

ในกรณีของฉันสำหรับการหลีกเลี่ยงปัญหานั้น:

  1. ตรวจสอบให้แน่ใจว่าคุณกำลังติดต่อกับXcode 7ไม่ใช่รุ่นที่ต่ำกว่า ในรุ่นที่ต่ำกว่าธงนี้ไม่มีอยู่

  2. ตั้งค่า: โครงการ> สร้างการตั้งค่า> ทั้งหมด> ตัวเลือกสร้าง> เปิดใช้งาน Bitcode = ไม่

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


2
ดังนั้นคุณจะต้องคอมไพล์ไลบรารีที่รวมอยู่ในโครงการของคุณอีกครั้งด้วย XCode7 และ EnableBitcode ที่ตั้งค่าเป็น YES ค่อนข้างซับซ้อนหากคุณกำลังทำงานกับบรรณารักษ์.
Javier Calatrava Llavería

15

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

ที่ให้คำสั่งบันทึกทั้งหมดเช่น

-canOpenURL: ล้มเหลวสำหรับ URL: "kindle: // home" - ข้อผิดพลาด: "แอพนี้ไม่ได้รับอนุญาตให้ค้นหารูปแบบจุด"

ผู้ให้บริการควรปรับปรุงตรรกะของพวกเขาสำหรับสิ่งนี้

หากคุณต้องการสืบค้นแอพที่ติดตั้ง / โครงร่างที่มีอยู่คุณต้องเพิ่มลงในinfo.plistไฟล์ของคุณ

เพิ่มคีย์ 'LSApplicationQueriesSchemes' ให้กับ plist ของคุณเป็นอาร์เรย์ จากนั้นเพิ่มสตริงในอาร์เรย์นั้นเช่น 'จุด'

แน่นอนว่านี่ไม่ใช่ตัวเลือกสำหรับโฆษณาแบนเนอร์ (เนื่องจากเป็นโฆษณาแบบไดนามิก) แต่คุณยังสามารถค้นหาวิธีการดังกล่าวสำหรับแอพของคุณหรือแอพอื่น ๆ เช่น Twitter และ Facebook

เอกสารของ canOpenUrl: method canOpenUrl:

เอกสารเกี่ยวกับคีย์ LSApplicationQueriesSchemes


สมมติว่าไลบรารีแบบสแตติกจะตรวจสอบ deeplink ของแอพหลักวิธีการใช้ข้อยกเว้น 'LSApplicationQueriesSchemes' ในไลบรารีแบบคงที่ โดยปกติแล้วคุณไม่มี Info.plist สำหรับสิ่งนั้น
loretoparisi

ฉันไม่แน่ใจเกี่ยวกับเรื่องนี้หากห้องสมุดจำเป็นต้องตรวจสอบแอปด้านนอกเป็นผู้ปกครองผู้ปกครองควรกำหนด URL ของมันใน info.plist (ดังนั้นควรจัดทำเป็นเอกสารสำหรับกรอบงาน) หาก canOpenUrl จะส่งคืนแอปพลิเคชันหลักไม่สามารถจัดการมันได้นอกจากนี้คุณควร (ฉันถือว่า) รวมถึงผู้ที่อยู่ใน info.plist ด้วย
Saren Inden

13

หากคุณใช้CocoaPodsและคุณต้องการปิดใช้งาน Bitcode สำหรับไลบรารีทั้งหมดให้ใช้คำสั่งต่อไปนี้ใน Podfile

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ENABLE_BITCODE'] = 'NO'
        end
    end
end

8

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

สิ่งนี้ทำงานสำหรับฉันที่จะตั้งค่าENABLE_BITCODE = NOผ่านบรรทัดคำสั่ง:

find . -name *project.pbxproj | xargs sed -i -e 's/\(GCC_VERSION = "";\)/\1\ ENABLE_BITCODE = NO;/g'

โปรดทราบว่านี่น่าจะไม่เสถียรในรุ่น Xcode มันได้รับการทดสอบด้วย Xcode 7.0.1 และเป็นส่วนหนึ่งของโครงการ Cordova 4.0



-2

ปัญหานี้ได้รับการแก้ไขเมื่อเร็ว ๆ นี้ (พฤศจิกายน 2010) โดย Google ดูhttps://code.google.com/p/analytics-issues/issues/detail?id=671 แต่ระวังให้ดีว่าการแก้ไขที่ดีจะทำให้เกิดข้อบกพร่องมากขึ้น :)

นอกจากนี้คุณยังจะต้องทำตามวิธี initialisation อยู่ที่นี่: https://developers.google.com/analytics/devguides/collection/ios/v2

คำแนะนำล่าสุดจะทำให้คุณปวดหัวเพราะมันอ้างอิงสาธารณูปโภคที่ไม่รวมอยู่ในฝัก ด้านล่างจะล้มเหลวด้วย cocoapod

// Configure tracker from GoogleService-Info.plist.
NSError *configureError;
[[GGLContext sharedInstance] configureWithError:&configureError];
NSAssert(!configureError, @"Error configuring Google services: %@", configureError);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.