ios .a和.framework

创建Aggregate来合并模拟器和真机通用的framework

然后在Build Phases下New Run Script Phase创建合并脚本:

# Constants
SF_TARGET_NAME=${PROJECT_NAME}
#自定义的用来存放最后合并的framework
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal
#IPHONE_DEVICE_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos
WORKSPACE_NAME=${PROJECT_NAME}.xcworkspace
YO_SCHEME=${PROJECT_NAME}
#clean build是先清除原来的build
xcodebuild -workspace ${WORKSPACE_NAME} -scheme ${YO_SCHEME} -sdk iphonesimulator -configuration"${CONFIGURATION}"clean build
xcodebuild -workspace ${WORKSPACE_NAME} -scheme ${YO_SCHEME} -sdk iphoneos -configuration"${CONFIGURATION}"clean build
# build project
#xcodebuild -project "${PROJECT_FILE_PATH}" -target "${TARGET_NAME}" -configuration "${CONFIGURATION}" -sdk iphoneos BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}/arm64" SYMROOT="${SYMROOT}" ARCHS=‘arm64‘ VALID_ARCHS=‘arm64‘ $ACTION
#xcodebuild -project "${PROJECT_FILE_PATH}" -target "${TARGET_NAME}" -configuration "${CONFIGURATION}" -sdk iphoneos BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}"  CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}/armv7" SYMROOT="${SYMROOT}" ARCHS=‘armv7 armv7s‘ VALID_ARCHS=‘armv7 armv7s‘ $ACTION
# Copy the framework structure to the universal folder (clean it first)
#因为framework的合并,lipo只是合并了最后的二进制可执行文件,所以其它的需要我们自己复制过来
#先移除原来的
rm -rf "${UNIVERSAL_OUTPUTFOLDER}"
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework"
#合并模拟器和真机的架构
lipo -create  "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}""${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}"-output"${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}"
open "${UNIVERSAL_OUTPUTFOLDER}"

对于以上的脚本,其中用到了很多的 xcode预定义的变量,这些变量怎么来的呢?你可以在命令行下, 输入

xcodebuild -workspace YohunlUtilsLib.xcworkspace -scheme YohunlUtilsLib -sdk iphonesimulator -configuration Debug -showBuildSettings > xcodebuild_showBuildSettings.txt

来将所有的xcode预定义变量都导入到文本xcodebuild_showBuildSettings.txt 中,然后你就可以选用你需要的啦

当然了,我们一般都应该合并release模式的,而不是debug模式的framework

查看.framework的信息:

lipo -info aa.framework/aa

显示:

Architectures in the fat file: aa.framework/aa are: armv7 arm64

说明我们生成的真机framework:aa.framework 包含了两种架构 armv7 arm64

分离架构(以分离armv7为例)

当前目录建立文件夹,用于存放分离后的架构,和分离出的.o文件

mkdir armV7

分离出armv7架构到文件夹armV7下:

lipo aa.framework/aa -thin armv7 -output ./armv7/aa_armv7

分离armv7架构所有的.o文件

cd armV7
ar -x aa_armv7
时间: 2024-08-12 12:44:53

ios .a和.framework的相关文章

自定义ios framework-iOS Universal Framework

github:https://github.com/kstenerud/iOS-Universal-Framework/blob/master/README.md 安装: 首先下载zip文件. 保证你放在一个地方,并方便日后使用.B/C工程模板,每次你更新XCode的时候,你都需要重新安装这个项目模板(不要担心,安装过程非常的快). 确保XCode已完全关闭 解压缩zip文件并转到文件夹:Real Framework/install.sh 如果你熟悉使用命令终端,只需运行install.sh.如

Unity3D研究院之IOS全自动编辑framework、plist、oc代码

Unity打IOS时会先生成一个Xcode工程,如果你需要增加一些第三方的framework那么需要手动一条一条的添加,这太烦了..而且可能你还需要修改Plist文件,甚至还可能要修改unity自动生成的oc代码,每次打包都要修改的话,那太累了..这篇文章就是全自动打包的第一步..建议使用XUPorter,我在它的基础上拓展了两个类,一个用来修改plist,一个用来修改unity生成出来的OC代码.文章的最后我会给出代码.. 那么我用一个比较变态的SDK举个例子ShareSDK,它就需要自动添加

ios 封装成framework时遇到的问题

