Apple Watch 预构建操作以更改故事板 customModule 引用

Posted

技术标签:

【中文标题】Apple Watch 预构建操作以更改故事板 customModule 引用【英文标题】:Apple Watch pre-build action to change storyboard customModule references 【发布时间】:2016-01-27 13:49:58 【问题描述】:

我目前有一个项目,其中包含同一应用程序的 3 个不同版本(不同品牌等),效果很好。从那以后,我添加了 3 个新的 Apple Watch 目标(每个应用程序“版本”1 个),其中 2 个引用了“主”Apple Watch 目标中的文件。

只要我记得更改每个故事板视图的模块引用,一切都可以正常工作,以便它映射到相应 watchkit 扩展目标中的正确界面控制器。

但是,记住每次我需要运行/构建应用版本/目标时都切换它是一种痛苦,并不是真正的长期解决方案。

我创建了以下命令,希望在正确的时间运行它,以便在编译之前更改情节提要参考。

perl -pi.bak -e 's/customModule=\"(.*?)\">/customModule=\"watchMyTarget_Extension\">/g' $SRCROOT/watch/Base.lproj/Interface.storyboard

我还得出结论,我可能想在应用程序编译后重置更改,因为我不想让 git 抱怨文件更改。这就是上述脚本创建 .bak 文件的原因。所以在编译完成并在设备或其他设备上打包/运行后,我想运行

mv $SRCROOT/watch/Base.lproj/Interface.storyboard.bak $SRCROOT/watch/Base.lproj/Interface.storyboard

我尝试将脚本放在目标的(watchTarget,而不是 appTarget)构建方案 Build->Pre/Post Actions 中,但似乎没有任何效果。我试着把它放在Run->Pre/Post Actions 中,它在某种程度上起作用,但似乎在应用程序被推送到模拟器之前发布操作就开始了,从而导致应用程序崩溃(“无法运行查看设备日志”或类似的东西)。

那么我到底需要将这些脚本放在哪里才能让它们在构建过程中的正确时间运行?

【问题讨论】:

【参考方案1】:

您应该在目标的 Build Phases 中使用 add New Run Script Phase,将其放在 Compile Sources 之前

步骤:(来自Apple)

    在项目编辑器中,选择要添加的目标 运行脚本构建阶段。 点击项目编辑器顶部的构建阶段。 选择编辑器 > 添加构建阶段 > 添加运行脚本构建阶段。 在项目编辑器中公开“运行脚本”部分。 在运行脚本模板中配置脚本。

【讨论】:

我试过这个没有成功。我需要它在构建之前和之后运行。因为它必须在我开始构建手表目标之前更改手表故事板,然后在它建成后将其改回来 @tskulbru 归档后你应该做的清理,把清理命令放在归档的 post-actions 中。 我尝试使用我的主要应用程序构建方案中的构建/存档等的后期操作来清理,但由于某种原因,它似乎还不够晚,并且更改已包含回手表应用程序中然后安装失败,因为它没有正确的更改。 @tskulbru 您需要将清理放在存档的后期操作中,而不是构建!安装发生在构建之后,您需要坚持代码提交过程,然后选择新目标,构建,测试和存档,选择另一个目标,构建,测试和存档。 好的,谢谢!如果我还需要在模拟器/连接的设备上进行测试时需要运行它怎么办,那么我应该在哪里进行清理?存档构建任务仅适用于正确导出 ipa 文件时(实际存档时)?【参考方案2】:

我的解决方案是去每个手表扩展目标的构建设置,将产品模块名称设置为相同的值,例如,xxx_watch_extension强>。然后我们应该能够为故事板上的自定义类选择这个模块。

对我来说很好用。

【讨论】:

以上是关于Apple Watch 预构建操作以更改故事板 customModule 引用的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin iOs 构建失败:故事板

苹果有没有说过贬值 xib 以支持故事板? [关闭]

更改从 Swift 中的故事板创建的弹出框的箭头颜色

在 Apple Watch Storyboard 中的图像顶部添加标签

iOS:以编程方式更改选项卡 - 故事板

如何以编程方式在 Apple Watch 上撰写电子邮件?