你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 關於Xcode7中的tbd文件

關於Xcode7中的tbd文件

編輯:IOS開發基礎

icon256-2x500.jpg

轉自:盧克進的博客

tbd 是text-based stub libraries的意思, 是蘋果在Xcode7中使用的一個技術,便於減少Xcode7中SDK的體積。

65cc0af7jw1f2gfe8bc7yj20ax0ckwg6.jpg

下面講解下Xcode7如何通過tbd這個技術減少SDK的大小的。 Xcode7中和各個平台相關的sdk都在/Applications/Xcode.app/Contents/Developer/Platforms 這個目錄下,你可以看到如下的一些平台:

這裡列出了平台的名字 以及對應的動態鏈接庫所需要的架構

  • MacOSX (i386,x86_64)

  • iPhoneOS (armv7, armv7s, arm64)

  • iPhoneSimulator (i386,x86_64)

  • AppleTVOS (arm64)

  • AppleTVSimulator (x86_64)

  • WatchOS (armv7k)

  • WatchSimulator (i386)

每個平台的SDK都在對應的Developer/SDKs/的子目錄下,比如iPhoneOS的sdk在/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk下, 每一個SDK目錄下都會包含相應的動態Framework以及dylib庫,分別在SDK目錄下的System/Library/Frameworks和/usr/lib目錄下。 

在使用tbd之前不管是哪個平台,Framework以及各個單獨的dylib庫的二進制都得放進來,數量多,體積大。但是真正有必要的其實只是各個模擬器要用的動態庫,因為MacOSX的庫系統自帶,那些諸如iPhoneOS,AppleTVOS,WatchOS這些設備要用的動態庫,也只是在設備上真正運行的時候才需要,編譯的時候只需要一些簡單的信息,符號表啥的,編譯通過就好了,真正到設備上去跑的時候才真正需要整個動態庫的二進制文件。 

所以為了節省Xcode的體積,蘋果創造了一種tbd文件,用作替代那些設備SDK下的動態庫,這裡我們以/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CFNetwork.framework這個動態Framework庫為例,進入到CFNetwork.framework目錄下你會看到一個CFNetwork.tbd文件,cat下

---
archs:           [ armv7, armv7s, arm64 ]
platform:        ios
install-name:    /System/Library/Frameworks/CFNetwork.framework/CFNetwork
current-version: 758.3.15
exports:         
  - archs:           [ armv7, armv7s, arm64 ]
    symbols:         [ '$ld$hide$os4.3$_NSHTTPCookieComment', '$ld$hide$os4.3$_NSHTTPCookieCommentURL', 
                       '$ld$hide$os4.3$_NSHTTPCookieDiscard', '$ld$hide$os4.3$_NSHTTPCookieDomain', 
                       '$ld$hide$os4.3$_NSHTTPCookieExpires', '$ld$hide$os4.3$_NSHTTPCookieLocationHeader', 
                       '$ld$hide$os4.3$_NSHTTPCookieManagerAcceptPolicyChangedNotification', 
                       '$ld$hide$os4.3$_NSHTTPCookieManagerCookiesChangedNotification', 
                       '$ld$hide$os4.3$_NSHTTPCookieMaximumAge', '$ld$hide$os4.3$_NSHTTPCookieName', 
                       '$ld$hide$os4.3$_NSHTTPCookieOriginURL', '$ld$hide$os4.3$_NSHTTPCookiePath', 
                       '$ld$hide$os4.3$_NSHTTPCookiePort', '$ld$hide$os4.3$_NSHTTPCookieSecure', 
                       '$ld$hide$os4.3$_NSHTTPCookieValue', '$ld$hide$os4.3$_NSHTTPCookieVersion', 
                       '$ld$hide$os4.3$_NSNetServicesErrorCode', '$ld$hide$os4.3$_NSNetServicesErrorDomain',
.......

你會發現其實tbd文件就是一個文本文件,其中包含架構信息,以及在真實運行時候二進制所在的位置,以及包含了動態庫的符號表還有類的一些信息,這些信息在編譯階段足夠了。通過這種技術,可以大大減少所有的設備SDK的二進制動態庫的體積,其中包含MacOSX,iPhoneOS,AppleTVOS,WatchOS。 

模擬器SDK的動態庫依然是原始的動態庫二進制文件,這點你可以進到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/CFNetwork.framework目錄下進行驗證。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved