Xcode工程文件pbxproj

Xcode工程文件pbxproj

Xcode會去讀Project.pbxproj文件,把pbxproj轉成plist文件,看起根目錄結構html

pbxproj根結構

rootObject:指向的是咱們的工程對象。(對應一個24個16進制字符,96位的UUID,具體生成規則沒有確切文檔說明,Xcodeproj使用的是 日期+進程ID+MAC地址組合成一個惟一ID,任何一個文件都對應一個uuid,而且必定屬於某個組內,工程根目錄所在組爲mainGroup)git

  • objects:工程中的全部配置都在這裏
  • archiveVersion:打包版本???
  • objectVersion:Xcode兼容的版本???例如 Xcode 9.3以上兼容???官方沒有具體說,參考 XcodeCompatibilityVersion枚舉值。
  • classes:空字段暫時不知道含義

Xcode解讀工程樹形結構

  • Xcode讀取rootObject值,找到工程uuid。並在objects對象中尋找rootObject對象。github

  • rootObject的isa類型是PBXProject類型,表示是工程對象,咱們看看工程對象的包含了哪些東西xcode

    • attributes 屬性,包含一些編譯器的基本信息,版本,以及項目中的target,每個target一個UUID其中,Xcode自動建立的項目裏面有三個target一個就是所要編譯的APP主target,其他兩個爲test Target,能夠看到其他兩個target中有一個字段TestTargetID指向主target,能夠理解爲依賴相關吧
    • buildConfigurationList 配置列表 指向一個配置字典 XCConfigurationList 類型類型
    • compatibilityVersion (兼容版本 目前看來是 Xcode 3.2)
    • developmentRegion 語言版本,English英語
    • hasScannedForEncodings 是否已經掃描了文件編碼信息
    • knownRegions 不一樣區域的本地資源文件列表
    • mainGroup Xcode的文件組織形式,能夠理解爲文件層次 PBXGroup 類型
    • productRefGroup 編譯後的輸出文件 PBXGroup 類型
    • projectDirPath 項目路徑
    • projectRoot 項目的根目錄
    • targets 項目下的N個target對象 PBXNativeTarget類型
  • 根據mainGroup的uuid找到對應的對象,Xcode打開工程對比配置ruby

    Rectangle_2x

  • 根據children中的uuid又能夠找到對應的組對象,組對象又會包含其餘的對象,造成樹形結構網站

objects中包含的集合對象

  • PBXProject (工程包含全部信息)ui

  • PBXNativeTarget section(點擊工程project那一欄)編碼

  • XCBuildConfiguration (沒錯 這個就是咱們常常看見的build Setting選項卡的內容 對應各個target的 buildSetting)spa

  • XCConfigurationList(Xcode編譯模式,指向多個XCBuildConfiguration).net

  • PBXTargetDependency

  • PBXBuildFile 工程構建所須要的源文件,依賴庫,資源文件

  • PBXBuildPhase 就是Xcode中Build Phases選項卡

  • PBXContainerItemProxy

  • PBXFileElement(抽象類型,包含文件類型,組類型)

  • PBXTarget (編譯目標對象)

Xcodeproj修改工程配置

Group的概念

  • group並不必定要是真實文件夾,只是Xcode用於管理文件歸類的集合。也能夠是真實的文件夾,咱們分別建立1個虛擬組和1個真實文件夾組,看看proj文件的變化。咱們發現虛擬組的group對象是沒有path值的 ,真實文件夾group對象有指定path和sourceTree 來指向文件夾「實際路徑」

  • 文件也有sourceTree和path兩個屬性用來指定實際文件路徑。

  • 給一個實體group添加文件Demo

  • 給一個虛擬group添加文件Demo

添加庫到target

  • 添加系統庫依賴 見Demo

  • 添加三方庫依賴 見Demo

修改Build Setting 設置

編譯依賴配置分爲工程配置和目標對象配置。

  • 修改目標依賴,見Demo

  • 修改工程依賴,見Demo

整個pbxproj文件結構圖

project.pbxproj文件_iOS小熊製做_

XcodeProj腳本demo

https://github.com/xiongwj0910/testXcodeProj/tree/master

腳本功能目錄

添加文件到虛擬group腳本--addFileToInventedGroup.rb

添加文件到有實體文件夾的group腳本--addFileToGroup.rb

添加系統庫給target腳本--addFrameWorkToTarget.rb

添加三方庫給target腳本--addThirdFrameWorkToTarget.rb

進入到工程根目錄,在執行對應功能的腳本

cd /xxx/xxx/testXcodeProj
ruby ./Script/addThirdFrameWorkToTarget.rb

3.參考網站

project.pbxproj結構參考 https://yulingtianxia.com/blog/2016/09/28/Let-s-Talk-About-project-pbxproj/

https://www.jianshu.com/p/e82ec6a56fc2(Xcode工程文件project.pbxproj小結)

官網結構文檔 http://www.monobjc.net/xcode-project-file-format.html

https://www.jianshu.com/p/bd4e3c1a7276#(xcode工程文件格式說明 翻譯官網)

https://blog.csdn.net/darya_1/article/details/78095821(xcodeproj使用心得)

Xcodeproj源碼詳解

https://www.jianshu.com/p/84936d9344ff(cocoapods作了什麼 )

https://www.jianshu.com/p/98029cf49a69(Xcodeproj: 使用 ruby 自由的修改Xcode 工程文件)

https://blog.csdn.net/skylin19840101/article/details/64905318(各語言版本的解析庫)

Xcodeproj使用參考網站 https://www.jianshu.com/p/98029cf49a69

https://blog.csdn.net/darya_1/article/details/78095821

https://www.jianshu.com/p/03a3f7eafe26

https://www.jianshu.com/p/cca701e1d87c

https://blog.csdn.net/auccy/article/details/68061889

相關文章
相關標籤/搜索