ios組件化遇到的問題

很全的podspec字段含義:http://www.reibang.com/p/1692701d30ae

一、集成第三方庫時候?qū)Φ谌綆旖M件依賴極光SDK,單獨將極光sdk拉倒第三方庫的話需要設(shè)置依賴一堆蘋果系統(tǒng)的api恬叹,比較麻煩磕谅,所以嘗試在.podspec文件里面設(shè)置組件依賴即可点楼,但是pod install時候卻報target has transitive dependencies that include static binaries這個錯糖儡,網(wǎng)上查下只要把podfile里面最上面的use_frameworks!注釋掉即可

原因如下:
對于是否使用Framework,CocoaPods 通過use_frameworks來控制

不使用use_frameworks! -> static libraries 方式 -> 生成.a文件
在Podfile中如不加use_frameworks!贷币,cocoapods會生成相應(yīng)的 .a文件(靜態(tài)鏈接庫)击胜,
Link Binary With Libraries: libPods-**.a 包含了其他用pod導(dǎo)入有第三庫的.a文件
2.use_frameworks! -> dynamic frameworks 方式 -> 生成.framework文件

使用了use_frameworks!,cocoapods會生成對應(yīng)的frameworks文件(包含了頭文件片择,二進(jìn)制文件潜的,資源文件等等)

Link Binary With Libraries:Pods_xxx.framework包含了其它用pod導(dǎo)入的第三方框架的.framework文件
1.純oc項目中 通過pod導(dǎo)入純oc項目, 一般都不使用frameworks

2.swift 項目中通過pod導(dǎo)入swift項目,必須要使用use_frameworks字管!啰挪,在需要使用的到地方 import AFNetworking

3.swift 項目中通過pod導(dǎo)入OC項目

 1) 使用use_frameworks信不,在橋接文件里加上#import "AFNetworking/AFNetworking.h"
 2)不使用frameworks,橋接文件加上 #import "AFNetworking.h"

其中當(dāng)組件不能添加use_frameworks的話亡呵,那依賴該組件的工程也不能擁有use_frameworks

二抽活、將第三方庫提取成組件時候,有的第三方庫有.a靜態(tài)庫文件锰什,導(dǎo)致集成后一旦使用設(shè)計到的.a庫的類就一直報

clang: error: linker command failed with exit code 1 (use -v to see invocation)

  "_OBJC_CLASS_$_FMDeviceManager", referenced from:

錯誤下硕。錯誤是因為連接不到靜態(tài)庫的問題
解決辦法就是在.podspec文件里面添加

s.vendored_libraries  = 'BMCThirdModule/Classes/Third/BQSDeviceManager/*.{a}'

意思就是連接組件內(nèi)靜態(tài)庫,要把相對路徑拼接上汁胆,
假如有多個bundle的話梭姓,寫多行即可

對于podspec文件里面的代碼描述參考:http://guides.cocoapods.org/syntax/podspec.html#platform

三、在做第三庫組件時候由于依賴多個第三方庫嫩码,并且每個第三方庫都有自己的.h和.m以及.a文件誉尖,當(dāng)正常導(dǎo)入時候,coocapods會把這些文件一下子全拉倒夜歌文件夾里面铸题,導(dǎo)致比較亂铡恕,所以需要在podspec文件里面構(gòu)建subspec
格式:

#
# Be sure to run `pod lib lint BMCThirdModule.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
#

Pod::Spec.new do |s|
  s.name             = 'BMCThirdModule'
  s.version          = '0.1.0'
  s.summary          = '集成了極光、猛犸丢间、白騎士探熔、同盾、talkingData烘挫、友盟分享'

