Условное связывание модулей для MacCatalyst

#ios #xcode #linker #mac-catalyst

#iOS #xcode #компоновщик #mac-catalyst

Вопрос:

MacCatalyst по-прежнему не поддерживает Flurry Analytics. В моем приложении Flurry является единственным CocoaPod, который не поддерживается в этой целевой среде. У Фернандо Мойи де Риваса была хорошая статья в Medium об условном связывании для этой самой проблемы (https://medium.com/better-programming/macos-catalyst-debugging-problems-using-catalyst-and-cocoapods-579679150fa9). Модуль представляет собой статическую, предварительно скомпилированную библиотеку. Мойя де Ривас предложил отредактировать файл xcconfig, чтобы условно связывать файлы, если они были только для iOS из:

 OTHER_LDFLAGS = $(inherited) -framework "Crashlytics" -framework "Fabric" -framework "FrameworkThatSupportsCatalyst"
 

Для:

 OTHER_LDFLAGS = $(inherited) -framework "FrameworkThatSupportsCatalyst"
OTHER_LDFLAGS[iphone*] = $(inherited) -framework "Crashlytics" -framework "Fabric"
 

итак, в моем xcconfig я удалил Flurry_iOS_SDK из списка загрузки и поместил его в список только для iOS:

 OTHER_LDFLAGS = $(inherited) -ObjC -framework "Accelerate" -framework "CFNetwork" -framework "CalmParametricAnimations" -framework "CampcotCollectionView" -framework "CoreGraphics"   -framework "Foundation" -framework "KenBurns" -framework "Kingfisher" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit"
OTHER_LDFLAGS[iphone*] = $(inherited) -framework "Flurry_iOS_SDK"
 

Проблема в том, что Xcode, похоже, не нравится оператор условной ссылки:

 xxxxxxx.debug.xcconfig Ignoring build settings configuration file Pods-HieroglyphicsPro.debug.xcconfig due to an error: String 'OTHER_LDFLAGS[iphone*] = $(inherited) -framework "Flurry_iOS_SDK"' could not be parsed: macro string representation 'OTHER_LDFLAGS[iphone*]' isn't well formed: parameter name is empty.
 

Подход Мойи де Риваса широко цитируется как хорошее решение, но я использую более позднюю версию Xcode (12.2 release 12B45b). Этот синтаксис больше не поддерживается или у меня есть синтаксическая ошибка, которую я не вижу? Мне не удалось найти ссылку на команды для набора инструментов компоновщика Xcode.

Ответ №1:

 OTHER_LDFLAGS[iphone*] = $(inherited) -framework "Flurry_iOS_SDK"
 

работает лучше, поскольку

 OTHER_LDFLAGS[sdk=iphone*] = $(inherited) -framework "Flurry_iOS_SDK"