Skip to content

Instantly share code, notes, and snippets.

@SamClewlow
Created September 4, 2015 13:42
Show Gist options
  • Save SamClewlow/1010f8f3bf398a265873 to your computer and use it in GitHub Desktop.
Save SamClewlow/1010f8f3bf398a265873 to your computer and use it in GitHub Desktop.
A Swift Xcode Bots post script for Hockey App upload (WIP)
#!/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)
}
@SamClewlow
Copy link
Author

A (working) first draft at a Swift Hockey App upload script, for use with Xcode bots.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment