{"id":20199305,"url":"https://github.com/rockchanel/swnetwork","last_synced_at":"2026-06-10T05:31:11.464Z","repository":{"id":56922000,"uuid":"250496241","full_name":"RockChanel/SWNetwork","owner":"RockChanel","description":"SWNetwork is a request util based on AFNetworking.","archived":false,"fork":false,"pushed_at":"2021-03-24T06:11:41.000Z","size":335,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-15T11:17:40.952Z","etag":null,"topics":["afnetworking","ios","network","objective-c"],"latest_commit_sha":null,"homepage":"","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RockChanel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-03-27T09:46:46.000Z","updated_at":"2021-03-24T06:08:44.000Z","dependencies_parsed_at":"2022-08-21T04:50:18.942Z","dependency_job_id":null,"html_url":"https://github.com/RockChanel/SWNetwork","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RockChanel%2FSWNetwork","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RockChanel%2FSWNetwork/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RockChanel%2FSWNetwork/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RockChanel%2FSWNetwork/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RockChanel","download_url":"https://codeload.github.com/RockChanel/SWNetwork/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241637149,"owners_count":19994925,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["afnetworking","ios","network","objective-c"],"created_at":"2024-11-14T04:37:01.233Z","updated_at":"2026-06-10T05:31:11.430Z","avatar_url":"https://github.com/RockChanel.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SWNetwork\n\n[![CI Status](https://img.shields.io/travis/selwyn/SWNetwork.svg?style=flat)](https://travis-ci.org/selwyn/SWNetwork)\n[![Version](https://img.shields.io/cocoapods/v/SWNetwork.svg?style=flat)](https://cocoapods.org/pods/SWNetwork)\n[![License](https://img.shields.io/cocoapods/l/SWNetwork.svg?style=flat)](https://cocoapods.org/pods/SWNetwork)\n[![Platform](https://img.shields.io/cocoapods/p/SWNetwork.svg?style=flat)](https://cocoapods.org/pods/SWNetwork)\n\n## Example\n\nTo run the example project, clone the repo, and run `pod install` from the Example directory first.\n\n## Installation\n\nSWNetwork is available through [CocoaPods](https://cocoapods.org). To install\nit, simply add the following line to your Podfile:\n\n```ruby\npod 'SWNetwork'\n```\n\n## Usage\n\n### SWRequest\n\n#### Creating a Data Task\n\n```objective-c\n[[SWNetworkAgent request:^(SWRequest * _Nonnull request) {\n    request.httpMethod = SWHTTPMethodGET;\n    request.path = @\"service/regeo\";\n    request.parameters = @{\n                           @\"longitude\": @\"119.04925573429551\",\n                           @\"latitude\": @\"31.315590522490712\"\n                          };\n}] startWithSuccess:^(SWRequest * _Nonnull request) {\n    NSLog(@\"request === %@\", request.responseObject);\n} failure:^(SWRequest * _Nonnull request) {\n    NSLog(@\"request === %@\", request.error);\n} completed:^(SWRequest * _Nonnull request) {\n  \n}];\n```\n\n#### Creating a Download Task\n\n```objective-c\nNSString *downloadDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];\nSWRequest *request = [SWRequest request];\nrequest.downloadPath = downloadDir;\nrequest.path = @\"http://dldir1.qq.com/qqfile/QQforMac/QQ_V5.4.0.dmg\";\nrequest.progressBlock = ^(NSProgress * _Nonnull progress) {\n    CGFloat stauts = 100.f * progress.completedUnitCount/progress.totalUnitCount;\n    dispatch_async(dispatch_get_main_queue(), ^{\n        NSLog(@\"download test progress ==== %@\", [NSString stringWithFormat:@\"%.2f\", stauts/100.f]);\n    });\n};\n[request startWithSuccess:^(SWRequest * _Nonnull request) {\n    NSLog(@\"download test path === %@\", request.responseObject);\n} failure:^(SWRequest * _Nonnull request) {\n  \n} completed:^(SWRequest * _Nonnull request) {\n  \n}];\n```\n\n------\n\n### SWBatchRequest\n\n```objective-c\n[[SWNetworkAgent batchRequest:^(SWBatchRequest * _Nonnull request) {\n    NSMutableArray *requests = [NSMutableArray array];\n    \n    SWRequest *tmpReq1 = [SWRequest request];\n    tmpReq1.httpMethod = SWHTTPMethodGET;\n    tmpReq1.path = @\"service/regeo\";\n    tmpReq1.parameters = @{\n        @\"longitude\": @\"119.04925573429551\",\n        @\"latitude\": @\"31.315590522490712\"\n    };\n    tmpReq1.tag = 100;\n    [requests addObject:tmpReq1];\n    \n    SWCustomRequest *tmpReq2 = [SWCustomRequest request];\n    tmpReq2.tag = 200;\n    [requests addObject:tmpReq2];\n    \n    request.requests = requests;\n}] startWithSuccess:^(SWBatchRequest * _Nonnull request) {\n//    for (SWRequest *req in request.requests) {\n//        if (req.tag == 100) {\n//            NSLog(@\"tmpReq1 == %@\", req.responseObject);\n//        }\n//        else {\n//            NSLog(@\"tmpReq2 == %@\", req.responseObject);\n//        }\n//    }\n    \n\t\t// Get request by index\n    NSLog(@\"tmpReq1 == %@\", request.requests[0].responseObject);\n    NSLog(@\"tmpReq2 == %@\", request.requests[1].responseObject);   \n} failure:^(SWBatchRequest * _Nonnull request) {\n    NSLog(@\"tmpReq1 == %@\", request.requests[0].error);\n    NSLog(@\"tmpReq2 == %@\", request.requests[1].error);\n} completed:^(SWBatchRequest * _Nonnull request) {\n  \n}];\n```\n\n------\n\n### SWChainRequest\n\n```objective-c\n[[SWNetworkAgent chainRequest:^(SWChainRequest * _Nonnull request) {\n    SWRequest *tmpReq1 = [SWRequest request];\n    tmpReq1.httpMethod = SWHTTPMethodGET;\n    tmpReq1.path = @\"service/regeo\";\n    tmpReq1.parameters = @{\n        @\"longitude\": @\"119.04925573429551\",\n        @\"latitude\": @\"31.315590522490712\"\n    };\n    tmpReq1.tag = 100;\n  \n    [request nextRequest:tmpReq1 block:^(SWRequest * _Nonnull currentRequest) {\n        NSLog(@\"tmpReq1 == %@\", currentRequest.responseObject);\n        SWCustomRequest *tmpReq2 = [SWCustomRequest request];\n        tmpReq2.tag = 200;\n      \n        [request nextRequest:tmpReq2 block:^(SWRequest * _Nonnull currentRequest) { \n            NSLog(@\"tmpReq2 == %@\", currentRequest.responseObject);\n        }];\n    }]; \n}] startWithSuccess:^(SWChainRequest * _Nonnull request) {\n    \n} failure:^(SWChainRequest * _Nonnull request) {\n    \n} completed:^(SWChainRequest * _Nonnull request) {\n  \n}];\n```\n\n------\n\n### SWBatchChainRequest\n\n```objective-c\n[[SWNetworkAgent batchChainRequest:^(SWBatchChainRequest * _Nonnull request) {\n    SWBatchRequest *batchReq1 = [SWBatchRequest request];\n    NSMutableArray *requests = [NSMutableArray array];\n    \n    SWRequest *tmpReq1 = [SWRequest request];\n    tmpReq1.httpMethod = SWHTTPMethodGET;\n    tmpReq1.path = @\"service/regeo\";\n    tmpReq1.parameters = @{\n        @\"longitude\": @\"119.04925573429551\",\n        @\"latitude\": @\"31.315590522490712\"\n    };\n    tmpReq1.tag = 100;\n    [requests addObject:tmpReq1];\n    \n    SWCustomRequest *tmpReq2 = [SWCustomRequest request];\n    tmpReq2.tag = 200;\n    [requests addObject:tmpReq2];\n    batchReq1.requests = requests;\n    \n    [request nextRequest:batchReq1 block:^(SWBatchRequest * _Nonnull currentRequest) {\n        SWBatchRequest *batchReq2 = [SWBatchRequest request];\n        NSMutableArray *requests = [NSMutableArray array];\n        \n        SWRequest *tmpReq1 = [SWRequest request];\n        tmpReq1.httpMethod = SWHTTPMethodGET;\n        tmpReq1.path = @\"service/regeo\";\n        tmpReq1.parameters = @{\n            @\"longitude\": @\"119.04925573429551\",\n            @\"latitude\": @\"31.315590522490712\"\n        };\n        tmpReq1.tag = 100;\n        [requests addObject:tmpReq1];\n        \n        SWCustomRequest *tmpReq2 = [SWCustomRequest request];\n        tmpReq2.tag = 200;\n        [requests addObject:tmpReq2];\n        batchReq2.requests = requests;\n        \n        [request nextRequest:batchReq2 block:^(SWBatchRequest * _Nonnull currentRequest) {\n            \n        }];\n    }];\n    \n}] startWithSuccess:^(SWBatchChainRequest * _Nonnull request) {\n    \n} failure:^(SWBatchChainRequest * _Nonnull request) {\n    \n} completed:^(SWBatchChainRequest * _Nonnull request) {\n\n}];\n```\n\n------\n\n### Security Policy\n\nAdding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities.\n\n#### Allowing Invalid SSL Certificates\n\n```objective-c\nSWNetworkConfiguration *config = [SWNetworkConfiguration sharedConfiguration];\n\nAFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];\nsecurityPolicy.allowInvalidCertificates = YES;\nsecurityPolicy.validatesDomainName = NO;\nconfig.securityPolicy = securityPolicy;\n```\n\n------\n\n### SWNetworkManager\n\nMonitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces.\n\n#### Shared Network Reachability\n\n```objective-c\n[SWNetworkManager networkStatusWithBlock:^(SWNetworkReachabilityStatus status) {\n    NSLog(@\"Network Status Changed\");\n}];\n```\n\n------\n\n## Author\n\nselwyn, selwynbee@163.com\n\n## License\n\nSWNetwork is available under the MIT license. See the LICENSE file for more info.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frockchanel%2Fswnetwork","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frockchanel%2Fswnetwork","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frockchanel%2Fswnetwork/lists"}