使用CocoaPods打包靜態(tài)庫制作SDK步驟

制作SDK,使用.a或.framwork的方式封裝SDK,然后放在github上,以及需要支持cocoapods方式.本文參考Bryce Zhang大神的文章來講一下我的打包制作過程,以及遇到的坑,希望對正在進行SDK開發(fā)的新手一些幫助.大致先講下流程,首先創(chuàng)建一個本地的庫用于開發(fā),然后打包.framwork,重新制作一個庫用于上傳到github上去.當然如果是個人的庫,我還是不建議大家打包靜態(tài)庫,畢竟開源才是程序員精神.

首先需要講下為什么需要使用CocoaPods打包靜態(tài)庫,因為cocoapods支持一鍵打包(夸張了_),也支持解決在開發(fā)SDK過程中使用第三方庫沖突的問題,不用再像傳統(tǒng)制作方式一樣修改所有第三方庫的方法名了.

1.使用pod創(chuàng)建開發(fā)庫

執(zhí)行命令 pod lib create MAPalyer.再此期間需要確認下面5個問題.

   What language do you want to use?? [ Swift / ObjC ]
   ObjC
   Would you like to include a demo application with your library? [ Yes / No ]
   yes
   Which testing frameworks will you use? [ Specta / Kiwi / None ]
   Kiwi
   Would you like to do view based testing? [ Yes / No ]
   No
   What is your class prefix?// 類的前綴
   MA

此時,就會創(chuàng)建一個pod的標準模板工程.

創(chuàng)建pod庫
3.添加開發(fā)代碼

打開MaPlayer/Example/MAPlayer.xcworkspace,在Pods/Development Pods/MAPlayer下添加SDK代碼.并提交git管理.

git add.
git commit -m "First commit"
git tag 1.0
4.打開MAPlayer.podspec文件查看類庫配置信息.
    Pod::Spec.new do |s|
    s.name             = 'MAPlayer' // 庫的名稱
    s.version          = '1.0'  // 庫的版本號
    s.summary          = 'A short description of MAPlayer.' // 庫的簡單描述
    s.description      = <<-DESC // 庫的詳細描述
    TODO: Add long description of the pod here.
    DESC

    s.homepage         = 'https://github.com/<GITHUB_USERNAME>/MAPlayer' // github上的地址,這個可以不管,因為咱們用的是本地的

    # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' // 這個我沒有使用
    s.license          = { :type => 'MIT', :file => 'LICENSE' } // MIT協(xié)議,已經(jīng)創(chuàng)建好了,不用管
    s.author           = { 'fengyunjue' => 'ma772528138@qq.com' } // 開發(fā)者信息
    // 庫的來源,可以使用git,bitbucket或本地s.source           =  { :git => 'MAPlayer/MAPlayer.git', :tag => s.version.to_s } // 本地來源的寫法
   s.source          = { :git => 'https://github.com/ma772528138@qq.com/MAPlayer.git', :tag => s.version.to_s } // git來源的寫法
    # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

    s.ios.deployment_target = '8.0' // 庫的版本

    s.source_files = 'MAPlayer/Classes/**/*' // 庫的所有有文件
   // 這個是庫的圖片集合,他會將所有的圖片打包成bundle使用,  #標示等同于xcode里的//功能
    # s.resource_bundles = { 
    // 這里是設(shè)置圖片bundle名稱為"MAPlayer.bundle" , '*.png'是匹配所有的png格式的圖片,你也可以使用''MAPlayer/Assets/*',
    匹配Assets下的所有文件,也可以單獨設(shè)置圖片[..../1.png,..../2.jpg]
    #   'MAPlayer' => ['MAPlayer/Assets/*.png'] 
    # 'image' => ['..../*']     // 這樣相當于有設(shè)置了一個bundle
    # }
    // 注意:制作framwork,公開的頭文件里如果import了其他文件,比如a.h里包含了b.h,則b.h也必須加入到public_header_files里
    # s.public_header_files = 'Pod/Classes/**/*.h' 
    // 依賴項不僅要包含你自己類庫的依賴,還要包括所有第三方類庫的依賴,例如FMDB,就需要依賴sqlite3
    #s.frameworks = 'UIKit', 'MapKit'
    #s.libraries = 'sqlite3'
    // 支持依賴第三方靜態(tài)庫
    #s.vendored_library    = '**/libopencore-amrnb.a'
    // 依賴的第三方庫
    #s.dependency 'AFNetworking', '~> 2.3'
    #s.dependency 'FMDB'
    end

