如何从命令行编译Swift以进行分发

如何从命令行编译Swift以进行分发,第1张

概述我有一个单一文件 Swift命令行脚本(它在给定进程ID的情况下转储菜单栏的内容). 要了解我正在使用的API,这里有几个相关的行: import Foundationimport Cocoa// ...func getAttribute(element: AXUIElement, name: String) -> CFTypeRef? { var value: CFTypeRef 我有一个单一文件 Swift命令行脚本(它在给定进程ID的情况下转储菜单栏的内容).

要了解我正在使用的API,这里有几个相关的行:

import Foundationimport Cocoa// ...func getAttribute(element: AXUIElement,name: String) -> CFTypeRef? {    var value: CFTypeRef? = nil    AXUIElementcopyAttributeValue(element,name as CFString,&value)    return value}// ...var app: NSRunningApplication? = nilif pID == -1 {    app = NSWorkspace.shared().menubarOwningApplication}else {    app = NSRunningApplication(processIDentifIEr: pID)}// ...let axApp = AXUIElementCreateApplication(app.processIDentifIEr)

整个文件可用here.

当我使用swiftc menu.swift编译它时,我可以在安装了Swift的系统中运行它.

当我将菜单可执行文件共享给没有Swift的人时,他们通过终端运行时会出现以下错误:

Code 6: dyld: library not loaded: @rpath/libswiftAppKit.dylib  Referenced from: ./menu  Reason: image not found

我想我需要静态链接一些东西,但我不确定.我无法轻松测试,因为没有Swift,我无法访问macOS构建.

我如何使用swiftc以便我可以编译我的脚本以便它可以在任何macOS系统上运行?

解决方法 对于仅使用-static-stdlib的标准库的情况,可以解决此问题.

当您编译没有选项的脚本时,最终的可执行文件包含各种Swift标准库的rpath,您可以使用otool验证它们.

> swiftc menu.swift > otool -L menumenu:    /System/library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0,current version 1348.28.0)    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0,current version 228.0.0)    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0,current version 1238.0.0)    /System/library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0,current version 1504.75.0)    /System/library/Frameworks/applicationservices.framework/Versions/A/applicationservices (compatibility version 1.0.0,current version 48.0.0)    /System/library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0,current version 1349.25.0)    @rpath/libswiftAppKit.dylib (compatibility version 1.0.0,current version 800.0.63)    @rpath/libswiftCore.dylib (compatibility version 1.0.0,current version 800.0.63)    @rpath/libswiftCoreData.dylib (compatibility version 1.0.0,current version 800.0.63)    @rpath/libswiftCoreGraphics.dylib (compatibility version 1.0.0,current version 800.0.63)    @rpath/libswiftCoreImage.dylib (compatibility version 1.0.0,current version 800.0.63)    @rpath/libswiftDarwin.dylib (compatibility version 1.0.0,current version 800.0.63)    @rpath/libswiftdispatch.dylib (compatibility version 1.0.0,current version 800.0.63)    @rpath/libswiftFoundation.dylib (compatibility version 1.0.0,current version 800.0.63)    @rpath/libswiftIOKit.dylib (compatibility version 1.0.0,current version 800.0.63)    @rpath/libswiftObjectiveC.dylib (compatibility version 1.0.0,current version 800.0.63)    @rpath/libswiftQuartzCore.dylib (compatibility version 1.0.0,current version 800.0.63)    @rpath/libswiftSwiftOnonesupport.dylib (compatibility version 1.0.0,current version 800.0.63)    @rpath/libswiftxpc.dylib (compatibility version 1.0.0,current version 800.0.63)

使用-static-stdlib可确保根据需要链接标准库.

> swiftc -static-stdlib menu.swift > otool -L menumenu:    /System/library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0,current version 1238.0.0)    /usr/lib/libc++.1.dylib (compatibility version 1.0.0,current version 307.4.0)    /System/library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0,current version 1349.25.0)    /System/library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0,current version 48.0.0)    /System/library/Frameworks/CoreData.framework/Versions/A/CoreData (compatibility version 1.0.0,current version 752.8.0)    /System/library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics (compatibility version 64.0.0,current version 1070.13.0)>

我仍然不知道如何链接第三方框架 – 但上述步骤解决了我原来的问题.

Related Linux Question – Compile Swift script with static Swift core library

总结

以上是内存溢出为你收集整理的如何从命令行编译Swift以进行分发全部内容,希望文章能够帮你解决如何从命令行编译Swift以进行分发所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1016832.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存