簡體   English   中英

命令行工具中的框架問題

[英]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標准庫的鏈接約定。

我們要:

  • 將Swift標准庫嵌入到SwizzleSrc框架中
  • 強制您的swizzler命令行可執行文件動態鏈接所有Swift庫
  • 最后,確保您的swizzler可執行文件能夠找到所有需要的Swift庫(現已放置在框架目標中)

讓我們開始吧(假設您正在使用Xcode 10.1或更高版本):

將Swift庫嵌入框架

這很簡單。 SwizzleSrc框架目標更改以下構建設置

  • 始終將Swift標准庫嵌入Yes

在命令行工具中動態鏈接所有Swift庫

這是有些棘手的部分。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM