Apple Watch预生成操作以更改storyboard customModule引用

我目前有一个项目与3个不同版本的相同的应用程序(不同的品牌等),这是工作得很好。 从那以后,我添加了3个新的苹果手表目标(每个应用“版本”1个),其中2个参考“主”Apple Watch目标中的文件。

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

但是,记住每次需要运行/构build应用程序版本/目标时切换这是一个痛苦,而不是一个真正的长期解决scheme。

我创build了下面的命令,我想要在正确的时间运行,以便在编译前更改故事板引用。

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

我也得出结论,我可能会想在应用程序编译后重置更改,因为我不想有一个文件更改为git抱怨。 这就是为什么上述脚本创build一个.bak文件。 所以编译完成后打包/运行在设备上或者其他的东西,我想运行

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

我已经尝试将脚本放置在目标(watchTarget,而不是appTarget)构buildscheme中,Build- Build->Pre/Post Actions似乎没有任何效果。 我试着把它放在Run->Pre/Post Actions ,这在一定程度上起作用,但是好像在应用程序被推到模拟器之前踢了一个后置动作,从而导致应用程序崩溃(“无法运行查看设备日志”或类似的东西)。

那么我需要把这些脚本放在构build过程中的正确时间吗?

您应该使用在目标的构build阶段中添加新运行脚本阶段,将其放置在编译源之前

步骤:(从苹果 )

  1. 在项目编辑器中,select要添加运行脚本构build阶段的目标。
  2. 点击项目编辑器顶部的Build Phases。
  3. select编辑器>添加生成阶段>添加运行脚本生成阶段。
  4. 在项目编辑器中披露“运行脚本”部分。
  5. 在“运行脚本”模板中configuration脚本。

我的解决scheme是去每个手表扩展目标的生成设置 ,设置产品模块名称相同的值,例如, xxx_watch_extension 。 然后,我们应该可以select这个模块在故事板上的自定义类。

这对我来说可以。