Peringatan baru di iOS 9: "semua bitcode akan dihapus"

387

Saya memiliki peringatan baru ini tentang Kerangka Google di aplikasi saya:

(null): URGENT: semua bitcode akan dihapus karena '/ Users / myname / Library / Mobile Documents / com ~ apple ~ CloudDocs / foldername / appname / GoogleMobileAds.framework / GoogleMobileAds (GADSlot + AdEvents.o)' dibangun tanpa bitcode . Anda harus membangunnya kembali dengan bitcode diaktifkan (pengaturan Xcode ENABLE_BITCODE), dapatkan pustaka yang diperbarui dari vendor, atau nonaktifkan bitcode untuk target ini. Catatan: Ini akan menjadi kesalahan di masa mendatang.

Xcode 7 memberi saya sekitar 204 peringatan tentang konsep yang sama ini, dan saya tidak bisa menyiasati ini. Saya juga punya masalah mengakses jaringan dari aplikasi saya. Ini adalah kesalahan dari Area Debugging:

-canOpenURL: gagal untuk URL: "kindle: // home" - error: "Aplikasi ini tidak diizinkan untuk melakukan query untuk skema kindle"

Semua masalah ini tidak ada di iOS 8.

C.Farrugia
sumber
Jadi, Anda sudah mengaktifkan bitcode di target Xcode Anda?
Droppy
Maaf saya baru dalam hal ini, bisakah Anda memberi tahu saya bagaimana caranya?
C.Farrugia
Saya belum pernah melakukannya, tetapi tampaknya Anda harus mengaturnya dengan sengaja. Anda tampaknya telah melakukan itu.
Droppy
4
@Proppy AFAIK pengaturan dihidupkan secara default, tetapi Anda dapat menonaktifkannya kapan saja dalam pengaturan proyek Anda.
TELAH
Saya mematikannya dan semua peringatan hilang. Saya meneliti sedikit dan Google perlu memperbarui kerangka kerja mereka agar kesalahan ini tidak aktif, sampai sekarang mematikannya akan berhasil. Adakah yang tahu tentang -canOpenURL: gagal untuk URL: "kindle: // home" - error: "Aplikasi ini tidak diizinkan melakukan kueri untuk skema kindle"? Ini saya tidak tahu apa yang dibicarakan Xcode
C.Farrugia

Jawaban:

1023

Pustaka Anda dikompilasi tanpa bitcode, tetapi opsi bitcode diaktifkan di pengaturan proyek Anda. Katakanlah NOuntuk Enable Bitcodedi Settings Build target Anda dan Pengaturan Membangun Perpustakaan untuk menghapus peringatan.

Bagi mereka yang bertanya-tanya apakah mengaktifkan bitcode diperlukan:

Untuk aplikasi iOS, bitcode adalah default, tetapi opsional. Untuk aplikasi watchOS dan tvOS, bitcode diperlukan. Jika Anda memberikan bitcode, semua aplikasi dan kerangka kerja dalam bundel aplikasi (semua target dalam proyek) harus menyertakan bitcode.

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

Zia
sumber
@Centurion lib google analytics sebelumnya sudah usang dan tidak dapat dikompilasi dengan xcode 7 / ios9
zonabi
1
@goelv ya Anda harus bisa mengirimkan aplikasi dengan bitcode dinonaktifkan. itu opsional sekarang. mungkin diperlukan di masa depan.
zonabi
2
TIDAK bekerja untuk saya dalam pengarsipan. Proyek Pra XCODE 7 bekerja dengan baik, sekarang tidak dapat ARCHIVE bahkan dengan Mengaktifkan Bitcode diatur ke NO. Ini untuk perpustakaan AWS.
ort11
1
Masih mendapatkan kesalahan setelah menonaktifkan Bitcode di semua target.
datWooWoo
110

Setelah Xcode 7, opsi bitcode akan diaktifkan secara default. Jika perpustakaan Anda dikompilasi tanpa bitcode, tetapi opsi bitcode diaktifkan di pengaturan proyek Anda, Anda dapat:

  1. Perbarui perpustakaan Anda dengan kode bit,
  2. Katakan TIDAK untuk Mengaktifkan Bitcode di Target Anda Membangun Pengaturan

Masukkan deskripsi gambar di sini

Dan Pengaturan Bangun Perpustakaan untuk menghapus peringatan.

Untuk informasi lebih lanjut, buka dokumentasi bitcode di perpustakaan pengembang .

