【Mac开发】Mac 应用 Archive 成功后无法打开?
先查看log文件
终端运行
/path/to/YourApp/Contents/MacOS/appname
以我的app举例,出现报错:
dyld[80346]: Library not loaded: @rpath/libwhisper.1.7.6.dylibReferenced from: <76FBC0BE-06FD-39A0-88A6-E494552B4136> /Applications/WhisperTranscriberV1/WhisperTranscriber.app/Contents/MacOS/WhisperTranscriberReason: tried: '/Applications/WhisperTranscriberV1/WhisperTranscriber.app/Contents/Frameworks/libwhisper.1.7.6.dylib' (code signature in <5EF42270-5D9E-37A2-970D-F783C5EB66BE> '/Applications/WhisperTranscriberV1/WhisperTranscriber.app/Contents/Frameworks/libwhisper.1.7.6.dylib' not valid for use in process: mapping process and mapped file (non-platform) have different Team IDs), '/Applications/WhisperTranscriberV1/WhisperTranscriber.app/Contents/MacOS/../Frameworks/libwhisper.1.7.6.dylib' (code signature in <5EF42270-5D9E-37A2-970D-F783C5EB66BE> '/Applications/WhisperTranscriberV1/WhisperTranscriber.app/Contents/Frameworks/libwhisper.1.7.6.dylib' not valid for use in process: mapping process and mapped file (non-platform) have different Team IDs), '/Users/jyh/MyData/audio2text/WhisperTranscriber/WhisperTranscriber/Libraries/libwhisper.1.7.6.dylib' (code signature in <5EF42270-5D9E-37A2-970D-F783C5EB66BE> '/Users/jyh/MyData/audio2text/WhisperTranscriber/WhisperTranscriber/Libraries/libwhisper.1.7.6.dylib' not valid for use in process: mapping process and mapped file (non-platform) have different Team IDs), '/System/Volumes/Preboot/Cryptexes/OS/Users/jyh/MyData/audio2text/WhisperTranscriber/WhisperTranscriber/Libraries/libwhisper.1.7.6.dylib' (no such file), '/Applications/WhisperTranscriberV1/WhisperTranscriber.app/Contents/Frameworks/libwhisper.1.7.6.dylib' (code signature in <5EF42270-5D9E-37A2-970D-F783C5EB66BE> '/Applications/WhisperTranscriberV1/WhisperTranscriber.app/Contents/Frameworks/libwhisper.1.7.6.dylib' not valid for use in process: mapping process and mapped file (non-platform) have different Team IDs), '/Applications/WhisperTranscriberV1/WhisperTranscriber.app/Contents/MacOS/../Frameworks/libwhisper.1.7.6.dylib' (code signature in <5EF42270-5D9E-37A2-970D-F783C5EB66BE> '/Applications/WhisperTranscriberV1/WhisperTranscriber.app/Contents/Frameworks/libwhisper.1.7.6.dylib' not valid for use in process: mapping process and mapped file (non-platform) have different Team IDs), '/Users/jyh/MyData/audio2text/WhisperTranscriber/WhisperTranscriber/Libraries/libwhisper.1.7.6.dylib' (code signature in <5EF42270-5D9E-37A2-970D-F783C5EB66BE> '/Users/jyh/MyData/audio2text/WhisperTranscriber/WhisperTranscriber/Libraries/libwhisper.1.7.6.dylib' not valid for use in process: mapping process and mapped file (non-platform) have different Team IDs), '/System/Volumes/Preboot/Cryptexes/OS/Users/jyh/MyData/audio2text/WhisperTranscriber/WhisperTranscriber/Libraries/libwhisper.1.7.6.dylib' (no such file)
App 无法打开的确切原因是:
⸻
❌ 系统拒绝加载 libwhisper.1.7.6.dylib,因为签名无效
… not valid for use in process: mapping process and mapped file (non-platform) have different Team IDs
这句话的意思是:App 主程序和动态库的签名不一致,即使你没用 Apple Developer 账号签名,macOS 仍然强制它们要一致。
⸻
✅ 解决方案:移除 libwhisper.1.7.6.dylib 的签名并统一签名整个 App
你现在需要:
✅ 步骤 1:去掉 dylib 上的签名
codesign --remove-signature “/Applications/WhisperTranscriberV1/WhisperTranscriber.app/Contents/Frameworks/libwhisper.1.7.6.dylib”
对其他 .dylib 文件也执行这个命令,例如:
codesign --remove-signature “/Applications/WhisperTranscriberV1/WhisperTranscriber.app/Contents/Frameworks/libggml.dylib”
…
你可以写一个循环:
cd /Applications/WhisperTranscriberV1/WhisperTranscriber.app/Contents/Frameworks
for f in *.dylib; do
sudo codesign --remove-signature “$f”
done
⸻
✅ 步骤 2:用 ad-hoc 签名整个 App
codesign --force --deep --sign - “/Applications/WhisperTranscriberV1/WhisperTranscriber.app”
这个 - 是 ad-hoc 签名,不需要 Apple 账号,它只是为了让系统允许这些文件一起运行。
⸻
✅ 步骤 3:再次运行 App
open /Applications/WhisperTranscriberV1/WhisperTranscriber.app
这时你就不应该再遇到 Team ID 不一致的问题了。
⸻
💡 延伸说明:为什么发生这个问题?
• 有些 .dylib 被你系统默认签名(比如 clang 编译时自动带的)
• App 本体未签名或签名方式不同
• 在运行时 macOS 会校验这些模块是否“属于同一个开发者”
这就是看到的 not valid for use in process 错误。