Coder Social home page Coder Social logo

wetransfer / mocker Goto Github PK

View Code? Open in Web Editor NEW
1.1K 18.0 92.0 1.07 MB

Mock Alamofire and URLSession requests without touching your code implementation

License: MIT License

Swift 99.18% Ruby 0.82%
wt-branch-protection-two-approvals wt-branch-protection-exempt

mocker's Introduction

Mocker is a library written in Swift which makes it possible to mock data requests using a custom URLProtocol.

Features

Run all your data request unit tests offline ๐ŸŽ‰

  • Create mocked data requests based on an URL
  • Create mocked data requests based on a file extension
  • Works with URLSession using a custom protocol class
  • Supports popular frameworks like Alamofire

Usage

Unit tests are written for the Mocker which can help you to see how it works.

Activating the Mocker

The mocker will automatically be activated for the default URL loading system like URLSession.shared after you've registered your first Mock.

Custom URLSessions

To make it work with your custom URLSession, the MockingURLProtocol needs to be registered:

let configuration = URLSessionConfiguration.default
configuration.protocolClasses = [MockingURLProtocol.self]
let urlSession = URLSession(configuration: configuration)
Alamofire

Quite similar like registering on a custom URLSession.

let configuration = URLSessionConfiguration.af.default
configuration.protocolClasses = [MockingURLProtocol.self]
let sessionManager = Alamofire.Session(configuration: configuration)

Register Mocks

Create your mocked data

It's recommended to create a class with all your mocked data accessible. An example of this can be found in the unit tests of this project:

public final class MockedData {
    public static let botAvatarImageResponseHead: Data = try! Data(contentsOf: Bundle(for: MockedData.self).url(forResource: "Resources/Responses/bot-avatar-image-head", withExtension: "data")!)
    public static let botAvatarImageFileUrl: URL = Bundle(for: MockedData.self).url(forResource: "wetransfer_bot_avater", withExtension: "png")!
    public static let exampleJSON: URL = Bundle(for: MockedData.self).url(forResource: "Resources/JSON Files/example", withExtension: "json")!
}
JSON Requests
let originalURL = URL(string: "https://www.wetransfer.com/example.json")!
    
let mock = Mock(url: originalURL, contentType: .json, statusCode: 200, data: [
    .get : try! Data(contentsOf: MockedData.exampleJSON) // Data containing the JSON response
])
mock.register()

URLSession.shared.dataTask(with: originalURL) { (data, response, error) in
    guard let data = data, let jsonDictionary = (try? JSONSerialization.jsonObject(with: data, options: [])) as? [String: Any] else {
        return
    }
    
    // jsonDictionary contains your JSON sample file data
    // ..
    
}.resume()
Empty Responses
let originalURL = URL(string: "https://www.wetransfer.com/api/foobar")!
var request = URLRequest(url: originalURL)
request.httpMethod = "PUT"
    
let mock = Mock(request: request, statusCode: 204)
mock.register()

URLSession.shared.dataTask(with: originalURL) { (data, response, error) in
    // ....
}.resume()
Ignoring the query

Some URLs like authentication URLs contain timestamps or UUIDs in the query. To mock these you can ignore the Query for a certain URL:

/// Would transform to "https://www.example.com/api/authentication" for example.
let originalURL = URL(string: "https://www.example.com/api/authentication?oauth_timestamp=151817037")!
    
let mock = Mock(url: originalURL, ignoreQuery: true, contentType: .json, statusCode: 200, data: [
    .get : try! Data(contentsOf: MockedData.exampleJSON) // Data containing the JSON response
])
mock.register()

URLSession.shared.dataTask(with: originalURL) { (data, response, error) in
    guard let data = data, let jsonDictionary = (try? JSONSerialization.jsonObject(with: data, options: [])) as? [String: Any] else {
        return
    }
    
    // jsonDictionary contains your JSON sample file data
    // ..
    
}.resume()
File extensions
let imageURL = URL(string: "https://www.wetransfer.com/sample-image.png")!

Mock(fileExtensions: "png", contentType: .imagePNG, statusCode: 200, data: [
    .get: try! Data(contentsOf: MockedData.botAvatarImageFileUrl)
]).register()

URLSession.shared.dataTask(with: imageURL) { (data, response, error) in
    let botAvatarImage: UIImage = UIImage(data: data!)! // This is the image from your resources.
}.resume()
Custom HEAD and GET response
let exampleURL = URL(string: "https://www.wetransfer.com/api/endpoint")!

Mock(url: exampleURL, contentType: .json, statusCode: 200, data: [
    .head: try! Data(contentsOf: MockedData.headResponse),
    .get: try! Data(contentsOf: MockedData.exampleJSON)
]).register()

URLSession.shared.dataTask(with: exampleURL) { (data, response, error) in
	// data is your mocked data
}.resume()
Custom DataType

In addition to the already build in static DataType implementations it is possible to create custom ones that will be used as the value to the Content-Type header key.

let xmlURL = URL(string: "https://www.wetransfer.com/sample-xml.xml")!

Mock(fileExtensions: "png", contentType: .init(name: "xml", headerValue: "text/xml"), statusCode: 200, data: [
    .get: try! Data(contentsOf: MockedData.sampleXML)
]).register()

URLSession.shared.dataTask(with: xmlURL) { (data, response, error) in
    let sampleXML: Data = data // This is the xml from your resources.
}.resume(
Delayed responses

Sometimes you want to test if the cancellation of requests is working. In that case, the mocked request should not finish immediately and you need a delay. This can be added easily:

let exampleURL = URL(string: "https://www.wetransfer.com/api/endpoint")!

var mock = Mock(url: exampleURL, contentType: .json, statusCode: 200, data: [
    .head: try! Data(contentsOf: MockedData.headResponse),
    .get: try! Data(contentsOf: MockedData.exampleJSON)
])
mock.delay = DispatchTimeInterval.seconds(5)
mock.register()
Redirect responses

Sometimes you want to mock short URLs or other redirect URLs. This is possible by saving the response and mocking the redirect location, which can be found inside the response:

Date: Tue, 10 Oct 2017 07:28:33 GMT
Location: https://wetransfer.com/redirect

By creating a mock for the short URL and the redirect URL, you can mock redirect and test this behavior:

let urlWhichRedirects: URL = URL(string: "https://we.tl/redirect")!
Mock(url: urlWhichRedirects, contentType: .html, statusCode: 200, data: [.get: try! Data(contentsOf: MockedData.redirectGET)]).register()
Mock(url: URL(string: "https://wetransfer.com/redirect")!, contentType: .json, statusCode: 200, data: [.get: try! Data(contentsOf: MockedData.exampleJSON)]).register()
Ignoring URLs

As the Mocker catches all URLs by default when registered, you might end up with a fatalError thrown in cases you don't need a mocked request. In that case, you can ignore the URL:

let ignoredURL = URL(string: "https://www.wetransfer.com")!

// Ignore any requests that exactly match the URL
Mocker.ignore(ignoredURL)

// Ignore any requests that match the URL, with any query parameters
// e.g. https://www.wetransfer.com?foo=bar would be ignored
Mocker.ignore(ignoredURL, matchType: .ignoreQuery)

// Ignore any requests that begin with the URL
// e.g. https://www.wetransfer.com/api/v1 would be ignored
Mocker.ignore(ignoredURL, matchType: .prefix)

However, if you need the Mocker to catch only mocked URLs and ignore every other URL, you can set the mode attribute to .optin.

Mocker.mode = .optin

If you want to set the original mode back, you have just to set it to .optout.

Mocker.mode = .optout
Mock errors

You can request a Mock to return an error, allowing testing of error handling.

Mock(url: originalURL, contentType: .json, statusCode: 500, data: [.get: Data()],
     requestError: TestExampleError.example).register()

URLSession.shared.dataTask(with: originalURL) { (data, urlresponse, err) in
    XCTAssertNil(data)
    XCTAssertNil(urlresponse)
    XCTAssertNotNil(err)
    if let err = err {
        // there's not a particularly elegant way to verify an instance
        // of an error, but this is a convenient workaround for testing
        // purposes
        XCTAssertEqual("example", String(describing: err))
    }

    expectation.fulfill()
}.resume()
Mock callbacks

You can register on Mock callbacks to make testing easier.

var mock = Mock(url: request.url!, contentType: .json, statusCode: 200, data: [.post: Data()])
mock.onRequestHandler = OnRequestHandler(httpBodyType: [[String:String]].self, callback: { request, postBodyArguments in
    XCTAssertEqual(request.url, mock.request.url)
    XCTAssertEqual(expectedParameters, postBodyArguments)
    onRequestExpectation.fulfill()
})
mock.completion = {
    endpointIsCalledExpectation.fulfill()
}
mock.register()
Mock expectations

Instead of setting the completion and onRequest you can also make use of expectations:

var mock = Mock(url: url, contentType: .json, statusCode: 200, data: [.get: Data()])
let requestExpectation = expectationForRequestingMock(&mock)
let completionExpectation = expectationForCompletingMock(&mock)
mock.register()

URLSession.shared.dataTask(with: URLRequest(url: url)).resume()

wait(for: [requestExpectation, completionExpectation], timeout: 2.0)

Unregister Mocks

Clear all registered mocks

You can clear all registered mocks:

Mocker.removeAll()

Communication

  • If you found a bug, open an issue.
  • If you have a feature request, open an issue.
  • If you want to contribute, submit a pull request.

Installation

Carthage

Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.

You can install Carthage with Homebrew using the following command:

$ brew update
$ brew install carthage

To integrate Mocker into your Xcode project using Carthage, specify it in your Cartfile:

github "WeTransfer/Mocker" ~> 3.0.0

Run carthage update to build the framework and drag the built Mocker.framework into your Xcode project.

Swift Package Manager

The Swift Package Manager is a tool for managing the distribution of Swift code. Itโ€™s integrated with the Swift build system to automate the process of downloading, compiling, and linking dependencies.

Manifest File

Add Mocker as a package to your Package.swift file and then specify it as a dependency of the Target in which you wish to use it.

import PackageDescription

let package = Package(
    name: "MyProject",
    platforms: [
       .macOS(.v10_15)
    ],
    dependencies: [
        .package(url: "https://github.com/WeTransfer/Mocker.git", .upToNextMajor(from: "3.0.0"))
    ],
    targets: [
        .target(
            name: "MyProject",
            dependencies: ["Mocker"]),
        .testTarget(
            name: "MyProjectTests",
            dependencies: ["MyProject"]),
    ]
)

Xcode

To add Mocker as a dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter the repository URL.

Resolving Build Errors

If you get the following error: cannot find auto-link library XCTest and XCTestSwiftSupport, set the following property under Build Options from No to Yes.
ENABLE_TESTING_SEARCH_PATHS to YES

Manually

If you prefer not to use any of the aforementioned dependency managers, you can integrate Mocker into your project manually.

Embedded Framework

  • Open up Terminal, cd into your top-level project directory, and run the following command "if" your project is not initialized as a git repository:

    $ git init
  • Add Mocker as a git submodule by running the following command:

    $ git submodule add https://github.com/WeTransfer/Mocker.git
  • Open the new Mocker folder, and drag the Mocker.xcodeproj into the Project Navigator of your application's Xcode project.

    It should appear nested underneath your application's blue project icon. Whether it is above or below all the other Xcode groups does not matter.

  • Select the Mocker.xcodeproj in the Project Navigator and verify the deployment target matches that of your application target.

  • Next, select your application project in the Project Navigator (blue project icon) to navigate to the target configuration window and select the application target under the "Targets" heading in the sidebar.

  • In the tab bar at the top of that window, open the "General" panel.

  • Click on the + button under the "Embedded Binaries" section.

  • Select Mocker.framework.

  • And that's it!

    The Mocker.framework is automagically added as a target dependency, linked framework and embedded framework in a copy files build phase which is all you need to build on the simulator and a device.


Release Notes

See CHANGELOG.md for a list of changes.

License

Mocker is available under the MIT license. See the LICENSE file for more info.

mocker's People

Contributors

airowe avatar alexanderwe avatar amdprophet avatar annjose avatar avdlee avatar basthomas avatar batuhansk avatar bwhtmn avatar chewie69006 avatar chkpnt avatar dominikpalo avatar ericpassmore avatar ezura avatar farrasdoko avatar fassko avatar fporcaro avatar gerrych avatar hawflakes avatar heckj avatar igrandav avatar kairadiagne avatar krzyzanowskim avatar letatas avatar mateusrodriguesxyz avatar multicolourpixel avatar peagasilva avatar rogerluan avatar stavares843 avatar vox-humana avatar wetransferplatform avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mocker's Issues

Cannot build when added to Application Target using Swift Package Manager

I'm trying to use the Mocker to prevent communications with some URLs and fix their responses during app development. However, I added the library using Swift Package Manager, then the build to fail.

Is there any solution?

// swift-tools-version:5.3
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "Sample",
    platforms: [.iOS(.v14)],
    products: [
        .library(
            name: "Sample",
            targets: ["Sample"]
        ),
    ],
    dependencies: [
        .package(url: "https://github.com/WeTransfer/Mocker.git", from: "2.5.4"),
    ],
    targets: [
        .target(
            name: "Sample",
            dependencies: ["Mocker"]
        ),
    ]
)
ld: warning: Could not find or use auto-linked library 'XCTestSwiftSupport'
ld: warning: Could not find or use auto-linked framework 'XCTest'
Undefined symbols for architecture x86_64:
  "__swift_FORCE_LOAD_$_XCTestSwiftSupport", referenced from:
      __swift_FORCE_LOAD_$_XCTestSwiftSupport_$_Sample in ContentView.o
      __swift_FORCE_LOAD_$_XCTestSwiftSupport_$_Sample in App.o
      ...
     (maybe you meant: __swift_FORCE_LOAD_$_XCTestSwiftSupport_$_Sample)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Feature Request: Mock with GET where data is nil

