2012-07-17 133 views
14

我正在研究一系列將共享公共代碼庫的iOS應用程序。我已經開發了通用代碼庫作爲靜態庫,並且希望它包含在主應用程序的.dSYM文件中的調試符號。我的理解是,這是可能的,但我還沒有得到它的工作。iOS靜態庫調試不包含在dSYM中的符號

它自己的項目中有一個靜態庫作爲目標的公共代碼庫。該項目被拖入主應用程序的項目中。在主應用程序的目標構建階段中,我添加了靜態庫作爲目標依賴項,並在鏈接二進制庫中。該項目根據需要構建和運行。

現在,如果我從主項目生成歸檔文件,我可以在Finder中查看該歸檔文件,並且它包含一個.dSYM文件,該文件可用於表示崩潰日誌。但是,.dSYM只包含主應用程序的符號,而不包含靜態庫。過度證實這一點,我跑了以下內容:

dwarfdump /path/to/app.dSYM

和輸出(大部分)不從靜態庫包含任何符號。我發現唯一的例外是我的主項目的AppDelegate是靜態庫中對象的子類,並且.dSYM中有超類的條目。但是,其他類別都不存在。

靜態庫中的項目的目標的生成設置,我已經設置了以下內容:

  • 地帶調試符號複製過程:NO
  • 地帶掛鉤產品:NO
  • 生成調試符號:是
  • 默認隱藏的符號:NO

如果有人可以提供一些指導,我將不勝感激它。

+0

您使用的是什麼版本的XCode? – misnomer 2012-09-09 13:22:11

+0

你是否管理過這個問題?我有同樣的問題,仍然無法弄清楚發生了什麼。 – Vincent 2012-12-08 01:53:20

回答

1

不知道你是否找到了你的答案,但幾天前我有完全相同的問題。我通過執行以下操作來實現它:

  1. 創建一個工作空間來保存您的主項目和公共代碼庫(靜態庫)。確保項目是兄弟姐妹,而不是父母/孩子。
  2. 添加一個目標的依賴和鏈接共同的代碼庫
  3. 確保包括在共同的代碼庫的調試符號
  4. 配置工作區設置,以建立一個共享目錄中的所有項目(我認爲這是關鍵)
  5. 如果您收到有關無法找到標題的投訴,則可能需要修改構建設置中的用戶標題搜索路徑或使用源樹功能。
+2

這有可能是一個非常好的答案。儘管如此,很少有東西丟失。通過「包含調試符號」,您的意思是GCC_GENERATE_DEBUGGING_SYMBOLS(生成調試符號)編譯設置默認爲Yes?共享目錄也不清楚。默認情況下,工作區中的每個項目都將在派生數據的自己的目錄中生成。你有沒有設法讓xcode在同一個目錄中構建每個項目? – Onato 2013-05-22 12:21:45

3

靜態庫符號顯示在應用程序的dSYM文件中,而dwarfdump會顯示該文件。

dwarfdump -a path/to/app.dSYM >dsymAsText.txt 

這應該顯示你的lib的符號。但是,如果你是(正如我最近一直在尋找一個符號表來生成的只是你的靜態lib一起去),我得出的結論是,這將是相當無用的;一旦它被編譯到一個新的應用程序中,這些符號和地址將全部改變,並且你將擁有完全不同的所有偏移量(如果我錯了,請別人糾正我)。

我不完全確定有辦法繞過那部分。