这次的语音识别的SDK封装  让我废了好大劲,其实 问题很简单,就是因为对封装不了解,现在  就把我在完成任务的过程与道德问题以及解决方法 记录下来,供大家以后参考 1.制作framework的时候,网上很多步骤,简单点说就是把要封装的类单独拿出来建一个工程,然后把对外公开的类推到public的文件下. 2.如果在真机上测试,那么编译一定是在iOS deveive的状态下commd+b下编译 3.点击products下的framework右击在finder下找到,然后拖到需要的工程里面, 4.这

IOS上MediaPlayer framework实现视频播放

播放电影文件: iOS sdk中可以使用MPMoviePlayerController来播放电影文件.但是在iOS设备上播放电影文件有严格的格式要求,只能播放下面两个格式的电影文件. ? H.264 (Baseline Profile Level 3.0) ? MPEG-4 Part 2 video (Simple Profile)MPMoviePlayerController可以播放本地视频文件,也可以播放互联网上的视频文件. 首先在项目中需要引入Media Player 框架 项目-->Ta

iOS开发:Framework的创建

转载自:http://blog.csdn.net/nine_yao/article/details/72845087 环境:Xcode 8 1.创建framework 2.修改相关配置 1)设定SDK适配的iOS系统版本号 2)选择性添加: armv7s 原因: armv6, armv7, armv7s是ARM CPU的不同指令集, armv6设备:iPhone, iPhone2, iPhone 3G,第一代.第二代iPod Touch: armv7设备:iPhone 3GS,iPhone 4,

iOS 开发 ZFUI framework控件,使布局更简单

来自:http://www.jianshu.com/p/bcf86b170d9c 前言 为什么会写这个?因为在iOS开发中,界面的布局一直没有Android布局有那么多的方法和优势,我个人开发都是纯代码,Masonry这个框架我在开发中也是不用的,一个是代码布局的时候,代码量比较多,另外好像在iOS10 布局有问题,网上也有些解决的方法了. 所以就想能自定义一些UI控件,使布局更加简单 实现思路 可以像Android的wrap_content一样,是UILabel 可以根据内容来展示控件的宽高

解决iOS8.0以上系统下无法通过代码创建被删除过的同名相册 ( iOS 8 Photos framework: Create a albums with iOS8 )

问题描述: 在苹果的 iOS8.0以上, 当你创建完一个相册, 例如名为"Rd", 然后在相册中手动删除了这个"Rd"相册, 再次通过代码 #import <AssetsLibrary/ALAssetsLibrary.h> ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init]; [assetsLibrary addAssetsGroupAlbumWithName:@"Rd

iOS Core Telephony Framework

Core Telephony Framework(核心通讯框架) 概述: 这个库的前缀为CT(Core Telephony),主要用来获得用户通讯相关信息,我们可以使用这些信息来定义外部接口以便自己使用.当然我们也可以仅仅是用此信息来获得当前正在通话的信息. CT的对象可以获得通讯信息,例如可以利用此进行网络电话(VoIP — Voice over Internet Protocol).而又如CTCall可以帮助我们获得很多当前通话的信息,包括一个唯一码和一个状态值——呼叫(dialing).呼

iOS XCode7制作.Framework动态库和.a静态库的总结

一.开发SDK时的支持情况: OC语言制作动态库时,支持iOS8+:OC语言制作静态库,支持iOS7+. Swift语言制作动态库时,支持iOS8+;Swift不支持静态库. 对于SDK来说,支持情况非常重要.像我就是一开始就被坑了,我使用Swift开发动态库的方式提供SDK,所以只能支持到iOS8+.但这意味着所有使用我的SDK的客户的APP都必须到iOS8+,这就坑爹了. 所以假如需要支持iOS7的话,只有使用OC语言开发.a静态库的一条路. 二.开发动态库的简易过程: 开发动态库时,只要通

iOS : 静态库(.framework)合并

如果写了一个Framework,根据Build时选择的机器类型,会分为模拟器Framework和真机Framework,两者是不能混用的. 此时可以通过配置一个Run Script,在Script中使用lipo命令来合并两个版本的Framework,重新生成一个新的Framework,这个Framework将同时支持在模拟器和真机上运行. 在项目的Build Phases中,新建一个Run Script,输入下面内容: if [ "${ACTION}" = "build&qu