iOS開(kāi)發(fā) 使用Pods管理調(diào)試個(gè)人Framework

寫(xiě)在前面

最近換了新公司,又是一個(gè)巨大的挑戰(zhàn)
一是海外項(xiàng)目,二是協(xié)同方库,三是使用Swift
雖說(shuō)Swift4.0已經(jīng)很新了,但ABI的穩(wěn)定進(jìn)程還是放在了5.0障斋,加上之前幾乎沒(méi)怎么用過(guò)Swift做過(guò)什么大型項(xiàng)目纵潦,都是小打小鬧的一些東西。所以本文都是使用的Swift
由于項(xiàng)目還要與國(guó)外的小伙伴合作垃环,一些private的東西公司也不打算直接給他們邀层,這不,就讓我們做成library的形式提供給他們晴裹,對(duì)于我們來(lái)說(shuō)也就是Framework了被济。
很快這個(gè)任務(wù)就落到我頭上了,前期踩坑基本都是參照這篇比較新的文章
手把手教你高效快捷的創(chuàng)建Swift Framework 這篇已經(jīng)幾乎把該用到的內(nèi)容都講了涧团。

我這邊就主要講一講Framework的調(diào)試,包含第三方庫(kù)的集成,目前使用的還是pod经磅,
carthage就暫時(shí)不說(shuō)了泌绣,理論上比pod要更方便使用

準(zhǔn)備工作

新建一個(gè)主工程,新建一個(gè)Framework工程

正常情況下预厌,我們一般會(huì)對(duì)主工程進(jìn)行pod install安裝一些主工程需要的第三方庫(kù)阿迈,制作Framework的過(guò)程中發(fā)現(xiàn)有些地方其實(shí)也是需要使用這些第三方,pod已經(jīng)生成了workspace轧叽,這就需要編寫(xiě)Podfile苗沧,增加對(duì)Framework工程target的支持

打開(kāi)主工程的workspace 這時(shí)候我們的工程是這樣的

主工程

我們將Framework工程拷貝到主工程文件目錄中

工程目錄

編寫(xiě)Podfile

注意! 下面就要開(kāi)始編寫(xiě)Podfile文件了

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

workspace 'TestMainProject.xcworkspace'              #指定workspace
inhibit_all_warnings!        #忽略警告
use_frameworks!

def commpod                     #宏定義幾個(gè)target都要用的的pod
    pod 'MJRefresh'            #下拉刷新
    pod 'Alamofire', '~> 4.0'  #網(wǎng)絡(luò)請(qǐng)求
    pod 'SnapKit', '~> 4.0.0'   #autolayout
    pod 'ObjectMapper', '~> 3.1'   #json 轉(zhuǎn)模型
    pod 'SVProgressHUD', '~> 2.0.3'
    pod 'BlocksKit'            #將delegate轉(zhuǎn)換為block的庫(kù)
end


target 'TestMainProject' do
    project 'TestMainProject'
    commpod
    pod 'IQKeyboardManagerSwift' #使用iQ鍵盤(pán)
    pod 'SDWebImage'           #圖片離線緩存類(lèi)
    pod 'AWSS3', '~> 2.6.0'    #AWSS3上傳下載
    pod 'IQActionSheetPickerView', '~>2.0.0'  #picker選擇器
end


target 'TestMainSDK' do
    project 'TestMainSDK/TestMainSDK'
    commpod
end

修改好podfile后直接執(zhí)行pod install

這時(shí)候再打開(kāi)workspace文件就會(huì)看到

workspace

至此SDK已經(jīng)加入pods的管理中

測(cè)試

測(cè)試一

下面就來(lái)測(cè)試下

再framework工程中加入測(cè)試代碼

open class TestMainSDK {

    //singleton
    open static let shared = TestMainSDK()

    open static let testParam = 999

    open func testFun() {
        print("from sdk testFun()")
    }
}

先選擇framework的scheme 編譯一下

build SDK

主工程中 import TestMainSDK

加入測(cè)試代碼

import UIKit
import TestMainSDK

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        TestMainSDK.shared.testFun()
        // Do any additional setup after loading the view, typically from a nib.
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

scheme選擇主工程炭晒,跑一下

test

大功告成~

測(cè)試二

我們現(xiàn)在要做的是:

  • 主程序調(diào)用SDK獲得一個(gè)vc 并 present
  • 該vc中有一個(gè)按鈕待逞,點(diǎn)擊事件的具體實(shí)現(xiàn)由主程序?qū)崿F(xiàn)dismiss

在SDK中創(chuàng)建一個(gè)TestViewController 引入SnapKit BlocksKit

加入如下代碼

import UIKit
import BlocksKit
import SnapKit

public typealias ActionHandle = (_ vc : UIViewController, _ btn: UIButton)->()

open class TestViewController: UIViewController {

    var testBtnActionHandel : ActionHandle?

