iOS,macOS 系统应用管理机制
苹果系统包括: iOS,macOS,watchOS,tvOS. 应用软件的生命周期为: 开发, 上线, 安装, 使用, 卸载. 这篇文档将从应用生命周期的各个环节介绍苹果系统对应用的管理机制, 主要详细介绍 iOS 和 macOS,watchOS 与 tvOS 由于用户数量少, 以及流程与 iOS 相似度较高, 只作了简单介绍.
iOS
一, 开发
注册账号:
单纯开发是不用付费的, 使用模拟器就可以. 如果要真机调试, 或者提交 appstore, 需要申请开发者帐号.
需要提交: 1, 注册一个苹果账号作为开发者账号. 2, 个人或企业的姓名, 地址, 联系方式等相应资料. 3, 能够做美金结算的信用卡账. 4, 支付 99 美金给苹果公司.
另外, 申请企业账号需要提供 DUNS(邓白氏编码)以及税务等相应资料. D-U-N-S Number 是一组唯一的九位数字, 用于检查所在组织的身份和法人实体状态. 如果未拥有此识别码, 需要将信息提交给 Dun & Bradstreet, 以获取一个免费的 D-U-N-S Number.
Apple 开发者到期 App 是会下架, 但是已经安装 App 的用户, 手机仍能使用 App,App Store 里面搜索不到. 续费 Apple 开发者后, App 会在当天上线 App Store.Apple 开发者到期时不能转让 App.
开发工具:
苹果应用开发需要使用 Mac 系统下的 Xcode, 使用 Objective-C 和 Swift 语言. Xcode 由苹果公司开发的集成开发环境, 免费对用户使用, 可以开发 iOS,macOS,watchOS,tvOS 四个系统应用.
二, 上线
应用开发完成后, 如要发布上架 App store, 大致经过以下 8 个步骤.
1. 登录 Apple 开发者中心网站, 选择 certificates,Identifiers and profiles, 在 App IDs 选项里注册一个 App ID, 用于标识一个或一组 App, 需要填写 App 的描述和需要注册的服务功能.
2. 创建开发证书, 证书分为 iOS Development(开发证书)和 iOS Distribution(发布证书), 开发证书用于真机调试, 有一年使用期限. 发布证书用于 App 的发布.
3. 配置 iOS Provisoning Profiles(debug)描述文件, Provisoning Profiles 是苹果签名认证的 Plist 文件, 列举了开发证书, App ID, 以及授权运行设备的 UDID(为一个设备的唯一标识).
4. 在 Xcode 中进行应用证书注册并打包 App. 在工程里将 Provisoning Profiles 配置导入, 完成后就可以打包 App 了, 导出 App 包.
5. 真机调试. 可以在授权的设备上进行真机调试, 将打包导出的 App 包安装于设备上, 安装时系统会对开发证书进行认证, 成功后 App 会安装在设备上, 可以在设备上对 App 进行测试.
6. 真机测试没问题后, 可以对 App 进行上架发布. 这里需要进入开发者中心创建发布证书, 并配置 Provisoning Profiles 描述文件.
7. 需要在 iTunes connect 上创建本应用的项目. 在开发者中心的 iTunes connect 管理界面创建一个新 App 项目, 填写 App 的相关信息包括描述, 销售范围, 版本信息, 关键词等.
8. 提交审核. 需要提供一个测试账号用于审核人员进行测试. 应用提交之后审核人员对应用进行审核. 审核针对安全, 性能, 业务, 设计, 法律五个层面.
安全: 不包含不良内容, 不造成人身安全隐患, 数据安全, 不得在指定容器范围外读写数据, 不具有特殊权限
性能: App 完成度, 硬件兼容性, 能耗, 占用系统资源量, 网络性能
业务: 付款, 广告合乎标准
设计: 不涉抄袭, 有价值,
法律: 隐私, 知识产权
苹果官方要求, 开发和上线应用必须通过 Xcode 这一集成开发工具, 也就是只能在 Mac 电脑下完成. 但如果想在 Windows 环境下完成开发, 也可以通过一些其它途径. 借助 LBuilder,HBuilder,APICLoud,APPCan 等工具, 可以把网站打包成 App, 之后通过上架辅助软件 Appuploader 进行 Windows 下 App 的上架. Appuploader 是 iOS 上架辅助工具, 可以直接得到. p12 和. mobileprovision 证书文件, 上传 ipa 到 App store, 打破了上架 iOS 只能在苹果电脑用 Xcode 的限制, 使用费用 100 元 / 年.
三, 安装
在 iOS 出来之前, 在主流操作系统 (Mac/Windows/Linux) 上开发和运行软件是不需要签名的, 软件随便从哪里下载都能运行, 导致平台对第三方软件难以控制, 盗版流行. 苹果希望解决这样的问题, 在 iOS 平台对第三方 App 有绝对的控制权, 一定要保证每一个安装到 iOS 上的 App 都是经过苹果官方允许的, 怎样保证呢? 就是通过签名机制.
iOS 正规的应用安装方式分为三种:
1. 通过 App store 安装
对于通过 App store 安装的应用, iOS 为了确保所有的应用程序没有被修改, 要求必须使用苹果颁发的证书对可执行代码进行签名. 开发者使用苹果颁发的发布证书签名后, 将应用题叫道 APPstore 审核, 审核成功后, 苹果使用其私钥对程序进行签名. 用户从 APPstore 下载安装应用, iOS 调用系统进程获取 provisioning profile 文件, 对应用程序进行证书校验.
2. 开发 App 时直接把开发中的应用安装进手机进行调试, 即在上线时的真机调试
开发时安装 App, 它有两个需求, 1)安装包不需要传到苹果服务器, 可以直接安装到手机上. 2)苹果必须对这里的安装有控制权, 包括 a. 经过苹果允许才可以这样安装. b. 不能被滥用导致非开发 App 也能被安装. 苹果使用双层签名的机制,
1)在你 Mac 开发机器生成一对公私钥, 这里称为公钥 L, 私钥 L.
2)苹果自己有固定的一对公私钥, 跟上面 AppStore 例子一样, 私钥在苹果后台, 公钥在每个 iOS 设备上. 这里称为公钥 A, 私钥 A.
3)把公钥 L 传到苹果后台, 用苹果后台里的私钥 A 去签名公钥 L. 得到一份数据包含了公钥 L 以及其签名, 把这份数据称为证书.
4)在苹果后台申请 AppID, 配置好设备 ID 列表和 App 可使用的权限, 再加上第3步的证书, 组成的数据用私钥 A 签名, 把数据和签名一起组成一个 Provisioning Profile 文件, 下载到本地 Mac 开发机.
5)在开发时, 编译完一个 App 后, 用本地的私钥 L 对这个 App 进行签名, 同时把第4步得到的 Provisioning Profile 文件打包进 App 里, 文件名为 embedded.mobileprovision, 把 App 安装到手机上.
6)在安装时, iOS 系统取得证书, 通过系统内置的公钥 A, 去验证 embedded.mobileprovision 的数字签名是否正确, 里面的证书签名也会再验一遍.
7)确保了 embedded.mobileprovision 里的数据都是苹果授权以后, 就可以取出里面的数据, 做各种验证, 包括用公钥 L 验证 App 签名, 验证设备 ID 是否在 ID 列表上, AppID 是否对应得上, 权限开关是否跟 App 里的 Entitlements 对应等.
3. 企业内部分发, 可以直接安装企业证书签名后的 App
企业内部应用, 即只在企业部门和员工内部使用, 不对外公开的应用. 苹果提供了专门的 In-House 证书用来发布这种应用, 可以分发给任意的手机, 只要通过一个 URL 即可下载安装, 不用上传到 App Store 审核. In-House 应用, 有时需要根据部门需求进行版本的快速迭代, 因为不需要 App Store 审核, 所以可以做到随时修改, 随时发布, 节省了大量的时间.
在打包安装时同样需要创建证书, 证书类型为 In-House 型, 之后创建配置文件(Distribution Provisioning Profiles), 过程和其他证书创建过程类似. 在 Xcode 中导入配置文件, 打包程序, 可以导出 ipa 和 plist 文件. Plist 文件中包含 ipa 的 URL, 安装时显示的 icon 的 url,bundle id, 版本号, 安装前的提示信息. 将 plist 文件上传至服务器, 企业员工在 Safari 浏览器中输入链接即可安装. Safari 操作的具体流程是:
1)Safari 解析输入的字符串, 找到 plist 文件
2)根据 plist 文件里面提供的信息下载并安装 ipa 包, 还会访问大小图标, 大小图标在 ipa 包正在下载时显示, 当下载完毕后显示程序自带的图标
3)下载安装后, 如果想打开程序还需要在手机 设置 ->通用 ->描述文件与设备管理, 在 "企业级应用" 分组下, 点击 信任 开发者的证书里面选择相应的证书信任后, 方可打开程序.
综上, 3 种安装方式归根结底, 都是通过验证安装程序的 provisioning profile 文件. 安装应用程序时, Provisioning Profile 文件被拷贝到 iOS 设备中, 运行该 iOS App 的设备通过它来认证安装的程序. Provisioning Profile 把 AppID, 签名证书, 设备授权这些信息全部打包在一起, 方便我们在调试和发布程序打包时使用. 这样, 只要在不同的情况下选择不同的 Provisioning Profile 文件就可以了.
除了在正规途径下安装应用以外, 通过 "打破" 原有权限, 获取更高权限, 可以实现脱离官方平台, 自由安装第三方的应用, 即我们口中的 "越狱".
iOS 系统具有封闭性, 通过代码签名机制限制未经签名的代码在 iOS 系统中执行. 用户不能访问系统资源, 也无权修改, 只能使用苹果颁发证书的正规途径的应用或程序接口完成系统允许的操作. 越狱后, 用户可以获得权限访问与修改系统文件, 继而获得更多的权限, 完成之前未被 iOS 允许的功能. 越狱的原理是通过漏洞. 至少需要 2 个漏洞, 第一个漏洞用来完成专有代码执行, 第二个漏洞用来使内核的安全措施失效, 提升权限.
越狱之后安装应用可不通过 App store, 有一些越狱者制作的类似 App store 的应用安装商店, App store 默认安装位置为 / var/mobile/Applications 目录里, 越狱后可安装在根目录下, 所以墙纸, 主题, 铃声等一些个性化应用在越狱后可以得到安装.
四, 使用
iOS 程序 5 种状态:
1. Not running:
应用还没有启动, 或者应用正在运行但是途中被系统停止
2.Inactive:
当前应用正在前台运行, 但是并不接收事件 (当前或许正在执行其它代码). 一般每当应用要从一个状态切换到另一个不同的状态时, 中途过渡会短暂停留在此状态. 唯一在此状态停留时间比较长的情况是: 当用户锁屏时, 或者系统提示用户去响应某些(诸如电话来电, 有未读短信等) 事件的时候.
3.Active:
当前应用正在前台运行, 并且接收事件. 这是应用正在前台运行时所处的正常状态.
4.Background:
应用处在后台, 并且还在执行代码. 大多数将 要进入 Suspended 状态的应用, 会先短暂进入此状态. 然而, 对于请求需要额外的执行时间的应用, 会在此状态保持更长一段时间. 另外, 如果一个应用要求启动时直接进入后台运行, 这样的应用会直接从 Notrunning 状态进入 Background 状态, 中途不会经过 Inactive 状态. 比如没有界面的应用. 注此处并不特指没有界面的应用, 其实也可以是有界面的应用, 只是如果要直接进入 background 状态的话, 该应用界面不会被显示.
5.Suspended:
应用处在后台, 并且已停止执行代码. 系统自动的将应用移入此状态, 且在此举之前不会对应用做任何通知. 当处在此状态时, 应用依然驻留内存但不执行任何程序代码. 当系统发生低内存告警时, 系统将会将处 于 Suspended 状态的应用清除出内存以为正在前台运行的应用提供足够的内存.
应用启动过程:
1, 执行 main 函数
2, 在此方法中调用 UIApplicationMain
2.1 创建 UIApplication 对象(UIApplication 对象是应用程序的象征, 一个 UIApplication 对象就代表一个应用程序. 每一个应用都有自己的 UIApplication 对象, 而且是单例的, 如果试图在程序中新建一个 UIApplication 对象, 那么将报错提示. 一个 iOS 程序启动后创建的第一个对象就是 UIApplication 对象, 且只有一个. 利用 UIApplication 对象, 能进行一些应用级别的操作.)
2.2 创建 UIApplication 的 delegate 对象.(UIApplication Delegate 的作用是当应用程序发出一系列系统事件如来电或锁屏等, 做出相应的反应. 新建完项目, 都有个带有 "AppDelegate" 字眼的类, 它就是 UIApplication 的代理, AppDelegate 默认已经遵守了 UIApplicationDelegate 协议, 已经是 UIApplication 的代理. 系统事件如程序降将要启动, 程序启动完成, 程序进入后台, 程序进入前台, 程序退出等.)
2.3 开启消息循环
3,delegate 对象开始监听系统事件
3.1 App 启动完成后会调用 delegate 对象的程序加载完成的方法
3.2 如果 App 的 plist 设置了 main storyboard 会创建 UIWindow 对象(如 果没有设置则不创建)
3.3 创建 main storyboard 中绑定的 controller 对象(stroyboard 中箭 头指向的控制器)
3.4 设置给 Windows 对象的 rootViewController
3.5 设置 Windows 对象可见
屏幕响应顺序
iOS 和安卓系统具有不同的屏幕响应顺序, iOS 对屏幕的响应顺序是: 触摸→媒体→服务→架构, 而安卓是: 程序→框架→屏幕显示资源→架构. 所以在视觉效果上, iOS 会有更流畅的感觉.
后台管理机制
从 iOS 3 开始, 苹 果为 iPhone 引进了 push notification, 不启动应用也 能收到推送消息, 原理是 消息由 APNS(Apple Push Notification Service, Apple Push 服务器)统一管 理, 随着 iOS 4 的发布, iOS 也开始有了 多任务功能, 当你点击 H o m e 键后, 当前 程序转入后台 (iOS 4 之前按 Home 键就 直接干掉应用了), 后台应用以墓碑的形 式(退出前的状态) 保存在内存中, 用户 可以快速恢复. 但是苹果对后台的限制非 常严格, 只有一些特殊应用可以在后台 真正运行, 比如音频播放类, VoIP 类, newsstand, 位置服务等.
如果不做任何配置的话, 你的应用最 多只能在后台运行 5 秒, 之后就会被挂起 (存于内存但不运行), 如果你配置了后 台运行 (如需下载), 大概在 594 秒(9.9 分钟) 时进程停止, 程序同样也会被挂 起, 一旦系统需要内存了, 最早的后台进 程就会被杀掉以释放内存.
从 iOS 7 开始, 一旦手机锁屏, 后台应用将会很快被暂停, 之后当系统被唤醒时, 那些暂停的后台应用会一起继续运行. 现在的 iOS 后台管理很智能, 他会记忆你每天什么时段打开什么应用, 经过一段时间后, 他会在适当时间唤醒相应的应用. iOS7 新增三种后台模式:
Baxkground Fetch 后台应用刷新
iOS 7 之前的应用必须在打开时才能联网获取数据, 而它可以让应用在后台直接获取数据.
Silent Remote Notifications 静默推送唤醒
iOS 7 之前当收到消息后, 只有打开应用才能从 APNS 获取推送的具体消息, 现在在收到消息后, 会自动唤醒相应的 App , 让该 App 在后台获取消息, 再通知用户.
Background Transfer Servce 后台传输
以前一旦下载被转移到后台最多只能持续运行 549 秒(9.9 分钟), 现在所有的下载任务会交给系统独立的进程去完成, 不管 App 在前台, 挂起还是被杀掉, 下载都在继续进行.
自动清理机制
iOS 系统在安装应用或者使用过程中存储空间不足时, 会自动清理一些应用的缓存以释放空间.
App 更新推送
当 App 有新版本时, 可以在 App store 里更新应用. App 在安装的时候, 会在数据库里 appid 对应的列表下新增版本号的关键字. 用户在[更新] 界面刷新操作后, 发送请求查询用户表, 并关联 App 信息表获取到用户安装过的每一款 App 的最新版本号列表. 然后把最新版本号列表中的 App 版本号, 与本地的 App 版本进行比对, 如果最新版本号列表中的版本号大于本地版本号, 则会有更新提示.
五, 卸载
iOS 文件目录结构:
/: 为根目录
Applications: 存放所有的系统 App 和来自 Cydia 的 App, 不包括从 App Store 下载的 App
Developer: 供开发者使用
Library: 系统资源, 用户设置
System: 系统的重要组成部分
User: 用户目录, 实际指向 /var/mobile
bin: 存放用户级可执行文件, 如 ls,mv 等
dev: 设备文件
etc: 存放系统脚本, hosts 配置, SSH 配置文件等
sbin: 存放系统二进制文件
usr: 用户工具和程序
var: 变量文件, 在正常运行的系统中其内容不断变化的文件
应用都是安装在 / var/mobile/Applications 目录下, 且应用沙盒机制, 每一个应用分配自身的存储空间, 不能越界访问. 应用程序沙盒目录下有三个文件夹 Documents,Library(下面有 Caches 和 Preferences 目录),tmp.Documents: 保存应用运行时生成的需要持久化的数据 iTunes 会自动备份该目录. Library/Caches: 一般存储的是缓存文件, 例如图片视频等, 此目录下的文件不会再应用程序退出时删除, 在手机备份的时候, iTunes 不会备份该目录. Library/Preferences: 保存应用程序的所有偏好设置 iOS 的 Settings(设置),iTunes 会自动备份该文件目录下的内容. tmp: 临时文件目录, 在程序重新运行的时候, 和开机的时候, 会清空 tmp 文件夹.
iOS 中 App 对本地存储只能访问到自己的根目录, 再往上就没有权限了. 在删除应用时, App 自身的存储空间的根目录会直接删除, 在机制内不会留下残留文件.
Mac OS
Mac OS 是基于 Unix 内核的图形化操作系统; 由苹果自行开发, 不对外销售, 一般情况下在普通 PC 上无法安装, 只安装于苹果的设备中. Mac OS 虽然也对应用有较严格的管理机制, 但与手机端 iOS 系统相比, 用户具有更多的权限.
一, 开发
Mac OS 应用的开发过程与 iOS 的开发类似, 需要付费注册开发者账号, 同样使用 Xcode 作为开发工具.
二, 发布
应用开发完成后, 发布方式与 iOS 下有所不同. 除了在 App store 线上发布, 还可以在平台以外发布. Mac 开发下的证书有 5 种:
开发证书:
(1)Mac Development: 用于开发和测试的证书, 跟 iOS development 证书一样; 运行在指定设备上需要把设备的 UUID 添加到 devices 里面去.
发布证书:
Mac App Store
(2)Mac App Distribution: 这个用于 Xcode 自己把. App 文件上传到 Mac App Store, 具体的上线过程与 iOS 应用类似.
(3)Mac Installer Distribution: 这是用于开发者自己把. App 文件打包成 .pkg 文件, 再用 Xcode 自带的 App Application Loader 上传到 Mac App Store , 可用于上传到 store 前模拟真实的 store 环境.
Developer ID
(4)Developer ID Application: 这个用于开发者使用开发者帐号签名, 导出一个线下发布版本的 .App 文件, 但是由于脱离了苹果的 Mac App Store, 还是加上许可协议打包成 .pkg 文件再发布比较好, 给用户一个决定是否安装的机会. 这就要用到第 5 个证书.
(5)Developer ID Installer: 用于开发者打包, 同时加上开发者帐号签名, 打包生成一个. pkg 的安装包, 可以装到任意一台 Mac 电脑上执行安装过程.
5 种证书, 开发证书用于开发和测试, 发布证书就对应着 App store 和线下两种发布形式. 根据需要的发布形式创建对应的证书, 证书的创建过程可参考 iOS 应用的证书创建, 发布的具体过程可以按照官方文档和 Xcode 的提示一步步来. 当然如果不想用证书也不担心用户拒绝来源不明的应用的话, 也可以不用任何证书签名打包应用, 用默认的签名方式就可以.
三, 安装
Mac OS 上对于应用的不同发布形式, 也有不同的安装方法, 可以分为三种.
1. 对于 App store 上的应用, 即上一部分的 (2)(3) 发布方式, 用户可以直接登录自己的苹果账户, 进行购买或者获取资源下载, 对软件的购买在平台完成, 苹果会抽取一部分分成. App store 上的应用经过苹果内部人员的审核和测试, 本身会具有更高的完整度, 质量和运行稳定性. 但是国内应用的很多软件 App store 都没有, 需要线下的方式进行安装.
2. 第二种安装方式是线下的. App 格式的应用的安装, 即上一部分的 (4) 发布方式. 这种用户可以自行从网上搜索下载源, 一般下下来的安装文件是一个. dmg 格式的磁盘映像, dmg 是苹果的压缩镜像文件, 类似于 Windows 下的 ISO, 双击打开后会给系统挂上一个类似移动硬盘的虚拟磁盘, 安装完后可以右键弹出. 它是 macOS 应用软件通用的打包格式, 里面一般包含 "应用程序名. app" 的图标和一个应用程序文件夹 (/Applications) 快捷方式. 直接将图标拖曳至应用程序文件夹, 即可完成安装, 非常快捷.
3. 第三种是. pkg 安装包的安装, 即上一部分的 (5) 发布方式..pkg 属于系统级软件的安装程序, 类似于 Windows 中的. exe 安装程序, 会阅读许可协议并选择安装位置, 安装内容, 一般会修改系统配置, 权限较高, 需要 sudo 授权.
对于一些来源不明或没有证书的应用, 在打开安装程序时有时会出现 "文件已损坏, 打不开". 这是由于系统的安全机制对来源不明的软件的限制. 可以通过在命令行里修改权限, 在系统偏好设置的安全性与隐私设置里, 改成允许任何来源的应用.
有时还会提示 "来自身份不明的开发者", 这时同样在偏好设置的安全性与隐私设置里, 可以看到要打开的应用被阻止的提示, 点击 "仍要打开" 即可.
苹果的应用为. App 的格式, 既是一个包, 包含应用的全部内容, 可以右键显示包内容, 对里面的文件或配置进行修改 (具有比 iOS 更高的权限), 同时也是一个可执行文件, 安装在 Applications 文件夹后会自动出现在系统的 Launchpad(启动台) 里.
四, 卸载
Mac 上对于应用的卸载, 由于安装方式不同, 卸载方式也不同. App store 里安装的应用, 类似于 iOS, 在 Launchpad(启动台)里长按图标, 点叉号即可卸载. 线下的 App store 平台外自己安装的应用极少数会自带卸载程序, 多数直接在 Applications 文件夹里右键删除即可. 只是对于. pkg 安装包安装的应用, 由于有时具有较高权限, 可能会修改系统配置, 所以删除应用后有时可能会有卸载残留, 可以通过第三方卸载软件或手动删除.
watchOS
watchOS 是苹果公司基于 iOS 系统开发的一套使用于 Apple watch 的手表操作系统. 它的应用的开发与上线与 iOS 相同, 用户只能通过 App store 来安装应用. 在 2019 年 6 月之前, 对应用程序的安装不能在 apple watch 上直接进行, 只能结合 iPhone 使用. 连接之后在 iPhone 上打开 Apple Watch 应用程序, 来安装需要的表上应用. 安装完成后, 会首先在 iPhone 上面显示. 需要说明的是, Apple Watch App 应用程序都是必须要配合 iPhone 使用的, 因此所有安装到 Apple Watch 上面的应用程序, 都会同时安装到 iPhone 上. 2019 年 6 月之后发布的新的 watchOS 系统, 自带 App store, 不用再连接 iPhone 来安装应用, 可以直接在 App store 里获取安装.
卸载应用也是两种方式, 既可以在 apple watch 内直接卸载, 也可以与 iPhone 配对, 通过 iPhone 里的 apple watch 应用来管理手表应用.
tvOS
tvOS 是苹果公司专门为 Apple TV 设计的操作系统, 基于 iOS.2016 年 3 月发布了 tvOS 9.2 操作系统. Apple TV 是苹果公司推出的一款高清电视机顶盒产品, 用户可以通过 Apple TV 在线收看电视节目, 也可以通过 Airplay 功能, 将 iPad,iPhone,iPod 和 PC 中的照片, 视频和音乐传输到电视上进行播放. tvOS 也可以安装一些应用, 具有独立的应用生态, 通过自带的 App store 进行搜索和安装.
tvOS 应用的开发与发布也与 iOS 类似, 需要注册成为开发者, 使用官方的开发工具 xcode 进行开发, 开发与发布同样需要创建证书. 具体过程均与 iOS 相同.
在国内目前用户不多, 不能直接收看国内的有线卫视节目, 需要联网安装 App 来收看电视台.
苹果系统与其他系统比较
iOS 与 macOS 对比
两个系统都是苹果自主研发的系统, 但我们也可以看出, macOS 的用户比起 iOS 拥有更广的权限, 可以访问系统资源, 读写系统目录, 系统文件, 也可以访问应用内部目录, 对其配置文件进行修改, 还可以下载安装来自任何来源的应用. 相比之下, iOS 的系统生态就更加封闭, 使用者无法查看系统文件资源, 也不能访问应用内部, 只能通过应用的接口来使用和管理应用. 而对于广大苹果手机用户而言, 他们所使用的唯一的应用安装方式就是通过官方的 App store.
iOS 系统应用与安卓对比
具有安装来源不同, 用户权限不同, 运行机制不同, 后台机制不同, 响应处理指令权限不同几大区别. 相比之下优点: 1)所有上线应用经过审核, 具有更高的稳定性, 流畅度, 安全指数, 优化性, 且可以保护版权, 安卓应用开发者随意开发, 参差不齐. 2)应用具有较低的权限, 可以更好的保护用户隐私, 相比之下, 安卓许多应用如不开放权限则不让用户使用. 3)通过优先响应屏幕和独特的对内存管理的方式使其具有更流畅的运行效果. 4)iOS 软硬件垂直整合, 只运行在苹果设备上, 安卓可以运行在多种设备上, 所以 iOS 上的应用有更好的兼容性.
缺点: 1)安卓系统开放, 且开发门槛低, 所以资源多, 开发者多, 创新也多. 2)安卓系统用户权限大, 所以操作更灵活, 也更加个性化.
Windows 与 macOS 应用对比
开发门槛不同: Mac 应用开发成本大, Windows 程序任意开发者均可以免费开发.
安装来源不同: Windows 可以随意安装程序, Mac 的可以通过 App 平台或平台之外, 均会验证证书, 质量更高.
安装方法不同: Windows 安装包进行安装, Mac 可以应用商店直接获取, 或者直接复制 App 到应用程序, 或者安装包安装.
应用文件结构不同, Windows 除了安装根目录, 还会写入注册表信息, 通过 exe 执行文件启动. Mac 的 App 文件既是整个应用包, 同时是启动入口.
卸载方式不同: Windows 通过卸载程序, Mac 直接删除.
苹果系统中的安全机制
Apple ID 双重认证
首次登录一台新设备时, 除输入密码外, 还需要在信任设备上的授权才可以登录. 输入验证码后, 即确认信任这台新设备. 由于只输入密码不再能够访问帐户, 因此双重认证显著增强了 Apple ID 以及所有通过 Apple 储存的个人信息的安全性. 登录成功后, 系统将不会再次要求信任设备的验证, 除非完全退出登录帐户, 抹掉设备数据或出于安全原因而需要更改密码. 受信任设备是已使用双重认证登录的设备, 可以是装有 iOS 9 及更高版本的 iPhone,iPad 或 iPod touch 或者装有 OS X El Capitan 及更高版本的 Mac. 受信任电话号码是指可通过短信或自动语音电话接收验证码的号码. 您必须至少验证一个受信任电话号码才能注册双重认证.
代码签名
苹果也是通过代码签名来保证每一个安装到 iOS 上的 App 都是经过苹果官方允许的, 防止盗版软件, 病毒入侵, 静默安装等. 苹果也是通过代码签名来保证每一个安装到 iOS 上的 App 都是经过苹果官方允许的, 防止盗版软件, 病毒入侵, 静默安装等.
可信引导
iOS 设备开机后采用一种称为可信引导的方式进入系统. 引导过程中, 安全只读内存 (SecureROM) 是首先被引导的部分, 其中嵌入了根证书 (Root Certificate)用以检查下一步所加载组件的 RSA 签名. 在随后的每个步骤中, 系统校验下一步骤所要加载组件的 RSA 签名. 这一信任链 (Chain of Trust) 保证了系统启动过 程中的所有组件没有被破坏和修改.
沙盒机制
沙盒也叫沙箱, 英文 standbox, 其原理是通过重定向技术, 把程序生成和修改的文件定向到自身文件夹中. 在沙盒机制下, 每个应用程序都有自己的存储空间, 程序之间的文件夹不能互相访问. iOS 系统为了保证系统安全, 采用了这种机制. iOS 应用程序在安装时, 会创建属于自己的沙盒文件, 应用程序不能直接访问其他应用程序的沙盒文件, 当应用程序需要向外部请求或接收数据时, 都需要经过权限认证, 否则, 无法获取到数据. 应用程序中所有的非代码文件都保存在沙盒中, 比如图片, 声音, 属性列表, SQLite 数据库和文本文件等.
数据加密
iOS4 及以后的系统使用数据加密机制来保护文件系 统中的系统和数据分区. 系统和数据分区中的数据将由一 个基于硬件设备的密钥进行加密. 在 iPhone3GS 以后的设 备上, 该密钥存储于一个 AES 加密加速硬件上. 这个基 于硬件的密钥不能被 CPU 所访问, 只有在加解密时才能 由该加速器获取. 通过这种机制, 直接从硬盘上被取走的 原始数据就无法被正确解密. 同时, 数据加密机制还提供 了多种加密策略供应用程序选择. 应用程序可以选择对一 些敏感文件使用 NSFileProtectionComplete 策略而不是默认 的 NSFileProtectionNone 策略加密数据.
疯狂肆虐的电脑病毒几乎都是针对 Windows 的, 由于 Mac 的架构与 Windows 不同, 沙盒机制, 使用人数少, 研究成本大, 对应用安装的管控力度, 所以很少受到病毒的袭击.
参考资料
- [1] Bucicoiu M, Davi L, Deaconescu R, et al. XiOS: Extended application sandboxing on iOS[C]//Proceedings of the 10th ACM Symposium on Information, Computer and Communications Security. ACM, 2015: 43-54.
- [2] Mohamed I, Patel D. Android vs iOS security: A comparative study[C]//2015 12th International Conference on Information Technology-New Generations. IEEE, 2015: 725-730.
- [3] Ahmad M S, Musa N E, Nadarajah R, et al. Comparison between Android and iOS Operating System in terms of security[C]//2013 8th International Conference on Information Technology in Asia (CITA). IEEE, 2013: 1-4.
[4] 安迪. iOS 真的是 "伪后台" 吗?[J]. 个人电脑, 2016(2):86-88.
[5] 刘乐廷, 李敬兆, LIULe-ting, et al. iOS 内存开发管理机制的研究[J]. 计算机与现代化, 2013(3):196-199.
[6] 陈佳霖, 王轶骏, 薛质. iOS 系统数据安全研究[J]. 信息安全与通信保密, 2012(8):100-102.
[7] Apple 官方开发者账户帮助 https://help.apple.com/developer-account/?lang=zh-cn#/dev7a05c5ce1
[8] iOS 最新应用上架 App Store 流程 https://www.jianshu.com/p/e5ac7b05750a
[9] Apple Developer-App Store 审核指南 https://developer.apple.com/cn/app-store/review/guidelines/#in-app-purchase
[10] Windows 使用 Appuploader 上架应用 https://www.jianshu.com/p/6f50130b6950
[11] 苹果企业账号发布 App 详解 https://www.jianshu.com/p/0418f5051185
[12] Provisioning Profile https://www.jianshu.com/p/0affef7cef69
[13] iOS 包签名原理 https://www.jianshu.com/p/b7416aef5f5c
[14] Mac App 发布的最后 1km https://sspai.com/post/40269
来源: https://www.cnblogs.com/sssssaylf/p/12330687.html