今天遇到一个问题就是我们项目的SDK文件,DMG在Mac上打开后不再显示 软件协议声明 SLA Software License Agreement,而是直接打开了虚拟硬盘,而同样的DMG文件在旧的Mac系统上是正常的。
为了搞定这个奇怪的问题花了不少时间,记录一下踩过的坑,防止下次再踩:
我们使用的是脚本产生DMG的方式,在设定SLA的时候,是通过脚本语言"flatten" DMG文件的形式来添加的:
hdiutil unflatten your_image_file.dmg
Rez -a /tmp/sla.r -o your_image_file.dmg
hdiutil flatten your_image_file.dmg
这里的关键是SLA的文件,而碰到的问题就出在此。
我们通过苹果提供的SLA生成工具可以得到一个默认的SLA文件,苹果的这个工具已经很老了,可以通过这个地址slas_for_udifs_1.0.dmg下载。打开它可以得到一个Instruction文件和SLAResources文件,通过如下命令可以生成默认SLA文件:
cd /Volumes/SLAs_for_UDIFs_1.0
DeRez SLAResources > /tmp/sla.r
打开SLA文件,你会看到这是一个包含了多种语言的脚本,我们可以删除其他的语言支持,只留下英文版本如下:
data 'TMPL' (128, "LPic") {
...
};
data 'LPic' (5000) {
...
};
data 'STR#' (5000, "English buttons") {
...
};
data 'TEXT' (5000, "English SLA") {
...
};
data 'styl' (5000, "English SLA") {
...
};
这里需要修改的包括"TEXT"列,这里直接输入英文版的版权信息内容即可,使用双引号包含信息内容。另外需要修改的是"STR#"即定制按钮信息:
data 'STR#' (5000, "English buttons") {
$"0006 0D45 6E67 6C69 7368 2074 6573 7431" /* ...English test1 */
$"0541 6772 6565 0844 6973 6167 7265 6505" /* .Agree.Disagree. */
$"5072 696E 7407 5361 7665 2E2E 2E7A 4966" /* Print.Save...zIf */
$"2079 6F75 2061 6772 6565 2077 6974 6820" /* you agree with */
$"7468 6520 7465 726D 7320 6F66 2074 6869" /* the terms of thi */
$"7320 6C69 6365 6E73 652C 2063 6C69 636B" /* s license, click */
$"2022 4167 7265 6522 2074 6F20 6163 6365" /* "Agree" to acce */
$"7373 2074 6865 2073 6F66 7477 6172 652E" /* ss the software. */
$"2020 4966 2079 6F75 2064 6F20 6E6F 7420" /* If you do not */
$"6167 7265 652C 2070 7265 7373 2022 4469" /* agree, press "Di */
$"7361 6772 6565 2E22" /* sagree." */
};
这是默认的展示信息,包括了版权信息页面上四个按钮以及左边提示的信息。这里添加的方式略有不同,你会看到这个示例是全编码的,事实上是字符的十六进制形式,每两个代表一个字符,另外会在起始处加一个16进制码代表这个字段的长度以便分割不同的按钮和提示信息。
比如对于"English",我们首先加上"07"代表这个字段长度为七,然后查找Convert hexadecimal to text,加上各个字符的16进制代码,最终为"07 45 6e 67 6c 69 73 68"即代表这个单词。另外起始"0006"为预留,不作变更。
而我们这个问题的根源就在于当前版本没有遵循这种写法,而是采取了如下的形式,而新版本OS系统对此解读出现了问题:
data 'STR#' (5000, "English") {
$"0006"
$"07" "English"
$"05" "Agree"
$"08" "Disagree"
$"06" "Print…"
$"05" "Save…"
$"B7" "Important — Read this license agreement carefully before clicking on the Agree button. By clicking on the Agree button, you agree to be bound by the terms of the license agreement."
};
我这里只需要英文版本的版权信息,如果需要支持多语言版本,可以参见如下引用的文章。
20180118 "license.r"文件中"SLA"部分是格式,可以删除仅用默认格式,比如最上面截图中标题最后两个粗体就是这个造成的。
引用
Adding license to a DMG file in 5 minutes or less
如何给DMG文件加上软件协议声明