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选项。 默认情况下, xcrunSDKROOT环境变量获取SDK(请记住,这个家伙,我们稍后SDKROOT )。 我们应该强制xcrun使用macOS SDK。

接下来,我们应该从Info.plist获得项目目录和产品设置。 我们可以通过getenv使用环境变量:

今天,我们已经学习了如何在构建阶段脚本中使用Swift。 希望您喜欢本文中的提示。 如果您对此主题有疑问,请随时在此处或在Twitter @iosartem上发表评论。 Github上提供了具有完整脚本代码的整个案例项目。

谢谢阅读!


来自西伯利亚👨🏻‍💻的有胡子的iOS开发人员。 在Rosberry工作,热爱Swift,开源和我的猫。

artemnovichkov(Artem Novichkov)

artemnovichkov有54个可用的存储库。 在GitHub上遵循他们的代码。

github.com