-
Notifications
You must be signed in to change notification settings - Fork 33
/
Copy pathsend.swift
executable file
·101 lines (94 loc) · 3.25 KB
/
send.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/usr/bin/env swift
import Foundation
func findDevice() -> String {
let task = Process()
task.launchPath = "/usr/bin/env"
task.arguments = ["xcrun", "simctl", "list", "-j"]
let pipe = Pipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
var udid = ""
do {
if let json = try JSONSerialization.jsonObject(with: data, options : .allowFragments) as? Dictionary<String, Any> {
if let devices = json["devices"] as? Dictionary<String, [Dictionary<String, Any>]> {
for (_, devs) in devices {
for dev in devs {
if let state = dev["state"] as? String {
if state == "Booted" {
if let uid = dev["udid"] as? String {
udid = uid
break
}
}
}
}
}
}
}
} catch let error as NSError {
print(error)
}
task.waitUntilExit()
return udid
}
func buildAPNS() -> String {
var body = [ "body": " " ]
for arg in CommandLine.arguments {
if arg.hasPrefix("text=") {
body["text"] = String(arg.suffix(arg.count - 5)).replacingOccurrences(of: "\\n", with: "\n")
} else if arg.hasPrefix("image=") {
body["image"] = String(arg.suffix(arg.count - 6))
} else if arg.hasPrefix("audio=") {
body["audio"] = String(arg.suffix(arg.count - 6))
} else if arg.hasPrefix("link=") {
body["link"] = String(arg.suffix(arg.count - 5))
} else if arg.hasPrefix("file=") {
body["file"] = String(arg.suffix(arg.count - 5))
} else if arg.hasPrefix("filename=") {
body["filename"] = String(arg.suffix(arg.count - 9))
} else if arg.hasPrefix("title=") {
body["title"] = String(arg.suffix(arg.count - 6))
} else if arg.hasPrefix("channel=") {
body["channel"] = String(arg.suffix(arg.count - 8))
}
}
let msg = [
"Simulator Target Bundle": "net.chanify.ios",
"aps": [
"mutable-content": 1,
"alert": body
]
] as [String : Any]
do {
let jsonData = try JSONSerialization.data(withJSONObject: msg, options: [])
if let jsonString = String(data: jsonData, encoding: .utf8) {
return jsonString
}
} catch let error as NSError {
print(error)
}
return ""
}
func sendMsg(_ udid: String, _ msg: String) -> Bool {
let task = Process()
task.launchPath = "/usr/bin/env"
task.arguments = ["xcrun", "simctl", "push", udid, "-"]
let inPipe = Pipe()
let outPipe = Pipe()
task.standardInput = inPipe
task.standardOutput = outPipe
task.launch()
let fh = inPipe.fileHandleForWriting
fh.write(Data(msg.utf8))
fh.closeFile()
let data = outPipe.fileHandleForReading.readDataToEndOfFile()
let output = String(decoding: data, as: UTF8.self)
print(output)
task.waitUntilExit()
return true
}
let udid = findDevice()
if !sendMsg(udid, buildAPNS()) {
print("send failed: ", udid)
}