I am trying to achieve 100% code coverage and I cannot do so because there is no way to mock a GET request with data being nil. This is due to the fact that the data in the URLSession's data task can be nil.

What I am looking for something like this:

     let mock = Mock(url: URL("www.someurl.com"), dataType: .json, statusCode: 204, data: [
          .get: nil
     ])

This would be useful for both edge case testing and normal testing. For example, our servers return 204 when there is no new content, so it would be awesome if I could mock that.

Support for application/x-www-form-urlencoded data type and dynamic request body inspection

Do you guys have any plan to support "application/x-www-form-urlencoded" as Mocker data type?
Let me explain my needs.

I'm using your code for mocking some request to a service requiring a body encoded as "application/x-www-form-urlencoded".

I noticed that the onRequest closure of the Mock object assumes that the body of the request is of kind [String: Any]?.

Would be great if Mock.DataType would also have a case for applicationForm and an onRequest closure which takes as a second paramenter a deserialization of the request body aligned to the data type (not always presuming the data type to be a json).

Just for better explaining my stream of consciusness, I'm referring to the fact that the code below automatically deserialize the URLRequest body to a dictionary of [String: Any] (see the code below).

private extension URLRequest {
    var postBodyArguments: [String: Any]? {
        guard let httpBody = httpBodyStreamData() ?? httpBody else { return nil }
        return try? JSONSerialization.jsonObject(with: httpBody, options: .fragmentsAllowed) as? [String: Any]
    }

    /// We need to use the http body stream data as the URLRequest once launched converts the `httpBody` to this stream of data.
    private func httpBodyStreamData() -> Data? {
        // ...
    }
}

Would be great if that deserialization would be dynamic according to the dataType of the current request.
Have you ever consider to implement something like that?
Is it on your roadmap?
Thanks

The manual install results in an error of "swiftlint.sh: No such file or directory"

Xcode 12.3. Steps to re-create:

  1. Create new project
  2. Follow documentation for "Manually" up until step that says "Click on the + button under the "Embedded Binaries" section."
  3. I can't find this section in Xcode 12.3. Instead, I use "Build Phases -> Link Binary with Libraries", click on "+" to add Mocker.Framework
  4. Run
/Users/cg/Library/Developer/Xcode/DerivedData/
test3-guivwchovivgnygzewodpgbybwtr/Build/Intermediates.noindex/
Mocker.build/Debug-iphoneos/Mocker.build/Script-503446441F3DE70C0039D5E4.sh:
line 2: ./Submodules/WeTransfer-iOS-CI/SwiftLint/swiftlint.sh: No such file or directory

That's triggered by Run custom shell script 'SwiftLint'.

Notes:

  • For (3), I can also add the Mocker.Framework using "General -> Frameworks, Libraries, and Embedded Content", which results in the same error.
  • I am following the manual install because the Swift Package Manager option doesn't work for me (see Ticket).

Small fix in examples

This one is very small and I would say its more like suggestion than issue :)
In the example :

MockedData.exampleJSON.data

exampleJSON is a URL type, but it doesn't have data property, its a bit confusing at the beginning, I would maybe add this extension to the Mocker framework or the extension as part of the sample or just a sample code that loads the data using Data(contentsOf: url)

Thanks,
Marat

Misleading Documentation

Hi

love this way of Mocking! Thanks for putting this together.

one tiny thing thou. Documentation says:

 let mock = Mock(url: originalURL, contentType: .json, statusCode: 200, data: [
    .get : MockedData.exampleJSON.data // Data containing the JSON response
])

but contentType should actually be dataType

/// The type of the data which is returned.
    public let dataType: DataType

AppStore binary fails due to Non-public API usage

I'm trying to upload the app I'm developing including Mocker package for now, to showcase TestFlight build to the team, but the upload fails with a resulting message from Apple:

TMS-90338: Non-public API usage - The app references non-public symbols in Frameworks/Mocker.framework/Mocker: _swift_FORCE_LOAD$_XCTestSwiftSupport,The app references non-public symbols in ************: _swift_FORCE_LOAD$_XCTestSwiftSupport. If method names in your source code match the private Apple APIs listed above, altering your method names will help prevent this app from being flagged in future submissions. In addition, note that one or more of the above APIs may be located in a static library that was included with your app. If so, they must be removed. For further information, visit the Technical Support Information at http://developer.apple.com/support/technical/

Installation via CocoaPods is Broken

Follow up on #88 and #89

#89 actually resolved the build-time issue but it actually crashes the app during runtime.

I tried importing XCTest.framework in my project (embed & sign, embed without signing, do not embed), but none of these options worked for me.

Testing functions having https request call using Mocker fail

Writing unit test cases for functions using mock data where https url requests are made. After some success tests it stuck in waiting and finally fail because of time out. May be because number of threads are created around 265. Can someone suggest how to fix this. below is the test case how it is being used.

func testRefreshSuccess() {
let mockExpectation = expectation(description: "Get detail mock should be called")
let requestURL = BaseUrl + getAssetDetailAPI + testAssetId
let mockDataUsage = FileReader.contentsOfFileInBundle("Details")!
let mockUsage = Mock(url: URL(string: requestURL)!, dataType: .json, statusCode: 200, data: [.get: mockDataUsage])
mockUsage.register()

    viewModel?.refresh()
    viewModel?.isDataLoadig.bindAndFire { [weak self] (isDataLoadig : Bool) in
        if isDataLoadig == false {
            XCTAssertNotNil(self?.viewModel?.details.value)
            XCTAssertEqual(self?.viewModel?.details.value?.assetId, self?.testAssetId)
            mockExpectation.fulfill()
        }
    }
    wait(for: [mockExpectation], timeout: Constants.timeout)
}

Feature request: ignoring domains/subdomains or URL prefix

Hey ๐Ÿ‘‹

I constantly see Mocker warnings about not mocking 3rd party URLs such as from mixpanel or Realm. The problem is that the URLs look like:

https://api.mixpanel.com/track/?data=eyJldmVudCIโ€ฆโ€ฆโ€ฆredacted-for-brevity-but-it's-a-really-long-url-jBkYmQ3ODzeCJ9fQ==&ip=1
https://static.realm.io/update/cocoa?x.y.z // where x.y.z is my Realm library version

Thus I thought if I called:

Mocker.ignore(URL(string: "https://static.realm.io")!)

That Mocker would ignore all requests within this domain, but it doesn't.

I'd like to be able to ignore calls to realm.io or mixpanel.com (perhaps even omitting static. or api. for instance), or at least https://static.realm.io and https://api.mixpanel.com.

I'm aware of a function to ignore all URLs but really doesn't accomplish the goal because I like the warnings for all requests that are from my own application.

What are the challenges around implementing this? Are there any risks?

Appreciate all the help!

Mocking headers?

Is there a way to mock headers? Let's say i have an Authentication request i want to mock and test, but the request returns with some authorization header. Is there some way to mock these headers along with the response json?

Error mocking

Hello, what about to mock failure case it test cases? Now it allows to define only a response from "server".

partial mocking

possible to mock out only specific endpoints? essentially. the inverse of ignore

RequestError: doesn't mock the error that's passed in and always return sessionTaskFailed

I want to test our error handling and was hoping to use Mocker for it. We use Alamofire (but the bug is reproducible with URLSession).

Without Alamofire (pseudo code)

                    var url: URL!
                    var urlSession: URLSession!

                    beforeEach {
                        let configuration = URLSessionConfiguration.default
                        configuration.protocolClasses = [MockingURLProtocol.self]
                        urlSession = URLSession(configuration: configuration)

                        let error = ResponseError.testError
                        url = URL(string: "https://test.mycompany.com/thisisvalid?key=hello")!
                                                
                        mock = Mock(url: url, ignoreQuery: true, dataType: .json, statusCode: 404, data: [.get: Data()], requestError: error)
                        mock.register()
                    }

                    it("should call completion with correct error") {
                        waitUntil(timeout: .seconds(2)) { done in
                            urlSession.dataTask(with: url) { (data, response, error) in
                                debugPrint("this error is: \(error as Optional)")

// assertions on actions based on error
                                done()
                            }.resume()
                        }
                    }

po error

ResponseError Code=0 "(null)" UserInfo={_NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <xxxx>.<1>"
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <xxxx>.<1>}

^ this should have been the error I passed but instead I received a .sessionTaskFailed error.

I did spend some time looking into this and the finishRequest inside MockingURLProtocol does get the mock.requestError properly but from there i'm not sure where it goes.

In the actual project i'm using Alamofire but there too i'm getting similar error. The requestError in that case was let error: AFError = AFError.responseValidationFailed(reason: .unacceptableStatusCode(code: 404)).

the returned error is

