OSX Swift-URL im Standardbrowser öffnen

73

So öffnen Sie eine URL im Standardbrowser des Systems, indem Sie Swift als Programmiersprache und OSX als Plattform verwenden.

Ich fand viel mit UIApplication wie

UIApplication.sharedApplication().openURL(NSURL(string: object.url))

Dies funktioniert jedoch nur unter iOS und nicht unter OSX

Und die Launch Services , die ich gefunden habe, haben keine Beispiele für schnelle und es gibt eine Menge veralteter für OSX 10.10

Jede Hilfe willkommen - danke.

user2929462
quelle
1
Ich denke, das liegt daran, dass wir stattdessen die neuen Erweiterungen verwenden sollen ...
Michele De Pascalis
1
Ich habe upvoted, weil ich wissen muss, wie man das in iOS nur xd macht
Josh

Antworten:

129

Swift 3 oder höher

import Cocoa

let url = URL(string: "https://www.google.com")!
if NSWorkspace.shared.open(url) {
    print("default browser was successfully opened")

}
Leo Dabus
quelle
44

Für MacOS können Sie Folgendes verwenden:

let url = URL(string: "https://www.stackoverflow.com")!
NSWorkspace.sharedWorkspace().openURL(url))

Für iOS können Sie Folgendes verwenden:

let url = NSURL(string: "https://google.com")!
UIApplication.sharedApplication().openURL(url)

Sie müssen NSURL auspacken.

Connor Knabe
quelle
9
Warum hat dies 23 positive Stimmen? Off Topic zur Frage und sollte entfernt werden.
Xandermonkey
2
Dies ist irreführend, da es für die in der Frage verwendete Plattform nicht funktioniert.
KoCMoHaBTa
5
Beschuldigen Sie Google, dass diese Seite auf diese Weise indiziert wurde und alle Suchanfragen nach iOS-
Bleihasen
Wenn die URL Null ist, weil die Zeichenfolge keine gültige URL sein konnte, stürzt dieser Code ab. Sie müssen in Swift vorsichtig sein, wenn Sie Ausrufezeichen verwenden oder das gesamte Programm abstürzt.
Kaydell
@ Kaydell Wenn Sie ein String-Literal oder eine Konstante zur Kompilierungszeit verwenden, um die URL zu erstellen, ist das erzwungene Auspacken vollkommen in Ordnung. In diesen Fällen macht es keinen Sinn, Fehlerbehandlungscode hinzuzufügen. Wenn der Wert Null ist, bedeutet dies nur, dass Sie einen Tippfehler gemacht haben.
Peter Schorn
12

Mac OS:

NSWorkspace.sharedWorkspace().openURL(NSURL(string: "https://google.com")!)

iOS:

UIApplication.sharedApplication().openURL(NSURL(string: "https://google.com")!)
AG
quelle
Gute Referenz für frühere Versionen von Swift (ich bin auf 2.3)
Stefano Buora
2
Bitte beschreiben Sie, dass der zweite Codeblock für iOS ist
Lachezar Todorov
11

Wenn Sie Swift 3 verwenden , können Sie eine Webseite im Standardbrowser wie folgt öffnen:

NSWorkspace.shared().open(NSURL(string: "https://google.com")! as URL)

In der oben akzeptierten Antwort können Sie eine URL auch mit Swift 3 überprüfen, indem Sie Folgendes eingeben:

if let checkURL = NSURL(string: "https://google.com") {
    if NSWorkspace.shared().open(checkURL as URL) {
        print("URL Successfully Opened")
    }
} else {
    print("Invalid URL")
}

Ich hoffe, dass diese Informationen jedem helfen, für den sie gelten.

Dylan
quelle
Da dies Swift 3 ist, denke ich nicht, dass NSURL mehr notwendig ist - verwenden Sie einfach die URL: NSWorkspace.shared (). Open (URL (Zeichenfolge: " google.com")! ) Und lassen Sie checkURL = URL (Zeichenfolge: " google.com" ) {if NSWorkspace.shared (). open (checkURL) {print ("URL erfolgreich geöffnet")}} else {print ("Ungültige URL")}
gepree
10

xCode 9-Update

let url = URL(string: "https://www.google.com")!

UIApplication.shared.open(url, options: [:], completionHandler: nil)
Ganski
quelle
3
Dies ist für iOS und nicht für MacOS
Grumme
8

Nur ein Bonus. Wenn Sie eine URL in einem bestimmten Browser öffnen möchten (auch in einem anderen Client, der diese URL verarbeiten kann), finden Sie hier den Swift 3- Code, der unter Xcode 8.2.1 und macOS 10.12.2 getestet wurde.

/// appId: `nil` use the default HTTP client, or set what you want, e.g. Safari `com.apple.Safari`
func open(url: URL, appId: String? = nil) -> Bool {
  return NSWorkspace.shared().open(
    [url],
    withAppBundleIdentifier: appId,
    options: NSWorkspaceLaunchOptions.default,
    additionalEventParamDescriptor: nil,
    launchIdentifiers: nil
  )
}
Longkai
quelle
5

Für Swift 5 , Xcode 10 und MAC OS :

NSWorkspace.shared.open(NSURL(string: "http://www.lichess.org")! as URL)
HCarrasko
quelle
1
Verwenden Sie einfach URL, nicht sowohl URL als auch NSURL. Zum Beispiel:if let url = URL(string: "https://www.lichess.org") { NSWorkspace.shared.open(url) }
gepree
3

MacOS Xcode 10 Swift 4.2 Update

NSWorkspace.shared.open(URL(string: "https://www.google.com")!)
Xavier Lasne
quelle