Оказалось, что, поскольку сторонний SDK SomeCoolSwiftFramework
не следовал правилам для правильного представления необходимых классов, используемых ObjC, сгенерированный заголовок не имел требуемых объявлений, и я не смог их увидеть.
Правила для членов Swift, которые будут использоваться ObjC:
- класс или член, помеченный
public
- класс наследует
NSObject
- класс, помеченный
objc(<name>)
- член, помеченный
objc
Чтобы преодолеть это ограничение трехмерной сторонней платформы, я создал свою собственную быстродействующую структуруSomeCoolSwiftFrameworkProxy
с зависимостью от сторонней организации раскрыл весь API, требуемый моим кодом, применил правила выше и убедился, что SomeCoolSwiftFrameworkProxy-Swift.h
правильно сгенерирован и имеет требуемые объявления. После его завершения я смог импортировать сгенерированный файл SomeCoolSwiftFrameworkProxy-Swift.h
в мою статическую библиотеку ObjC (или в любое другое место в моем коде ObjC) и получить доступ к необходимым классам / методам прокси.
Ниже описана моя структура прокси Swift:
import Foundation;
import SomeCoolSwiftFramework;
@objc(SomeCoolSwiftFrameworkProxy)
public class SomeCoolSwiftFrameworkProxy : NSObject {
@objc
public func init() {
// access 3d party SDK methods/classes
SomeCoolSwiftFrameworkClass.sharedInstance.init()
}
}
Я нашел это сообщение в блоге , которое отвечает на мой вопрос