# This description is used to generate tags and improve search results.
#   * Think: What does it do? Why did you write it? What is the focus?
#   * Try to keep it short, snappy and to the point.
#   * Write the description between the DESC delimiters below.
#   * Finally, don't worry about the indent, CocoaPods strips it!

  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC

  s.homepage         = 'http://172.16.1.161/zhaojingjing/BMCThirdModule'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'zj504225418' => '504225418@qq.com' }
  s.source           = { :git => 'http://172.16.1.161/zhaojingjing/BMCThirdModule.git', :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.ios.deployment_target = '8.0'


  
  # s.resource_bundles = {
  #   'BMCThirdModule' => ['BMCThirdModule/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
s.dependency 'BMCModule'
s.dependency 'JPush'
s.dependency 'UMCCommon'
s.dependency 'UMCSecurityPlugins'
# U-Share SDK UI模塊(分享面板诀艰,建議添加)
s.dependency 'UMCShare/UI'
# 集成微信(精簡版0.2M)
#s.dependency 'UMCShare/Social/ReducedWeChat'
# 集成微信(完整版14.4M)
s.dependency 'UMCShare/Social/WeChat'
# 集成QQ/QZone/TIM(精簡版0.5M)
#s.dependency 'UMCShare/Social/ReducedQQ'
# 集成QQ/QZone/TIM(完整版7.6M)
s.dependency 'UMCShare/Social/QQ'

#s.source_files = 'BMCThirdModule/Classes/**/*'
s.source_files = 'BMCThirdModule/Classes/*.{h,m}'

s.subspec 'bqs' do |bqs|
    bqs.source_files = 'BMCThirdModule/Classes/Third/BQSDeviceManager/**/*'
    bqs.vendored_libraries  = 'BMCThirdModule/Classes/Third/BQSDeviceManager/*.{a}'
end

s.subspec 'maxent' do |maxent|
    maxent.source_files = 'BMCThirdModule/Classes/Third/maxent/2.6.2/**/*'
    maxent.vendored_libraries  = 'BMCThirdModule/Classes/Third/maxent/2.6.2/*.{a}'
end

s.subspec 'TongDun' do |td|
    td.source_files = 'BMCThirdModule/Classes/Third/TongDun/**/*'
    td.vendored_libraries  = 'BMCThirdModule/Classes/Third/TongDun/*.{a}'
end

s.subspec 'TalkingData' do |tk|
    tk.source_files = 'BMCThirdModule/Classes/Third/TalkingData/**/*'
    tk.vendored_libraries  = 'BMCThirdModule/Classes/Third/TalkingData/*.{a}'
end


#s.vendored_libraries  = 'BMCThirdModule/Classes/Third/maxent/2.6.2/*.{a}','BMCThirdModule/Classes/Third/TongDun/*.{a}','BMCThirdModule/Classes/Third/BQSDeviceManager/*.{a}','BMCThirdModule/Classes/Third/TalkingData/*.{a}'

end

end

開始看教程s.source_files應(yīng)該寫成public_header_files ,但是測試一直無效饮六,改成source_files就好了

假如在子文件夾里面依然要細(xì)分的話涡驮,那么可以在s.subspec里面再加一個s.subspec,例如:

s.source_files = 'BMCThirdModule/Classes/*.{h,m}'

    s.subspec 'AFNetworking' do |afn|

        afn.subspec 'AFNetworking' do |net|

        net.source_files = 'BMCHttpClient/Classes/AFNetworking/AFNetworking/**/*'
        end

        afn.subspec 'UIKit+AFNetworking' do |kit|

        kit.source_files = 'BMCHttpClient/Classes/AFNetworking/UIKit+AFNetworking/**/*'
        end
    end
end

這樣一層一層的套即可

四喜滨、有時候組件傳到git以后,然后在項目中g(shù)it可能會導(dǎo)致pod不下來撤防,解決方法就是在~/.cocoapods/repos/目錄里面找到對了私有庫源虽风,把庫源刪除,然后再次pod install即可寄月。

五辜膝、上傳podspec文件時候要確保文件里的內(nèi)容已修改,特別是summary和homepage以及source漾肮,假如不修改會導(dǎo)致上傳不成功問題

六厂抖、有時候私有庫內(nèi)容改了,但是版本號沒改克懊,然后pod下來的依然是老的庫忱辅,原因是pod其實是上次pod下來的緩存七蜘,解決辦法是:
第一步、進(jìn)入到~/Library/Caches/CocoaPods/目錄下找到對應(yīng)的庫墙懂,把對應(yīng)的庫刪除掉橡卤,
第二步、pod cache clean 你的庫名字
第三步损搬、刪除Pods/你的庫名字,刪除Podfile.lock
第四步碧库、pod update --verbose
就可以了

七、集成第三庫組件時候由于有個第三方SDK用到了C++巧勤,所以該組件對外接口類有一個是.mm文件嵌灰,但是項目中也有.mm,然后將該組件集成到項目中就報'@import' when C++ modules are disabled, consider using -fmodules and -fcxx-modules颅悉,解決辦法是將項目中所有的.mm文件全部改成.m即可沽瞭!

八、組件中如果依賴蘋果系統(tǒng)的動態(tài)庫的話签舞,早podspec文件中加上下面內(nèi)容秕脓,也就是將系統(tǒng)動態(tài)庫的名字前面的lib和后面的后綴去掉即可

 s.libraries = 'c++'

九、做組件時候儒搭,想封裝第三方庫吠架,但是第三方庫不支持模擬器,導(dǎo)致cocoapods一直校驗不過搂鲫,解決方法就是
http://www.reibang.com/p/88180b4d2ab7

十傍药,假如framework中用到了c++,那么只要引入了這個framework的類后面都要改成.mm

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市魂仍,隨后出現(xiàn)的幾起案子拐辽,更是在濱河造成了極大的恐慌,老刑警劉巖擦酌,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俱诸,死亡現(xiàn)場離奇詭異,居然都是意外死亡赊舶,警方通過查閱死者的電腦和手機(jī)睁搭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笼平,“玉大人园骆,你說我怎么就攤上這事≡⒌鳎” “怎么了锌唾?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長夺英。 經(jīng)常有香客問我晌涕,道長负拟,這世上最難降的妖魔是什么亮元? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任恼琼,我火速辦了婚禮孔祸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘驯耻。我一直安慰自己亲族,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布可缚。 她就那樣靜靜地躺著霎迫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帘靡。 梳的紋絲不亂的頭發(fā)上知给,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音描姚,去河邊找鬼涩赢。 笑死,一個胖子當(dāng)著我的面吹牛轩勘,可吹牛的內(nèi)容都是我干的筒扒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼绊寻,長吁一口氣:“原來是場噩夢啊……” “哼花墩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起澄步,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤冰蘑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后村缸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祠肥,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年梯皿,在試婚紗的時候發(fā)現(xiàn)自己被綠了搪柑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡索烹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出弱睦,到底是詐尸還是另有隱情百姓,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布况木,位于F島的核電站垒拢,受9級特大地震影響旬迹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜求类,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一奔垦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尸疆,春花似錦椿猎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至症革,卻和暖如春筐咧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背噪矛。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工量蕊, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人艇挨。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓残炮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親雷袋。 傳聞我的和親對象是個殘疾皇子吉殃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_x閱讀 15,968評論 3 119
  • 項目組件化楷怒、平臺化是技術(shù)公司的共同目標(biāo)蛋勺,越來越多的技術(shù)公司推崇使用pod管理第三方庫以及私有組件,一方面使項目架構(gòu)...
    swu_luo閱讀 21,485評論 0 39
  • 即使窗外天氣并不冷鸠删,可還是喜歡裹著厚厚的大衣把自己整個身軀包起來抱完,因為那樣我覺得自己很暖很暖,我喜歡很暖很暖的感...
    依然期待的魚閱讀 215評論 0 0
  • 從山城大叻一路盤山向下刃泡,沿海邊向南大約不到200公里巧娱,就到了美奈。美奈屬于潘切市的一個小漁村烘贴,以制作魚露出名禁添,至今...
    呆呆代代閱讀 402評論 0 0
  • 聽風(fēng)喃喃,走得倉倉 秋水涼涼桨踪,過得晃晃 你把頭仰 沒有蔚藍(lán)遠(yuǎn)方 木落香殘素霜 銀子滿地蝶舞忙 你把心敞 猶如春日明...
    冥王星的秋天閱讀 532評論 7 6