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

时常一个人发呆,看到宁静的天空。
原文地址:https://www.cnblogs.com/pinweyshg/p/5130038.html