Я добавил пользовательский интерфейс Xib в сторонние фреймворки и сделал из него новую, называемую F3.framework, теперь я добавил оболочку над F3 и создал новую фреймворк под названием F4.
Мое приложение подключено к F4, а с F4 я звоню F3, а внутри F3 у меня есть один xib и несколько других сторонних фреймворков.
Я подключил свое приложение к F3, после чего оно работало нормально, но когда я представил F4, он начал падать, говоря ** Ошибка автоматического связывания с другими фреймворками, которые я использовал для сборки F4.frameworks **
тогда я переместил коды моего контроллера представления приложения в F4.framework, теперь приложение зависало
Unknown class _TtC12QKMRZScanner7scanner in Interface Builder file
Вот как я звоню из своего приложения
import F4
Когда я нажимаю, чтобы открыть свой XIB внутри фреймворка через нажатие кнопки
@IBAction func capture(_ sender: Any) {
let pla = F4()
let c = pla.load()
pla.startCapture()
self.view.addSubview(c)
}
Теперь в моем коде F4.framework есть только один файл, который
import Documents
public class F4 : ScanProtocol{
var d: scanner! //scanner is a UIView class in F3.framework
public func scanResult(dictResult: [String : Any]) {
print(dictResult)
}
let document = Documents()
public init(){
print("loading")
}
public func startCapturingPassport(){
document.captureFromDocument()
}
public func loadScanner() -> scanner{
d = UINib(nibName: "scanner", bundle: Bundle(for: scanner.self)).instantiate(withOwner: nil, options: nil)[0] as! scanner
d.delegate = self
return d
}
Теперь в F3.framework я использую следующий код
public class F3 {
/// #TODO
public init(){
}
/// CaptureMRZCodeFromDocument will call when user click on MRZ option and it will return the MRZ value
public func captureFromDocument(){
let mrz = scanner()
mrz.capture()
}
Из F3.framework он будет вызывать capture () в scanner.swift, как показано ниже
import QKMRZScanner
import QKMRZParser
public protocol ScanProtocol{
func scanResult(dictResult : [String : Any])
}
public class scanner: UIView,QKMRZScannerViewDelegate {
public var delegate: ScanProtocol?
var mrzScannerView: QKMRZScannerView!
var validatedMRZData: Dictionary<String, Any>!
public func mrzScannerView(_ mrzScannerView: QKMRZScannerView, didFind scanResult: QKMRZScanResult) {
//Validate the data
let scanValidation = ScannerValidation()
validatedMRZData = scanValidation.ValidateMRZData(result: scanResult)
delegate?.scanResult(dictResult: validatedMRZData)
}
override init(frame: CGRect) {
super.init(frame: frame)
mrzScannerView = QKMRZScannerView(frame: self.bounds)
mrzScannerView.delegate = self
addSubview(mrzScannerView)
mrzScannerView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
}
required init?(coder: NSCoder) {
super.init(coder: coder)
mrzScannerView = QKMRZScannerView(frame: self.bounds)
mrzScannerView.delegate = self
addSubview(mrzScannerView)
mrzScannerView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
}
private func commitinit(){
mrzScannerView = Bundle.main.loadNibNamed("scanner", owner: self, options: nil) as? QKMRZScannerView
addSubview(mrzScannerView)
mrzScannerView.frame = self.bounds
mrzScannerView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
}
public func capture(){
mrzScannerView.delegate = self
mrzScannerView.startScanning()
}
Это CRA SH, который я получаю сейчас
2020-02-13 21:39:48.955020+0530 MRZ[32832:608471] [Storyboard] Unknown class _TtC12QKMRZScanner7scanner in Interface Builder file.
2020-02-13 21:39:48.955585+0530 MRZ[32832:608471] [Storyboard] Unknown class _TtC12QKMRZScanner16QKMRZScannerView in Interface Builder file.
Could not cast value of type 'UIView' (0x1d620e4b8) to 'F3.scanner' (0x1050fd998).
2020-02-13 21:39:48.957236+0530 MRZ[32832:608471] Could not cast value of type 'UIView' (0x1d620e4b8) to 'F3.scanner' (0x1050fd998).