[英]Problem with Frameworks in Command Line Tool
在所有人開始向我拋出其他堆棧溢出和論壇帖子之前:我已經全部查看了。 他們都沒有幫助。
我有一個名為swizzler
的簡單cmd工具,並希望將SwizzleSrc
框架嵌入其中。 我已經按照所有的教程進行了學習,並且沒有運氣而導致堆棧溢出。 這就是我得到的。
建立
2019-02-07 19:22:46.785680-0500 Terminal[67444:11837029] flock failed to lock maps file: errno = 35
2019-02-07 19:22:46.786939-0500 Terminal[67444:11837029] flock failed to lock maps file: errno = 35
跑
Last login: Thu Feb 7 19:21:08 on ttys018
NAME-iMac:~ NAME$ /Users/NAME/Library/Developer/Xcode/DerivedData/swizzler-aslysekmorknabdslxbxfaeuiztk/Build/Products/Debug/swizzler ; exit;
dyld: Library not loaded: @rpath/SwizzleSrc.framework/Versions/A/SwizzleSrc
Referenced from: /Users/NAME/Library/Developer/Xcode/DerivedData/swizzler-aslysekmorknabdslxbxfaeuiztk/Build/Products/Debug/swizzler
Reason: image not found
Abort trap: 6
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
[Process completed]
有人可以幫忙嗎? 我已經嘗試了好幾天都無濟於事。
為了解決您的問題,我們需要默認更改Xcode處理Swift 命令行工具目標的方式,特別是針對Swift標准庫的鏈接約定。
我們要:
SwizzleSrc
框架中 swizzler
命令行可執行文件動態鏈接所有Swift庫 swizzler
可執行文件能夠找到所有需要的Swift庫(現已放置在框架目標中) 讓我們開始吧(假設您正在使用Xcode 10.1或更高版本):
這很簡單。 為SwizzleSrc
框架目標更改以下構建設置 :
這是有些棘手的部分。 為swizzler
工具目標添加以下用戶定義的設置(在Build Settings中 ):
SWIFT_FORCE_DYNAMIC_LINK_STDLIB
設置為YES
SWIFT_FORCE_STATIC_LINK_STDLIB
設置為NO
(要添加新的用戶定義設置,只需單擊“ 構建設置”選項卡標題下方的+
按鈕。)
這將確保您的命令行可執行文件將改為動態鏈接所有Swift庫(即,默認情況下它們是靜態鏈接的)。 順便說一句,Swift軟件包管理器使用這些完全相同的設置來修復相關問題。
為swizzler
工具目標添加以下Runpath搜索路徑條目(在Build Settings中 ):
@executable_path
@executable_path/SwizzleSrc.framework/Versions/Current/Frameworks
現在清理您的構建文件夾,再次重建兩個目標,然后檢查是否可以徹底解決您的問題;)
有關更多信息,請確保還檢查以下鏈接:
我還創建了一個(非常!)簡單的Xcode項目,演示了上述步驟:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.