2015-09-18 24 views
12

Używam API Dropbox Core w mojej aplikacji na iOS już od jakiegoś czasu. Po aktualizacji do Xcode 7 otrzymałem następujący błąd przy próbie kompilacji mojego projektu:Xcode 7 + Dropbox Core API: Po prostu wyłącz 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. 

wiem co Bitcode jest i co jest dobre dla. Błąd można rozwiązać, po prostu ustawiając opcję Enable Bitcode na No w docelowych ustawieniach budowania. Po tym wszystkim wszystko kompiluje bez żadnego błędu i aplikacja działa bez problemu.

Jak dotąd tak dobrze, ale czy to jest "właściwe" rozwiązanie? Sprawdziłem stronę Dropbox pod kątem zaktualizowanej wersji zestawu SDK, ale korzystam już z najnowszej wersji.

Projekt zawiera inny cel dla Widżetu aplikacji, rozszerzenia zegarka itp., Które nie korzysta z zestawu SDK Dropbox. Którą opcję dla Enable Bitcode należy zastosować tutaj? Czy jest (z jakiegoś powodu) lepsze wykorzystanie tej samej wartości (No w moim przypadku) dla wszystkich celów? Czy ma sens włączenie opcji Bitcode for Watch i Widget, jeśli główny cel aplikacji nie korzysta z Bitcode?

Jaka jest tutaj najlepsza praktyka?

+0

To zostało [udzielone] [1] wyczerpująco w podobnym pytaniu. [1]: http: // stackoverflow.com/questions/30722606/what-does-enable-bitcode-do-in-xcode-7 – Carl

+0

@Carl Dzięki, ale pytanie/odpowiedź, które połączyłeś, po prostu opisuje, czym jest Bitcode i do czego jest używany. To nie ma prawie nic wspólnego z moim pytaniem tutaj. Jak już powiedziałem, dobrze wiem, czym jest Bitcode i dlaczego ta opcja jest włączona w Xcode 7. Jak już powiedziałem, wiem, jak wyłączyć tę opcję i po wykonaniu tego wszystko działa dobrze. Pytanie brzmi: czy to właściwe rozwiązanie? –

+0

Powiedziałbym, że masz najlepsze dostępne rozwiązanie, gdy wciąż łączysz się z biblioteką Dropbox. Zapobiegasz stosowaniu przez Apple podzestawu optymalizacji aplikacji, który może dostarczyć aplikację ładującą posty (na przykład), ale musi. To stanie się "złym" rozwiązaniem, jeśli Apple zmusi Bitcode jako obowiązkowego, ale można mieć nadzieję, że Dropbox odpowie w odpowiedzi na zaktualizowaną bibliotekę. – Carl

Odpowiedz

2

Odkąd zadał to pytanie po prostu ustawić opcję Enable Bitcode do No w celach Build Settings podczas korzystania Yes w celach widget i Apple Obserwować. To działało dobrze i nie zauważyłem żadnych problemów ani ograniczeń.

Teraz próbowałem udostępnić nową wersję mojej aplikacji w App Store i podczas przesyłania pliku aplikacji do Apple zauważyłem pole wyboru Include Bitcode. Gdy to pole jest zaznaczone, że pojawia się następujący błąd:

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.

nie mam pojęcia, dlaczego jest to problem teraz, gdy wszystko inne wersja wysłał w ciągu ostatniego roku przeszedł bez problemu. Jednak problem można łatwo rozwiązać, usuwając zaznaczenie pola wyboru Include Bitcode:. Przesyłanie jest następnie akceptowane bez żadnych problemów.

Ale jest lepsze rozwiązanie: jak zauważył Greg, Dropbox wreszcie wydał wersję SDK z włączoną opcją Bitcode!

Pobierz new SDK 1.3.14, umieścić go w swoim projekcie i ustawić ENABLE_BITCODE do Yes dla wszystkich celów, i gotowe. Przynajmniej dopóki Apple nie znajdzie nowego sposobu na zakłócenie pracy nad wydaniem :-)

5

Wygląda na to, że nie wydali interfejsu API obsługiwanego przez bitc. Here is the link to the thread na oficjalnych forach Dropbox, które zawierają osobę wsparcia z Dropbox, odpowiadając na pytania innych programistów w tym kontekście.

Oto istotne odpowiedź od pomocy osoby 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

Dla odniesienia dostępna jest teraz nowa wersja zestawu SDK do iOS Core SDB zbudowanego za pomocą bitu: https://www.dropbox.com/developers-v1/core/sdks/ios – Greg