iOS-制作Framework(最新)


前言

之前有很多的大神们已经写过framework的制作,但最近由于Xcode7的出现,很多之前的教程内容已经不符,对于初学者来说,找到一篇能够直接明了,简单易学的制作framework的文章比较困难。本文将基于Xcode7创建一个简单的工程,通过两种方法来教大家如何制作一个自己的framework。

简介

Mac OS X扩展了framework的功能,让我们能够利用它来共享代码和资源。通过framework我们可以共享所有形式的资源,如动态共享库,nib文件,图像字符资源以及文档等。
系统会在需要的时候将framework载入内存中,多个应用程序可以同时使用同一个framework。这种方法可以使得你的代码易分享,在多个工程中复用,并且可以隐藏实现细节,控制公开的头文件。

制作

步骤

  • 打开Xcode,创建新工程。手下留情,请先看图!

  • 创建Cocoa Touch Framework
  • 创建功能类。这里我创建一个继承自NSObject的SayHello类
  • 在新创建的类里面声明方法并实现。这里我写一个
    sayHello的方法,以便后面测试使用。
    SayHello.h
    #import <Foundation/Foundation.h>
    @interface SayHello : NSObject
    -(void)sayHello;
    @end
    SayHello.m
    #import "SayHello.h"
    @implementation SayHello
    -(void)sayHello
    {
    NSLog(@"你好,第一次见面,请多关照");
    }
    @end
  • 在TARGETS下选中工程,在Build Settings下更改几个参数。

  • 更改参数
    在Architectures下增加armv7s,并选中。将Build Active Architecture Only 设置为NO。

  • 添加armv7s
  • 设置Headers
    将你要公开的头文件移动到Public下,要隐藏的放在Private或者Project下,当然,隐藏的头文件就无法再被引用。

  • 设置headers
    然后需要在Test.h(必须是公开的,否则无法引用)中将你所有要公开的.h引入。

  • 引入头文件
    • 打包framework
      • 方法一
        1.选中模拟器,编译程序
        2.选中测试机,编译程序
        3.在finder中找到framework文件

      • framework
        选中图中所标示的framework,然后右键show in finder。
        找到下图中所示的Test文件,一个是Debug-iphoneos(真机)下的,一个是Debug-iphonesimulator(模拟器)下的。

      • frameworkTest
        4.通过终端命令将两个framework合为一个模拟器和真机都可使用的framework。
        打开控制台输入 lipo -create iphoneos下frameworkTest的路径 simulator下frameworkTest的路径 -output 新的路径,这样就完成了模拟器和真机版本的合并,新路径下的frameworkTest就是你合并后的文件,将这个文件名字改成和你未合并之前的Test一样的名字,放到framework文件夹下,替换掉原来的frameworkTest文件。

      • 合并命令
        上面这段命令就是把真机和模拟器的frameworkTest合并成一个MyNewFrameworktest文件并存放在桌面上的New文件夹下。

      • 文件替换
        5.将修改后的framework拷贝出来保存,这就是我们最终制作的framework。
      • 方法二
        1.选中TARGETS下的工程,点击上方的Editor,选择Add Target创建一个Aggregate.

      • Add Taget
        选择Other下的Aggregate,点击Next创建。

      • Aggregate
        2.嵌入脚本。选中刚刚创建的Aggregate,然后选中右侧的Build Phases,点击左下方加号,选择New Run Script Phase

      • New Run Script Phase
        将这段脚本复制进去。
        # 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}"

      • 嵌入脚本
        3.编译。如图所示,command+B编译。

      • 编译
        4.在finder中找到framework,拷贝出来。
    • 使用制作完成的framework
      直接将你制作出来的framework添加到要使用的工程里,在需要使用的文件里引入头文件,使用framework中的功能类。如下图

    • 使用

    提醒

    1.在制作framework或者lib的时候,如果使用了category,则使用改FMWK的程序运行时会crash,此时需要在该工程中 other linker flags添加两个参数 -ObjC -all_load.

    2.带有图片资源的需要把图片打包成Bundle文件,和framework一起拷贝到相应的项目中。

    3.公开的类中如果引用的private的类,打包以后对外会报错,找不到那个private的类,可以把那个private的.h放到

    结言

    现在,相信你已经可以按照文档步骤制作出一个framework,相信过程中可能还会遇到一些问题,希望大家能够把这些问题记录并整理,将这些经验分享出来。也欢迎大家联系、讨论。
    最后,希望大家能完成带有图片资源的Bundle的制作。

    Try your best!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值