1 |
efrain |
1 |

|
|
|
2 |
|
|
|
3 |
[](https://img.shields.io/badge/Swift-5.3_5.4_5.5_5.6-Orange?style=flat-square)
|
|
|
4 |
[](https://img.shields.io/badge/Platforms-macOS_iOS_tvOS_watchOS_Linux_Windows-Green?style=flat-square)
|
|
|
5 |
[](https://img.shields.io/cocoapods/v/Alamofire.svg)
|
|
|
6 |
[](https://github.com/Carthage/Carthage)
|
|
|
7 |
[](https://img.shields.io/badge/Swift_Package_Manager-compatible-orange?style=flat-square)
|
|
|
8 |
[](https://twitter.com/AlamofireSF)
|
|
|
9 |
[](https://forums.swift.org/c/related-projects/alamofire/37)
|
|
|
10 |
|
|
|
11 |
Alamofire is an HTTP networking library written in Swift.
|
|
|
12 |
|
|
|
13 |
- [Features](#features)
|
|
|
14 |
- [Component Libraries](#component-libraries)
|
|
|
15 |
- [Requirements](#requirements)
|
|
|
16 |
- [Migration Guides](#migration-guides)
|
|
|
17 |
- [Communication](#communication)
|
|
|
18 |
- [Installation](#installation)
|
|
|
19 |
- [Contributing](#contributing)
|
|
|
20 |
- [Usage](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#using-alamofire)
|
|
|
21 |
- [**Introduction -**](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#introduction) [Making Requests](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#making-requests), [Response Handling](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-handling), [Response Validation](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-validation), [Response Caching](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-caching)
|
|
|
22 |
- **HTTP -** [HTTP Methods](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#http-methods), [Parameters and Parameter Encoder](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md##request-parameters-and-parameter-encoders), [HTTP Headers](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#http-headers), [Authentication](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#authentication)
|
|
|
23 |
- **Large Data -** [Downloading Data to a File](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#downloading-data-to-a-file), [Uploading Data to a Server](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#uploading-data-to-a-server)
|
|
|
24 |
- **Tools -** [Statistical Metrics](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#statistical-metrics), [cURL Command Output](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#curl-command-output)
|
|
|
25 |
- [Advanced Usage](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md)
|
|
|
26 |
- **URL Session -** [Session Manager](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#session), [Session Delegate](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#sessiondelegate), [Request](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#request)
|
|
|
27 |
- **Routing -** [Routing Requests](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#routing-requests), [Adapting and Retrying Requests](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#adapting-and-retrying-requests-with-requestinterceptor)
|
|
|
28 |
- **Model Objects -** [Custom Response Handlers](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#customizing-response-handlers)
|
|
|
29 |
- **Advanced Concurrency -** [Swift Concurrency](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#using-alamofire-with-swift-concurrency) and [Combine](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#using-alamofire-with-combine)
|
|
|
30 |
- **Connection -** [Security](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#security), [Network Reachability](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#network-reachability)
|
|
|
31 |
- [Open Radars](#open-radars)
|
|
|
32 |
- [FAQ](#faq)
|
|
|
33 |
- [Credits](#credits)
|
|
|
34 |
- [Donations](#donations)
|
|
|
35 |
- [License](#license)
|
|
|
36 |
|
|
|
37 |
## Features
|
|
|
38 |
|
|
|
39 |
- [x] Chainable Request / Response Methods
|
|
|
40 |
- [x] Swift Concurrency Support Back to iOS 13, macOS 10.15, tvOS 13, and watchOS 6.
|
|
|
41 |
- [x] Combine Support
|
|
|
42 |
- [x] URL / JSON Parameter Encoding
|
|
|
43 |
- [x] Upload File / Data / Stream / MultipartFormData
|
|
|
44 |
- [x] Download File using Request or Resume Data
|
|
|
45 |
- [x] Authentication with `URLCredential`
|
|
|
46 |
- [x] HTTP Response Validation
|
|
|
47 |
- [x] Upload and Download Progress Closures with Progress
|
|
|
48 |
- [x] cURL Command Output
|
|
|
49 |
- [x] Dynamically Adapt and Retry Requests
|
|
|
50 |
- [x] TLS Certificate and Public Key Pinning
|
|
|
51 |
- [x] Network Reachability
|
|
|
52 |
- [x] Comprehensive Unit and Integration Test Coverage
|
|
|
53 |
- [x] [Complete Documentation](https://alamofire.github.io/Alamofire)
|
|
|
54 |
|
|
|
55 |
## Component Libraries
|
|
|
56 |
|
|
|
57 |
In order to keep Alamofire focused specifically on core networking implementations, additional component libraries have been created by the [Alamofire Software Foundation](https://github.com/Alamofire/Foundation) to bring additional functionality to the Alamofire ecosystem.
|
|
|
58 |
|
|
|
59 |
- [AlamofireImage](https://github.com/Alamofire/AlamofireImage) - An image library including image response serializers, `UIImage` and `UIImageView` extensions, custom image filters, an auto-purging in-memory cache, and a priority-based image downloading system.
|
|
|
60 |
- [AlamofireNetworkActivityIndicator](https://github.com/Alamofire/AlamofireNetworkActivityIndicator) - Controls the visibility of the network activity indicator on iOS using Alamofire. It contains configurable delay timers to help mitigate flicker and can support `URLSession` instances not managed by Alamofire.
|
|
|
61 |
|
|
|
62 |
## Requirements
|
|
|
63 |
|
|
|
64 |
| Platform | Minimum Swift Version | Installation | Status |
|
|
|
65 |
| --- | --- | --- | --- |
|
|
|
66 |
| iOS 10.0+ / macOS 10.12+ / tvOS 10.0+ / watchOS 3.0+ | 5.3 | [CocoaPods](#cocoapods), [Carthage](#carthage), [Swift Package Manager](#swift-package-manager), [Manual](#manually) | Fully Tested |
|
|
|
67 |
| Linux | Latest Only | [Swift Package Manager](#swift-package-manager) | Building But Unsupported |
|
|
|
68 |
| Windows | Latest Only | [Swift Package Manager](#swift-package-manager) | Building But Unsupported |
|
|
|
69 |
|
|
|
70 |
#### Known Issues on Linux and Windows
|
|
|
71 |
|
|
|
72 |
Alamofire builds on Linux and Windows but there are missing features and many issues in the underlying `swift-corelibs-foundation` that prevent full functionality and may cause crashes. These include:
|
|
|
73 |
- `ServerTrustManager` and associated certificate functionality is unavailable, so there is no certificate pinning and no client certificate support.
|
|
|
74 |
- Various methods of HTTP authentication may crash, including HTTP Basic and HTTP Digest. Crashes may occur if responses contain server challenges.
|
|
|
75 |
- Cache control through `CachedResponseHandler` and associated APIs is unavailable, as the underlying delegate methods aren't called.
|
|
|
76 |
- `URLSessionTaskMetrics` are never gathered.
|
|
|
77 |
|
|
|
78 |
Due to these issues, Alamofire is unsupported on Linux and Windows. Please report any crashes to the [Swift bug reporter](https://bugs.swift.org).
|
|
|
79 |
|
|
|
80 |
## Migration Guides
|
|
|
81 |
|
|
|
82 |
- [Alamofire 5.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%205.0%20Migration%20Guide.md)
|
|
|
83 |
- [Alamofire 4.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%204.0%20Migration%20Guide.md)
|
|
|
84 |
- [Alamofire 3.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%203.0%20Migration%20Guide.md)
|
|
|
85 |
- [Alamofire 2.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%202.0%20Migration%20Guide.md)
|
|
|
86 |
|
|
|
87 |
## Communication
|
|
|
88 |
- If you **need help with making network requests** using Alamofire, use [Stack Overflow](https://stackoverflow.com/questions/tagged/alamofire) and tag `alamofire`.
|
|
|
89 |
- If you need to **find or understand an API**, check [our documentation](http://alamofire.github.io/Alamofire/) or [Apple's documentation for `URLSession`](https://developer.apple.com/documentation/foundation/url_loading_system), on top of which Alamofire is built.
|
|
|
90 |
- If you need **help with an Alamofire feature**, use [our forum on swift.org](https://forums.swift.org/c/related-projects/alamofire).
|
|
|
91 |
- If you'd like to **discuss Alamofire best practices**, use [our forum on swift.org](https://forums.swift.org/c/related-projects/alamofire).
|
|
|
92 |
- If you'd like to **discuss a feature request**, use [our forum on swift.org](https://forums.swift.org/c/related-projects/alamofire).
|
|
|
93 |
- If you **found a bug**, open an issue here on GitHub and follow the guide. The more detail the better!
|
|
|
94 |
|
|
|
95 |
## Installation
|
|
|
96 |
|
|
|
97 |
### CocoaPods
|
|
|
98 |
|
|
|
99 |
[CocoaPods](https://cocoapods.org) is a dependency manager for Cocoa projects. For usage and installation instructions, visit their website. To integrate Alamofire into your Xcode project using CocoaPods, specify it in your `Podfile`:
|
|
|
100 |
|
|
|
101 |
```ruby
|
|
|
102 |
pod 'Alamofire'
|
|
|
103 |
```
|
|
|
104 |
|
|
|
105 |
### Carthage
|
|
|
106 |
|
|
|
107 |
[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate Alamofire into your Xcode project using Carthage, specify it in your `Cartfile`:
|
|
|
108 |
|
|
|
109 |
```ogdl
|
|
|
110 |
github "Alamofire/Alamofire"
|
|
|
111 |
```
|
|
|
112 |
|
|
|
113 |
### Swift Package Manager
|
|
|
114 |
|
|
|
115 |
The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler.
|
|
|
116 |
|
|
|
117 |
Once you have your Swift package set up, adding Alamofire as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`.
|
|
|
118 |
|
|
|
119 |
```swift
|
|
|
120 |
dependencies: [
|
|
|
121 |
.package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.6.1"))
|
|
|
122 |
]
|
|
|
123 |
```
|
|
|
124 |
|
|
|
125 |
### Manually
|
|
|
126 |
|
|
|
127 |
If you prefer not to use any of the aforementioned dependency managers, you can integrate Alamofire into your project manually.
|
|
|
128 |
|
|
|
129 |
#### Embedded Framework
|
|
|
130 |
|
|
|
131 |
- 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:
|
|
|
132 |
|
|
|
133 |
```bash
|
|
|
134 |
$ git init
|
|
|
135 |
```
|
|
|
136 |
|
|
|
137 |
- Add Alamofire as a git [submodule](https://git-scm.com/docs/git-submodule) by running the following command:
|
|
|
138 |
|
|
|
139 |
```bash
|
|
|
140 |
$ git submodule add https://github.com/Alamofire/Alamofire.git
|
|
|
141 |
```
|
|
|
142 |
|
|
|
143 |
- Open the new `Alamofire` folder, and drag the `Alamofire.xcodeproj` into the Project Navigator of your application's Xcode project.
|
|
|
144 |
|
|
|
145 |
> 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.
|
|
|
146 |
|
|
|
147 |
- Select the `Alamofire.xcodeproj` in the Project Navigator and verify the deployment target matches that of your application target.
|
|
|
148 |
- 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.
|
|
|
149 |
- In the tab bar at the top of that window, open the "General" panel.
|
|
|
150 |
- Click on the `+` button under the "Embedded Binaries" section.
|
|
|
151 |
- You will see two different `Alamofire.xcodeproj` folders each with two different versions of the `Alamofire.framework` nested inside a `Products` folder.
|
|
|
152 |
|
|
|
153 |
> It does not matter which `Products` folder you choose from, but it does matter whether you choose the top or bottom `Alamofire.framework`.
|
|
|
154 |
|
|
|
155 |
- Select the top `Alamofire.framework` for iOS and the bottom one for macOS.
|
|
|
156 |
|
|
|
157 |
> You can verify which one you selected by inspecting the build log for your project. The build target for `Alamofire` will be listed as `Alamofire iOS`, `Alamofire macOS`, `Alamofire tvOS`, or `Alamofire watchOS`.
|
|
|
158 |
|
|
|
159 |
- And that's it!
|
|
|
160 |
|
|
|
161 |
> The `Alamofire.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.
|
|
|
162 |
|
|
|
163 |
## Contributing
|
|
|
164 |
|
|
|
165 |
Before contributing to Alamofire, please read the instructions detailed in our [contribution guide](https://github.com/Alamofire/Alamofire/blob/master/CONTRIBUTING.md).
|
|
|
166 |
|
|
|
167 |
## Open Radars
|
|
|
168 |
|
|
|
169 |
The following radars have some effect on the current implementation of Alamofire.
|
|
|
170 |
|
|
|
171 |
- [`rdar://21349340`](http://www.openradar.me/radar?id=5517037090635776) - Compiler throwing warning due to toll-free bridging issue in the test case
|
|
|
172 |
- `rdar://26870455` - Background URL Session Configurations do not work in the simulator
|
|
|
173 |
- `rdar://26849668` - Some URLProtocol APIs do not properly handle `URLRequest`
|
|
|
174 |
|
|
|
175 |
## Resolved Radars
|
|
|
176 |
|
|
|
177 |
The following radars have been resolved over time after being filed against the Alamofire project.
|
|
|
178 |
|
|
|
179 |
- [`rdar://26761490`](http://www.openradar.me/radar?id=5010235949318144) - Swift string interpolation causing memory leak with common usage.
|
|
|
180 |
- (Resolved): 9/1/17 in Xcode 9 beta 6.
|
|
|
181 |
- [`rdar://36082113`](http://openradar.appspot.com/radar?id=4942308441063424) - `URLSessionTaskMetrics` failing to link on watchOS 3.0+
|
|
|
182 |
- (Resolved): Just add `CFNetwork` to your linked frameworks.
|
|
|
183 |
- `FB7624529` - `urlSession(_:task:didFinishCollecting:)` never called on watchOS
|
|
|
184 |
- (Resolved): Metrics now collected on watchOS 7+.
|
|
|
185 |
|
|
|
186 |
## FAQ
|
|
|
187 |
|
|
|
188 |
### What's the origin of the name Alamofire?
|
|
|
189 |
|
|
|
190 |
Alamofire is named after the [Alamo Fire flower](https://aggie-horticulture.tamu.edu/wildseed/alamofire.html), a hybrid variant of the Bluebonnet, the official state flower of Texas.
|
|
|
191 |
|
|
|
192 |
## Credits
|
|
|
193 |
|
|
|
194 |
Alamofire is owned and maintained by the [Alamofire Software Foundation](http://alamofire.org). You can follow them on Twitter at [@AlamofireSF](https://twitter.com/AlamofireSF) for project updates and releases.
|
|
|
195 |
|
|
|
196 |
### Security Disclosure
|
|
|
197 |
|
|
|
198 |
If you believe you have identified a security vulnerability with Alamofire, you should report it as soon as possible via email to security@alamofire.org. Please do not post it to a public issue tracker.
|
|
|
199 |
|
|
|
200 |
## Sponsorship
|
|
|
201 |
|
|
|
202 |
The [ASF](https://github.com/Alamofire/Foundation#members) is looking to raise money to officially stay registered as a federal non-profit organization.
|
|
|
203 |
Registering will allow Foundation members to gain some legal protections and also allow us to put donations to use, tax-free.
|
|
|
204 |
Sponsoring the ASF will enable us to:
|
|
|
205 |
|
|
|
206 |
- Pay our yearly legal fees to keep the non-profit in good status
|
|
|
207 |
- Pay for our mail servers to help us stay on top of all questions and security issues
|
|
|
208 |
- Potentially fund test servers to make it easier for us to test the edge cases
|
|
|
209 |
- Potentially fund developers to work on one of our projects full-time
|
|
|
210 |
|
|
|
211 |
The community adoption of the ASF libraries has been amazing.
|
|
|
212 |
We are greatly humbled by your enthusiasm around the projects and want to continue to do everything we can to move the needle forward.
|
|
|
213 |
With your continued support, the ASF will be able to improve its reach and also provide better legal safety for the core members.
|
|
|
214 |
If you use any of our libraries for work, see if your employers would be interested in donating.
|
|
|
215 |
Any amount you can donate, whether once or monthly, to help us reach our goal would be greatly appreciated.
|
|
|
216 |
|
|
|
217 |
[Sponsor Alamofire](https://github.com/sponsors/Alamofire)
|
|
|
218 |
|
|
|
219 |
## Supporters
|
|
|
220 |
|
|
|
221 |
[MacStadium](https://macstadium.com) provides Alamofire with a free, hosted Mac mini.
|
|
|
222 |
|
|
|
223 |

|
|
|
224 |
|
|
|
225 |
## License
|
|
|
226 |
|
|
|
227 |
Alamofire is released under the MIT license. [See LICENSE](https://github.com/Alamofire/Alamofire/blob/master/LICENSE) for details.
|