使用cocoapod的静态框架不会在主应用程序中编译

问题描述 投票:0回答:1

我无法理解 cocoapods 相对于框架的工作方式。我已将问题浓缩为一个简单的项目:

示例项目:https://github.com/weitzel926/WWAlertTester

这包含两个 iOS 项目:

WWAlertTesterFramework - 这是一个使用 Cocoapod 的静态框架。 Cocoapod 是一个警报控制器。该框架提供了一个包装器接口来在最顶层的控制器上显示cocoapod。

WWAlertTesterApp - 此应用程序拉入框架。它有一个按钮。当按下时,它使用该界面来启动框架包装的警报控制器。

问题:如果我不将 pod 包含在测试应用程序的 Podfile 中,则会出现编译错误。 (无法加载“AlertController”的底层模块 - AlertController 是 pod 的名称)。如果我将其包含在我的应用程序 Podfile 中,它可以工作,但控制台会输出错误,因为它在两个位置(本地和框架)找到每个方法实现。

如何在无需在应用程序的 Podfile 中定义 pod 的情况下使其工作。代码在框架中。为什么编译器无法加载它?我将框架放在根目录并将其添加到我的项目中。这不应该是搜索路径问题。我错过了什么?

ios xcode cocoapods
1个回答
0
投票

据我所知,您案例中的

WWAlertTesterFramework
将导入的模块
AlertController
标记为对
WWAlertTesterApp
可见。你可以跳到Xcode中
WWAlertTesterFramework
的定义,
import AlertController
应该在那里。

修复错误的一种方法是使用@_implementationOnly。在您的示例中,只需在 AlertTesterInterface.swift 中将

import AlertController
替换为
@_implementationOnly import AlertController
,然后使用新的
WWAlertTesterFramework
再次构建
WWAlertTesterApp

另一个修复方法是设置

-enable-experimental-feature AccessLevelOnImport
swift-frontend 标志并使用 Xcode15.2(Swift5.9) 更改导入模块的访问级别。 https://github.com/apple/swift-evolution/blob/main/proposals/0409-access-level-on-imports.md

© www.soinside.com 2019 - 2024. All rights reserved.