Porting aplikasi ke mac akhirnya dimungkinkan berkat Catalyst , masalahnya adalah, banyak pod tidak mendukung AppKit. Yang paling umum adalah Crashlytics / Firebase.
In [...]/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics(CLSInternalReport.o), building for Mac Catalyst, but linking in object file built for iOS Simulator, file '[...]/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics' for architecture x86_64
Karena ini adalah topik terbaru, saya tidak dapat menemukan dokumen tentang cara menghapus pod dari build saya untuk macOS tetapi menyimpannya untuk iOS dan iPadO S.
Dimungkinkan untuk menggunakan kode:
#if !targetEnvironment(macCatalyst)
// Code to exclude for your macOS app
#endif
Tapi itu salah satu bagian dari masalah, bagian lainnya adalah menautkan pod hanya untuk iOS ...
Apa yang akan menjadi tindakan yang paling mudah / terbaik saat perpustakaan tidak penting untuk macOS tetapi masih ingin di iOS?
if target.name.start_with?("Pods")
untuk menangkap semua target Pod.if [[ ${IS_MACCATALYST} != "YES" ]]; then "${PODS_ROOT}/Fabric/run" fi
Buka file Pods- $ projectname.release.xcconfig di direktori Pods proyek Anda, dan cari baris OTHER_LDFLAGS. Tambahkan
[sdk=iphone*]
segera setelah nama variabel (sebagai contoh, milik saya sekarang terlihat seperti ini):Itu secara kondisional menetapkan opsi tautan hanya ketika membangun varian iphone, mencegah pod tertaut pada OSX. Tentu saja seperti yang Anda sebutkan, ini perlu dikombinasikan dengan
#if !targetEnvironment(macCatalyst)
dan#endif
mengelilingi kode yang memanggil pod atau Anda akan mendapatkan kesalahan linker.Ini memungkinkan saya untuk melewati masalah yang sama. (Dan jika Anda bertanya-tanya hal keren apa lagi selain variabel kondisional yang dapat Anda tambahkan ke file .xcconfig Anda, inilah referensi yang saya temukan: https://pewpewthespells.com/blog/xcconfig_guide.html )
sumber
pod install
. Saya akan merekomendasikan untuk membaca jawaban Fernando Moya de Rivas ini untuk alternatif terbaikDengan cocoapods 1.8.4, saya harus menyesuaikan jawaban luar biasa @ AncAinu sebagai berikut:
sumber
[]
Saya memiliki solusi terbaru yang berfungsi untuk saya dengan pod Google berikut:
sumber
ld: in /Users/<name>/source/<app>/Pods/Fabric/iOS/Fabric.framework/Fabric(Fabric.o), building for Mac Catalyst, but linking in object file built for iOS Simulator, for architecture x86_64
Saya menggunakan apa yang Anda miliki di atas minusGoogleMobileAds
danGoogle-Mobile-Ads-SDK
. Kenapa saya mendapatkan ini?Untuk pendekatan terbaik dalam menangani kerangka kerja yang tidak didukung untuk Catalyst, kalian harus membaca solusinya Fernando Moya de Ri .
Dia pada dasarnya mengatakan Anda hanya perlu mendefinisikan array dari semua lib yang tidak ingin Anda instal di mac osx, seperti ini:
['Fabric', 'Crashlytics', 'Firebase/Core', ...]
.Kemudian, file pod Anda dapat terlihat sederhana seperti ini:
sumber