Các cảnh báo mới trong iOS 9: Tất cả các bitcode sẽ bị loại bỏ


387

Tôi có cảnh báo mới này về Google Framework trong ứng dụng của mình:

(null): URGENT: tất cả bitcode sẽ bị hủy vì '/ Users / myname / Library / Mobile Documents / com ~ apple ~ CloudDocs / Foldername / appname / GoogleMobileAds.framework / GoogleMobileAds (GADSlot + AdEvents.o)' . Bạn phải xây dựng lại nó với kích hoạt mã bit (cài đặt Xcode ENABLE_BITCODE), lấy thư viện cập nhật từ nhà cung cấp hoặc tắt mã bitcoin cho mục tiêu này. Lưu ý: Đây sẽ là một lỗi trong tương lai.

Xcode 7 đang đưa ra cho tôi khoảng 204 cảnh báo về khái niệm tương tự này và tôi không thể giải quyết vấn đề này. Ngoài ra tôi có một vấn đề truy cập mạng từ ứng dụng của tôi. Đây là lỗi từ Khu vực gỡ lỗi:

-canOpenURL: không thành công cho URL: "kindle: // home" - lỗi: "Ứng dụng này không được phép truy vấn cho lược đồ kindle"

Tất cả những vấn đề này không có trong iOS 8.


Vậy bạn đã kích hoạt bitcode trong mục tiêu Xcode của mình chưa?
Dropppy

Xin lỗi tôi là người mới này, bạn có thể cho tôi biết làm thế nào được không?
C.Farrugia

Tôi chưa bao giờ làm điều đó, nhưng nó có vẻ là thứ bạn phải cố tình thiết lập. Bạn dường như đã làm điều đó.
Dropppy

4
@Droppy AFAIK cài đặt được bật theo mặc định, nhưng bạn có thể tắt nó bất cứ lúc nào trong cài đặt dự án của bạn.
ĐÃ

Tôi tắt chúng đi và tất cả các cảnh báo đã biến mất. Tôi đã nghiên cứu một chút và Google cần cập nhật khung của họ để lỗi này được tắt, cho đến bây giờ chỉ cần tắt nó sẽ hoạt động. Có ai biết về -canOpenURL: không thành công cho URL: "kindle: // home" - lỗi: "Ứng dụng này không được phép truy vấn cho chương trình kindle"? Điều này tôi không biết Xcode đang nói về điều gì
C.Farrugia

Câu trả lời:


1023

Thư viện của bạn đã được biên dịch mà không có bitcode, nhưng tùy chọn bitcode được bật trong cài đặt dự án của bạn. Nói NOvới Enable Bitcodetrong Cài đặt bản dựng mục tiêu và Cài đặt bản dựng thư viện để xóa các cảnh báo.

Đối với những người thắc mắc nếu kích hoạt bitcode là bắt buộc:

Đối với các ứng dụng iOS, bitcode là mặc định, nhưng tùy chọn. Đối với các ứng dụng watchOS và tvOS, bitcode là bắt buộc. Nếu bạn cung cấp bitcode, tất cả các ứng dụng và khung trong gói ứng dụng (tất cả các mục tiêu trong dự án) cần phải bao gồm bitcode.

https://help.apple.com/xcode/mac/cản/#/devbbdc5ce4f


@Centurion lib phân tích google trước đó không được dùng nữa và không được biên dịch với xcode 7 / ios9
zonabi

1
@goelv có, bạn sẽ có thể gửi ứng dụng bị vô hiệu hóa bitcode. nó là tùy chọn ngay bây giờ. nó có thể trở nên bắt buộc trong tương lai.
zonabi

2
KHÔNG làm việc cho tôi để lưu trữ. Dự án Pre XCODE 7 đã hoạt động tốt, hiện tại không thể ARCHIVE ngay cả khi Bật Bitcode được đặt thành NO. Đây là cho thư viện AWS.
ort11

1
Vẫn nhận được lỗi sau khi vô hiệu hóa Bitcode trên tất cả các mục tiêu.
datWooWoo

110

Sau Xcode 7, tùy chọn bitcode sẽ được bật theo mặc định. Nếu thư viện của bạn được biên dịch mà không có bitcode, nhưng tùy chọn bitcode được bật trong cài đặt dự án của bạn, bạn có thể:

  1. Cập nhật thư viện của bạn với mã bit,
  2. Nói KHÔNG với Kích hoạt Bitcode trong Cài đặt bản dựng mục tiêu của bạn

Nhập mô tả hình ảnh ở đây

Và Cài đặt xây dựng thư viện để loại bỏ các cảnh báo.

Để biết thêm thông tin, hãy đi đến tài liệu về bitcode trong thư viện nhà phát triển .

