【问题标题】:How can I properly share the Amplify framework with my Main App and my App Extension for an iOS app?如何与我的主应用程序和 iOS 应用程序的应用程序扩展正确共享 Amplify 框架?
【发布时间】:2021-12-30 18:46:26
【问题描述】:

我有一个使用 AWS amplify 作为后端的 iOS 应用程序。我正在使用 Xcode 13 和 SwiftUI。 我之前使用 Cocoapods 添加了 Amplify 框架,但是我无法让框架与扩展一起使用。

所以我最近切换到 Swift 包管理器。我将包添加到我的主项目中。然后我去了我的 Share Extension 和 General - Frameworks and Libraries 并手动添加了库。

完成此操作后,应用程序构建并运行,主应用程序和扩展程序都可以正常工作并且能够使用库。

问题是我无法将应用存档并上传到 App Store。我收到以下错误:

CFBundleIdentifier 冲突。有多个捆绑包 iOS下的CFBundleIdentifier值'com.amazonaws.AWSAuthCore' 应用程序'MyAPP.app'。带错误代码 STATE_ERROR.VALIDATION_ERROR...

我访问了很多论坛并花了很多时间试图解决这个问题,但无济于事。建议是单击库的“不嵌入”,但该选项对我不可用。

不知道有没有办法解决这个问题?

以下是共享扩展的常规和构建阶段:

【问题讨论】:

    标签: ios swift xcode aws-amplify swift-package-manager


    【解决方案1】:

    只需从扩展中删除显式 Amplify 依赖项,即。下一节应该是空的

    确保(它应该是自动的,但无论如何)

    1. Link Frameworks Automatically 参数(在构建设置中)是true

    1. Runpath Search Path 参数与主包相关

    因此,由于 SPM 的目标构建在与产品和扩展相同的位置,并且启用了自动框架链接,扩展中的导入模块将可用并自动链接,并且由于设置了运行路径,框架将在运行时找到好吧。

    注意:当然在主应用程序目标中都应该包含

    使用 Xcode 13.1 / iOS 15.1 测试

    【讨论】:

    • 我已经从扩展中删除了显式添加的模块,并确认上面 1. 和 2. 中的默认设置如您所示。重新启动、清理和构建,并在“没有这样的模块 'Amplify”的扩展中得到错误。因此,尽管由于某种原因被链接,但它无法识别放大库。还有什么我应该检查的吗?我以前有可可豆荚添加的库,然后在使用 SPM 之前使用 pod deintegrate 删除了可可豆荚。现在我不是打开 .xcworkspace 而是打开 .xcodeproj 文件。
    • 是的,在干净的 Xcode 告诉“找不到模块”之后,但经过一(或两次)尝试后它编译正常。我认为这是 Xcode 缓存缺陷(从 Xcode 12 或 11 开始观察到,内存缓存效果不佳)。
    • 我试了很多次还是不行。我尝试删除并重新安装 Xcode,清除派生数据。什么都没有。我创建了一个新项目并按照您的建议进行了操作。我第一次尝试添加放大时,它会识别扩展中的模块并构建。但打开我的另一个应用程序然后回到这个应用程序和相同的行为。先前构建的模块不再在扩展“没有这样的模块“放大”中构建相同的错误。我在这里完全不知所措。
    • 听起来你的真实项目的配置有问题......好吧,尝试明确设置FRAMEWORK_SEARCH_PATHS。
    • 抱歉,我该怎么做?
    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多