忍者刘米米

使用CocoaPods管理iOS库

iOS库的介绍

动态库和静态库

  1. 动态库在运行时实时部署,静态库必须在编译时连接到代码
  2. 动态库加载到内存后可以重复使用,静态库每次import都引入一次
  3. 自定义的动态库只能部署在 iOS8 以上系统
  4. .a(静态库,只有代码,没有任何资源,图片xib文件等)
  5. .dylib (动态库,只有代码,没有任何资源)
  6. .framework 可以包含资源,分为两种:dynamic 和 static
  7. use_frameworks! 生成 dynamic framework

制作库

iOS 体系结构

  1. armv7: iPhone 4/4s
  2. armv7s:iPhone 5 和 iPhone 5C
  3. arm64:iPhone 5S+
  4. x86-64、i386:模拟器
  5. lipo –info – 查看库支持的体系结构
  6. lipo -create -output - 将模拟器和真机的库合成一个库
  7. Build Active Architecture Only (Debug,Release) – 只编译当前设备体系结构的包

设定系统为8.0以上才能部署自定义动态库

创建一个库

MyFramework.swift

import UIKit

public class MyFramework: NSObject {

static let bundle = NSBundle(forClass: MyFramework.self)

static let MyFrameworkStr = "MyFramework"

public static func openVCFromStoryboard() {
    let vc  = UIStoryboard(name: MyFrameworkStr, bundle: bundle).instantiateViewControllerWithIdentifier("MyFrameworkViewController")
    UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(vc, animated: true, completion: nil)
}

public static func openVCFromXib() {
    let vc = MyFrameworkViewController(nibName: MyFrameworkStr, bundle: bundle)
    UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(vc, animated: true, completion: nil)
}

public static func loadImage() -> UIImage{
    let image = UIImage(named: MyFrameworkStr + ".png", inBundle: bundle, compatibleWithTraitCollection: nil)
    return image!
}


}

分别在真机和模拟下运行,Product下生成,在show in finder中打开

找到xxx.framework目录下的MyFramework文件,如图所示

合并真机和模拟器的动态库。将其拖入到“lipo -create”后(路径)

合并库中的module也要模拟器module + 真机module

使用库

  1. 手动导入:Linked Frameworks and Libraries 、 Embedded Binaries
  2. 使用 pod:use_frameworks!

利用 dynamic 库实时部署

let libPath = "\(NSHomeDirectory())/Documents/MyFramework.framework/MyFramework"
if let bundle = NSBundle(path: libPath) {
do {
    try bundle.loadAndReturnError()
    if let myFramework = NSClassFromString("MyFramework") as? MyFramework.Type{
        myFramework.init().whereIsFrom()
    }
} catch {
    print("动态库加载失败")
}
}

Cocoapods

安装

在Terminal输入以下安装命令

$ sudo gem install cocoapods

出现以下报错

You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

再Terminal输入以下命令

$ sudo gem update

还是出现以下报错

Operation not permitted - /usr/bin/xcodeproj

参考官方文档Operation not permitted输入以下命令,成功

$ sudo gem install -n /usr/local/bin cocoapods

CocoaPods基础知识 — 使用步骤

  1. 创建或打开 Xcode 项目
  2. 命令行 cd 到项目目录 (拖曳文件夹到cd后面就是路径)
  3. 使用 pod init 创建 Podfile
  4. pod search Alamofire
  5. 修改 Podfile
  6. pod install
  7. 打开 pod 创建的 xcworkspace

CocoaPods基础知识 — Podfile

platform : ios '9.0'
use_frameworks! (swift下必须使用)
inhibit_all_warnings! (隐藏所有报错信息)
target  'PodTest' do
    pod 'AFNetworking',  '~> 3.0'
    pod 'FBSDKCoreKit', '~> 4.9'
end

Podfile.lock

  1. 第一次 pod install 时生成记录每个 Pod 版本
  2. Podfile.lock 锁定当前各依赖库的版本之后 pod install 不会更改版本pod update 才会改版本
  3. 多人协作时防止第三方库升级时造成版本不一致

pod install 和 pod update

  1. pod install: 每次安装Podfile.lock 中锁定的版本的pods 及 新的pods
  2. pod update: 会将指定的pod更新到最新版本或 podfile 中指定版本
  3. 使用 pod update podName 来更新指定 pod 的版本