创建优质iOS应用程序的9条原则

这些原则基于heroku的著名方法,适应了ayios开发的现实(缺少需要几天才能完成和减慢部署速度的容器,Xcode仅适用于罂粟)。


本文是简短介绍,可以在iOS因子上找到完整的系列,还提供俄语翻译。 github上的开源iOS因子项目正在不断完善,并欢迎新想法。 我也参与了它的开发。 该项目由Fastlane的创建者Felix创建。


TL; DR


  • 依赖项 :必须明确指定(Xcode版本,CocoaPods,podfile中的依赖项版本)。 这使得新开发人员可以在任何Mac上播放该版本。 还要重复6个月前使用的组装。
  • 配置 :代码中没有配置,随应用程序一起提供,并且可以空中更新
  • 应用程序开发/工作均等 :保持开发,登台和生产环境尽可能相似
  • 部署 :自动化部署,因此您可以从任何计算机上释放它。
  • 本地与Beck :保持iOS应用通用性,以便尽可能不使用后端即可工作
  • 向后兼容的API :不要以为每个用户都可以升级到最新版本
  • 应用程序版本控制 :自动化版本和构建升级
  • 回滚 :导致问题的回滚程序集
  • 数据存储 :遵循Apple关于数据存储的建议



依存关系


应用程序使用依赖项声明清单来完全准确地声明其所有依赖项。
这包括Swift,Xcode,CocoaPods,Carthgae和Fastlane的特定版本。 另外,podfile和cartfile中的所有依赖项都必须指定特定版本。


显式声明依赖关系的优点之一是,它使得为新开发人员配置应用程序变得容易。


在指定特定依赖项的帮助下,您可以重现6个月前使用的构建,因为它会使用相同版本的Xcode,CocoaPods和Swift,因此知道它将被构建。


限制-由于iOS开发不能包含在容器中,因为它已经用于Web开发,因此在苹果提供正式解决方案之前,我们仅限于尝试满足此要求的第三方工具。 有一个称为Veertu的第三方商业(封闭)解决方案,可让您在Apple硬件上创建虚拟MacOS环境。




构型


代码不依赖于环境,但是配置依赖于环境。 因此,应将代码存储在资源库中,并将配置存储在环境中。 检查配置和应用程序代码是否正确分离是一个事实,即应用程序代码库可随时免费使用,而不会损害任何私有数据。


在构建时有许多输入配置值的方法。


  • 配置文件(JSON或YAML文件)
  • cocoapods-keys隐藏键并将它们在构建期间应用到您的iOS应用程序
  • 定制解决方案(例如,使用构建阶段)

由于iOS平台上的部署比服务器上的部署要慢得多,因此您可能需要一种通过空中更新(OTA)的配置来快速响应问题的方法。


OTA配置更新使您可以立即:


  • 运行A / B测试以仅对部分活动用户启用某些功能或更改用户界面。
  • 更改API密钥
  • 更新已更改的Web主机或其他URL
  • 远程禁用功能或隐藏按钮

实施OTA更新时,一些潜在的方法是:





应用开发/工作平价


从历史上看,开发(开发人员在应用程序的本地部署上进行实时更改)和应用程序的操作(最终用户访问App Store中的应用程序部署)之间存在重大差异。
这些差异出现在三个方面:


  • 时差
  • 员工差异
  • 刀具间隙:

解决方案:


  • 缩短时间差:开发人员可以编写代码,并将在几小时甚至几分钟内完成部署。
  • 减少人员差异:编写代码的开发人员会积极参与其部署,并在应用程序运行时监视其行为。
  • 缩小工具差异:使应用程序的开发和工作环境尽可能相似。



部署方式


相关性原则所述,代码存储库应包括创建,测试和部署iOS应用程序所需的所有相关性。


不幸的是,由于Xcode应该可以在MacOS上运行,所以我们不能使用Web上的容器。 在虚拟环境中运行macOS充满技术和法律问题。


