2

我正在开发一个 Swift Cocoapod 库,它实际上是一些 Objective C 代码的包装器。我的目标是只公开库的 Swift 部分,同时使 Objective C 尽可能私有。然而,由于 Swift 部分是 Objective C 代码的包装器,它需要访问它,尽管只是在内部。

我已经搜索并尝试了各种方法,但它们都没有奏效。


首先,我尝试通过使用模块映射文件来解决它。这个想法是创建一个 Swift 模块,称为MyLibrary包含所有 Swift 代码的东西,而 Objective C 代码将在MyLibrary.Private模块上(我知道模块仍然可以访问,但这种分离对我来说已经足够了)。模块映射看起来像:

//MyLibrary.modulemap

framework module MyLibrary {
    module Private {
        header "MyObjectiveC.h"
        export *
    }
}

MyLibrary.podspec并在文件中添加以下行

s.module_map = 'path/to/MyLibrary.modulemap'

但是,通过使用这种方法,即使我只导入MyLibrary模块仍然可以访问所有的 Objective C 类,而不必导入MyLibrary.Private模块来这样做。


我尝试的第二种方法是使用private.modulemap文件。所以我最终会得到两个不同的模块映射文件:

//MyLibrary.modulemap

framework module MyLibrary {}
//MyLibrary.private.modulemap

module MyLibrary.Private {
    header "MyObjectiveC.h"
    export *
}

MyLibrary.podspec然后我会在文件中添加以下行

s.pod_target_xcconfig = { 'MODULEMAP_PRIVATE_FILE' => '$(PODS_ROOT)/MyLibrary/path/to/MyLibrary.private.modulemap' }

但是,我得到一个失败的构建,说明它找不到MyLibrary.Private模块。


在这些方法中我做错了什么吗?或者有没有其他方法可以让我的库的 Swift 类私下访问 Objective C 类而不暴露那些,至少明确地,需要*.Private为它导入特定的模块?

4

0 回答 0