Xcode11 LaunchScreen国际化问题

新的项目是使用Xcode11开发的。使用之前的版本开发时,开屏国际化可以通过国际化的InfoPlist.string文件配置UILaunchStoryboardName = “LaunchScreenEn”,不同的语言指定不同的Storyboard文件,来实现开屏国际化。

然鹅到了Xcode11,不好用了,配置好了以后,在iOS12上启动白屏。在iOS13中启动可以显示,但是在进入APP主页面之前,会跳到在TARGET的Info中配置的Launch screen interface file base name所指定的开屏文件,然后再跳到APP主页面。

Xcode11新增对资源的国际化(比如图片),如果开屏不指定本地化的开屏Storyboard文件,所有语言都是用同一个Storyboard,只在图片资源做本地化区分,依然无效。在iOS12上依然白屏,在iOS13设备上,先白屏,再跳到TARGET的Info中配置的Launch screen interface file base name所指定的开屏文件。

似乎无论怎么配置,在iOS13上期间都会跳转到TARGET的Info中配置的Launch screen interface file base name所指定的开屏文件。

也就是iOS13启动过程中,页面显示顺序是:

①InfoPlist.string指定的UILaunchStoryboardName -> ②TARGET的Info指定的Launch screen interface file base name -> ③APP起始页面

如果①中使用的图片是国际化的,那么将无法展示。

所以可以将①中的图片使用非国际化的,②中的图片使用国际化的,这样①和②显示的就是一样的。

在iOS12中全显示白屏。

iOS12只有一种情况不会白屏,那就是仅在TARGET的Info中指定开屏文件,开屏可以显示。但是这样就无法国际化了。

要么使用国际化开屏,这样iOS13上可以显示,但是iOS12上无法显示开屏;要么不使用国际化开屏,这样iOS13、12都可以显示开屏,但是无法国际化。难以抉择。

查了一下,截止2020年6月17日,iOS 13 占比为81%。

考虑到13占比会越来越大,暂时舍弃12的开屏吧,12只能显示全白开屏了

后续:

上传至TestFlight,iOS12手机安装后竟然展示开屏了,所以看起来这个方法可行。

总结:

为每个语言创建开屏storyboard,使用的图片不是本地化图片;

创建一个为所有语言的开屏storyboard,用的是本地化图片;

将第一个的文件名,设为本地化InfoPlist.string的UILaunchStoryboardName;

将第二个的文件名,设为TARGET的Info的Launch screen interface file base name。

发表评论

电子邮件地址不会被公开。 必填项已用*标注