    lazy var testBtn : UIButton = {
        let btn = UIButton.init()
        btn.setTitle("sdkTestBtn", for: .normal)
        btn.backgroundColor = UIColor.red
        return btn
    }()


    override open func viewDidLoad() {
        super.viewDidLoad()
        setupStyle()
        // Do any additional setup after loading the view.
    }

    func setupStyle() {
        view.backgroundColor = UIColor.green
        view.addSubview(testBtn)
        testBtn.snp.makeConstraints{
            $0.center.equalToSuperview()
        }
        testBtn.bk_addEventHandler({ [weak self] (btn) in
            print("click sdk testBtn")
            guard let `self` = self else { return}
            if let handle = self.testBtnActionHandel {
                handle(self, btn as! UIButton)
            }
        }, for: .touchUpInside)
    }
}

接下來(lái)在SDK入口加入獲取vc的代碼

open func getSDKviewController(vcHandle: (TestViewController)->(),
                               actionHandle: ActionHandle?){
    let vc = TestViewController()
    vc.testBtnActionHandel = actionHandle
    vcHandle(vc)
}

編譯一下SDK

在主程序中調(diào)用SDK

override func viewDidLoad() {
    super.viewDidLoad()
    TestMainSDK.shared.testFun()

    let btn = UIButton.init()
    btn.backgroundColor = UIColor.black
    btn.setTitle("mainBtn", for: .normal)
    view.addSubview(btn)
    btn.snp.makeConstraints{$0.center.equalToSuperview()}

    btn.bk_addEventHandler({ (b) in
        TestMainSDK.shared.getSDKviewController(vcHandle: { (vc ) in
            self.present(vc, animated: true, completion: nil)
        }, actionHandle: { (vc , btn) in
            vc.dismiss(animated: true, completion: nil)
        })
    }, for: .touchUpInside)
}

選擇主程序 跑一下

看下效果

效果

后記

demo已上傳Github

跟盆友一起搞的小博客有興趣的可以看看,此文也會(huì)同步過(guò)去网严,也包含一些服務(wù)器相關(guān)的內(nèi)容识樱,

小胖博客

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市震束,隨后出現(xiàn)的幾起案子怜庸,更是在濱河造成了極大的恐慌,老刑警劉巖垢村,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件割疾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡嘉栓,警方通過(guò)查閱死者的電腦和手機(jī)宏榕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)驰凛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人担扑,你說(shuō)我怎么就攤上這事恰响。” “怎么了涌献?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵胚宦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我燕垃,道長(zhǎng)枢劝,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任卜壕,我火速辦了婚禮您旁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘轴捎。我一直安慰自己鹤盒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布侦副。 她就那樣靜靜地躺著侦锯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秦驯。 梳的紋絲不亂的頭發(fā)上尺碰,一...
    開(kāi)封第一講書(shū)人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音译隘,去河邊找鬼亲桥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛固耘,可吹牛的內(nèi)容都是我干的题篷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼玻驻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼悼凑!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起璧瞬,我...
    開(kāi)封第一講書(shū)人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤户辫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后嗤锉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體渔欢,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年瘟忱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奥额。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苫幢。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖垫挨,靈堂內(nèi)的尸體忽然破棺而出韩肝,到底是詐尸還是另有隱情,我是刑警寧澤九榔,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布哀峻,位于F島的核電站,受9級(jí)特大地震影響哲泊,放射性物質(zhì)發(fā)生泄漏剩蟀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一切威、第九天 我趴在偏房一處隱蔽的房頂上張望育特。 院中可真熱鬧,春花似錦先朦、人聲如沸缰冤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锋谐。三九已至,卻和暖如春截酷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乾戏。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工迂苛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鼓择。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓三幻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親呐能。 傳聞我的和親對(duì)象是個(gè)殘疾皇子念搬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件摆出、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,107評(píng)論 4 62
  • 3月份朗徊,我開(kāi)始了一個(gè)鋼筆楷書(shū)的課程,至今剛剛好半個(gè)月偎漫,交了4次作業(yè)爷恳。開(kāi)啟這個(gè)課程的目的,一是確實(shí)想自己練練字象踊,今后...
    wlhuiyi閱讀 206評(píng)論 0 1
  • 夏天 如果這條街沒(méi)有鞋匠 我就打赤腳 站到太陽(yáng)底下看太陽(yáng) 我想到在白天出生的孩子 一定是出于故意 你來(lái)人間一趟 你...
    _貓閱讀 311評(píng)論 0 0
  • 原文地址:http://www.galloway.me.uk/2013/05/a-look-inside-bloc...
    tongxyj閱讀 4,593評(píng)論 2 7
  • 原型模式(Prototype),用原型實(shí)例制定創(chuàng)建對(duì)象的種類(lèi)栈虚,并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象袖外。原型模式其實(shí)就是從...
    bobcorbett閱讀 187評(píng)論 0 0