Và WWDC 2015 Phiên 102: "Nền tảng của Liên minh"

Nhập mô tả hình ảnh ở đây


42

Trong trường hợp của tôi để tránh vấn đề đó:

  1. Hãy chắc chắn rằng bạn đang xử lý Xcode 7 , KHÔNG phải phiên bản thấp hơn. Trong phiên bản thấp hơn, cờ này không tồn tại.

  2. Thiết lập: Dự án> Cài đặt bản dựng> Tất cả> Tùy chọn bản dựng> Bật Bitcode = NO

nhập mô tả hình ảnh ở đây


2
Vì vậy, bạn sẽ phải biên dịch lại các thư viện có trong dự án của bạn với XCode7 và với EnableBitcode được đặt thành CÓ. Khá phức tạp nếu bạn đang làm việc với thư viện .a của bên thứ ba.
Javier Calatrava Llavería

15

phương pháp canOpenUrl trong iOS 9 (do quyền riêng tư) đã thay đổi và không còn miễn phí sử dụng nữa. Nhà cung cấp biểu ngữ của bạn kiểm tra các ứng dụng đã cài đặt để chúng không hiển thị biểu ngữ cho ứng dụng đã được cài đặt.

Điều đó cung cấp cho tất cả các báo cáo nhật ký như

-canOpenURL: không thành công cho URL: "kindle: // home" - lỗi: "Ứng dụng này không được phép truy vấn cho lược đồ kindle"

Các nhà cung cấp nên cập nhật logic của họ cho việc này.

Nếu bạn cần truy vấn các ứng dụng đã cài đặt / các chương trình có sẵn, bạn cần thêm chúng vào info.plisttệp của mình .

Thêm khóa 'LSApplicationQueriesScheme' vào danh sách của bạn dưới dạng một mảng. Sau đó thêm các chuỗi trong mảng đó như 'kindle'.

Tất nhiên, đây không thực sự là một tùy chọn cho quảng cáo biểu ngữ (vì chúng là động), nhưng bạn vẫn có thể truy vấn theo cách đó cho các ứng dụng của riêng bạn hoặc các ứng dụng cụ thể khác như Twitter và Facebook.

Tài liệu về phương pháp canOpenUrl: canOpenUrl:

Tài liệu về khóa LSApplicationQueriesScheme


Giả sử rằng một thư viện tĩnh sẽ kiểm tra một liên kết sâu của ứng dụng mẹ, làm thế nào để sử dụng ngoại lệ 'LSApplicationQueriesScheme' trong thư viện tĩnh? Thông thường bạn không có Info.plist cho điều đó.
loretoparisi

Tôi không thực sự chắc chắn về điều đó, nếu một thư viện cần kiểm tra các ứng dụng bên ngoài thì cha mẹ nên xác định url trong thông tin đó. Nó (vì vậy hãy viết tài liệu cho khung). Nếu canOpenUrl cũng không trả về thì ứng dụng mẹ có thể xử lý nó hay không, bạn nên (tôi giả sử) cũng bao gồm những người trong thông tin.plist
Saren Inden

13

Nếu bạn đang sử dụng CocoaPods và bạn muốn tắt Bitcode cho tất cả các thư viện, hãy sử dụng lệnh sau trong 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

Tuyên bố miễn trừ trách nhiệm: Điều này dành cho những người hỗ trợ quy trình tích hợp liên tục yêu cầu quy trình tự động. Nếu bạn không, vui lòng sử dụng Xcode như được mô tả trong câu trả lời của Javier .

Điều này làm việc cho tôi để thiết lập ENABLE_BITCODE = NOthông qua dòng lệnh:

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

Lưu ý rằng điều này có thể không ổn định trên các phiên bản Xcode. Nó đã được thử nghiệm với Xcode 7.0.1 và là một phần của dự án Cordova 4.0.



-2

Sự cố này gần đây đã được Google khắc phục (tháng 11 năm 2010), xem https://code.google.com.vn/p/analytics-issues/issues/detail?id=671 . Nhưng hãy lưu ý rằng như là một sửa chữa tốt, nó mang lại nhiều lỗi hơn :)

Bạn cũng sẽ phải tuân theo phương pháp khởi tạo được liệt kê tại đây: https://developers.google.com/analytics/devguides/collection/ios/v2 .

Các hướng dẫn mới nhất sẽ khiến bạn đau đầu vì nó tham chiếu các tiện ích không có trong nhóm. Dưới đây sẽ thất bại với cocoapod

// Configure tracker from GoogleService-Info.plist.
NSError *configureError;
[[GGLContext sharedInstance] configureWithError:&configureError];
NSAssert(!configureError, @"Error configuring Google services: %@", configureError);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.