2015-01-09 75 views
1

我需要在OSX上的應用程序內部的框架中創建符號鏈接(10.10.1節)。由於該應用程序是在Qt中開發的,因此我不在Xcode中。它提供了框架,但他們需要修改一些新的協調規則。在應用包中的OSX框架中創建符號鏈接

我稱之爲「ln -s path_origin path_target_link」,顯然它起作用,鏈接被創建並且它們解析到正確的位置。

但是,當我協同設計的應用程序,我得到一個錯誤「出現在嵌入式框架的根目錄下啓封內容」

(爲了驗證我的過程中,我從另一個包複製框架下載一個驗證codesigning和我可以成功地簽署它,當我創建一個符號鏈接我的方式codesign開始給出錯誤,所以我假設問題是我的符號鏈接創建)

我試過其他方法結果相同,所以我必須缺少一些東西。有任何想法嗎?

回答

1

對於任何人都有用的情況。在我的情況下,問題是我正在創建與絕對路徑的鏈接。很明顯,它們應該是相對的:你移動到鏈接應該去的目錄並創建相對於當前位置的鏈接。

0

版本1代碼符號僅記錄Resources目錄中的文件並忽略其餘部分。但版本2默認記錄基本上所有的文件。所以我們必須簽署每個框架包的版本和應用程序二進制文件。

確保您的框架捆綁結構符合蘋果的要求。 Imposed Framework structured by Apple

根據蘋果公司的文檔,framework bundles沒有'Contents'文件夾。相反,每個版本文件夾都會獲得一個「資源」文件夾,其中包含Info.plist文件,並且該文件夾也在頂層框架文件夾中進行了符號鏈接。 Qt5框架在SDK構建之後佈局不正確,因此這不僅僅是macdeployqt的問題,而是整個框架組裝部分。

enter image description here

所以確認,有一個在您的應用程序包沒有錯誤的佈局。

如果你的Qt框架包(即QtCore.framework/QtCore.prl)有* .prl。 * .prl文件可能會給您帶來麻煩,因爲codesign只是在「未封裝的內容呈現在嵌入式框架的根目錄中」的情況下退出,而沒有準確地告知發生了什麼。剝離如果您有任何prl文件。

Info.plist必須具有正確的CFBundleExecutable字段。目前它沒有。 Info.plist的調試版本將覆蓋發行版本,並且它也恰好包含無效數據。特別是,CFBundleExecutable將包含_debug後綴庫名稱,它不應該。如果你有這個問題,那麼修改不正確的info.plist。

最後一步是在簽署整個應用程序包之前,您必須對所有框架進行排序。