2015-09-18 17 views
12

Tôi đã sử dụng API lõi Dropbox trong ứng dụng iOS của mình trong một thời gian ngắn. Sau khi cập nhật lên Xcode 7, tôi đã nhận được lỗi sau khi tôi cố gắng biên dịch dự án của mình:Xcode 7 + Dropbox Core API: Chỉ cần tắt Bitcode?

ld: '.../Frameworks/Dropbox/iOS/DropboxSDK.framework/DropboxSDK' does not contain bitcode. 
You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated 
library from the vendor, or disable bitcode for this target. 

Tôi biết Bitcode là gì và nó là gì. Lỗi có thể được giải quyết bằng cách chỉ cần đặt tùy chọn Enable Bitcode thành No trong mục tiêu Cài đặt xây dựng. Sau khi tất cả mọi thứ biên dịch mà không có bất kỳ lỗi và các ứng dụng chạy mà không có bất kỳ vấn đề.

Cho đến nay rất tốt, nhưng đây có phải là giải pháp "đúng" không? Tôi đã kiểm tra trang Dropbox cho một Phiên bản cập nhật của SDK, nhưng tôi đã sử dụng phiên bản mới nhất.

Dự án chứa một số mục tiêu khác cho Tiện ích ứng dụng, Tiện ích xem, v.v. không sử dụng SDK Dropbox. Tùy chọn nào cho Enable Bitcode nên được sử dụng ở đây? Có phải (vì một lý do nào đó) tốt hơn sử dụng cùng một giá trị (No trong trường hợp của tôi) cho tất cả các mục tiêu? Liệu nó có ý nghĩa gì khi kích hoạt Bitcode cho các mục tiêu Watch và Widget nếu mục tiêu ứng dụng chính không sử dụng Bitcode?

Phương pháp hay nhất ở đây là gì?

+0

Điều này đã được trả lời một cách toàn diện trong một câu hỏi tương tự. [1]: http: // stackoverflow.com/questions/30722606/what-does-enable-bitcode-do-in-xcode-7 – Carl

+0

@Carl Cảm ơn, nhưng câu hỏi/câu trả lời bạn đã liên kết cơ bản chỉ mô tả Bitcode là gì và nó được sử dụng cho cái gì. Điều này gần như không có gì để làm với câu hỏi của tôi ở đây. Như tôi đã nói, tôi biết rõ Bitcode là gì và tại sao tùy chọn này được kích hoạt trong Xcode 7. Như tôi đã nói tôi biết cách tắt tùy chọn này và sau khi làm như vậy, mọi thứ đều hoạt động tốt. Câu hỏi là: Đây có phải là giải pháp đúng không? –

+0

Tôi muốn nói rằng bạn có giải pháp tốt nhất có sẵn trong khi bạn vẫn đang liên kết với thư viện của Dropbox. Bạn đang ngăn Apple áp dụng một tập hợp con các tối ưu hóa ứng dụng có thể cung cấp ứng dụng tải nhanh (ví dụ) nhưng cần phải có. Điều này sẽ chỉ trở thành "sai" giải pháp nếu Apple làm cho Bitcode bắt buộc nhưng người ta sẽ hy vọng rằng Dropbox sẽ trả lời với một thư viện cập nhật để đáp ứng. – Carl

Trả lời

2

Kể từ khi tôi hỏi câu hỏi này, tôi chỉ đơn giản là thiết lập các tùy chọn Enable Bitcode để No trong các mục tiêu Build Settings khi sử dụng Yes trong các mục tiêu Widget và Apple Watch. Điều đó làm việc tốt và tôi không nhận thấy bất kỳ vấn đề hoặc hạn chế nào.

Bây giờ tôi đã cố gắng phát hành phiên bản ứng dụng mới của mình cho App Store và tôi nhận thấy hộp kiểm Include Bitcode khi tải tệp ứng dụng lên Apple. Khi hộp kiểm này được bật, tôi nhận được lỗi sau:

Invalid Match-O Format. The Match-O bundle "MyApp.app/PlugIns/MyApp WatchKit Extension.appex" isn't consistent with the Match-O in the main bundle.

The main bundle Match-O contains armv7(machine code) and arm64(machine code), while the nested bundle Match-O contains armv7(bitcode and machine code) and arm64(bitcode and machine code).

Varify that all of the targets for a platform have a consistent value for the ENABLE_BITCODE build setting.

Tôi không biết tại sao đây là vấn đề trong khi tất cả phiên bản khác tôi tải lên trong năm qua không gặp bất kỳ sự cố nào. Tuy nhiên, vấn đề có thể dễ dàng được giải quyết bằng cách bỏ chọn hộp kiểm Include Bitcode. Tải lên sau đó được chấp nhận mà không có bất kỳ vấn đề gì.

Nhưng có một giải pháp tốt hơn: Như Greg đã chỉ ra, Dropbox cuối cùng cũng đã phát hành phiên bản SDK hỗ trợ Bitcode!

Tải new SDK 1.3.14, bao gồm nó trong dự án của bạn và thiết lập ENABLE_BITCODE-Yes cho tất cả các mục tiêu, và bạn đã làm xong. Ít nhất cho đến khi Apple tìm ra cách mới để làm phiền quy trình phát hành của bạn :-)

5

Dường như họ chưa phát hành API hỗ trợ bitcode. Here is the link to the thread trên diễn đàn Dropbox chính thức bao gồm người hỗ trợ từ Dropbox trả lời các câu hỏi dành cho nhà phát triển khác trong ngữ cảnh này.

Dưới đây là câu trả lời có liên quan từ người hỗ trợ Dropbox:

Oh, great! We haven't released an update to the iOS Core SDK with bitcode, but if you need bitcode support for the Core SDK, you can add the source directly, since it's open source. There's a thread about this for the Core SDK here: https://www.dropboxforum.com/hc/en-us/community/posts/204352929-Need-Bitcode-Framework

+1

Để tham khảo, hiện có bản phát hành mới của SDK lõi iOS Dropbox được xây dựng với bitcode: https://www.dropbox.com/developers-v1/core/sdks/ios – Greg

Các vấn đề liên quan