Apple Watch pre-build action to change storyboard customModule references

倾然丶 夕夏残阳落幕 提交于 2019-12-23 06:56:44

问题


I currently have a project with 3 different versions of the same app (different branding and such), which is working just fine. I've since then added 3 new Apple Watch targets (1 for each app "version"), where which 2 of them reference the files in the "master" Apple Watch target.

Everything works fine as long as i remember to change the module reference for each storyboard view, so that it maps to the correct interface controller in the corresponding watchkit extension target.

However, remembering to switch this every time i need to run/build a app version/target is a pain and not really a long term solution.

I've created the following command which I want to be run at the correct time, such that it changes the storyboard references before it is compiled.

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

I also concluded that I would probably want to reset the change after the app was compiled, since I don't want to have a file change for git to complain about. Which is why the aforementioned script creates a .bak file. So after the compilation is done and packed/run on device or whatever, I want to run

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

I've tried placing the scripts in the target's (watchTarget, not appTarget) build scheme, Build->Pre/Post Actions which didn't seem to have any effect. And I tried putting it in Run->Pre/Post Actions which worked to some degree, but it seemed like the post action kicked in before the app was pushed to the simulator and thus crashing the application ("could not run see device logs" or something like that).

So where on earth do I need to put these scripts to have them run at the correct time in the build process?


回答1:


you should use add New Run Script Phase in your target's Build Phases, place it before the Compile Sources

Steps: (from Apple)

  1. In the project editor, select the target to which you want to add a run script build phase.
  2. Click Build Phases at the top of the project editor.
  3. Choose Editor > Add Build Phase > Add Run Script Build Phase.
  4. Disclose the Run Script section in the project editor.
  5. Configure the script in the Run Script template.



回答2:


My solution is to go the Build settings of each watch extension target, setting the Product module name to the same value, for example, xxx_watch_extension. Then we should be able to choose this module for custom classes on the storyboard.

It works fine for me.



来源:https://stackoverflow.com/questions/35039181/apple-watch-pre-build-action-to-change-storyboard-custommodule-references

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!