目前,iOS开发人员可以使用的最佳方法是:



许多公司使用“发布培训”的概念:发布新版本应用程序的时间表。 发布火车“离开”时与主分支(主版本或发布版本)合并的所有代码都将发送到App Store。 大多数大型iOS应用程序都采用了这种方法。




本地与贝克


近年来,一些开发团队已开始使用需要较少开发工作的方法,这些方法降低了用户体验的质量,将更多逻辑移至后端,并使iOS应用程序成为显示服务器结果的瘦客户端。


由于多种原因,应用程序应在设备上执行尽可能多的业务逻辑和计算:


  • 机密性:避免将数据发送到远程服务器
  • 速度:将数据发送到服务器并等待响应需要时间,并且可能导致崩溃(例如,WiFi状况不佳)
  • 数据使用量:用户经常有每月数据限制
  • 扩展:如果您的应用程序变得流行,则您有责任扩展后端服务。
  • 电池寿命:手机很贵
  • 可靠性:在某些国家/地区,LTE / 3G连接仍然不佳

如果您的应用程序需要所有功能的Internet连接(例如,社交网络应用程序或旅行共享应用程序),则在没有Internet连接来访问历史数据(例如,最新旅行,最近的直接交流)。




向后兼容的API


尽管您的大多数用户将在几周内更新到最新版本,但总会有一些用户不会。 这可能有几个原因。 通常这是由于所使用的iOS版本引起的,由于设备的使用时间,它们无法始终更新。


基本概念是您不是在更新现有的API,而是添加一个新的API并让它们并行工作


https://your-api.com/1.0/drivers.json https://your-api.com/1.1/drivers.json 



应用程序版本控制


版本和内部版本号一起用于标识应用程序中的特定应用程序。


  • 版本号(CFBundleShortVersionString) -在Xcode中(CFBundleShortVersionString)为版本
  • 内部版本号(CFBundleVersion) -在Xcode中(CFBundleVersion)为内部版本

在当今的iOS开发中,没有理由您应该手动更改这些数字。 相反,您需要一个可靠且自动化的系统来使版本保持最新。


Xcode具有一个称为agvtool的内置工具。




回扣


App Store最初不允许回滚,因此本节介绍如何使用可用方法获得类似结果。


里程碑版本-使用里程碑版本,您可以从少量活动用户开始,将程序集缓慢推出到产品中


但是,即使在分阶段发布的情况下,也无法完全撤回该程序集:将程序集安装在用户设备上之后,更改此程序集的唯一方法是分发具有更新的版本/内部版本号的新版本。


与分阶段发行版一样,只能通过以下步骤更新App Store和TestFlight程序集:


  1. 返回您的版本控制系统到您要回滚的状态
  2. 增加项目的版本和/或内部版本号
  3. 创建并签署您的申请
  4. 通过Beta服务或App Store分发您的应用程序
  5. 用户必须在手机上更新应用程序。

上述步骤可以手动执行,但是建议该过程完全自动化,以便能够快速响应。


替代方案:重新签名旧版本


  1. 引入回归之前,请访问旧程序集(.ipa文件)
  2. 更新Info.plist文件中的版本/内部版本号
  3. “再次签名”旧版本
  4. 作为新版本分发

但是,“签名” iOS应用程序通常会带来更多问题,尤其是因为Xcode命令行工具无法提供实现此目的的好方法。




资料储存


根据Apple的建议存储数据和配置对于应用程序的生命周期至关重要,尤其是在涉及iCloud同步,升级到新手机以及从备份还原手机方面。


确保遵循官方的Apple iOS数据存储准则


  • Documents :使用此目录自定义内容,它将被存档
  • Caches :使用此目录Caches的数据。
  • tmp :使用此目录存储临时文件
  • 对文件使用do not back up属性

切勿在这些目录中存储用户机密信息(例如密码或会话)。 请改用Keychain API。

Source: https://habr.com/ru/post/zh-CN461317/


All Articles