美文网首页
使用CocoaPods开发Framework

使用CocoaPods开发Framework

作者: cheer_harry | 来源:发表于2018-01-29 18:04 被阅读0次

    前言

    1.什么是CocoaPods

    当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他类库,“子子孙孙无穷尽也”,这也许是比较特殊的情况。总之小编的意思就是,手动一个个去下载所需类库十分麻烦。另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载新版本,重新加入到项目中,十分麻烦。如果能有什么工具能解决这些恼人的问题,那将“善莫大焉”。所以,你需要 CocoaPods。

    CocoaPods应该是iOS最常用最有名的类库管理工具了,上述两个烦人的问题,通过cocoaPods,只需要一行命令就可以完全解决,当然前提是你必须正确设置它。重要的是,绝大部分有名的开源类库,都支持CocoaPods。所以,作为iOS程序员的我们,掌握CocoaPods的使用是必不可少的基本技能了。

    2.CocoaPods的原理

    CocoaPods的原理是将所有的依赖库都放到另一个名为Pods的项目中,然后让主项目依赖Pods项目,这样,源码管理工作都从主项目移到了Pods项目中。Pods项目最终会编译成一个名为libPods.a的文件,主项目只需要依赖这个.a文件即可。

    3.CocoaPods安装和使用可以参考下面链接

    https://www.cnblogs.com/YangFuShun/p/7976811.html

    4.framework制作

    4.1创建一个workspace项目:

    ①在桌面创建文件夹ZCBLSDK

    ②打开Xcode,创建一个workspace,Xcode--->File--->New--->Workspace

    ③把创建好的workspace放在桌面上文件夹ZCBLSDK中

    4.2创建一个project项目:

    ①打开ZCBLSDK.workspace文件,Xcode--->File--->New--->Project--->iOS--->Cocoa Touch Framework--->Next--->Product Name (ZCBLSDK)--->Next---Add to和Group 选择ZCBLSDK--->Create

    4.3创建一个测试Demo项目:

    ①打开ZCBLSDK.workspace文件,Xcode--->File--->New--->Project--->iOS--->Single View Application--->Next--->Product Name (ZCBLSDKDemo)--->Next---Add to和Group 选择ZCBLSDK--->Create

    4.4创建一个测试类:

    ①在ZCBLSDK.project下创建一个ZCBLSDKTest类,继承于NSObject,打印一条日志信息,在ZCBLSDKTest的.h文件中声明一个方法+(void)test;在ZCBLSDKTest的.m文件中实现+(void)test{NSLog(@"Hello Wold !!!");}

    ②设置Build Setting参数,将Build Active Architecture only设置为NO

    ③根据SDK需要支持的ARM处理器配置Architecture

    ④设置Headers,将要公开的头文件拖到Public下,要隐藏的放到Private或者Project下,隐藏的头文件不能被引用,选择ZCBLSDK--->Build Phases--->Headers

    ⑤在ZCBLSDK.h中将所有要公开的.h引入#import<ZCBLSDK/ZCBLSDKTest.h>

    4.5导出.framwork文件:这里提供两种导出方式,一种手动导出,一种脚本导出

    ①手动导出:选择ZCBLSDK.project--->Edit Scheme--->Run--->Build Configuration--->Release--->然后分别用真机和模拟器进行编译,编译成功后选择Products下面的ZCBLSDK.framework然后右键Show in Finder,拷贝Release-iphoneos和Release-iphonesimulator文件下放在桌面新建文件夹ZCBLFramework(自己命名)文件下,然后打开终端命令合并库文件:cd ZCBLFramework下面,执行lipo -create Release-iphoneos/ZCBLSDK.framework/ZCBLSDK Release-iphonesimulator/ZCBLSDK.framework/ZCBLSDK -output ZCBLSDK,查看framework支持的架构:lipo -info ZCBLSDK

    补充:

    arm7: 在最老的支持iOS7的设备上使用

    arm7s: 在iPhone5和5C上使用

    arm64: 运行于iPhone5S的64位 ARM 处理器 上

    i386: 32位模拟器上使用

    x86_64: 64为模拟器上使用

    注意: 高位兼容地位(32位兼容16位),arm7版本可以在arm7s上运行

    需要在对应架构设备上运行,才能生成对应架构的包

    ②脚本导出:创建一个Aggregare,Xcode--->Editor--->Add Target--->Cross-platform--->Aggregate--->Next--->Product Name(ZCBLSDKAG)--->finish--->嵌入脚本,选中刚创建的Aggregate,然后选中右侧的Build Phases,点击左边的+号,选择New Run Script Phases,把下面的脚本复制进去:

    # Sets the target folders and the final framework product.

    #如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME

    #例如: FMK_NAME ="MyFramework"

    FMK_NAME=${PROJECT_NAME}

    # Install dir will be the final output to the framework.

    # The following line create it in the root

    folder of the current project.

    INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework

    # Working dir will be deleted after the framework creation.

    WRK_DIR=build

    DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework

    SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework

    # -configuration ${CONFIGURATION}

    # Clean and Building both architectures.

    xcodebuild -configuration"Release"-target"${FMK_NAME}"-sdk iphoneos clean build

    xcodebuild -configuration"Release"-target"${FMK_NAME}"-sdk iphonesimulator clean build

    # Cleaning the oldest.

    if[ -d"${INSTALL_DIR}"]

    then

    rm -rf"${INSTALL_DIR}"

    fi

    mkdir -p"${INSTALL_DIR}"

    cp -R"${DEVICE_DIR}/""${INSTALL_DIR}/"

    # Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.

    lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" - output"${INSTALL_DIR}/${FMK_NAME}"

    rm -r"${WRK_DIR}"

    open"${INSTALL_DIR}"

    ③编译,选中刚创建的Aggregare,command+B,编译通过在finder中找到framework,拷贝出来。

    ④测试framework,把刚生成的framework添加到ZCBLSDKDemo中,导入头文件#import<ZCBLSDK/ZCBLSDK.h>,使用[ZCBLSDKTest test],发现控制台打印Hello Wold !!!说明framework和ZCBLSDKDemo关联成功,修改framework中ZCBLSDKTest类中test的代码,+(void)test{NSLog(@"Hello Framework !!!");},再次运行发现控制台打印Hello Framework !!!,这时候说明framework已经制作成功。

    5.发布framework到CocoaPods

    5.1创建GitHub仓库并上传framework到GitHub仓库

    5.1.1打开https://github.com,没有账号先注册账号,然后登陆。

    5.1.2登陆完成之后点击Start a project,然后根据自己的实际情况配置项目。

    5.1.3创建成功后clone远程仓库到本地:

    ①cd Documents  你希望存放的地址 

    ②执行git clone  仓库地址

    ③然后将刚刚生成的ZCBLSDK.framework放在一个命名为Frameworks的文件夹中,然后将Frameworks文件夹放在clone下来的文件夹中。

    5.1.4提交到GitHub:

    ①git add --all

    ②git commit -m'init framework'

    ③git push

    5.1.5设置Tag:

    ①git tag 1.0.0

    ②git push origin --tags

    5.2创建Trunk账户

    5.2.1注册Trunk账户:

    ①pod trunk register邮箱地址 ‘用户名’ –verbose,注册命令执行完之后,对应的邮箱地址会收到一封邮件,去邮箱确认注册。

    5.2.2查看自己的注册信息:

    ①pod trunk me

    5.3创建.podspec文件

    5.3.1.podspec文件的作用是为了让CocoaPods搜索引擎知道该代码的作者、版本号、概要、描述、源代码地址、部署版本、依赖的框架等描述信息。

    5.3.2创建.podspec文件:

    ①cd Documents 从GitHub上面clone下来文件夹目录执行pod spec create ZCBLSDK

    ②双击打开ZCBLSDK.podspec文件进行编辑

    Pod::Spec.new do |s|

    #名称

      s.name        = "ZCBLSDK"

    #版本号

      s.version      = "1.0.0"

    #简介

      s.summary      = "ZCBLSDK is about test framework"

    #描述

      s.description  = "ZCBLSDK is about test framework!!!"

    #项目主页地址

      s.homepage    = "https://github.com/cheerharry90/TestGitHub.git"

    #许可证

      s.license      = { :type => "MIT", :file => "LICENSE" }

    #作者

      s.author            = { "cheer_harry" => "cheer_harry@163.com" }

    #支持最小系统版本

      s.platform    = :ios, "8.0"

    #项目的地址 (注意这里的tag位置,可以自己写也可以直接用s.version,但是与s.version一定要统一)

      s.source = { :git => "https://github.com/cheerharry90/TestGitHub.git", :tag => s.version}

    #你的资源路径

      s.resources = "Frameworks/ZCBLSDK.bundle"

    #你的SDK路径

      s.vendored_frameworks = "Frameworks/ZCBLSDK.framework"

     # s.dependency "WilddogVideoRoom" // framework中依赖第三方SDK

    #  s.dependency "Wilddog/Sync" // framework中依赖第三方SDK

    end

    注意此处的.podspec文件不需要上传GitHub

    5.4上传CocoaPods

    5.4.1验证.podspec文件是否合法

    pod spec lint ZCBLSDK.podspec

    5.4.2提交.podspec文件到Trunk中

    pod trunk push ZCBLSDK.podspec

    提示successfully published则表示上传成功

    注意:验证过程中失败可以添加--verbose查看原因,

    ①如果s.dependency包含了.a静态库造成错误,虽然这并不影响Pod的使用,但是验证是无法通过的,可以通过 --use-libraries 来让验证通过。

    ②使用 --use-libraries 虽然不会出现错误(error),但是有时候会带来一些警告(waring),警告同样是无法通过验证的,这时可以用 --allow-warnings 来允许警告。

    pod spec lint ZCBLSDK.podspec --verbose --use-libraries --allow-warnings

    5.5使用CocoaPods集成ZCBLSDK

    5.5.1打开Xcode创建一个测试Demo,在工程目录下面添加podfile文件,双击点开podfile文件添加

    platform :ios,'8.0'

    target 'TestPodDemo' do

    pod 'ZCBLSDK'

    end

    然后执行pod install

    注意如果直接执行pod search ZCBLSDK出现找不到的情况可以采用以下三种方案解决:

    ①执行pod repo update master

    ②前往--->前往文件夹--->资源库--->Caches--->CocoaPods--->删除search_index.json文件,然后再执行pod search ZCBLSDK

    ③在工程目录下面添加podfile文件,双击点开podfile文件添加

    platform :ios,'8.0'

    target 'TestPodDemo' do

    pod 'ZCBLSDK'

    end

    然后执行pod update

    相关文章

      网友评论

          本文标题:使用CocoaPods开发Framework

          本文链接:https://www.haomeiwen.com/subject/hqvxzxtx.html