zoukankan      html  css  js  c++  java
  • [iOS] 建立与使用Framework

    [iOS] 建立与使用Framework

    前言

    使用XCode开发iOS项目时,开发人员可以将可重用的程序代码,封装为Library或是Framework来提供其他开发人员使用。这两种封装方式在使用的时候:Library需要将.a封装档与所有公开的.h档提供给使用者加入项目,而Framework则只需要将.framework封装档提供给使用者加入项目。就使用情景来说,提供单一.framework封装档会显得比较简单方便。本篇文章介绍如何将可重用的程序代码封装为Framework,主要为自己留个纪录,也希望能帮助到有需要的开发人员。

    前言01

    建立

    首先开启XCode来建立一个新项目:「MyFramework」,专案类型选择为Cocoa Touch Framework。这个项目用来封装可重用的程序代码,提供其他开发人员使用。

    • 专案类型

      建立01

    接着在MyFramework加入一个新类别:「MyClass」,做为提供给其他开发人员使用的程序代码。

    • MyClass.h

      #import <Foundation/Foundation.h>       
      
      @interface MyClass : NSObject
      
      // methods
      - (NSString*) getMessage;
      
      @end
      
    • MyClass.m

      #import "MyClass.h"
      
      @implementation MyClass
      
      // methods
      - (NSString*) getMessage {
          return @"Clark";
      }
      
      @end
      

    建立好MyClass之后,接着要把MyClass.h设定为Public,让使用的开发人员可以加入类别的.h档参考。

    • Public Headers

      建立02

    接着在项目预设的MyFramework.h里面加入MyClass.h档的参考,让后续使用的开发人员只要import单一个MyFramework.h檔,就可以引用到Framework里Public出来的.h檔。

    • MyFramework.h

      #import <UIKit/UIKit.h>
      
      //! Project version number for MyFramework.
      FOUNDATION_EXPORT double MyFrameworkVersionNumber;
      
      //! Project version string for MyFramework.
      FOUNDATION_EXPORT const unsigned char MyFrameworkVersionString[];
      
      // In this header, you should import all the public headers of your framework using statements like #import <MyFramework/PublicHeader.h>
      #import "MyClass.h"
      

    最后一个设定步骤,是要加入一段Run Script,用来将「仿真器版本Framework」、「实机版本Framework」,整合输出为单一Framework。

    • 参考数据

    • Run Script

      if [ "${ACTION}" = "build" ]
      then
      INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework
      
      DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework
      
      SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework
      
      
      if [ -d "${INSTALL_DIR}" ]
      then
      rm -rf "${INSTALL_DIR}"
      fi
      
      mkdir -p "${INSTALL_DIR}"
      
      cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
      #ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"
      
      lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"
      
      #open "${DEVICE_DIR}"
      open "${SRCROOT}/Products"
      fi
      
    • Setting

      建立03

    完成设定步骤后,分别Build两个不同版本的Framework:仿真器版本、实机版本。接着,设定在建置作业中的Run Script,就会将两个版本的Framework,整合输出为单一的MyFramework.framework

    • 仿真器版本

      建立04

    • 实机版本

      建立05

    • 产出MyFramework.framework

      建立06

    使用

    接着开启XCode来建立一个新项目:「MyAPP」,专案类型选择为Single View Application。这个项目用来说明,如何使用封装为Framework的程序代码。

    • 专案类型

      使用01

    再来将Framework复制一份,放到MyAPP的专案文件夹内。XCode编译的时候,会去这个路径底下找寻Framework。

    • Framework档案路径

      使用02

    回到XCode的项目属性页面,把Framework的参考加入到项目里。

    • 加入参考

      使用03

    接着在项目预设的ViewController.m文件里面,加入下列程序来使用Framework里面所封装的程序代码。

    • 加入Framework参考

      #import <MyFramework/MyFramework.h>
      
    • 使用Framework中的程序代码

      // test
      MyClass* x = [[MyClass alloc] init];
      NSString* message = [x getMessage];         
      
    • 完整的ViewController.m

      #import <MyFramework/MyFramework.h>
      #import "ViewController.h"
      
      
      @implementation ViewController
      
      - (void)viewDidLoad {
      
          // super
          [super viewDidLoad];
      
      
          // test
          MyClass* x = [[MyClass alloc] init];
          NSString* message = [x getMessage];
      
          // alert
          [[[UIAlertView alloc] initWithTitle:nil message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
      }
      
      @end
      

    最后,执行MyAPP。可以在执行画面上,看到一个Alert窗口显示从Framework取得的讯息内容,这也就完成了使用Framework的相关开发步骤。

    • 显示回传讯息

      使用04

    后记

    XCode编译的时候,会去特定路径底下搜寻Framework来加入编译。如果需要增加或修改参考路径,可以透过调整Build Setting里的Framework Search Paths参数来变更。

    • Framework Search Paths

      后记01

    范例下载

    范例程序代码:下载地址

  • 相关阅读:
    数组中出现次数超过一半的数字
    字符串的排列(important)
    #pragma mark指令的作用
    类的声明和实现
    OC比C中,新增的数据类型
    NSLog (Log信息的输出)
    C语言中文件相关操作
    static 及 extern
    C语言预处理命令
    结构体
  • 原文地址:https://www.cnblogs.com/clark159/p/4963685.html
Copyright © 2011-2022 走看看