资讯专栏INFORMATION COLUMN

Xcode 7制作动态Framework

voidking / 3314人阅读

摘要:动态新建一个工程,左边选择然后选择。新工程里面会有一个与工程同名的文件,需要在这个文件里面导入对外开放的文件工程名。若没有错误,完成后会有弹窗出现,现在一个同时支持模拟器和真机的就完成了。把复制到桌面看看它支持哪些架构。

动态Framework

1、新建一个工程,左边选择iOS-Framework & Library 然后选择Cocoa Touch Framework。

2、现在可以创建所需要封装的类和方法。

3、选中工程target里面的Build Phases,然后选择Build Phases下的 Headers选项,若没有该选项,则可通过Xcode的Editor-Add Build Phase-Add Headers Build Phase添加(若该项不能选择,请先点击Build Phases下面的空白处,激活该选项)。

4、把需要对外开放的.h文件从Headers的Project里面拖到Public里面。

5、新工程里面会有一个与工程同名的.h文件,需要在这个文件里面导入对外开放的.h文件(#imporf<工程名/xxx.h>)。

6、选择target里面的Build Settings,在Architectures里面添加Framework支持的架构,默认支持armv7、arm64,现在需要增加armv7s。

7、选择模拟器里面的Generic iOS Device ,记得先clean一下在run。

8、点开Xcode左边导航栏的Products,现在可以看到里面的Framework由红色变成了黑色,选中它然后show in Finder, 把它copy到桌面。

9、打开终端,我们来测试一下新建的Framework支持哪些架构。

  
cd Desktop 
lipo -info FFrameworkT.framework/FFrameworkT
Architectures in the fat file: FFrameworkT.framework/FFrameworkT are:     armv7 armv7s arm64   

10、现在新建一个single view 工程,选中target里面的General-Embeded Binaries,点击里面的+号,选择 Add oother... ,找到桌面的新建的Framework,然后照常使用。

11、选择任意一个模拟器,run,这时出现了如下错误:

ld: warning: ignoring file /Users/AZmake/Desktop/testFFFF/FFrameworkT.framework/FFrameworkT, file was built for armv7 which is not the architecture being linked (x86_64): /Users/AZmake/Desktop/testFFFF/FFrameworkT.framework/FFrameworkT

Undefined symbols for architecture x86_64:

"_FFrameworkTVersionNumber", referenced from:

  -[ViewController viewDidLoad] in ViewController.o  
  

"_FFrameworkTVersionString", referenced from:

  -[ViewController viewDidLoad] in ViewController.o
    

"_OBJC_CLASS_$_love", referenced from:

  objc-class-ref in ViewController.o  

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是什么原因??????
因为新建的Framework不支持模拟器的x86_64架构,现在这个Framework只能在真机上运行。
我想要在模拟器上运行,怎么办??????

让 Framework 同时支持模拟器和真机

1、选中Framework的target,通过Xcode的Editor-Add target... , 然后选择最下面的Other - Aggregate,如何Framework的名字。

2、选中新添加的target(有个靶一样的图标),Build Phases,点击+号添加 Run Script,双击改行把名字 Run Script 改为工程的名字。

3、在脚本编辑区域写入如下命令:

# Sets the target folders and the final framework product.
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}"

4、现在把要编译的项目改为我们添加的target,选择模拟器里面的Generic iOS Device ,记得先 clean 一下在run。若没有错误,完成后会有Finder弹窗出现,现在一个同时支持模拟器和真机的
Framework就完成了。我们可以在项目的Products里面找到Framework。

5、把Framework复制到桌面看看它支持哪些架构。

cd Desktop/ 
lipo -info AZFrameworks.framework/AZFrameworks
Architectures in the fat file: AZFrameworks.framework/AZFrameworks are: i386 x86_64 armv7 armv7s arm64 

现在可以看到Framework支持i386 x86_64 armv7 armv7s arm64 这些架构。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/16113.html

相关文章

  • Cocopods应用及插件

    摘要:静态库一堆目标文件的打包体并非二进制文件。加载静态库启动时,动态库使用时启动后。四其它插件参考链接插件安装及说明参考链接官网安装教程文件的具体说明发布开源库到官方仓库动态库和静态库分析 声明: 最后更新时间:2019年3月18日 为保证时效性,持续更新地址为:Cocopods安装和使用 一、安装和使用Cocopods 网上已有很多教程,参考示例:CocoaPods安装教程 二、让...

    OldPanda 评论0 收藏0
  • iOS 静态库,动态库与 Framework

    摘要:静态库静态库即静态链接库下的,和下的。静态库的好处很明显,编译完成之后,库文件实际上就没有作用了。与静态库相反,动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。使用静态库是不支持的。 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用。 什么时候我们会用到库呢?一种情况是某些代码需要给别人...

    韩冰 评论0 收藏0
  • Xcode 依赖管理带来的静态库动态库思考

    摘要:依赖三个系统框架,如果我们将其编译为静态库,然后这个静态库被其他工程依赖,那么其他工程依旧需要引入这三个框架。最终生成的静态库根本不知道动态库的存在。 最近整理一些项目以前依赖留下的问题,在使用 CocoaPods 和 Carthage 的时候引出了关于静态库和动态库的思考,手动编译静态库的朋友应该知道,如果自己编译了一个静态库,这个静态库依赖了 iOS 自带的库,即使你在 Xcode...

    reclay 评论0 收藏0
  • 5分钟快速集成UCloud实时音视频服务URTC-MacOS端

    摘要:通过集成,可以从零开始,快速搭建出实时音视频通信平台,可以应用于语音和视频社交在线教育和培训远程医疗在线会议直播等多种业务场景。使用服务之前,首先需要注册账号并且完成实名认证。确定后,自动生成。初始化建议在初始化的同时,初始化。通过集成URTC SDK,可以从零开始,快速搭建出实时音视频通信平台,可以应用于语音和视频社交、在线教育和培训、远程医疗、在线会议、直播等多种业务场景。 集成URTC...

    Tecode 评论0 收藏0
  • 5分钟快速集成UCloud实时音视频服务URTC-iOS端

    摘要:通过集成,可以从零开始,快速搭建出实时音视频通信平台,可以应用于语音和视频社交在线教育和培训远程医疗在线会议直播等多种业务场景。使用服务之前,首先需要注册账号并且完成实名认证。确定后,自动生成。通过集成,可以快速实现实时音视频通话。通过集成URTC SDK,可以从零开始,快速搭建出实时音视频通信平台,可以应用于语音和视频社交、在线教育和培训、远程医疗、在线会议、直播等多种业务场景。 集成UR...

    Tecode 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<