如何从 Catalyst 中排除 XCFramework?

How to exclude XCFramework from Catalyst?

鉴于

有一个 iOS 应用程序需要 Analytics,它决定使用 Amazon 作为提供商。所以我添加了 Amplify,它在 iOS 和模拟器上工作正常。但是在为 Mac Catalyst 构建时,编译器会产生一组与来自 Amplify 包的各种 XCFrameowrk 相关的类似错误:

While building for Mac Catalyst, no library for this platform was found in '... artifacts/AWSiOSSDKV2/AWSCore.xcframework'.

快速搜索显示亚马逊不想支持 Catalyst,因为 business reasons and there an open issue 关于这个主题,第一个 PR 是在 3 年前提出的,然后不小心关闭了。

尝试避免错误

分析不是绝对必要的功能,因此我尝试从 Catalyst 中删除 Amplify 库并将它们保留在 iOS 上。我正在使用这个宏(这显然是编译时,而不是构建时,但一些 SO 答案报告说它可能有帮助):

#if !TARGET_OS_MACCATALYST
import Amplify
import AWSPinpointAnalyticsPlugin
import AWSCognitoAuthPlugin
#endif

然后在 Link Binary With Libraries 中,我将与 Amplify 相关的库设置为可选。在过滤器部分,我删除了 Mac Catalyst 附近的复选标记,认为这将使它们成为 iOS-only:

所有这些技巧结合在一起并没有帮助,我仍然遇到同样的错误。

Q

如何为某些不受支持的平台排除 XCFramework?

P.S.

似乎正在出现一个声称支持 Catalyst 的新 AWS SDK。但它是原始的和低级别的,我根本没有准备好在这个问题的范围内调试它并在它之上构建我自己的 Analytis 框架。

我没有找到关于 Swift 下午的确切答案。但我能够解决我的问题,只是切换到良好的旧(并且更灵活)cocoapods。我使用 cocoapods-catalyst-support 将 Amplify 限制为仅 iOS。我的播客文件:

require 'cocoapods-catalyst-support'

platform :ios, '14.1'
use_frameworks!

target 'MyApp' do
  pod 'Amplify'
  pod 'AmplifyPlugins/AWSPinpointAnalyticsPlugin'
  pod 'AmplifyPlugins/AWSCognitoAuthPlugin'

  target 'MyAppTests' do
    inherit! :search_paths
    pod 'Amplify'
    pod 'AmplifyPlugins/AWSPinpointAnalyticsPlugin'
    pod 'AmplifyPlugins/AWSCognitoAuthPlugin'
  end
end

catalyst_configuration do
  ios 'Amplify'
  ios 'AmplifyPlugins/AWSPinpointAnalyticsPlugin'
  ios 'AmplifyPlugins/AWSCognitoAuthPlugin'
end

post_install do |installer|
  installer.configure_catalyst
end

我基本上做了同样的事情,@PaulBeusterien 在评论中推荐,但是框架是由 cocoapods 而不是 Firebase ReleaseTooling 生成的。

Swift 包管理器不支持平台过滤器,至于 2022 年 2 月。我联系了 swift 论坛和亚马逊支持,并进行了自己的研究。