跳到主要内容
教程目录

上架前把 iOS App 图标、启动屏和多语言一次做好

App 功能写完、准备上架时,图标、启动屏和多语言往往是最后才想起来的三件事,缺一样就可能在上传时被拦下,或者上架后显示不对。这篇按操作顺序把三件事一次配好,适合已经能在真机上运行 App、准备提交审核的开发者。开始前准备好一张 1024×1024 的图标原图,以及装好 KXBuild 和 VS Code 插件的电脑,还没装的按安装页操作。

App 图标

准备原图

iOS 图标只需要一张 1024×1024 的正方形 PNG,其他尺寸都由它生成。做原图时注意三点。

  • 不要自己画圆角。系统会按设备裁成圆角矩形,自己画的圆角裁完四周会留一圈底色。
  • 不要透明通道。App Store 用的 1024 图带 alpha 通道会被拒绝,透明区域在手机上会显示成黑色。导出时选不带透明度,或者先铺一层纯色背景。
  • 主体留边。四周留出大约十分之一的空白,裁圆角后图案不会贴边。

用一张图生成全部尺寸

在 KXBuild 视图中点击工程节点下的资源目录(通常是 Assets.xcassets),打开资源目录编辑器,选中 AppIcon。

资源目录编辑器选中 AppIcon

右键 AppIcon 选「用一张 1024×1024 图生成全部尺寸…」,选中原图,所有槽位按尺寸缩放填好。图标集是单尺寸格式时只有一个 1024 槽位,编译时会自动生成各尺寸。KXBuild 模板和 Xcode 14 起新建的工程默认都是单尺寸。

两种格式的区别只在于要不要给小尺寸单独出图。

格式 什么时候用
单尺寸(一张 1024) 图案简单,缩小后依然清楚,多数 App 用这个
全部尺寸 图案细节多,20pt、29pt 这类小图要单独简化

逐尺寸的老工程想省事,右键 AppIcon 选「转换为单尺寸图标」,编辑器会提示有多少旧文件不再被引用,按提示删掉即可。

iOS 18 起用户可以把主屏幕图标切成深色或着色样式。AppIcon 里的 Dark 和 Tinted 槽位不填时系统会自动处理,想自己控制就在生成全部尺寸时把这两个外观一起填上。深色图标可以用透明背景,只有默认外观的 1024 图不能带透明通道。

编辑器打开时会自动检查,缺少 1024 图标、图片尺寸不对、带 alpha 通道都会出现在「问题」面板。上架前再点标题栏的「KXBuild: 编译检查资源目录」并选 iOS,按真实编译的规则查一遍。

Xcode 26 的 .icon 图标

.icon 是 Xcode 26 引入的 Icon Composer 图标文档,用分层方式描述图标,在 iOS 26 上能显示 Liquid Glass 的光照和玻璃效果,并随浅色、深色、着色外观变化。想让图标跟上 iOS 26 的新样式时用它,只要一张平面图标的继续用上面的 AppIcon 图标集即可,所有 iOS 版本都支持。

.icon 文件通常在 Mac 上用 Icon Composer 制作。拿到后放进工程,在资源管理器中右键 .icon 文件夹选择「KXBuild: 打开图标文档(.icon)」,可以增删图层、导入 SVG 或 PNG 素材、调整填充、Liquid Glass 和阴影等效果,并切换平台和外观实时预览,用法见图标文档编辑器。

启动屏

启动屏是点开 App 到第一个界面出来之间显示的画面,App Store 要求每个 App 都有。iOS 有两种写法,Info.plist 里的 UILaunchScreen 字典和 Launch Storyboard。新工程推荐前者,不用画界面,填几个键就行。

用 UILaunchScreen 配背景色和图片

KXBuild 模板和 Xcode 新建的 SwiftUI 工程默认带一个空的 UILaunchScreen,启动时是系统背景色,浅色模式白、深色模式黑。要换成品牌色加 Logo,先在资源目录里准备两样东西。

  1. 在资源目录编辑器左侧空白处右键「新建颜色集」,命名为 LaunchBackground,填好颜色。颜色集可以按外观分别定义,深色模式下给一个深一些的颜色。
  2. 右键「新建图片集」,命名为 LaunchLogo,在 2x、3x 槽位放入 Logo。图片按原始大小居中显示,不会拉伸铺满。

然后把这两个名字写进 Info.plist。工程里有 Info.plist 文件的,双击用属性列表编辑器打开。自动生成 Info.plist 的工程(KXBuild 模板就是这种)没有这个文件,在 App 源码文件夹里新建一个 Info.plist,内容如下,再在工程设置编辑器的 General 页 Build 分组里把「Info.plist 文件」填成它的路径,例如 MyApp/Info.plist。构建时文件里的键和自动生成的键会合并。

 1<?xml version="1.0" encoding="UTF-8"?>
 2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 3<plist version="1.0">
 4<dict>
 5	<key>UILaunchScreen</key>
 6	<dict>
 7		<key>UIColorName</key>
 8		<string>LaunchBackground</string>
 9		<key>UIImageName</key>
10		<string>LaunchLogo</string>
11	</dict>
12</dict>
13</plist>

已经有 Info.plist 的,在编辑器里找到或添加 Dictionary 类型的 UILaunchScreen,用「添加子项」加上 UIColorName 和 UIImageName 两个 String 即可。UILaunchScreen 还支持 UIImageRespectsSafeAreaInsets(Boolean,图片避开刘海和底部横条)以及 UINavigationBar、UITabBar、UIToolbar,首页带导航栏或标签栏时加上,启动到首页的过渡更自然。

