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

寫在前面

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

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

準(zhǔn)備工作

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

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

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

主工程

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

工程目錄

編寫Podfile

注意! 下面就要開始編寫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的庫
end


target 'TestMainProject' do
    project 'TestMainProject'
    commpod
    pod 'IQKeyboardManagerSwift' #使用iQ鍵盤
    pod 'SDWebImage'           #圖片離線緩存類
    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í)候再打開workspace文件就會(huì)看到

workspace

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

測(cè)試

測(cè)試一

下面就來測(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)
    }
}

接下來在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ì)同步過去,也包含一些服務(wù)器相關(guān)的內(nèi)容,

小胖博客

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容