โ–ฟ Optional<Error>
  - some : Error Domain=Alamofire.AFError Code=9 "(null)" UserInfo={_NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <xxxx>
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <xxxx>

mocking "failed" network interactions

I didn't see any clear means of returning a failed network interaction (no route to host, for example) with Mocker, but I wanted that for some testing of my own.

I've made a slight modification in a forked version that has an additional initializer ('reportFailure' - a boolean) that will return throw exception on URL access instead of returning Data & a response code. Is this something you'd like as a pull request?

I wanted to offer, but wasn't sure how/if you wanted contributions to this library. I'm using it a bit differently than it was originally designed - more for testing failure scenarios, but it served me pretty well where I needed it: forked variant at https://github.com/heckj/swiftui-notes/blob/master/UsingCombineTests/Mock.swift

Carthage build failure > 2.0.0

This is happening for me trying to use any version > 2.0.

*** Building scheme "Mocker" in Mocker.xcodeproj
Build Failed
        Task failed with exit code 65:
        /usr/bin/xcrun xcodebuild -project <project-path>/Carthage/Checkouts/Mocker/Mocker.xcodeproj -scheme Mocker -configuration Release -derivedDataPath <user-path>/Library/Caches/org.carthage.CarthageKit/DerivedData/11.6_11E708/Mocker/2.3.0 -sdk iphoneos ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES archive -archivePath /var/folders/nk/j8qt826j6qv_3xgb0rl507hr0000gn/T/Mocker SKIP_INSTALL=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=NO CLANG_ENABLE_CODE_COVERAGE=NO STRIP_INSTALLED_PRODUCT=NO (launched in<project-path>/Carthage/Checkouts/Mocker)

This usually indicates that project itself failed to compile. Please check the xcodebuild log for more details: /var/folders/nk/j8qt826j6qv_3xgb0rl507hr0000gn/T/carthage-xcodebuild.L4luyp.log

Cartfile entry: github "WeTransfer/Mocker" ~> 2.3.0

Command: carthage update Mocker --no-use-binaries --platform ios

I'm able to hard set the version to 2.0.0 and it seems to build fine.

Conflict with other framework

With your framework and Cuckoo framework it has the "public protocol Mock: HasMockManager, HasSuperclass { ... " where you have "public struct Mock: Equatable { ... "

When using those framework in a xcTestCase under xCode during the build I will get compile error about "Mock(url: apiEndpoint, contentType: .json, statusCode: 200, data: [.get: MockedData.exampleJSON.dataRepresentation])" as not init function.

As for a short term fix, I was able to modify your "public struct Mock: Equatable { ... " to "public struct HttpMock: Equatable { .. " an update any files that had Mock to HttpMock.

If you find anything different please replay with your finding.

Unable to match mock with same url, headers and method with Alamofire

I'm having trouble matching a mock I create with the corresponding actual request being generated from an Alamofire requst, where the url, headers and method all match.

Here's my mock setup:

public final class MockedSeriesData {
    public static let exampleJSON: URL = Bundle(for: MockedSeriesData.self).url(forResource: "exampleSeriesList", withExtension: "json")!
}

class SeriesSupportTests: XCTestCase {
        let configuration = URLSessionConfiguration.default
        configuration.protocolClasses = [MockingURLProtocol.self]
        let sessionManager = SessionManager(configuration: configuration)
        
        let originalURL = SeriesSupport.getSeriesListURL()
        let expectation = self.expectation(description: "getAllSeries()")
        
        if let url = originalURL {
            print("Mock URL: \(url)")
            print("Mock URL (absolute): \(url.absoluteString)")
            let mock = Mock(url: url, contentType: .json, statusCode: 200, data: [
                .get : MockedSeriesData.exampleJSON.data 
            ])
            Mocker.register(mock)
            SeriesSupport.getAllSeries(sessionManager: sessionManager, oktaHelper: oktaHelper) { seriesOption, errorOption in
                expectation.fulfill()
                // Evaluate result of completionHandler 
        } else {
            XCTFail( "Unable to unwrap Series List URL" )
        }
        
        waitForExpectations(timeout: 10) { error in
            if let error = error {
                print("Error: \(error.localizedDescription)")
            }
        }
    }
}
  • I thought maybe I was failing because my headers werenโ€™t matching, so I removed the headers and still wasnโ€™t getting a match.
  • I replaced our actual endpoint with , but I have validated it is exactly the same in all print statements

Hereโ€™s the real actual Alamofire request:

static let PODCAST_SERVICE_BASE_URL_PREFIX = "https://<host>/dev/podcast/"
    static let SERIES_SERVICE_ENDPOINT_SUFFIX = "series"

    class func getSeriesListURL() -> URL? {
        return URL(string: SERIES_SERVICE_ENDPOINT_SUFFIX, relativeTo: URL(string: PODCAST_SERVICE_BASE_URL_PREFIX))
    }

    class func getAllSeries( sessionManager: Alamofire.SessionManager=Alamofire.SessionManager.default, oktaHelper: OktaAuthSupport=OktaAuthHelper() ) {
        if let url = getSeriesListURL() {
            print("URL: \(url)")
            print("URL (absolute): \(url.absoluteString)")
            sessionManager.request(url, method: .get, headers: HTTPHeaders()).responseJSON { response in
                switch response.result {
                case .success(let value):
                    let json = JSON(value)
                    print("JSON: \(json)")
                    // Convert JSON to array and call completion handler with array
                case .failure(let error):
                    print(error)
                    // Call completion handler with error
                }
            }
        }
    }

What is getting printed:

Mock URL: series -- https://<host>/dev/podcast/
Mock URL (absolute): https://<host>/dev/podcast/series

URL: series -- https://<host>/dev/podcast/
URL (absolute): https://<host>/dev/podcast/series

And the error I get from Mocker:

com.apple.CFNetwork.CustomProtocols (10): Fatal error: No mocked data found for url Optional("https://<host>/dev/podcast/series") method Optional("GET"). Did you forget to use register()?

If I step into the Mocker code, I see my mock registered, but I can't step into the == check where it is evaluating a match on the request to see what is actually getting compared.

Any help would be greatly appreciated!

Frank

postBodyArguments doesn't support Collections

I'm sending array of objects via network. It's Codable converted to Data and set into URLRequest.
But postBodyArguments getter tries to cast it to [String: Any], thus I'm getting nil when accessing it.

URLRequest's extension containing httpBodyStreamData() is private and thus I can't get Data by myself and convert it to [[String: Any]].

As a workaround I've copypasted your URLRequest's extension into my tests and modified it to cast to [[String: Any]]. It's working properly but leads to code duplication.

Generics would have solved this problem

func postBodyArguments<T>() -> T? {
    guard let httpBody = httpBodyStreamData() ?? httpBody else { return nil }
    return try? JSONSerialization.jsonObject(with: httpBody, options: .fragmentsAllowed) as? T
}


let array: [[String: Any]] = postBodyArguments()
let dict: [String: Any] = postBodyArguments()

How to Mock POST request which have a response ?

Hi,

I have a login API where it accepts values in it's POST body and returns a User Object if the request is successful. I tried multiple ways but I am not able to mock this type of request. I checked Tests file which has many examples, but the example with POST request ignores the response.

Network Mocking is fairly new to me and I am still learning so should I be mocking such a scenario or is this irrelevant ?

I am trying to use the following code

func testUserLogin() {
    
    let configuration = URLSessionConfiguration.af.default
    configuration.protocolClasses = [MockingURLProtocol.self] + (configuration.protocolClasses ?? [])
    let sessionManager = Session(configuration: configuration)
    
    let url = URL(string: "https://example.com/login")!
    let validPostBodyExpectation = expectation(description: "Post body was valid")
    let validPostResponse = expectation(description: "Post response was valid")
    
    let rawPostData: [String: String] = [
        "key1" : "value1",
        "key2" : "value2"
    ]
    
    let mockedData = try! JSONEncoder().encode(rawPostData)
    let mockedResponseObject = UserDetailMockedData().getMockedObject()
    
    var mock = Mock(url: url, dataType: .json, statusCode: 200, data: [.post: mockedData])
    
    mock.onRequest = { request, httpBodyArguments in
        
        /// Verify the POST arguments
        XCTAssertEqual(httpBodyArguments as? [String: String], [
                "key1" : "value1",
                "key2" : "value2"
        ])
        
        validPostBodyExpectation.fulfill()
    }
    
    mock.register()
    
    sessionManager
        .request(url)
        .responseDecodable(of: UserDetail.self) { (response) in
            XCTAssertNil(response.error)
            XCTAssertEqual(response.value, mockedResponseObject)
            
            validPostResponse.fulfill()
        }.resume()

    wait(for: [validPostBodyExpectation, validPostResponse], timeout: 10.0)
}

Issue on linking Mocker while building on device or archiving

Hey Antoine! Hope youโ€™re doing well. Iโ€™m using the Mocker library for unit testing API calls but I noticed the latest version causing build issues for device on Xcode 12 and when archiving. I get an error that a non-public symbol is being used for swift_FORCE_LOAD$_XCTestSwiftSupport, seems like it could be related to arm64 linking.

  • Integrated through SPM
  • Reverting back to 2.2.0 removed the issue

This is likely caused by the 2.3.0 release, more specifically this PR.

Can Mocker be used on an application target (on my phone)?

I have the following use case: I develop an app in XCode (12.3), and want to mock out the API so I can develop more quickly (data loads faster, I don't need to modify the backend while iterating towards the right structure). I use Mocker to do that, which works great on simulators.

What doesn't work easily is to run the app, including Mocker, on my phone (IPhone 11), see SOE comments.

Would be great if you could clarify in the docs whether Mocker should be used only for testing (and thus never run on my phone) or can only be used for the above use case. In the latter case, maybe I am doing something wrong that prevents it from running. Thanks!

There is no Mocker.xcodeproj for manual integration

Please update TODO and either:

  • delete mentions of manual installation
    OR
  • guide on how to add necessary files to the test bundle (that's how I have done)

Other way is to create and include the mentioned Mocker.xcodeproj to make the manual installation more legit.

Pod Install Issue

I am trying to install Mocker pod but unable to install it. I have tried Swift Package Manager as well but there is error on both end. Can you please provide update regarding how can I install Mocker pod ?
Screen Shot 2022-10-24 at 9 43 51 AM

Optional dataType for empty body

In my opinion, dataType should be optional in order to allow a response without a Content-Type for an empty body. This would also allow us to use Content-Type in additionalHeaders, as Content-Type is currently always overwritten by dataType.headerValue, which might be useful if you do not to spread your headers over two parameters.

An alternative would be to provide a DataType

    public static let none = Mock.DataType(name: "none", headerValue: "")

and to ensure, that Content-Type is written to header only if dataType.headerValue is not empty.

Which approach do you prefer? I'm open to file a PR if you wish me to do so.

Issues with 2.3.0: Cocoapods availability and build error

Hi, I'm facing multiple issues with version 2.3.0:

1/ Cocoapods availability

It looks like version 2.3.0 has been tagged but not published to Cocoapods.
It might be related to the version specified in the podspec that is still 2.2.0.
As the tag exists, I think you just need to push an updated podspec.

2/ "Failed to load module XCTest"

I have workaround the issue by pointing directly to the tag 2.3.0 in my Podfile, however I'm facing a build error saying "Failed to load module XCTest", I think the dependency to the XCTest framework is missing in the podspec too. See Nimble podspec as an example.

Thank you for your time ๐Ÿป

Suggestion: call URLProtocol.unregisterClass(MockingURLProtocol.self)

Problem:
While executing app's Unit tests target, it got executed together with app's target and triggers the lifecycle of the AppDelegate.
Some api calls (e.g Firebase, GA and etc..) might be called from didFinishLaunchingWithOptions or from the instantiated root view controller and if we mock default, ephemeral or background sessions in our test suite, we might see a lot of logs messages like:

๐Ÿšจ No mocked data found for url Optional("https://firebaseinappmessaging.googleapis.com/") method Optional("POST"). Did you forget to use register()? ๐Ÿšจ

Or even in certain case to get a crash.

Suggestions:

  1. I would suggest to add a sample code which explains that its better to call
    URLProtocol.unregisterClass(MockingURLProtocol.self) in the tearDown method or in the end of the test function.
  2. Force URLProtocol.unregisterClass(MockingURLProtocol.self) in MockingURLProtocol in stopLoading or finishRequest functions

[Help needed] - Enqueue different responses for same request

I'm trying to understand if this is possible, or at least how I can reach something like that.
I have a chain of "promises", let's say that inside this chain I have the same request with the same URL repeated over time.
For instance I have LoginCheck API that is called three times inside this chain, the first and second time I want it to succeed the third fail. The chain is already packed inside a function.
It seems that mocker creates a dictionary based on URL, since this URL are equal I will get the same mocked responses.
Is there a way to create different mocked responses for the same request in the same test?
Is there something like queueing responses as I've seen in a similar project for Android?
Does someone have any suggestion?
Best,
Andrea

Opt-in mock mode instead of Opt-out

Hello,

First, thank you for this excellent project. Then, here's my problem. I'm using an API with many routes, and I would like to mock only a few.

Is there an easy way to tell Mocker to ignore by default all requests, and only mock registered ones?

This way Mocker could be used while developing new features, even when the new routes are not yet available, without having to explicitely ignore all the existing routes.

Failing to register

Hello,

I am trying to mock simple json data. Every time it fails to register and because it never execute this block -
shared.queue.async(flags: .barrier) {
/// Delete the Mock if it was already registered.
shared.mocks.removeAll(where: { $0 == mock })
shared.mocks.append(mock)
}
So, 'shared.mocks' array remains empty and when the request is submitted, it throws -
๐Ÿšจ No mocked data found for url Optional("https://myapp.com/api/v1/xyz/getdatas") method Optional("GET"). Did you forget to use register()? ๐Ÿšจ

Can you please help me with this?

CocoaPods delivery is broken

Currently, CocoaPods releases are broken:

[09:01:09]: Pod push failed: Exit status of command 'pod trunk push' was 1 instead of 0.
[!] Found podspec `Mocker.podspec`
Adding spec repo `trunk` with CDN `https://cdn.cocoapods.org/`
Updating spec repo `trunk`
Validating podspec
 -> Mocker
 -> Mocker (2.5.1)
    - ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code. You can use `--verbose` for more information.
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | xcodebuild:  note: Building targets in parallel
    - NOTE  | xcodebuild:  note: Using codesigning identity override: -
    - NOTE  | [iOS] xcodebuild:  note: Planning build
    - NOTE  | [iOS] xcodebuild:  note: Constructing build description
    - NOTE  | [iOS] xcodebuild:  warning: Capabilities for Signing & Capabilities may not function correctly because its entitlements use a placeholder team ID. To resolve this, select a development team in the App editor. (in target 'App' from project 'App')
    - NOTE  | [iOS] xcodebuild:  warning: Skipping code signing because the target does not have an Info.plist file and one is not being generated automatically. (in target 'App' from project 'App')
    - ERROR | xcodebuild:  /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.4.sdk/usr/lib/swift/XCTest.swiftmodule/x86_64-apple-ios-simulator.swiftinterface:6:19: error: no such module 'XCTest'
    - ERROR | xcodebuild:  Mocker/Sources/Mock.swift:12:8: error: failed to build module 'XCTest' from its module interface; the compiler that produced it, 'Apple Swift version 5.3.3 (swiftlang-1200.2.41.2 clang-1200.0.32.8)', may have used features that aren't supported by this compiler, 'Apple Swift version 5.3.2 (swiftlang-1200.0.45 clang-1200.0.32.28)'
    - ERROR | xcodebuild:  /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.4.sdk/usr/lib/swift/XCTest.swiftmodule/i386-apple-ios-simulator.swiftinterface:6:19: error: no such module 'XCTest'

This means latest versions are not available through CocoaPods.

URLSessionConfiguration.urlCache support

I've noticed that when I use MockingURLProtocol URL cache is not used.

given this mock:

Mock(url: URL(string: "https://example.com/foo")!,
     dataType: .json,
     statusCode: 200,
     data: [.get: #"{"id": "1"}"#.data(using: .utf8)!],
     additionalHeaders: ["Cache-Control": "public, max-age=31557600, immutable"]
).register()

and

configuration.urlCache = URLCache.shared

I'd expect response cached (and it does for regular network requests). When the response is mocked though, cache is unused. How do you think is feasible to support cache here?

pod install failed with m1 mac

/Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/library.rb:275: [BUG] Bus Error at 0x0000000104df4000
ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.arm64e-darwin21]

-- Crash Report log information --------------------------------------------
See Crash Report log file under the one of following:
* ~/Library/Logs/DiagnosticReports
* /Library/Logs/DiagnosticReports
for more details.
Don't forget to include the above Crash Report log file in bug reports.

-- Control frame information -----------------------------------------------
c:0058 p:---- s:0367 e:000366 CFUNC :attach
c:0057 p:0258 s:0361 e:000360 METHOD /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/library.rb:275
c:0056 p:0050 s:0341 e:000340 CLASS /Library/Ruby/Gems/2.6.0/gems/ethon-0.15.0/lib/ethon/libc.rb:17
c:0055 p:0007 s:0338 e:000337 CLASS /Library/Ruby/Gems/2.6.0/gems/ethon-0.15.0/lib/ethon/libc.rb:7
c:0054 p:0007 s:0335 e:000334 TOP /Library/Ruby/Gems/2.6.0/gems/ethon-0.15.0/lib/ethon/libc.rb:2 [FINISH]
c:0053 p:---- s:0332 e:000331 CFUNC :require
c:0052 p:0110 s:0327 e:000326 METHOD /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54
c:0051 p:0042 s:0315 e:000314 TOP /Library/Ruby/Gems/2.6.0/gems/ethon-0.15.0/lib/ethon.rb:15 [FINISH]
c:0050 p:---- s:0312 e:000311 CFUNC :require
c:0049 p:0110 s:0307 e:000306 METHOD /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54
c:0048 p:0013 s:0295 e:000294 TOP /Library/Ruby/Gems/2.6.0/gems/typhoeus-1.4.0/lib/typhoeus.rb:2 [FINISH]
c:0047 p:---- s:0292 e:000291 CFUNC :require
c:0046 p:0110 s:0287 e:000286 METHOD /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54
c:0045 p:0006 s:0275 e:000274 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/cdn_source.rb:440
c:0044 p:0045 s:0267 e:000266 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/cdn_source.rb:372
c:0043 p:0318 s:0256 e:000255 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/cdn_source.rb:365
c:0042 p:0006 s:0246 e:000245 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/cdn_source.rb:338
c:0041 p:0040 s:0241 e:000240 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/cdn_source.rb:284
c:0040 p:0073 s:0234 e:000233 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/cdn_source.rb:208
c:0039 p:0008 s:0225 e:000224 BLOCK /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/source/aggregate.rb:83 [FINISH]
c:0038 p:---- s:0221 e:000220 CFUNC :select
c:0037 p:0008 s:0217 e:000216 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/source/aggregate.rb:83
c:0036 p:0011 s:0211 e:000210 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:416
c:0035 p:0101 s:0206 e:000202 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:385
c:0034 p:0051 s:0195 e:000194 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:360
c:0033 p:0060 s:0187 e:000183 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:165
c:0032 p:0066 s:0177 e:000172 BLOCK /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:274 [FINISH]
c:0031 p:---- s:0168 e:000167 IFUNC
c:0030 p:---- s:0165 e:000164 IFUNC
c:0029 p:---- s:0162 e:000161 CFUNC :each
c:0028 p:---- s:0159 e:000158 CFUNC :sort_by
c:0027 p:---- s:0156 e:000155 CFUNC :sort_by!
c:0026 p:0006 s:0152 e:000151 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:267
c:0025 p:0014 s:0145 e:000144 BLOCK /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/delegates/specification_provider.rb:60
c:0024 p:0002 s:0142 e:000141 METHOD /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/delegates/specification_provider.rb:77
c:0023 p:0005 s:0136 e:000135 METHOD /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/delegates/specification_provider.rb:59
c:0022 p:0029 s:0129 e:000128 METHOD /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/resolution.rb:754
c:0021 p:0029 s:0119 e:000118 METHOD /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/resolution.rb:288
c:0020 p:0017 s:0114 e:000113 METHOD /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/resolution.rb:210
c:0019 p:0004 s:0110 e:000109 METHOD /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/resolution.rb:168
c:0018 p:0037 s:0106 e:000105 METHOD /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/resolver.rb:43
c:0017 p:0049 s:0100 e:000099 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:94
c:0016 p:0041 s:0094 e:000093 BLOCK /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer/analyzer.rb:1078
c:0015 p:0081 s:0090 e:000089 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/user_interface.rb:64
c:0014 p:0078 s:0083 e:000082 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer/analyzer.rb:1076
c:0013 p:0161 s:0076 e:000075 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer/analyzer.rb:124
c:0012 p:0011 s:0061 e:000060 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer.rb:416
c:0011 p:0007 s:0056 e:000055 BLOCK /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer.rb:241
c:0010 p:0081 s:0053 e:000052 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/user_interface.rb:64
c:0009 p:0048 s:0046 e:000045 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer.rb:240
c:0008 p:0009 s:0040 e:000039 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer.rb:161
c:0007 p:0054 s:0036 e:000035 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/command/install.rb:52
c:0006 p:0078 s:0031 e:000030 METHOD /Library/Ruby/Gems/2.6.0/gems/claide-1.1.0/lib/claide/command.rb:334
c:0005 p:0024 s:0024 e:000023 METHOD /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/command.rb:52
c:0004 p:0378 s:0019 e:000018 TOP /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/bin/pod:55 [FINISH]
c:0003 p:---- s:0013 e:000012 CFUNC :load
c:0002 p:0109 s:0008 E:0018e0 EVAL /usr/local/bin/pod:23 [FINISH]
c:0001 p:0000 s:0003 E:0009f0 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
/usr/local/bin/pod:23:in <main>' /usr/local/bin/pod:23:in load'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/bin/pod:55:in <top (required)>' /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/command.rb:52:in run'
/Library/Ruby/Gems/2.6.0/gems/claide-1.1.0/lib/claide/command.rb:334:in run' /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/command/install.rb:52:in run'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer.rb:161:in install!' /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer.rb:240:in resolve_dependencies'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/user_interface.rb:64:in section' /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer.rb:241:in block in resolve_dependencies'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer.rb:416:in analyze' /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer/analyzer.rb:124:in analyze'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer/analyzer.rb:1076:in resolve_dependencies' /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/user_interface.rb:64:in section'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer/analyzer.rb:1078:in block in resolve_dependencies' /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:94:in resolve'
/Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/resolver.rb:43:in resolve' /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/resolution.rb:168:in resolve'
/Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/resolution.rb:210:in start_resolution' /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/resolution.rb:288:in push_initial_state'
/Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/resolution.rb:754:in push_state_for_requirements' /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/delegates/specification_provider.rb:59:in sort_dependencies'
/Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/delegates/specification_provider.rb:77:in with_no_such_dependency_error_handling' /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/delegates/specification_provider.rb:60:in block in sort_dependencies'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:267:in sort_dependencies' /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:267:in sort_by!'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:267:in sort_by' /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:267:in each'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:274:in block in sort_dependencies' /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:165:in search_for'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:360:in specifications_for_dependency' /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:385:in find_cached_set'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb:416:in create_set_from_sources' /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/source/aggregate.rb:83:in search'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/source/aggregate.rb:83:in select' /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/source/aggregate.rb:83:in block in search'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/cdn_source.rb:208:in search' /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/cdn_source.rb:284:in ensure_versions_file_loaded'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/cdn_source.rb:338:in download_file' /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/cdn_source.rb:365:in download_file_async'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/cdn_source.rb:372:in download_and_save_with_retries_async' /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/cdn_source.rb:440:in download_typhoeus_impl_async'
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in require' /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in require'
/Library/Ruby/Gems/2.6.0/gems/typhoeus-1.4.0/lib/typhoeus.rb:2:in <top (required)>' /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in require'
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in require' /Library/Ruby/Gems/2.6.0/gems/ethon-0.15.0/lib/ethon.rb:15:in <top (required)>'
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in require' /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in require'
/Library/Ruby/Gems/2.6.0/gems/ethon-0.15.0/lib/ethon/libc.rb:2:in <top (required)>' /Library/Ruby/Gems/2.6.0/gems/ethon-0.15.0/lib/ethon/libc.rb:7:in module:Ethon'
/Library/Ruby/Gems/2.6.0/gems/ethon-0.15.0/lib/ethon/libc.rb:17:in <module:Libc>' /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/library.rb:275:in attach_function'
/Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/library.rb:275:in `attach'

-- Other runtime information -----------------------------------------------

  • Loaded script: /usr/local/bin/pod

  • Loaded features:

    0 enumerator.so
    1 thread.rb
    2 rational.so
    3 complex.so
    4 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/enc/encdb.bundle
    5 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/enc/trans/transdb.bundle
    6 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/rbconfig.rb
    7 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/compatibility.rb
    8 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/defaults.rb
    9 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/deprecate.rb
    10 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/errors.rb
    11 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/version.rb
    12 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/requirement.rb
    13 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/platform.rb
    14 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/basic_specification.rb
    15 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/stub_specification.rb
    16 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/delegate.rb
    17 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/uri/rfc2396_parser.rb
    18 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/uri/rfc3986_parser.rb
    19 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/uri/common.rb
    20 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/uri/generic.rb
    21 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/uri/file.rb
    22 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/uri/ftp.rb
    23 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/uri/http.rb
    24 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/uri/https.rb
    25 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/uri/ldap.rb
    26 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/uri/ldaps.rb
    27 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/uri/mailto.rb
    28 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/uri.rb
    29 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/specification_policy.rb
    30 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/util/list.rb
    31 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/stringio.bundle
    32 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/specification.rb
    33 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/exceptions.rb
    34 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/util.rb
    35 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/bundler_version_finder.rb
    36 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/dependency.rb
    37 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_gem.rb
    38 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/monitor.rb
    39 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb
    40 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_warn.rb
    41 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems.rb
    42 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/path_support.rb
    43 /Library/Ruby/Gems/2.6.0/gems/did_you_mean-1.3.0/lib/did_you_mean/version.rb
    44 /Library/Ruby/Gems/2.6.0/gems/did_you_mean-1.3.0/lib/did_you_mean/core_ext/name_error.rb
    45 /Library/Ruby/Gems/2.6.0/gems/did_you_mean-1.3.0/lib/did_you_mean/levenshtein.rb
    46 /Library/Ruby/Gems/2.6.0/gems/did_you_mean-1.3.0/lib/did_you_mean/jaro_winkler.rb
    47 /Library/Ruby/Gems/2.6.0/gems/did_you_mean-1.3.0/lib/did_you_mean/spell_checker.rb
    48 /Library/Ruby/Gems/2.6.0/gems/did_you_mean-1.3.0/lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
    49 /Library/Ruby/Gems/2.6.0/gems/did_you_mean-1.3.0/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
    50 /Library/Ruby/Gems/2.6.0/gems/did_you_mean-1.3.0/lib/did_you_mean/spell_checkers/name_error_checkers.rb
    51 /Library/Ruby/Gems/2.6.0/gems/did_you_mean-1.3.0/lib/did_you_mean/spell_checkers/method_name_checker.rb
    52 /Library/Ruby/Gems/2.6.0/gems/did_you_mean-1.3.0/lib/did_you_mean/spell_checkers/key_error_checker.rb
    53 /Library/Ruby/Gems/2.6.0/gems/did_you_mean-1.3.0/lib/did_you_mean/spell_checkers/null_checker.rb
    54 /Library/Ruby/Gems/2.6.0/gems/did_you_mean-1.3.0/lib/did_you_mean/formatters/plain_formatter.rb
    55 /Library/Ruby/Gems/2.6.0/gems/did_you_mean-1.3.0/lib/did_you_mean.rb
    56 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/tsort.rb
    57 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/request_set/gem_dependency_api.rb
    58 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/request_set/lockfile/parser.rb
    59 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/request_set/lockfile/tokenizer.rb
    60 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/request_set/lockfile.rb
    61 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/request_set.rb
    62 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb
    63 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/errors.rb
    64 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/set.rb
    65 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb
    66 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb
    67 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb
    68 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb
    69 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb
    70 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb
    71 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb
    72 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb
    73 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb
    74 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb
    75 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/state.rb
    76 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb
    77 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb
    78 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb
    79 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/resolution.rb
    80 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/resolver.rb
    81 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb
    82 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo/lib/molinillo.rb
    83 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/molinillo.rb
    84 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/activation_request.rb
    85 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/conflict.rb
    86 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/dependency_request.rb
    87 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/requirement_list.rb
    88 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/stats.rb
    89 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/set.rb
    90 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/api_set.rb
    91 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/composed_set.rb
    92 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/best_set.rb
    93 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/current_set.rb
    94 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/git_set.rb
    95 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/index_set.rb
    96 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/installer_set.rb
    97 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/lock_set.rb
    98 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/vendor_set.rb
    99 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/source_set.rb
    100 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/specification.rb
    101 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/spec_specification.rb
    102 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/api_specification.rb
    103 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/git_specification.rb
    104 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/index_specification.rb
    105 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/installed_specification.rb
    106 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/local_specification.rb
    107 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/lock_specification.rb
    108 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver/vendor_specification.rb
    109 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/resolver.rb
    110 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/source/git.rb
    111 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/source/installed.rb
    112 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/source/specific_file.rb
    113 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/source/local.rb
    114 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/source/lock.rb
    115 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/source/vendor.rb
    116 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/source.rb
    117 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/pathname.bundle
    118 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/pathname.rb
    119 /Library/Ruby/Gems/2.6.0/gems/claide-1.1.0/lib/claide/ansi/cursor.rb
    120 /Library/Ruby/Gems/2.6.0/gems/claide-1.1.0/lib/claide/ansi/graphics.rb
    121 /Library/Ruby/Gems/2.6.0/gems/claide-1.1.0/lib/claide/ansi/string_escaper.rb
    122 /Library/Ruby/Gems/2.6.0/gems/claide-1.1.0/lib/claide/ansi.rb
    123 /Library/Ruby/Gems/2.6.0/gems/claide-1.1.0/lib/claide/argument.rb
    124 /Library/Ruby/Gems/2.6.0/gems/claide-1.1.0/lib/claide/argv.rb
    125 /Library/Ruby/Gems/2.6.0/gems/claide-1.1.0/lib/claide/command/banner.rb
    126 /Library/Ruby/Gems/2.6.0/gems/claide-1.1.0/lib/claide/command/plugin_manager.rb
    127 /Library/Ruby/Gems/2.6.0/gems/claide-1.1.0/lib/claide/command/argument_suggester.rb
    128 /Library/Ruby/Gems/2.6.0/gems/claide-1.1.0/lib/claide/command.rb
    129 /Library/Ruby/Gems/2.6.0/gems/claide-1.1.0/lib/claide/informative_error.rb
    130 /Library/Ruby/Gems/2.6.0/gems/claide-1.1.0/lib/claide/help.rb
    131 /Library/Ruby/Gems/2.6.0/gems/claide-1.1.0/lib/claide.rb
    132 /Library/Ruby/Gems/2.6.0/gems/colored2-3.1.2/lib/colored2/codes.rb
    133 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/forwardable/impl.rb
    134 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/forwardable.rb
    135 /Library/Ruby/Gems/2.6.0/gems/colored2-3.1.2/lib/colored2/ascii_decorator.rb
    136 /Library/Ruby/Gems/2.6.0/gems/colored2-3.1.2/lib/colored2/strings.rb
    137 /Library/Ruby/Gems/2.6.0/gems/colored2-3.1.2/lib/colored2.rb
    138 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/gem_version.rb
    139 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/user_interface.rb
    140 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj.rb
    141 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/string/strip.rb
    142 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/constants.rb
    143 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/utility/engine.rb
    144 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/abstract_object.rb
    145 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/utility/native_extension_loader.rb
    146 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/mri_object.rb
    147 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/jruby_object.rb
    148 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/rbx_object.rb
    149 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/truffleruby_object.rb
    150 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/object.rb
    151 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/volatile.rb
    152 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/abstract_lockable_object.rb
    153 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/mutex_lockable_object.rb
    154 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/jruby_lockable_object.rb
    155 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/rbx_lockable_object.rb
    156 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/lockable_object.rb
    157 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/condition.rb
    158 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/lock.rb
    159 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization.rb
    160 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/collection/map/non_concurrent_map_backend.rb
    161 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/collection/map/mri_map_backend.rb
    162 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/map.rb
    163 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/hash/deep_merge.rb
    164 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/hash/except.rb
    165 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/hash/slice.rb
    166 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/thread_safe/util.rb
    167 /Library/Ruby/Gems/2.6.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/hash.rb
    168 /Library/Ruby/Gems/2.6.0/gems/i18n-1.10.0/lib/i18n/version.rb
    169 /Library/Ruby/Gems/2.6.0/gems/i18n-1.10.0/lib/i18n/utils.rb
    170 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/cgi/core.rb
    171 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/cgi/escape.bundle
    172 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/cgi/util.rb
    173 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/cgi/cookie.rb
    174 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/cgi.rb
    175 /Library/Ruby/Gems/2.6.0/gems/i18n-1.10.0/lib/i18n/exceptions.rb
    176 /Library/Ruby/Gems/2.6.0/gems/i18n-1.10.0/lib/i18n/interpolate/ruby.rb
    177 /Library/Ruby/Gems/2.6.0/gems/i18n-1.10.0/lib/i18n.rb
    178 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/lazy_load_hooks.rb
    179 /Library/Ruby/Gems/2.6.0/gems/i18n-1.10.0/lib/i18n/config.rb
    180 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/i18n.rb
    181 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/inflector/inflections.rb
    182 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/inflections.rb
    183 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/object/blank.rb
    184 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/inflector/methods.rb
    185 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/multibyte.rb
    186 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/string/multibyte.rb
    187 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/inflector/transliterate.rb
    188 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/string/inflections.rb
    189 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/date_core.bundle
    190 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/date.rb
    191 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/time.rb
    192 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/base64.rb
    193 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/bigdecimal.bundle
    194 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/bigdecimal.rb
    195 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/bigdecimal/util.bundle
    196 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/bigdecimal/util.rb
    197 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/module/delegation.rb
    198 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/date_time/calculations.rb
    199 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/kernel/reporting.rb
    200 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/xml_mini/rexml.rb
    201 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/xml_mini.rb
    202 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/hash/keys.rb
    203 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/object/to_query.rb
    204 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/object/to_param.rb
    205 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/array/conversions.rb
    206 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/fileutils/version.rb
    207 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/etc.bundle
    208 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/fileutils.rb
    209 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/tmpdir.rb
    210 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/gem_version.rb
    211 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/version_metadata.rb
    212 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/gem_version.rb
    213 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/vendor/version.rb
    214 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/vendor/requirement.rb
    215 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/vendor.rb
    216 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/specification/root_attribute_accessors.rb
    217 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/specification/consumer.rb
    218 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/specification/dsl/attribute_support.rb
    219 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/specification/dsl/attribute.rb
    220 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/specification/dsl/platform_proxy.rb
    221 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/specification/dsl/deprecations.rb
    222 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/specification/dsl.rb
    223 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/specification/linter/result.rb
    224 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/specification/linter/analyzer.rb
    225 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/specification/linter.rb
    226 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/specification/set/presenter.rb
    227 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/specification/set.rb
    228 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/specification/json.rb
    229 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/specification.rb
    230 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core.rb
    231 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/multibyte/unicode.rb
    232 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/config.rb
    233 /Library/Ruby/Gems/2.6.0/gems/cocoapods-downloader-1.6.3/lib/cocoapods-downloader/gem_version.rb
    234 /Library/Ruby/Gems/2.6.0/gems/cocoapods-downloader-1.6.3/lib/cocoapods-downloader/api.rb
    235 /Library/Ruby/Gems/2.6.0/gems/cocoapods-downloader-1.6.3/lib/cocoapods-downloader/api_exposable.rb
    236 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/shellwords.rb
    237 /Library/Ruby/Gems/2.6.0/gems/cocoapods-downloader-1.6.3/lib/cocoapods-downloader/base.rb
    238 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/standard_error.rb
    239 /Library/Ruby/Gems/2.6.0/gems/cocoapods-downloader-1.6.3/lib/cocoapods-downloader.rb
    240 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/downloader/cache.rb
    241 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/digest.bundle
    242 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/digest.rb
    243 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/downloader/request.rb
    244 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/downloader/response.rb
    245 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/downloader.rb
    246 /Library/Ruby/Gems/2.6.0/gems/gh_inspector-1.1.3/lib/gh_inspector/version.rb
    247 /Library/Ruby/Gems/2.6.0/gems/gh_inspector-1.1.3/lib/gh_inspector/inspector.rb
    248 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/strscan.bundle
    249 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/erb.rb
    250 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/socket.bundle
    251 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/io/wait.bundle
    252 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/socket.rb
    253 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/timeout.rb
    254 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/protocol.rb
    255 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/zlib.bundle
    256 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/http/exceptions.rb
    257 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/http/header.rb
    258 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/enc/windows_31j.bundle
    259 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/http/generic_request.rb
    260 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/http/request.rb
    261 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/http/requests.rb
    262 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/http/response.rb
    263 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/http/responses.rb
    264 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/http/proxy_delta.rb
    265 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/http/backward.rb
    266 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/net/http.rb
    267 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/json/version.rb
    268 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/ostruct.rb
    269 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/json/generic_object.rb
    270 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/json/common.rb
    271 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/json/ext/parser.bundle
    272 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/json/ext/generator.bundle
    273 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/json/ext.rb
    274 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/json.rb
    275 /Library/Ruby/Gems/2.6.0/gems/gh_inspector-1.1.3/lib/gh_inspector/sidekick.rb
    276 /Library/Ruby/Gems/2.6.0/gems/gh_inspector-1.1.3/lib/gh_inspector/evidence.rb
    277 /Library/Ruby/Gems/2.6.0/gems/gh_inspector-1.1.3/lib/gh_inspector/exception_hound.rb
    278 /Library/Ruby/Gems/2.6.0/gems/gh_inspector-1.1.3/lib/gh_inspector.rb
    279 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/user_interface/error_report.rb
    280 /Library/Ruby/Gems/2.6.0/gems/addressable-2.8.0/lib/addressable/version.rb
    281 /Library/Ruby/Gems/2.6.0/gems/addressable-2.8.0/lib/addressable/idna/pure.rb
    282 /Library/Ruby/Gems/2.6.0/gems/addressable-2.8.0/lib/addressable/idna.rb
    283 /Library/Ruby/Gems/2.6.0/gems/public_suffix-4.0.7/lib/public_suffix/domain.rb
    284 /Library/Ruby/Gems/2.6.0/gems/public_suffix-4.0.7/lib/public_suffix/version.rb
    285 /Library/Ruby/Gems/2.6.0/gems/public_suffix-4.0.7/lib/public_suffix/errors.rb
    286 /Library/Ruby/Gems/2.6.0/gems/public_suffix-4.0.7/lib/public_suffix/rule.rb
    287 /Library/Ruby/Gems/2.6.0/gems/public_suffix-4.0.7/lib/public_suffix/list.rb
    288 /Library/Ruby/Gems/2.6.0/gems/public_suffix-4.0.7/lib/public_suffix.rb
    289 /Library/Ruby/Gems/2.6.0/gems/addressable-2.8.0/lib/addressable/uri.rb
    290 /Library/Ruby/Gems/2.6.0/gems/addressable-2.8.0/lib/addressable/template.rb
    291 /Library/Ruby/Gems/2.6.0/gems/addressable-2.8.0/lib/addressable.rb
    292 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/user_interface/inspector_reporter.rb
    293 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/core_ui.rb
    294 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/user_interface.rb
    295 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/source/acceptor.rb
    296 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/source/aggregate.rb
    297 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/source/health_reporter.rb
    298 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/source/manager.rb
    299 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/hash/reverse_merge.rb
    300 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/hash_with_indifferent_access.rb
    301 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/hash/indifferent_access.rb
    302 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/source/metadata.rb
    303 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/source.rb
    304 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/open-uri.rb
    305 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/open-uri.rb
    306 /Library/Ruby/Gems/2.6.0/gems/netrc-0.11.0/lib/netrc.rb
    307 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/openssl.bundle
    308 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/openssl/bn.rb
    309 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/openssl/pkey.rb
    310 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/openssl/cipher.rb
    311 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/openssl/config.rb
    312 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/openssl/digest.rb
    313 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/openssl/x509.rb
    314 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/openssl/buffering.rb
    315 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/io/nonblock.bundle
    316 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/ipaddr.rb
    317 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/openssl/ssl.rb
    318 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/openssl/pkcs5.rb
    319 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/openssl.rb
    320 /Library/Ruby/Gems/2.6.0/gems/nap-1.1.0/lib/rest/error.rb
    321 /Library/Ruby/Gems/2.6.0/gems/nap-1.1.0/lib/rest/request.rb
    322 /Library/Ruby/Gems/2.6.0/gems/nap-1.1.0/lib/rest/response.rb
    323 /Library/Ruby/Gems/2.6.0/gems/nap-1.1.0/lib/rest.rb
    324 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/psych/versions.rb
    325 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/psych/exception.rb
    326 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/psych/syntax_error.rb
    327 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/psych.bundle
    328 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/psych/omap.rb
    329 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/psych/set.rb
    330 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/psych/class_loader.rb
    331 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/psych/scalar_scanner.rb
    332 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/psych/nodes/node.rb
    ......
    488 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/command/spec/lint.rb
    489 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/command/spec/which.rb
    490 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/command/spec/cat.rb
    491 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/command/spec/edit.rb
    492 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/command/spec.rb
    493 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/command/update.rb
    494 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/command.rb
    495 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/open3.rb
    496 /Library/Ruby/Gems/2.6.0/gems/cocoapods-deintegrate-1.0.5/lib/cocoapods/deintegrate/gem_version.rb
    497 /Library/Ruby/Gems/2.6.0/gems/cocoapods-deintegrate-1.0.5/lib/cocoapods/deintegrator.rb
    498 /Library/Ruby/Gems/2.6.0/gems/cocoapods-deintegrate-1.0.5/lib/cocoapods_deintegrate.rb
    499 /Library/Ruby/Gems/2.6.0/gems/cocoapods-deintegrate-1.0.5/lib/cocoapods/command/deintegrate.rb
    500 /Library/Ruby/Gems/2.6.0/gems/cocoapods-deintegrate-1.0.5/lib/cocoapods_plugin.rb
    501 /Library/Ruby/Gems/2.6.0/gems/cocoapods-plugins-1.0.0/lib/pod/command/gem_index_cache.rb
    502 /Library/Ruby/Gems/2.6.0/gems/cocoapods-plugins-1.0.0/lib/pod/command/gem_helper.rb
    503 /Library/Ruby/Gems/2.6.0/gems/cocoapods-plugins-1.0.0/lib/pod/command/plugins_helper.rb
    504 /Library/Ruby/Gems/2.6.0/gems/cocoapods-plugins-1.0.0/lib/pod/command/plugins/list.rb
    505 /Library/Ruby/Gems/2.6.0/gems/cocoapods-plugins-1.0.0/lib/pod/command/plugins/search.rb
    506 /Library/Ruby/Gems/2.6.0/gems/cocoapods-plugins-1.0.0/lib/pod/command/plugins/create.rb
    507 /Library/Ruby/Gems/2.6.0/gems/cocoapods-plugins-1.0.0/lib/pod/command/plugins/publish.rb
    508 /Library/Ruby/Gems/2.6.0/gems/cocoapods-plugins-1.0.0/lib/pod/command/plugins/installed.rb
    509 /Library/Ruby/Gems/2.6.0/gems/cocoapods-plugins-1.0.0/lib/pod/command/plugins.rb
    510 /Library/Ruby/Gems/2.6.0/gems/cocoapods-plugins-1.0.0/lib/cocoapods_plugin.rb
    511 /Library/Ruby/Gems/2.6.0/gems/cocoapods-search-1.0.1/lib/cocoapods-search/command/search.rb
    512 /Library/Ruby/Gems/2.6.0/gems/cocoapods-search-1.0.1/lib/cocoapods-search/command.rb
    513 /Library/Ruby/Gems/2.6.0/gems/cocoapods-search-1.0.1/lib/cocoapods_plugin.rb
    514 /Library/Ruby/Gems/2.6.0/gems/cocoapods-trunk-1.6.0/lib/pod/command/trunk/add_owner.rb
    515 /Library/Ruby/Gems/2.6.0/gems/cocoapods-trunk-1.6.0/lib/pod/command/trunk/delete.rb
    516 /Library/Ruby/Gems/2.6.0/gems/cocoapods-trunk-1.6.0/lib/pod/command/trunk/deprecate.rb
    517 /Library/Ruby/Gems/2.6.0/gems/cocoapods-trunk-1.6.0/lib/pod/command/trunk/info.rb
    518 /Library/Ruby/Gems/2.6.0/gems/cocoapods-trunk-1.6.0/lib/pod/command/trunk/me.rb
    519 /Library/Ruby/Gems/2.6.0/gems/cocoapods-trunk-1.6.0/lib/pod/command/trunk/push.rb
    520 /Library/Ruby/Gems/2.6.0/gems/cocoapods-trunk-1.6.0/lib/pod/command/trunk/register.rb
    521 /Library/Ruby/Gems/2.6.0/gems/cocoapods-trunk-1.6.0/lib/pod/command/trunk/remove_owner.rb
    522 /Library/Ruby/Gems/2.6.0/gems/cocoapods-trunk-1.6.0/lib/pod/command/trunk.rb
    523 /Library/Ruby/Gems/2.6.0/gems/cocoapods-trunk-1.6.0/lib/cocoapods_plugin.rb
    524 /Library/Ruby/Gems/2.6.0/gems/cocoapods-try-1.2.0/lib/pod/try_settings.rb
    525 /Library/Ruby/Gems/2.6.0/gems/cocoapods-try-1.2.0/lib/pod/command/try.rb
    526 /Library/Ruby/Gems/2.6.0/gems/cocoapods-try-1.2.0/lib/cocoapods_plugin.rb
    527 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/unicode_normalize/tables.rb
    528 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/unicode_normalize/normalize.rb
    529 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/podfile/dsl.rb
    530 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/podfile/target_definition.rb
    531 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/podfile.rb
    532 /Users/migao2/Projects/CBDMobile/node_modules/react-native/scripts/react_native_pods_utils/script_phases.rb
    533 /Users/migao2/Projects/CBDMobile/node_modules/react-native/scripts/react_native_pods.rb
    534 /Users/migao2/Projects/CBDMobile/node_modules/@react-native-community/cli-platform-ios/native_modules.rb
    535 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/build_type.rb
    536 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/version.rb
    537 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/platform.rb
    538 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/dependency.rb
    539 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/requirement.rb
    540 /Users/migao2/Projects/CBDMobile/node_modules/@react-native-firebase/app/firebase_json.rb
    541 /Library/Ruby/Gems/2.6.0/gems/i18n-1.10.0/lib/i18n/backend.rb
    542 /Library/Ruby/Gems/2.6.0/gems/i18n-1.10.0/lib/i18n/backend/transliterator.rb
    543 /Library/Ruby/Gems/2.6.0/gems/i18n-1.10.0/lib/i18n/backend/base.rb
    544 /Library/Ruby/Gems/2.6.0/gems/i18n-1.10.0/lib/i18n/backend/simple.rb
    545 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/podfile.rb
    546 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer.rb
    547 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/sandbox.rb
    548 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/sandbox/headers_store.rb
    549 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/lockfile.rb
    550 /Library/Ruby/Gems/2.6.0/gems/cocoapods-core-1.11.3/lib/cocoapods-core/yaml_helper.rb
    551 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/enc/utf_16le.bundle
    552 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/enc/utf_16be.bundle
    553 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer/pre_install_hooks_context.rb
    554 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/hooks_manager.rb
    555 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer/source_provider_hooks_context.rb
    556 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer/analyzer.rb
    557 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer/installation_options.rb
    558 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer/analyzer/podfile_dependency_cache.rb
    559 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer/podfile_validator.rb
    560 /Library/Ruby/Gems/2.6.0/gems/cocoapods-downloader-1.6.3/lib/cocoapods-downloader/bazaar.rb
    561 /Library/Ruby/Gems/2.6.0/gems/cocoapods-downloader-1.6.3/lib/cocoapods-downloader/git.rb
    562 /Library/Ruby/Gems/2.6.0/gems/cocoapods-downloader-1.6.3/lib/cocoapods-downloader/mercurial.rb
    563 /Library/Ruby/Gems/2.6.0/gems/cocoapods-downloader-1.6.3/lib/cocoapods-downloader/remote_file.rb
    564 /Library/Ruby/Gems/2.6.0/gems/cocoapods-downloader-1.6.3/lib/cocoapods-downloader/http.rb
    565 /Library/Ruby/Gems/2.6.0/gems/cocoapods-downloader-1.6.3/lib/cocoapods-downloader/scp.rb
    566 /Library/Ruby/Gems/2.6.0/gems/cocoapods-downloader-1.6.3/lib/cocoapods-downloader/subversion.rb
    567 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer/analyzer/target_inspector.rb
    568 /Library/Ruby/Gems/2.6.0/gems/atomos-0.1.3/lib/atomos/version.rb
    569 /Library/Ruby/Gems/2.6.0/gems/atomos-0.1.3/lib/atomos.rb
    570 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/securerandom.rb
    571 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/case_converter.rb
    572 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object_attributes.rb
    573 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object_dictionary.rb
    574 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object_list.rb
    575 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/constants.rb
    576 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/swift_package_remote_reference.rb
    577 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/swift_package_product_dependency.rb
    578 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/helpers/build_settings_array_settings_by_object_version.rb
    579 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/build_configuration.rb
    580 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/build_file.rb
    581 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/build_phase.rb
    582 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/build_rule.rb
    583 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/configuration_list.rb
    584 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/container_item_proxy.rb
    585 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/helpers/groupable_helper.rb
    586 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/file_reference.rb
    587 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/helpers/file_references_factory.rb
    588 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/group.rb
    589 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/native_target.rb
    590 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/root_object.rb
    591 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/target_dependency.rb
    592 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object/reference_proxy.rb
    593 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/object.rb
    594 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/project_helper.rb
    595 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project/uuid_generator.rb
    596 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/plist.rb
    597 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/project.rb
    598 /Library/Ruby/Gems/2.6.0/gems/nanaimo-0.3.0/lib/nanaimo/version.rb
    599 /Library/Ruby/Gems/2.6.0/gems/nanaimo-0.3.0/lib/nanaimo/object.rb
    600 /Library/Ruby/Gems/2.6.0/gems/nanaimo-0.3.0/lib/nanaimo/plist.rb
    601 /Library/Ruby/Gems/2.6.0/gems/nanaimo-0.3.0/lib/nanaimo/reader.rb
    602 /Library/Ruby/Gems/2.6.0/gems/nanaimo-0.3.0/lib/nanaimo/unicode/next_step_mapping.rb
    603 /Library/Ruby/Gems/2.6.0/gems/nanaimo-0.3.0/lib/nanaimo/unicode/quote_maps.rb
    604 /Library/Ruby/Gems/2.6.0/gems/nanaimo-0.3.0/lib/nanaimo/unicode.rb
    605 /Library/Ruby/Gems/2.6.0/gems/nanaimo-0.3.0/lib/nanaimo/writer.rb
    606 /Library/Ruby/Gems/2.6.0/gems/nanaimo-0.3.0/lib/nanaimo.rb
    607 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/config/other_linker_flags_parser.rb
    608 /Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.22.0/lib/xcodeproj/config.rb
    609 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer/analyzer/target_inspection_result.rb
    610 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer/analyzer/specs_state.rb
    611 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/external_sources/abstract_external_source.rb
    612 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/external_sources/downloader_source.rb
    613 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/external_sources/path_source.rb
    614 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/external_sources/podspec_source.rb
    615 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/external_sources.rb
    616 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/array/wrap.rb
    617 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/array/access.rb
    618 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/array/extract.rb
    619 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/array/extract_options.rb
    620 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/array/grouping.rb
    621 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/symbol/starts_ends_with.rb
    622 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/array_inquirer.rb
    623 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/array/inquiry.rb
    624 /Library/Ruby/Gems/2.6.0/gems/activesupport-6.1.6/lib/active_support/core_ext/array.rb
    625 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/validator.rb
    626 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/digest/sha1.bundle
    627 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/dependency_graph/action.rb
    628 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/dependency_graph/add_edge_no_circular.rb
    629 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/dependency_graph/add_vertex.rb
    630 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/dependency_graph/delete_edge.rb
    631 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/dependency_graph/detach_vertex_named.rb
    632 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/dependency_graph/set_payload.rb
    633 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/dependency_graph/tag.rb
    634 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/dependency_graph/log.rb
    635 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/dependency_graph/vertex.rb
    636 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/dependency_graph.rb
    637 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb
    638 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/gem_metadata.rb
    639 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/state.rb
    640 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/modules/specification_provider.rb
    641 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/delegates/resolution_state.rb
    642 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/resolution.rb
    643 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/resolver.rb
    644 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo/modules/ui.rb
    645 /Library/Ruby/Gems/2.6.0/gems/molinillo-0.8.0/lib/molinillo.rb
    646 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver/lazy_specification.rb
    647 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver/resolver_specification.rb
    648 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.11.3/lib/cocoapods/resolver.rb
    649 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/digest/md5.bundle
    650 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/digest/sha2.bundle
    651 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/digest/sha2.rb
    652 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi_c.bundle
    653 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/platform.rb
    654 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/data_converter.rb
    655 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/types.rb
    656 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/library.rb
    657 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/errno.rb
    658 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/abstract_memory.rb
    659 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/pointer.rb
    660 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/memorypointer.rb
    661 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/struct_layout.rb
    662 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/struct_layout_builder.rb
    663 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/struct_by_reference.rb
    664 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/struct.rb
    665 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/union.rb
    666 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/managedstruct.rb
    667 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/callback.rb
    668 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/io.rb
    669 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/autopointer.rb
    670 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/variadic.rb
    671 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/enum.rb
    672 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/version.rb
    673 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/ffi.rb
    674 /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi.rb

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: https://www.ruby-lang.org/bugreport.html

Response based on parameters or headers

Hello,

Is there way to get 2 different responses for same url? i'm using your lib to test OAuth interceptor, hence I need to call request and get 2 different responses.

For example i have dummy .get request /dummy which will return 401 in case "token" header does not exist, but it will return 200 in case token == some value.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.