利用Swift Package Manager制作第三方库

796 阅读2分钟

1.通过编写package文件为自己添加依赖库

其实现阶段,如果是纯Swift开发的项目,用Swift package manager来制作三方库可能是比用cocoapods更省心的,至少Google,Facebook的三方库都已经给出了这种继承方式,使用起来比cocoapods简单很多,在利用这种方式制作第三方库的时候,可以用最简单的方式来对需要依赖的第三方库进行引用.


    defaultLocalization: "en",

    platforms: [.iOS("10.0"), .macOS("10.10"), .tvOS("9.0"), .watchOS("6.2")],

    products: [

        .library(

            name: "项目名称",

            targets: ["项目名称"])

    ],

    dependencies: [

        //            name: "Alamofire",

        .package(url: "https://github.com/Alamofire/Alamofire.git",.exact("5.4.3")),

        //            name: "SwiftyJSON",

        .package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git",.exact("5.0.1")),

        //            name: "SwiftyStoreKit",

        .package(url: "https://github.com/bizz84/SwiftyStoreKit.git",.exact("0.16.3")),

        //            name: "SnapKit",

        .package(url: "https://github.com/SnapKit/SnapKit.git",.exact("5.0.1")),

        //            name: "MBProgressHUD",

        .package(url: "https://github.com/jdg/MBProgressHUD.git",.exact("1.2.0")),

        //            name: "adjust",

        .package(url: "https://github.com/adjust/ios_sdk",.exact("4.29.7")),

        //            name: "facebook"

        .package(url: "https://github.com/facebook/facebook-ios-sdk",.exact("11.2.1")),

        //            name: "firebase"

        .package(url: "https://github.com/firebase/firebase-ios-sdk",.exact("7.11.0")),//7.4.0

        //            name: "IQKeyboardManager"

        .package(url: "https://github.com/hackiftekhar/IQKeyboardManager.git",.exact("6.5.0")),

    ],

image.png

他并不会占用SDK项目本身的大小,而是在别人集成你的时候,直接安装到他的项目里

2.使用更Swift的方式设计对外接口(局限性高)

///业务功能

public protocol BusinessProtocol {
    //支付

    func sdkPaySuccess(cpOrderSn: String)

    func sdkPayFaild(failString: String)

}
extension BusinessProtocol{
/// 苹果支付

    /// - Parameter orderInfo: 订单信息

    public func ApplePay(controller:UIViewController,orderInfo: [String:String]){

        if LocalCacheDataInfo.token == ""{

//            Mediator.default.showMessage(msg: pleaseLoginString)

            NSLog("SDK阻拦----------------\(pleaseLoginString)")

            return

        }

        Mediator.default.showLoading()

        ApplePayManager.purchaseProduct(withController: controller, orderInfo: orderInfo) { cpOrderSn in

            Mediator.default.hideHUD()

            sdkPaySuccess(cpOrderSn: cpOrderSn)

        } failure: { failureString in

            Mediator.default.hideHUD()

            sdkPayFaild(failString: failureString)

        }

    }
    }

这完全是在使用最适合Swift的方式来设计对外接口,但可惜的是这种方法其实并不适合现在使用,因为大部分的老OC项目无法直接通过协议的方式来调用方法.如果真的这么写了,在OC项目当中调用的时候需要专门单独创建一个Swift文件,先把这些对外的接口转一遍,OC项目才能继续混编使用,毕竟extension这个东西在OC当中是没有的,你也无法直接在OC文件中去调用协议方法,当然你会说我可以在协议前加一个Objc不就好了,那如果是这样,我更建议你再写对外接口时直接使用NSObject类的方式去写,这样不管使用你的项目是OC项目也好,Swift项目也好都不会受影响了.

public class NormalSPM: NSObject {}