背景說明
主程序和framework的地位本質(zhì)是不同的;主程序是調(diào)用者,framework是被調(diào)用者。
主程序的工程文件和workspace文件同一級晶框,比其他的framework的工程文件高一級能體現(xiàn)這種地位的不同。并且這種分法是CocoaPods的做法懂从,目前已經(jīng)被普遍采用。
framework實(shí)際的物理位置有三種可能:(1)Carthage的目錄蹲蒲;(2)各個framework所生成的目錄番甩;(3)其他人直接提供的的framework
通過“Enbedded Bianries”添加的只是引用,看上去在同一位置届搁,但是實(shí)際上物理文件位置差距很大缘薛。
調(diào)整
主程序工程文件和workspace處于同一位置,比其他framework的工程文件要高一級
主程序使用的framework卡睦,不管是第三方庫還是自己開發(fā)的庫宴胧,都物理copy到主程序下的某個固定文件夾。保持鏈接視圖和實(shí)際文件位置一致表锻。
framework有更新恕齐,將最終的對應(yīng)成品,物理copy到目標(biāo)文件夾瞬逊,實(shí)現(xiàn)替換显歧。可以讓framework的開發(fā)版本和實(shí)際使用版本不一樣确镊。
單個framework開發(fā)士骤,創(chuàng)建一個名為Demo主程序作為調(diào)試用。將最外層的文件夾命名為framework的名字就可以了蕾域。也引入workspace拷肌,文件名也和framework保持一致。如果采用git管理,最好能做成Carthage管理的模式巨缘。這樣自己開發(fā)的庫和gitHub上的第三方庫看上去就差不多了添忘。
步驟
創(chuàng)建主工程Platform.xcodeproj
將最外層的文件夾重命名,比如Platform1.1
在同一目錄創(chuàng)建workspace文件Platform.xcworkspace带猴,然后將主工程文件Platform.xcodeproj加入workspace昔汉。如果用CocoaPods,這一步將自動完成拴清。
創(chuàng)建framework的工程靶病,都加入workspace
將目標(biāo)設(shè)為“Generic iOS Device”,生成各個framework的真機(jī)版本
在工程目錄下創(chuàng)建文件夾Frameworks口予,將Carthage下的第三方庫framework娄周,自己生成的真機(jī)版framework都copy到這個目錄下
修改Componant.framework的“Framework Search Path”為“$(PROJECT_DIR)/../Frameworks/”,因?yàn)樗玫降谌綆旎ν#?dāng)然也有可能用到其他工程的庫煤辨。framework工程比主工程和workspace要低一級,所以這里要加一個上一級目錄/../
修改主工程的的“Framework Search Path”為“$(PROJECT_DIR)/Frameworks/”木张,所用用到的庫众辨,不管是自己開發(fā)的,還是第三方的舷礼,或者是別人給的鹃彻,并且都是真機(jī)版的framework。
在主工程的“General” -》“Embedded Binaries”標(biāo)簽妻献,拖入Frameworks文件夾下所有的framework
在工程目錄一下蛛株,將所有的framework選中,右鍵育拨,“New Group From Selection”谨履,文件夾取名Frameworks,和實(shí)際的文件夾名字相同熬丧。雖然是引用笋粟,但是看上去已經(jīng)和實(shí)際的一樣了。
如果是系統(tǒng)的framework锹引,可以新建一個新的引用文件夾矗钟,比如叫SystemFrameworks,將兩者區(qū)分開來
樣例代碼
幾點(diǎn)說明
有新版后嫌变,只要保持名字不變吨艇,只要物理替換相應(yīng)的framework就可以了。
同時腾啥,把主工程和framework工程在物理上的兩級關(guān)系區(qū)分開來
將第三方的和自己開發(fā)的东涡,或者是合作伙伴給的framework無差別對待冯吓。大家引用的位置都是同一個文件夾位置,不用管framework之間復(fù)雜的依賴關(guān)系疮跑。
framework在開始引用的位置是自己的主程序组贺,比如Demo之類的。給別人用的時候祖娘,人家的主程序只要按照這個Demo做相似的配置就可以了失尖。