我完全不熟悉Xcode和Objective-C,但是有經驗的(網絡)程序員。我想創建一個包含自制框架的應用程序。Xcode:將全新的框架鏈接到全新的應用程序失敗,並顯示「未找到圖像」
現在我讀了很多關於它的內容,我想我已經理解了OS X如何解決運行時的依賴關係以及@rpath,@executable_path和@loader_path的作用。
我做了以下建立一個框架:
- 創建一個名爲Test的新Cocoa框架。
- 將安裝目錄設置爲「@rpath」。
- 將「Test.h」添加到公共標題。
- 點擊運行。
- 右鍵單擊Test.framework下的「Products」,選擇Show in Finder。它是該項目的「Debug」目錄中名爲「Test.framework」的目錄。它似乎有合理的內容(版本/目錄和符號鏈接到「頭」,「資源」和「測試」二進制)
我做了以下內容來創建應用程序:
- 創建新的名爲「TestApp」的Cocoa應用程序。
- 將測試框架添加到項目中。 選擇「將文件添加到項目」。 從Test框架項目的「Release」目錄中選擇「Test.framework」目錄。 「將項目複製到目標組的文件夾」被選中 保留「爲任何添加的文件夾創建組」。上。
- 確保框架文件被複制到應用程序包。 選擇「添加構建階段」 - >「添加複製文件」 將Test.framework文件夾(或組?)從側邊欄拖到「複製文件」區域。
- 添加一個名爲「@executable_path /../框架」額外「的框架搜索路徑」
當我選擇運行,我得到的構建過程中以下警告:
構建目標TestApp
Ld的/Users/meryn/Library/Developer/Xcode/DerivedData/TestApp-ajwvknoonliuqqfaqxacxrmapyfz/Build/Products/Debug/TestApp.app/Contents/MacOS/TestApp正常x86_64的 坎德拉/用戶/ meryn /工作/測試應用程式內/ TestApp setenv MACOSX_DEPLO YMENT_TARGET 10.8 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs /MacOSX10.8.sdk -L /用戶/ meryn /庫/開發商/ Xcode中/ DerivedData/TestApp-ajwvknoonliuqqfaqxacxrmapyfz /編譯/產品/調試-F /用戶/ meryn /庫/開發商/ Xcode中/ DerivedData/TestApp-ajwvknoonliuqqfaqxacxrmapyfz /編譯/產品/調試-F /用戶/ meryn /工作/測試應用程序/ TestApp 「-F @ executable_path /../框架」 -filelist /用戶/ meryn /庫/開發商/ Xcode中/ DerivedData/TestApp-ajwvknoonliuqqfaqxacxrmapyfz /編譯/中間體/ TestApp.build /調試/ TestApp.build /對象 - 正常/ x86_64的/ TestApp.LinkFileList -mmacosx版本分鐘= 10.8 -fobjc弧-fobjc鏈路的運行時-framework可可-framework測試-o /用戶/ meryn /庫/開發商/ Xcode中/ DerivedData/TestApp-ajwvknoonliuqqfaqxacxrmapyfz /編譯/產品/調試/ TestApp。應用/內容/ MacOS的/ TestApp
LD:警告:未找到選項目錄 '-F @ executable_path /../框架'
我能想象這個警告是可以預期的,因爲Id可根本不知道「@executable_path」。它是否正確?
隨後,運行應用程序失敗:
使dyld:庫未加載:@是rpath/Test.framework /版本/ A /從參照測驗 :/用戶/ meryn /庫/開發/的Xcode /DerivedData/TestApp-ajwvknoonliuqqfaqxacxrmapyfz/Build/Products/Debug/TestApp.app/Contents/MacOS/TestApp 原因:沒有找到圖片
奇特的事情是TestApp.app包確實包含一個框架目錄,與Test.framework目錄裏面。鑑於我對OS X如何搜索依賴關係的理解,我認爲我添加的搜索路徑應該可以很好地解決。
這是在XCode 4.6,OS X 10.8上。
otool -L TestApp
給出
TestApp:
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa(兼容版本1.0.0,當前版本19.0.0)
@ rpath的/ Test.framework /版本/ A /測試(兼容版本1.0.0,當前版本1.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation(compatib ility版本300.0.0,當前版本945.11.0)
/usr/lib/libobjc.A.dylib(兼容版本1.0.0,當前版本228.0.0)
/usr/lib中/ libSystem中。 B.dylib(compatible version 1.0.0,current version 169.3.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit(compatibility version 45.0.0,current version 1187.33.0)
可以在這裏看到「@rpath」未擴展嗎?
我在做什麼錯?
因此,您是否將框架添加到了複製階段,因此它在運行時存在於軟件包內部,它位於目標應用程序內部,該目標應用程序位於派生數據文件夾中?我懷疑你添加的框架文件有問題。嘗試刪除它並將其重新添加到項目中。 – 2013-02-17 20:04:32
那麼,在/Users/meryn/Library/Developer/Xcode/DerivedData/TestApp-ajwvknoonliuqqfaqxacxrmapyfz/Build/Products/Debug/TestApp.app(建立的東西)我有內容/框架/ Test.framework,其中包括符號鏈接到「測試」二進制文件等等。我不確定你的意思是「捆綁」。捆綁相當於應用程序「文件夾」?在Finder中它顯示「顯示包裝內容」,所以我認爲它被稱爲包裝。無論如何,我會嘗試重新添加。誰知道。 :) – 2013-02-17 21:16:24
沒有快樂。還有其他的事情我可以看看嗎?我不介意在此期間學習一些有關OS X(也就是它的開發基礎設施)的知識。例如,有沒有辦法檢查「未找到圖像」是否意味着「無法找到文件」或者文件是否已損壞?我可以手動運行dyld,將它應用到構建的應用程序「包」(或其中的應用程序二進制文件)? – 2013-02-17 21:36:06