iOS 静态库支持 iOS5 和 Arm64
2014-11-22 11:39
399 查看
原博主的Demo的github下载地址
大概的意思:
随着iPhone 5Sf发布,苹果推出了移动端的64位架构,给iOS平台带来的新的活力。但是苹果的霸道又体现出来了,项目部署的目标只能iOS6.0及更高。因此呢,作为iOS App的开发者你的程序应该尽可能支持用户在iOS 5.0及早起版本或arm64平台之间的选择,虽然你没有义务来决定你的使用人群!生成一个多架构的二进制文件来适应(当前)的架构是有可能的,让我们来看看怎么弄它。
一个苹果的开发者在某开发论坛解释说,这种限制是由于iOS 5没有准备好处理包含64代码的多架构的二进制文件标头。虽然静态库不是由iOS系统来处理,但是xcode和xcode5的链接器显然可以处理!
想法倒是很简单,建立不同的架构,然后用iOS的lipo命令将它们打包绑定。我知道xcode可能就能做,但我愿意通过命令行(或Rakefile)。
首先用xcodebuild命令 生成arm架构的二进制:
Build arm
记住你必须设置
Setting Reference 细节请点击这个链接Build
Setting Reference。
接下来为arm64生成:
Build arm64
注意
Build i386
Build x86_64
组后用 Lipo命令 将上述打包到一起:
Lipo
小学文化,农村户口,大家凑合看吧。
自己没有尝试过,目前用的静态库文件 为了能添加到项目中,去掉了arm64 并将Target Build On Valid Architectures(好像是这个没开x-code。。。)开关设置为弄NO。
Static Libs With Support to iOS 5 and Arm64
原博主的页面原博主的Demo的github下载地址
大概的意思:
随着iPhone 5Sf发布,苹果推出了移动端的64位架构,给iOS平台带来的新的活力。但是苹果的霸道又体现出来了,项目部署的目标只能iOS6.0及更高。因此呢,作为iOS App的开发者你的程序应该尽可能支持用户在iOS 5.0及早起版本或arm64平台之间的选择,虽然你没有义务来决定你的使用人群!生成一个多架构的二进制文件来适应(当前)的架构是有可能的,让我们来看看怎么弄它。
一个苹果的开发者在某开发论坛解释说,这种限制是由于iOS 5没有准备好处理包含64代码的多架构的二进制文件标头。虽然静态库不是由iOS系统来处理,但是xcode和xcode5的链接器显然可以处理!
想法倒是很简单,建立不同的架构,然后用iOS的lipo命令将它们打包绑定。我知道xcode可能就能做,但我愿意通过命令行(或Rakefile)。
首先用xcodebuild命令 生成arm架构的二进制:
Build arm
1 | [code] <span style="font-size:14px;color:#990000;background-color: rgb(255, 255, 255);">xcodebuild -project 'StaticLibDemo.xcodeproj' -configuration 'Release' -sdk 'iphoneos7.0' clean build ARCHS='armv7 armv7s' IPHONEOS_DEPLOYMENT_TARGET='5.0' TARGET_BUILD_DIR='./build-arm' BUILT_PRODUCTS_DIR='./build-arm' </span> [/code] |
IPHONEOS_DEPLOYMENT_TARGET='5.0'和
ARCHS='armv7 armv7s',推荐建立目录让我们的工作条理清晰, 更多Build
Setting Reference 细节请点击这个链接Build
Setting Reference。
接下来为arm64生成:
Build arm64
1 | [code] <span style="font-size:14px;color:#990000;background-color: rgb(255, 255, 255);">xcodebuild -project 'StaticLibDemo.xcodeproj' -configuration 'Release' -sdk 'iphoneos7.0' clean build ARCHS='arm64' IPHONEOS_DEPLOYMENT_TARGET='7.0' TARGET_BUILD_DIR='./build-arm64' BUILT_PRODUCTS_DIR='./build-arm64' </span> [/code] |
ARCHS和
IPHONEOS_DEPLOYMENT_TARGET之间的差异。我们还需要为iPhone模拟器生成,修改SDK的运行设备为模拟器,接下来两步我们先做第一步:
Build i386
1 | [code] <span style="font-size:14px;color:#990000;background-color: rgb(255, 255, 255);">xcodebuild -project 'StaticLibDemo.xcodeproj' -configuration 'Release' -sdk 'iphonesimulator7.0' clean build ARCHS='i386' IPHONEOS_DEPLOYMENT_TARGET='5.0' TARGET_BUILD_DIR='./build-i386' BUILT_PRODUCTS_DIR='./build-i386' </span> [/code] |
棘手的时候来了!如果你只是根据x-code的配置设置 ARCHS为
x86_86,你有收到一个错误: “x86_64 is not a valid arch”. 为了避免此问题你需要添加
VALID_ARCHS='x86_64':
Build x86_64
1 | [code] <span style="font-size:14px;color:#990000;background-color: rgb(255, 255, 255);">xcodebuild -project 'StaticLibDemo.xcodeproj' -configuration 'Release' -sdk 'iphonesimulator7.0' clean build ARCHS='x86_64' VALID_ARCHS='x86_64' IPHONEOS_DEPLOYMENT_TARGET='7.0' TARGET_BUILD_DIR='./build-x86_64' BUILT_PRODUCTS_DIR='./build-x86_64'</span> [/code] |
Lipo
1 | [code] <span style="font-size:14px;color:#990000;background-color: rgb(255, 255, 255);">lipo -create './build-arm/libStaticLibDemo.a' './build-arm64/libStaticLibDemo.a' './build-i386/libStaticLibDemo.a' './build-x86_64/libStaticLibDemo.a' -output 'libStaticLibDemo.a'</span> [/code] |
自己没有尝试过,目前用的静态库文件 为了能添加到项目中,去掉了arm64 并将Target Build On Valid Architectures(好像是这个没开x-code。。。)开关设置为弄NO。
相关文章推荐
- IOS生成同时支持armv7,armv7s,i386 x86_64的静态库.a文件
- IOS生成同时支持armv7,armv7s,i386,x86_64,arm64的静态库.a文件
- iOS开发~制作同时支持armv7,armv7s,arm64,i386,x86_64的静态库.a
- iOS开发~制作同时支持armv7,armv7s,arm64,i386,x86_64的静态库.a
- iOS开发~制作同时支持armv7,armv7s,arm64,i386,x86_64的静态库.a
- iOS开发~制作同时支持armv7,armv7s,arm64,i386,x86_64的静态库.a以及 FrameWork 的创建
- iOS开发~制作同时支持armv7,armv7s,arm64,i386,x86_64的静态库.a
- iOS开发~制作同时支持armv7,armv7s,arm64,i386,x86_64的静态库.a
- iOS——制作同时支持armv7,armv7s,arm64,i386,x86的静态库
- iOS支持arm64的支付宝SDK
- IOS生成同时支持armv7,armv7s,i386的静态库.a文件
- 制作同时支持armv7,armv7s,arm64,i386,x86_64的静态库.a
- iOS支持arm64后,按钮图片出不来的坑
- ios objc 方法调用记录插件(支持arm64+devlog):itracer v1.2
- ios 32/64位 lame静态库libmp3lame.a 编译,支持arm64 armv7s x86_64 i386 armv7
- 支持Xcode6 IOS使用ZBar二维码扫描开发(解决arm64,arm7s兼容并解决中文乱码问题)
- 制作同时支持armv7,armv7s,arm64,i386,x86_64的静态库.a
- libidn.a 如何编译iOS下支持arm64的.a库
- iOS 制作自己的FrameWork遇到的一些问题 以及FrameWork通过包合并支持arm64 armv7 i386 架构
- 编译iOS下支持arm64的.a库