macOS codesign是否仅支持签名.app后缀文件?签名二进制报错求助
问题解答
环境信息
- 系统版本:
$ sw_vers ProductName: Mac OS X ProductVersion: 10.11.6 BuildVersion: 15G31
- 可用签名身份:
$ security find-identity -v -p codesigning 1) 490E98B941A8B??????BC0711A62 "v-ca" 1 valid identities found
问题描述
尝试对名为pipip的二进制文件执行签名命令:
$ codesign -vvv -s v-ca --force --all-architectures --timestamp /Users/vzhong/test-capitan/pipip-cli/build/osspi/pipip
出现错误:
/Users/vzhong/test-capitan/pipip-cli/build/pipip/pipip: invalid or unsupported format for signature
疑问:是否必须将pipip改为pipip.app格式才能完成签名?
解答
不需要一定要改成.app格式,macOS的codesign工具支持直接签名Mach-O格式的二进制文件(包括命令行可执行文件)。出现该错误通常有以下几种原因:
- 文件非有效Mach-O格式:用
file命令检查文件类型,确认它是macOS支持的可执行格式:
若输出不是类似file /Users/vzhong/test-capitan/pipip-cli/build/osspi/pipipMach-O 64-bit executable x86_64这类内容,说明文件格式异常,需重新编译生成正确的macOS可执行文件。 - 文件损坏或不完整:编译过程可能出现异常导致文件损坏,尝试重新编译生成
pipip文件后再签名。 - 签名命令路径错误:命令中指定的路径是
/Users/vzhong/test-capitan/pipip-cli/build/osspi/pipip,但错误提示路径为/Users/vzhong/test-capitan/pipip-cli/build/pipip/pipip,路径不一致,请确认待签名文件的实际路径是否正确。 - 系统版本兼容性:Mac OS X 10.11(El Capitan)的
codesign对部分新格式支持有限,若你是用更高版本系统编译的二进制文件,可能出现格式不兼容问题,建议在同版本系统下编译后再签名。
只要确认文件是Mach-O格式的可执行文件,直接用现有文件名即可完成签名,无需打包成.app包。
内容的提问来源于stack exchange,提问作者Zhong PengQun
相关产品推荐
相关产品推荐

