3

在运行 iOS 13 beta 2 版本的 iPad 上启动我的应用程序时,我收到一个 SIGABRT。此构建在模拟器上运行良好

dyld: Symbol not found: _$s7Combine6FutureCyxq_GAA9PublisherAAMc Expected in: /System/Library/Frameworks/Combine.framework/Combine

我想这可能是一个链接问题,但 Combine 没有出现在可链接的库列表中。

有没有人可以解决或者我在下一个测试版之前沉没了?


这是我的代码片段:

class ViewController: UIViewController {

    var future: AnyPublisher<String, Error>?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        future = ViewController.makeNumberString(50)
        future?.sink { result in
            print("FUTURE DONE: \(result)")
        }
    }

    static func makeNumberString(_ number: Int) -> AnyPublisher<String, Error> {
        return Combine.Future<Int, Error> { complete in
            DispatchQueue.global(qos: .userInitiated).async {
                complete(.success(number))
            }
        }
        .map { number in
            return "\(number)"
        }
        .eraseToAnyPublisher()
    }
}
4

2 回答 2

2

您的 Xcode Beta 和 iPadOS/iOS Beta 版本应该匹配。否则,Combine 可能无法链接到您的应用程序。

于 2019-07-05T00:16:27.717 回答
0

当我在 iPad Pro w 13.0 (17A5522f) 上运行的 Xcode 11.0 beta 3 (11M362v) 中测试以下(以及您的代码片段)时,它运行良好。

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        print("viewDidLoad")

        _ = bar().sink { value in
            print("sink", value)
        }
    }

    // some old asynchronous method

    func foo(completion: @escaping (Bool) -> Void) {
        DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
            completion(true)
        }
    }

    // `Future` promise for that old async method

    func bar() -> AnyPublisher<Bool, Never> {
        Future { promise in
            self.foo { value in
                promise(.success(value))
            }
        }
        .eraseToAnyPublisher()
    }
}
于 2019-07-04T21:39:04.457 回答