我正在开发一个Swift框架,该框架包含大多数Swift文件和很少的Objective C文件。由于我不希望我的Objective-C文件在SDK之外,甚至不在headers文件夹下,因此我为它们提供了项目访问权限,现在在内部将它们与模块映射一起使用。
这是我的modulemap文件的外观:
module MySDKPrivate {
header "CardDetails.h"
export *
}
现在,为了访问此CardDetails文件,我只需要在所需的Swift类中导入MySDKPrivate
模块。到这里一切都很好。
现在,假设我有一个名为public
的{{1}}类。此类负责执行部分对用户隐藏的SDK操作,因此它受Payment.swift
访问,因此在分发SDK时,它不会显示在标题中。
project
类可以访问诸如authenticate
和getSessionExpireDate
之类的某些方法,这些方法基本上不过是PaymentDoor.swift
类的扩展,用于部分读取&编写注入,有助于获取/退出Payment
类的次要信息。这是Payment
PaymentDoor.swift
这是//Extension to inject data in and out of the Internal Payment.swift
public extension Payment{
}
类
Payment.Swift
这是为什么我想将此import MySDKPrivate
public class Payment {
let username: String
let password: String
let cardDetails: CardDetails
public init(userName: String, password: String, cardNumber: String) {
self.username = userName
self.password = password
let cardDetails = CardDetails()
cardDetails.cardNumber = cardNumber
self.cardDetails = cardDetails
}
public func authenticate() -> Bool{
//Some logic
return true
}
private func generateAuthkey(){
//Should not be accessible with the extension
}
}
类保留为Payment
,并在public
内部保留标题的另一个原因,因为如果我在标题下将其公开提供,则SDK用户会请参阅我的modulemap的名称以及Payment类中的所有代码,并且在导入模块图时也可以使用Objective-C文件。虽然现在自动帮助还会显示模块映射的名称,但至少它不直接可见。
我仍然认为,有一种更好的方法可以将数据注入到公共类中或从公共类中插入,这会隐藏我的模块名称,或者可以更好的方式隐藏Objective-C文件。如果是,请帮忙!