`

iOS开发的兼容和适配问题

 
阅读更多

由于苹果公司的霸道作风,每个iOS开发者都会要面对不同设备和版本的兼容和适配问题。基本上升级一次xcode鸡飞狗跳是非常正常的,稍微总结一下需要注意的几个方面:

architecture

这个直接决定了APP能不能跑在指定设备上。现在常见的ARCH有3种:

armv7,对应iPhone4,iPhone4S,iPad mini,iPad3

armv7s,对应iPhone5,iPhone5C,iPad4

arm64,对应iPhone5S,iPad Air,iPad mini2,iPhone6,iPhone6 Plus

ARCH是向下兼容的,armv7生成的二进制包,可以跑在arm64的设备上,只是有些优化不可用;反之,arm64生成的二进制包,就不能跑在iPhone4和iPhone5上了

同时,build配置项中有一个Build Active Architecture Only的选项,在release中设置成NO,则会编译出混合二进制包。比如Architectures指定了armv7和arm64,则打出的是一个混合二进制包,既可以跑在armv7设备上,也可以优化跑在arm64设备上

鉴于现在armv7的设备还是占有相当的比例,所以build的时候,一定还是需要包含armv7选项的

另外一个问题,就是用armv7和armv7s打出的Library,是无法跟arm64打出的二进制包link的。所以如果是开发SDK供其他开发者使用,那么build的时候也一定要包含arm64。否则如果SDK使用者的build中包含arm64,Library就无法使用了。所以做SDK开发,需要把所有ARCH都选上

iOS SDK版本

另外就是iOS版本的问题,双向都需要考虑兼容

用iOS7 SDK编译的APP,在iOS8平台上,很有可能不能正常运行。比如在几个UIView中共享UIDatePicker,这种行为在iOS7下是OK的,但是在iOS8下就会crash;比如iOS7下的auto sizing,在iOS8下也可能出现显示错误。因此,iOS8操作系统出来,旧的APP基本上需要重新测试,适配,再次发布

反之,iOS8 SDK编译的APP,在iOS7系统上,也经常不能正常运行。比如我使用了UIAlertController类,在iOS7下就会直接飞掉,报错:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present a nil modal view controller on target

也有一些iOS8下的API,在iOS7下不会crash,只是毫无反应……所以,经常需要一些版本兼容的代码,例如:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
    // for iOS8
}else{
    // for iOS7
}

设备尺寸

即使ARCH和API的适配问题都解决,UI的适配还是一个更大的挑战,一方面是各种设备的尺寸都不同,比如同一个页面,需要考虑在480,568,1024的高度下都正常显示;另一方面,不同的iOS版本,在细节方面也会有细微的差别,比如toolbar和navigation bar的处理等等

分享到:
评论

相关推荐

    IOS版本兼容与屏幕适配

    IOS 版本兼容与屏幕适配是移动应用开发中非常重要的一方面。随着 iPhone OS 的版本越来越多,用户由于各种原因没有升级到最新版,作为开发者,我们需要考虑这些用户的需求,使我们的软件能受到更多人喜欢和应用。 ...

    Ios 15.3 真机调试适配包

    在iOS开发过程中,真机调试是一项至关重要的环节,它允许开发者在实际设备上测试应用程序,以确保软件在各种硬件配置和系统版本上的表现。这里提到的"Ios 15.3 真机调试适配包"是针对苹果最新操作系统版本iOS 15.3的...

    IOS屏幕适配

    "IOS 屏幕适配" IOS 屏幕适配是 IOS 开发中非常...屏幕适配是 IOS 开发中非常重要的一方面,需要开发者具备丰富的知识和经验,合理使用自动布局和 autosize,适配不同的设备参数和显示效果,提高应用程序的用户体验。

    ios项目适配ios6 ios7

    在iOS开发过程中,确保应用程序能够兼容不同的iOS版本是一项重要的任务。本项目主要关注的是如何将一个iOS项目适配到iOS6和iOS7这两个版本,因为它们之间存在显著的视觉和用户体验差异。iOS7引入了全新的设计语言,...

    ios开发详解markdown格式

    它包含了创建、编译和调试应用所需的一切工具和框架,是iOS开发的核心工具之一。 - **Swift**:Swift是一种强类型、编译型的编程语言,由苹果公司在2014年推出。它被设计用来提高开发者的生产力,并逐渐成为iOS开发...

    iOS开发之适配iOS10以及Xcode8

    在iOS开发过程中,适配新版本的iOS系统和Xcode工具是至关重要的。本文主要针对“iOS开发之适配iOS10以及Xcode8”这一主题进行深入探讨,旨在帮助开发者顺利过渡到新环境。 首先,Xcode8引入了一项新特性,即自动...

    iphone和ipad适配

    在iOS开发领域,"iPhone和iPad适配"是一个至关重要的主题,因为它涉及到应用程序在不同设备上的兼容性和用户体验。为了确保应用能在iPhone和iPad上顺畅运行并提供一致的体验,开发者需要考虑多方面的因素,包括屏幕...

    Xcode iOS 16真机调试包 开发调试

    本压缩包提供了针对iOS 16的真机调试资源,帮助开发者进行iOS 16适配和应用开发的调试工作。 首先,"Xcode iOS 16真机调试包"是指包含有支持iOS 16版本的模拟器和设备配置的Xcode版本,使得开发者可以在真实设备上...

    iOS 14兼容包.zip

    在iOS开发领域,每个新版本的发布都会带来一系列的变化和改进,旨在提升用户体验和开发者工具的功能。"iOS 14兼容包.zip" 提供的显然是一组针对iOS 14 beta版的兼容性更新或资源,帮助开发者们提前适应和测试新系统...

    ios6 7适配

    在iOS开发中,适配不同版本的操作系统是一项重要的工作,特别是在iOS 6和iOS 7之间,由于设计语言和用户界面的重大变化,适配显得尤为关键。标题"ios6 7适配"指的是针对这两种iOS版本进行应用兼容性的优化。 在iOS ...

    ios-ios 11 适配.zip

    在iOS开发领域,随着苹果操作系统版本的更新,开发者需要不断对应用进行适配以确保其在新系统上的正常运行和优化用户体验。"ios-ios 11 适配.zip" 文件包含了一个名为 "IOS11AdapterDemo" 的示例项目,这显然是为了...

    iOS 14新特性与适配要点

    在iOS 14中,Apple引入了许多新特性,这些特性为开发者提供了更多创新和改进用户体验的机会。...开发者在升级项目至iOS 14时,需全面测试应用的各个功能,确保兼容性和性能,同时利用新特性提升用户体验。

    一个taro适配Android、iOS、微信小程序、H5最佳实践项目的脚手架

    taro适配Android、iOS、微信小程序、H5最佳实践,主要涉及到了基础网络请求的封装、适配了多端的SafeArea安全区域、style工具样式引用替换scss的繁琐写法大幅度简化代码,同时解决了scss样式无法通过className进行属性...

    iOS开发 图表Chart 折线图、柱状图

    5. 兼容性:确保图表在不同尺寸的设备和屏幕方向上表现良好,这涉及到适配和布局管理。 6. 性能优化:在处理大量数据时,考虑性能优化策略,如分页加载和离屏渲染。 总之,iOS开发中的图表功能通过第三方库如...

    微信小程序开发之IOS和Android兼容的问题

    开发者在实际开发过程中,应当充分考虑到不同平台可能存在的差异,进行针对性的适配和测试。此外,随着微信小程序平台的更新和优化,一些问题可能会得到解决,开发者应当及时关注官方发布的更新日志和开发文档,以...

    iOS9功能适配的集合

    在iOS开发过程中,随着新版本系统的推出,开发者需要对旧版本的应用进行适配,以确保应用能在新系统上正常运行并充分利用新特性。本资源集合主要关注的是针对iOS9的功能适配,帮助开发者解决在iOS9环境下遇到的问题...

    iOS 开发工具包

    这套"iOS开发工具包"包含了开发者在构建、测试和发布应用程序时可能需要的各种软件和资源。下面将详细介绍其中可能包含的关键工具和知识点: 1. **Xcode**: Xcode是Apple官方提供的iOS开发集成开发环境(IDE),它...

    unity使用webcam调用移动端摄像头适配安卓和ios 源码和安卓apk

    Unity是一款强大的跨平台游戏开发引擎,它支持在多个操作系统上创建3D和2D应用程序,包括Android和iOS。本项目的核心是使用Unity的WebCam API来调用移动设备的摄像头功能,实现跨平台的视频捕获和显示。下面将详细...

    ios13.3真机开发包

    在iOS应用开发过程中,开发者时常会遇到“Could not find Developer Disk Image”这样的错误,这通常是由于Xcode缺少对应iOS版本的SDK...因此,这个“ios13.3真机开发包”是iOS开发过程中不可或缺的工具之一。

    EasyiOS_iOS开发类的各种封装

    在iOS开发过程中,为了提高开发效率和代码复用性,开发者常常会进行各种类的封装。"EasyiOS_iOS开发类的各种封装"就是一个这样的项目,它旨在为iOS开发者提供一套便利的工具集,使得开发过程更为高效。EasyiOS可能是...

Global site tag (gtag.js) - Google Analytics