podspec文件的詳細說明可以看Podspec Syntax Reference.

  • s.public_header_files很重要,需要將你要公開的頭文件放進去,使用相對路徑即可.如果公開的頭文件里如果import了其他文件,比如a.h里包含了b.h,則b.h也必須加入到public_header_files里. 可以分開寫,如'Pod/Classes/Test/*.h','Pod/Classes/Test1/Test1.h'.
  • 修改SDK的版本號與你git的tag一致
5.使用CocoaPods Packager打包靜態(tài)庫

1.使用sudo gem install cocoapods-packager安裝CocoaPods Packager,查看cocoapods-packager.

安裝CocoaPods Packager

2.使用pod lib lint MAPlayer.podspec --no-clean --verbose --allow-warnings檢測創(chuàng)建的庫是否符合pod的要求.符合要求會提示MAPlayer passed validation.
檢測pod成功

3.打包靜態(tài)庫
使用pod package MAPlayer.podspec --force打包靜態(tài)庫.
此時會提示下圖的錯誤.
Jietu20171115-121845.png

這是因為沒有找到這個source.你可以將該項目提交到GitHub上管理.
需要處理MAPlayer.podspec里的source.

// git地址修改為正確的GitHub地址
s.source = { :git => 'https://github.com/ma772528138@qq.com/MAPlayer.git', :tag => s.version.to_s }

或者將地址修改成本地的git

// 注意,這里只能使用絕對地址
s.source = { :git => '/Users/admin/Documents/WorkSpace/MAPlayer', :tag => s.version.to_s }

此時會在MAPlayer/生成MAPlayer-1.0.靜態(tài)庫制作完成.

注意事項
  • 如果SDK的1.0版本制作完成后發(fā)現(xiàn)需要修改代碼后重新制作1.0,需要先清除本地緩存的版本pod cache clean MAPlayer,否則,重新打包的還是舊的代碼.
  • CocoaPods Packager解決第三方庫沖突的方式是通過給所有第三方庫的方法添加前綴的方式處理,如MAPlayer添加的是步驟一里設(shè)置的MA前綴.注意盡量不要添加含有Category的開源庫,因為CocoaPods Packager沒有修改Category的前綴,雖然不會造成沖突,但會覆蓋類的相同方法.
  • 如果靜態(tài)庫中含有Category,在使用靜態(tài)庫時需要在Build Seings/Other Linker Flags里添加-ObjC,否則編譯會報錯.
  • pod package MAPlayer.podspec --force打包成.framework靜態(tài)庫,--fore指強制覆蓋已經(jīng)制作的靜態(tài)庫
    pod package MAPlayer.podspec --library --force打包.a靜態(tài)庫.需要注意的是,打包.a只生成了.a文件,頭文件需要自己添加,這應(yīng)該算CocoaPods Packager的一個bug.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蕉陋,一起剝皮案震驚了整個濱河市惭笑,隨后出現(xiàn)的幾起案子骤铃,更是在濱河造成了極大的恐慌,老刑警劉巖听皿,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沪斟,死亡現(xiàn)場離奇詭異悔耘,居然都是意外死亡,警方通過查閱死者的電腦和手機蔗崎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門酵幕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缓苛,你說我怎么就攤上這事芳撒。” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵笔刹,是天一觀的道長芥备。 經(jīng)常有香客問我,道長徘熔,這世上最難降的妖魔是什么门躯? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮酷师,結(jié)果婚禮上讶凉,老公的妹妹穿的比我還像新娘。我一直安慰自己山孔,他們只是感情好懂讯,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著台颠,像睡著了一般褐望。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上串前,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天瘫里,我揣著相機與錄音,去河邊找鬼荡碾。 笑死谨读,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的坛吁。 我是一名探鬼主播劳殖,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拨脉!你這毒婦竟也來了哆姻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤玫膀,失蹤者是張志新(化名)和其女友劉穎矛缨,沒想到半個月后,有當?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
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留却邓,地道東北人菜循。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像申尤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子衙耕,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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