Created
September 4, 2015 13:42
-
-
Save SamClewlow/1010f8f3bf398a265873 to your computer and use it in GitHub Desktop.
A Swift Xcode Bots post script for Hockey App upload (WIP)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env xcrun swift | |
import Foundation | |
// Constants | |
let HOCKEY_APP_TOKEN = "INSERT TOKEN HERE" | |
// Extensions | |
extension NSMutableData { | |
func appendString(string: String) { | |
let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) | |
appendData(data!) | |
} | |
} | |
func createRequest() -> NSURLRequest { | |
let param = [ | |
"status" : "2", | |
"notify" : "1", | |
"notes" : "Some new features and fixed bugs.", | |
"notes_type" : "0"] | |
let boundary = generateBoundaryString() | |
let url = NSURL(string: "https://rink.hockeyapp.net/api/2/apps/upload") | |
let request = NSMutableURLRequest(URL: url!) | |
request.HTTPMethod = "POST" | |
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") | |
request.addValue(HOCKEY_APP_TOKEN, forHTTPHeaderField: "X-HockeyAppToken") | |
let envVar = NSProcessInfo.processInfo().environment | |
let XCS_OUTPUT_DIR : AnyObject = envVar["XCS_OUTPUT_DIR"]! | |
let XCS_PRODUCT : AnyObject = envVar["XCS_PRODUCT"]! | |
let path = "\(XCS_OUTPUT_DIR as! String)/\(XCS_PRODUCT as! String)" | |
println("\(path)") | |
request.HTTPBody = createBodyWithParameters(param, "file", [path], boundary) | |
return request | |
} | |
func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, paths: [String]?, boundary: String) -> NSData { | |
let body = NSMutableData() | |
if parameters != nil { | |
for (key, value) in parameters! { | |
body.appendString("--\(boundary)\r\n") | |
body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") | |
body.appendString("\(value)\r\n") | |
} | |
} | |
if paths != nil { | |
for path in paths! { | |
let filename = path.lastPathComponent | |
let data = NSData(contentsOfFile: path) | |
body.appendString("--\(boundary)\r\n") | |
body.appendString("Content-Disposition: form-data; name=\"ipa\"; filename=\"\(filename)\"\r\n") | |
body.appendString("Content-Type: multipart/form-data\r\n\r\n") | |
body.appendData(data!) | |
body.appendString("\r\n") | |
} | |
} | |
body.appendString("--\(boundary)--\r\n") | |
return body | |
} | |
func generateBoundaryString() -> String { | |
return NSUUID().UUIDString | |
} | |
let request:NSURLRequest = createRequest() | |
var response: NSURLResponse? | |
var error: NSError? | |
let rData = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&error) | |
let rString : String = NSString(data: rData!, encoding: NSUTF8StringEncoding) as! String | |
println(rString) | |
if let httpResponse = response as? NSHTTPURLResponse { | |
println(httpResponse.statusCode) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
A (working) first draft at a Swift Hockey App upload script, for use with Xcode bots.