iOS库的介绍
动态库和静态库
- 动态库在运行时实时部署,静态库必须在编译时连接到代码
- 动态库加载到内存后可以重复使用,静态库每次import都引入一次
- 自定义的动态库只能部署在 iOS8 以上系统
- .a(静态库,只有代码,没有任何资源,图片xib文件等)
- .dylib (动态库,只有代码,没有任何资源)
- .framework 可以包含资源,分为两种:dynamic 和 static
- use_frameworks! 生成 dynamic framework
制作库
iOS 体系结构
- armv7: iPhone 4/4s
- armv7s:iPhone 5 和 iPhone 5C
- arm64:iPhone 5S+
- x86-64、i386:模拟器
- lipo –info – 查看库支持的体系结构
- lipo -create -output - 将模拟器和真机的库合成一个库
- 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
使用库
- 手动导入:Linked Frameworks and Libraries 、 Embedded Binaries
- 使用 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基础知识 — 使用步骤
- 创建或打开 Xcode 项目
- 命令行 cd 到项目目录 (拖曳文件夹到cd后面就是路径)
- 使用 pod init 创建 Podfile
- pod search Alamofire
- 修改 Podfile
- pod install
- 打开 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
- 第一次 pod install 时生成记录每个 Pod 版本
- Podfile.lock 锁定当前各依赖库的版本之后 pod install 不会更改版本pod update 才会改版本
- 多人协作时防止第三方库升级时造成版本不一致
pod install 和 pod update
- pod install: 每次安装Podfile.lock 中锁定的版本的pods 及 新的pods
- pod update: 会将指定的pod更新到最新版本或 podfile 中指定版本
- 使用 pod update podName 来更新指定 pod 的版本