Swift,Plist和两个吸烟脚本
从iOS 10开始,开发人员应提供有关使用用户私人数据的描述,否则应用程序将崩溃。 但是,如果将value字段保留为空,则所有操作将一直有效,直到您将新的版本发送到iTunes Connect。 该构建消失,您(或您的客户)收到有关该构建的电子邮件:
亲爱的开发人员,
我们发现您最近为“您的应用”交付商品时遇到一个或多个问题。 要处理您的交货,必须更正以下问题:
缺少Info.plist键 -此应用尝试访问对隐私敏感的数据,而没有使用说明。 应用程序的Info.plist必须包含NSCalendarsUsageDescription键,该键具有字符串值,该字符串值向用户说明应用程序如何使用此数据。
解决这些问题后,您可以重新交付更正后的二进制文件。
问候,
App Store团队
至少有三种检查方法:
- 手动检查。 绝对不会。
- 编写fastlane车道。 如果您已经使用fastlane并且了解Ruby,那么这是一个很好的方法。 Fastlane也支持Swift,但具有其他Xcode项目。
- 编写构建阶段脚本。 那是我的兄弟!
有很多很好的Build Phase示例:用SwiftLint整理代码,为CocoaPods框架复制资源等。大多数都是用Bash编写的。 但是等等,斯威夫特呢? 我可以使用Swift编写脚本吗?
除非您是此设备的幸运所有者,否则:
- 没有语法突出显示和自动补全
- 无法将脚本重复用于多个目标。 您必须将脚本代码复制粘贴到每个目标,并在每个副本中进行更改。
让我们为脚本创建一个单独的文件:
mkdir Scripts
touch Scripts/usage_description_check.swift
不要忘记通过更改其权限使脚本可执行:
chmod +x Scripts/usage_description_check.swift
接下来,添加带有该脚本路径的Build Phase脚本:
注意:选中“仅在安装时运行脚本”标志以仅在存档操作期间运行它。
我们的旅程已经开始! 🚀
将此行添加到脚本文件的顶部:
#!/usr/bin/env xcrun --sdk macosx swift
该行首先启动Swift REPL(Read-Eval-Print-Loop),其余脚本实际上是在Swift环境中编译的。 注意--sdk
选项。 默认情况下, xcrun
从SDKROOT
环境变量获取SDK(请记住,这个家伙,我们稍后SDKROOT
)。 我们应该强制xcrun
使用macOS SDK。
接下来,我们应该从Info.plist
获得项目目录和产品设置。 我们可以通过getenv
使用环境变量:
今天,我们已经学习了如何在构建阶段脚本中使用Swift。 希望您喜欢本文中的提示。 如果您对此主题有疑问,请随时在此处或在Twitter @iosartem上发表评论。 Github上提供了具有完整脚本代码的整个案例项目。
谢谢阅读!
来自西伯利亚👨🏻💻的有胡子的iOS开发人员。 在Rosberry工作,热爱Swift,开源和我的猫。