iOS 会缓存启动屏。改完按 F5 看到的还是旧画面时,把 App 从手机上删掉重装,仍不变就重启一次手机。

Storyboard 启动屏

从 Xcode 带过来的老工程多数用 LaunchScreen.storyboard,它照常参与构建,启动效果不变。KXBuild 没有 Storyboard 可视化编辑,工程设置编辑器 General 页的 Launch Storyboard 只能填文件名,要改布局只能在文本模式下改 XML,或回到 Mac 上的 Xcode 里改。

启动屏只是一个背景加一个 Logo 的,建议换成上一节的 UILaunchScreen。先在 General 页清空 Launch Storyboard,再按上一节加好 UILaunchScreen,两种写法不要同时留着。

多语言

多语言分三块,App 里的界面文字、主屏幕上的 App 名称、App Store 里的商店信息。前两块跟着 ipa 走,第三块在 App Store Connect 网页上填。

界面文字用 .xcstrings

.xcstrings 是 Xcode 15 起的字符串目录,一个文件存所有语言的翻译,构建时编译成各语言的 .lproj。新工程直接用它,老工程里已有的 Localizable.strings 也能继续用。

代码里的写法不用改。SwiftUI 的 Text("Settings")、Button("Save") 里的字符串字面量会自动当作可翻译的 key,其他地方用 String(localized:)。

1Text("Settings")
2let title = String(localized: "Delete this item?")

工程里还没有字符串目录的,在 App 源码文件夹里新建一个空文件 Localizable.xcstrings。新文件要加入 App 的 target 才会编进包里。工程用的是 Xcode 16 起的文件夹同步(Xcode 里显示为蓝色文件夹)时,放进源码文件夹就算加入。KXBuild 模板和较老的工程用的是分组,执行下面的命令登记一次。

1kxbuild project add-resource -f MyApp/Localizable.xcstrings -t MyApp -P .\MyApp.xcodeproj

双击 .xcstrings 会用「KXBuild 国际化编辑器」打开,xx.lproj 文件夹里的 .strings 也用同一个编辑器,打开后各语言并排显示在一张表里。接着做三步。

  1. 点标题栏「KXBuild:从源码同步字符串」,编辑器扫描代码,把 Text("…")、String(localized:) 这类字符串全部列出来。以后代码里加了新文字,再点一次即可。
  2. 点「KXBuild:添加语言…」,选「简体中文」等要支持的语言。添加的语言会同步登记到工程里。
  3. 在表格里逐行填写翻译。源语言的文字改动后,已有翻译会标成「需复核」,提醒你回头检查。

带数量的句子(「1 item」「3 items」)右键选「按复数变化」,按语言的复数规则分别填写。不需要翻译的 key,比如品牌名,右键「切换「不翻译」」。

改完按 F5,把手机「设置 → 通用 → 语言与地区」切到对应语言,打开 App 检查。长文本在德语、俄语这类语言里容易截断,按钮和标签要留够宽度。

App 名称多语言

主屏幕上的 App 名称来自 Info.plist 的 CFBundleDisplayName。先在工程设置编辑器 General 页填好 Display Name,这是源语言下的名字。其他语言的名字用 InfoPlist.xcstrings 翻译,文件名必须是这个,放在 App 源码文件夹里,和上面一样加入 target。

 1{
 2  "sourceLanguage" : "en",
 3  "strings" : {
 4    "CFBundleDisplayName" : {
 5      "localizations" : {
 6        "zh-Hans" : {
 7          "stringUnit" : { "state" : "translated", "value" : "待办" }
 8        }
 9      }
10    }
11  },
12  "version" : "1.0"
13}

之后用国际化编辑器打开它继续加语言、改译名。相机、定位这些权限的说明文字(NSCameraUsageDescription 等)也在这个文件里翻译,key 就是 Info.plist 里的键名。

主屏幕图标下只能完整显示十来个字符,Display Name 比商店名称短一些更合适。

App Store Connect 的商店信息

商店里的名称、副标题、描述、关键词、截图按语言分别填写,和包里的翻译互不影响。

  1. 进入 App Store Connect 的 App,在「App 信息」页右上角的语言菜单里添加语言,填写这个语言的名称和副标题,各 30 个字符以内。
  2. 到版本页切到同一语言,填写描述、关键词、宣传文本和截图。某个语言没传截图时,商店显示主要语言的截图。

名称和关键词按各地区的搜索习惯写,不要直译。中国大陆的简体中文名称和关键词决定了用户能不能搜到你,值得单独斟酌。

上架前检查

  • AppIcon 的 1024 图没有透明通道,「KXBuild: 编译检查资源目录」没有报错。
  • 用了 .icon 的,在编辑器里切换浅色、深色、着色外观都看一遍。
  • 删掉 App 重装后,启动屏显示的是新的背景色和 Logo,深色模式下也正常。
  • UILaunchScreen 和 Launch Storyboard 只留一种。
  • 手机切到每种支持的语言,界面没有漏翻、没有截断,主屏幕名称正确。
  • App Store Connect 里每种语言的名称、描述、关键词都已填写,截图里的文字和语言一致。

这几项都确认后,按在 Windows 上上架 App Store构建 Release 并提交审核。