Use of unresolved identifier 'NSWorkspace'

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Use of unresolved identifier 'NSWorkspace'

    Hallo
    wollte auf meinem iMac mit einem kleinen Programm in Xcode 9 verschiedene Seiten im Firefox öffnen. Als totaler Anfänger in Swift/Xcode habe ich im Internet diese beiden Befehle gefunden und in ein Command Line Tool für MacOS einkopiert (import Foundation war schon da), und bekomme dann die Fehlermeldung in der Titelzeile. Mein Programm besteht also nur aus diesen 3 Zeilen.

    import Foundation
    let url = URL(string: "https://......")!
    NSWorkspace.shared().open(url)

    Dieser NSWorkspace muss wohl irgendwie vorher deklariert werden, aber im Internet habe ich dazu nichts gefunden.
    Später möchte ich nach jeder Webseite eine Pause einführen, und nach irgendeinem Tastendruck soll dann die nächste Seiter geöffnet werden, aber das ist wahrscheinlich noch zu kompliziert für mich. Ich hatte das bereits mit AppleScript versucht, aber weder der Applesupport noch ein Forum für Applescript wusste, wie das mit der weiteren Programmausführung auf Tastendruck geht, deswegen hoffe ich, dass das mit Swift geht.
    Danke und Gruss
  • Hallo wolfilein,

    bis ein Profi antwortet, kann ich als blutiger Anfänger vielleicht ein paar Gedanken in den Raum werfen.

    In der Dokumentation dazu (developer.apple.com/documentation/appkit/nsworkspace) steht, dass die Klasse NSWorkspace aus dem AppKit Framework stammt. Du solltest also nicht nur Foundation, sondern auch AppKit importieren.

    Vielleicht lässt sich deine Aufgabe sogar mit dem Automator erledigen, allerdings habe ich damit noch nicht gearbeitet und weiß es daher nicht sicher.

    Grüße,
    Tazaki
  • Versuche es mal mit folgendem Code:

    Quellcode

    1. import AppKit
    2. let url = URL(string: "https://......")!
    3. NSWorkspace.shared.open(url)


    Im Gegensatz zu openFile(_:withApplication:) kannst du bei open(_:) allerdings keine Anwendung angeben und hast, zumindest wie ich das sehe, daher keine Möglichkeit die URL mit dem Firefox aufzurufen..

    /Edit: ich glaube, ich habe etwas hilfreiches gefunden:


    developer.apple.com/documentat…/nsworkspace/1535886-open

    Quellcode

    1. NSWorkspace.shared.open([url], withAppBundleIdentifier: app, options: .default, additionalEventParamDescriptor: NSAppleEventDescriptor.null(), launchIdentifiers: nil)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von Tazaki ()

  • Wenn das Öffnen der URLs unbedingt in Code passieren soll, würde ich einmal in AppleScript schauen. Dort kannst Du so etwas wie

    Quellcode

    1. tell application "Firefox"
    2. OpenURL "https://www.osxentwicklerforum.de/"
    3. end tell
    verwenden.

    Aber die schnellste Methode ist m. E. einfach ein open-Befehl im Terminal, den Du natürlich auch in eine Batch-Datei packen kannst:

    Quellcode

    1. open https://www.osxentwicklerforum.de -a Firefox
    Und wenn Du unbedingt in Swift / ObjectiveC programmieren möchtest, gibt es von NSWorkspace eine Methode openURLs:withAppBundleIdentifier:options:additionalEventParamDescriptor:launchIdentifiers:, bei der Du den BundleIdentifier vom FF mitgeben kannst.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Danke für die Hilfe, aber da ich absoluter Anfänger bin und mich erst seit 2 Tagen mit Swift beschäftige, hilft mir das alles nicht weiter.

    Bei dem Code von Tazaki kommt die Meldung Use of unresolved identifier 'app' und bei dem Code von MyMattes kommt die Meldung: Consecutive statements on a line must be separated by ';'

    Keine Ahnung, wo ich Strichpunkte setzen muss, und wie ich einen Bundleidentifier vom Firefox mitgeben kann?? Was ich brauche, ist ein Code, den ich kopieren kann und der funktioniert.

    Mit AppleScript habe ich ein Programm, was mir meine Seiten im Firefox öffnet, aber es geht nur mit dem Pausenbefehl, was nicht sinnvoll ist, deswegen der Versuch, mit Swift oder mit was auch immer letzlich zu erreichen, dass das Programm nach irgendeiner Tasteneingabe weiterläuft.

    Ob sich das mit einer Batch-Datei machen lässt, keine Ahnung, aber ich kann keine Batch-Datei erstellen. Laut Internet hat sie die Endung .command, aber weder mit LibreOffice, noch mit Pages noch mit Textedit lässt sich eine Datei mit dieser Endung erstellen ??

    wolfilein
  • Schau einmal nach Shell-Scripten, üblicherweise mit der Erweiterung .sh (obwohl das egal ist). Achte auf das “execute”-Flag...

    Sorry, aber bei so wenig Grundlagen solltest Du m. E. beim Terminal bleiben und kommst so sehr schnell zum Ziel.

    Fertiger Code ist in diesem Forum aus verständlichen Gründen eher Mangelware.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Wenn du fertigen Code möchtest, müsstest du jemanden finden, der Interesse daran hat, dein Projekt für dich umzusetzen. Ich glaube, es ist hier eher üblich, Hilfestellungen zu geben, wie es Mattes schon getan hat, oder bestehenden Code zu kommentieren.

    Zu der Fehlermeldung bei meinem Codeschnipsel kann ich noch den Hinweis geben, dass withAppBundleIdentifier einen String erwartet. Den Bundle Identifier findest du über den Finder. Dort unter Programme und dann Control-Klick auf Firefox -> "Paketinhalt anzeigen", dann in Contents nach der "Info.plist" suchen und öffnen. Dort findet sich unter anderem der gewünschte Eintrag, aber vielleicht gibt es auch einen schnelleren Weg, den heraus zu finden, das weiß ich leider nicht.

    Viele Grüße,
    Tazaki
  • wolfilein schrieb:


    Bei dem Code von Tazaki kommt die Meldung Use of unresolved identifier 'app' und bei dem Code von MyMattes kommt die Meldung: Consecutive statements on a line must be separated by ';'

    Das war von den beiden auch kein Code, sondern die Funktionssignatur. Coden mußt Du schon selber!
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?