作为UI test_spec宿主的AppHost在Podspec中缺失主故事板配置
解决Podspec里UI Test Spec的AppHost主故事板配置问题
问题出在pod lib lint或者pod spec lint会重新生成全新的测试环境,你本地手动给AppHost设的主故事板配置根本不会被带过去。所以得直接在Podspec里把主故事板的资源和配置写死,让CocoaPods自动构建出正确的测试宿主。
具体操作步骤
1. 把主故事板加到测试Spec的资源列表里
先把你的Main.storyboard放在测试相关的目录(比如Tests/UI/AppHost),然后在Podspec的test_spec块里用resources字段把它包含进去:
spec.test_spec 'UITests' do |test_spec| test_spec.source_files = 'Tests/UI/**/*.swift' # 把主故事板文件加进来 test_spec.resources = 'Tests/UI/AppHost/Main.storyboard' # 指定你的测试宿主 test_spec.app_host = 'MyAppHostTarget' # 要是宿主是Pod内部的,调整下路径就行 end
2. 给AppHost配置主故事板的Info.plist参数
有两种方式可以搞定:
方式一:直接用xcconfig设置
在test_spec里加个xcconfig字段,直接指定主故事板的名称:
spec.test_spec 'UITests' do |test_spec| # 其他配置不变... test_spec.app_host = 'MyAppHostTarget' # 给AppHost的Info.plist设主故事板 test_spec.xcconfig = { 'INFOPLIST_KEY_UIMainStoryboardFile' => 'Main' } end
方式二:用自定义的Info.plist
要是你的AppHost还有其他自定义配置,不如直接建个专门的Info.plist(比如Tests/UI/AppHost/Info.plist),在里面把Main storyboard file base name设成Main,然后在Podspec里指定这个文件:
spec.test_spec 'UITests' do |test_spec| # 其他配置不变... test_spec.app_host = 'MyAppHostTarget' # 指定自定义的Info.plist test_spec.info_plist = 'Tests/UI/AppHost/Info.plist' end
3. 验证配置
改完之后跑pod lib lint --verbose看看构建过程,确认AppHost的Info.plist里已经有主故事板的配置,而且故事板文件也被正确复制到构建产物里了。
踩坑提示
- 主故事板的文件名要和
INFOPLIST_KEY_UIMainStoryboardFile的值一致,不用加.storyboard后缀 - 要是你的AppHost是独立Target,得确保Target配置正确,或者
app_host的路径写对 - 用CocoaPods 1.10及以上版本的话,可以试试
app_host_targets替代app_host,配置更灵活
内容的提问来源于stack exchange,提问作者Omar Raad
相关产品推荐
相关产品推荐

