Runtime

init not available to subclass

Code snippet

class MockAssetResourceLoader: AVAssetResourceLoader {
    
    // built-in `init` is not available to subclasses so this takes advantage of obj C run time to create the mock
    static func makeResourceLoader() -> MockAssetResourceLoader {
        let allocated = MockAssetResourceLoader.perform(NSSelectorFromString("alloc"))
        return allocated?.takeRetainedValue() as! MockAssetResourceLoader
    }
}

class MockResourceLoadingRequest: AVAssetResourceLoadingRequest {
    static func makeLoadingRequest(_ url: URL, containsInfo: Bool) -> MockResourceLoadingRequest {
        let allocated = MockResourceLoadingRequest.perform(NSSelectorFromString("alloc"))
        let objcInstance = allocated?.takeRetainedValue() as! MockResourceLoadingRequest
        objcInstance.url = url
        objcInstance.hasContentInformationRequest = containsInfo
        return instance
    }
}