Dan WWDC 2015 Sesi 102: "Platforms of the Union"

Masukkan deskripsi gambar di sini

ElonChan
sumber
42

Dalam kasus saya untuk menghindari masalah itu:

  1. Pastikan Anda berurusan dengan Xcode 7 , BUKAN versi yang lebih rendah. Di versi yang lebih rendah, bendera ini tidak ada.

  2. Pengaturan: Proyek> Pengaturan Bangun> Semua> Opsi Bangun> Aktifkan Bitcode = TIDAK

masukkan deskripsi gambar di sini

Javier Calatrava Llavería
sumber
2
Jadi, Anda harus mengkompilasi ulang pustaka yang disertakan dalam proyek Anda dengan XCode7 dan dengan EnableBitcode diatur ke YES. Cukup rumit jika Anda bekerja dengan pihak ke-3. Pustakawan.
Javier Calatrava Llavería
15

Metode canOpenUrldi iOS 9 (karena privasi) berubah dan tidak bebas untuk digunakan lagi. Penyedia spanduk Anda memeriksa aplikasi yang diinstal sehingga mereka tidak menampilkan spanduk untuk aplikasi yang sudah diinstal.

Itu memberikan semua pernyataan log seperti

-canOpenURL: gagal untuk URL: "kindle: // home" - error: "Aplikasi ini tidak diizinkan untuk melakukan query untuk skema kindle"

Penyedia harus memperbarui logika mereka untuk ini.

Jika Anda perlu menanyakan aplikasi yang diinstal / skema yang tersedia, Anda perlu menambahkannya ke info.plistfile Anda .

Tambahkan kunci 'LSApplicationQueriesSchemes' ke plist Anda sebagai sebuah array. Kemudian tambahkan string dalam array itu seperti 'kindle'.

Tentu saja ini bukan opsi untuk iklan banner (karena iklan itu dinamis), tetapi Anda masih dapat menanyakan hal itu untuk aplikasi Anda sendiri atau aplikasi spesifik lainnya seperti Twitter dan Facebook.

Dokumentasi canOpenUrl: metode canOpenUrl:

Dokumentasi tentang kunci LSApplicationQueriesSchemes

Saren Inden
sumber
Misalkan pustaka statis akan memeriksa deeplink aplikasi induk, bagaimana cara menggunakan pengecualian 'LSApplicationQueriesSchemes' di pustaka statis? Biasanya Anda tidak memiliki Info.plist untuk itu.
loretoparisi
Saya tidak begitu yakin tentang hal itu, jika perpustakaan perlu memeriksa aplikasi di luar orang tuanya, orang tua harus menentukan url di info.plist-nya (jadi dokumentasikan untuk kerangka kerja). Jika canOpenUrl juga tidak mengembalikan, aplikasi orang tua dapat menanganinya, selain dari yang seharusnya (saya asumsikan) juga termasuk yang ada di info.plist
Saren Inden
13

Jika Anda menggunakan CocoaPods dan Anda ingin menonaktifkan Bitcode untuk semua pustaka, gunakan perintah berikut di 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
Eike
sumber
8

Penafian: Ini ditujukan bagi mereka yang mendukung alur kerja integrasi berkelanjutan yang membutuhkan proses otomatis. Jika tidak, silakan gunakan Xcode seperti yang dijelaskan dalam jawaban Javier .

Ini berhasil bagi saya untuk ditetapkan ENABLE_BITCODE = NOmelalui baris perintah:

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

Perhatikan bahwa ini kemungkinan tidak stabil di seluruh versi Xcode. Itu diuji dengan Xcode 7.0.1 dan sebagai bagian dari proyek Cordova 4.0.

miraculixx
sumber
-2

Masalah ini baru-baru ini diperbaiki (November 2010) oleh Google, lihat https://code.google.com/p/analytics-issues/issues/detail?id=671 . Tapi ketahuilah bahwa sebagai perbaikan yang baik itu akan membawa lebih banyak bug :)

Anda juga harus mengikuti metode inisialisasi yang tercantum di sini: https://developers.google.com/analytics/devguides/collection/ios/v2 .

Instruksi terbaru akan memberi Anda sakit kepala karena referensi utilitas tidak termasuk dalam pod. Di bawah ini akan gagal dengan cocoapod

// Configure tracker from GoogleService-Info.plist.
NSError *configureError;
[[GGLContext sharedInstance] configureWithError:&configureError];
NSAssert(!configureError, @"Error configuring Google services: %@", configureError);
pengguna1119517
sumber