• Xcode 6制作通用framework库


    1.制作环境

      1)OSX 10.10.5;

      2)Xcode 6.1。

      3)越狱 iPhone5 8.4。

    2.制作步骤

      1)新建项目并选择iOS下的Framework&Library中的Cocoa Touch Framework;

      

      2)输入项目名,选择目录,完成创建;

      

      3)进行编码(这里新建了一个WYDemoTest类,添加了wyTest方法);

      

      4)设置需要开放的头文件,有些内部使用的没必要开放;

      

      5)运行(Cmd+R)生成framework;

    3.测试工程

      1)假设之前创建的是基于iPhone5s模拟器的framework,创建的Demo测试工程也用iPhone5s模拟器,会出现如下图所示错误;

      

      2)为什么会这样的?因为我们做的是动态库,在使用的时候需要额外加一个步骤,要把Framework同时添加到“Embedded Binaries”中,解决办法如下图所示;注意: 在XCode 6之前是没有这个选项的(我没发现),所以理论上Xcode 5及之前的版本无法使用Xcode 6下生成的Framework动态库。

            

      3)运行结果如下图所示。

      

    4.真机测试

      1)幸福总是短暂的,为什么会这样?错误提示已经很明显了,因为我们制作动态库的时候,选的设备是模拟器,如果选真机的话,那生成的库也只能在真机上使用,那我们该怎样制作一个通用的动态库呢? 简单的方法是分别生成模拟器和真机上运行的库,然后在合并。这个方法在每次生成动态库的时候,过程都会很繁琐,下面我们用一个脚本来自动完成它。

      

    5.制作通用framework动态库

      1)打开之前的WYDemoFramework工程,File->New Target新建如下图所示Target;

      

      2)添加script到新建的Target;

      

      3)脚本如下;

     1 # Sets the target folders and the final framework product.
     2 FMK_NAME=${PROJECT_NAME}
     3 
     4 # Install dir will be the final output to the framework.
     5 # The following line create it in the root folder of the current project.
     6 INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
     7 
     8 # Working dir will be deleted after the framework creation.
     9 WRK_DIR=build
    10 DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework
    11 SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework
    12 
    13 # -configuration ${CONFIGURATION}
    14 # Clean and Building both architectures.
    15 xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build
    16 xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build
    17 
    18 # Cleaning the oldest.
    19 if [ -d "${INSTALL_DIR}" ]
    20 then
    21 rm -rf "${INSTALL_DIR}"
    22 fi
    23 
    24 mkdir -p "${INSTALL_DIR}"
    25 
    26 cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
    27 
    28 # Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.
    29 lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"
    30 
    31 rm -r "${WRK_DIR}"
    32 
    33 open "${INSTALL_DIR}"

      4)选中新建的Target,Run,如果没有异常的话,会自动弹出生成的Framework文件,这样生成的动态库就能同时支持模拟器和真机了。

      

    6.制作通用framework静态库

      1)这样生成的动态库恐怕很难在Xcode 5上使用,那我们为什么非要用动态库呢,一般情况下不是用静态库就好了吗? So Easy!只需要修改一个参数即可生成静态库了。

      

      使用静态库的话,就可以把Framework从“Embedded Binaries”中删除了。把新生成的库导入到测试工程,试试在模拟器和真机上运行,一切OK。

      如果你用的真机是iPhone5 C,那悲剧又要发成了,生成的Framework竟然不支持armv7s,不知是Xcode 6的bug,还是因为苹果认为使用armv7s的设备太少,可以不支持了。Xcode 新建工程,默认的Architectures竟然不包含armv7s,自己在Framework的Target的Architectures添加armv7s,重新生成就行了。

    7.参考文档

      1)Xcode 6制作动态及静态Framework

    时常一个人发呆,看到宁静的天空。
  • 相关阅读:
    GlusterFS安装部署
    glusterfs peer失败
    GlusterFs 启动报错
    利用idea反编译jar包
    hive 错误记录 之moveing 失败
    节点不可用,显示noReady
    kafka 配置认证与授权
    flink (2) 读取kafka数据
    Flink (1) 安装部署
    redis the cluster is down
  • 原文地址:https://www.cnblogs.com/pinweyshg/p/5130038.html
Copyright © 2020-2023  润新知