您的位置:首页 > 移动开发 > IOS开发

iOS 静态库支持 iOS5 和 Arm64

2014-11-22 11:39 399 查看


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命令 将上述打包到一起:

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: