如何通过命令行修改App Extension的Bundle identifier?
如何通过命令行修改App Extension的Bundle Identifier
当然可以通过命令行工具修改App Extension的Bundle Identifier,核心是修改Extension包内的Info.plist配置文件,再重新签名即可,具体步骤如下:
1. 使用PlistBuddy修改Bundle Identifier
macOS自带的PlistBuddy工具可以直接编辑plist文件,完全满足需求:
查看当前Extension的Bundle Identifier:
/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" /path/to/YourExtension.appex/Contents/Info.plist修改为匹配宿主应用的Bundle Identifier:
假设宿主应用的Bundle ID是com.yourcompany.hostapp,想要给Extension设置的后缀是.widget,执行以下命令:/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier com.yourcompany.hostapp.widget" /path/to/YourExtension.appex/Contents/Info.plist
2. 修改后重新签名
修改Info.plist会破坏Extension原有的代码签名,必须重新签名才能正常使用,用codesign工具即可:
codesign -f -s "你的开发者证书名称" /path/to/YourExtension.appex
如果不确定证书名称,可以用下面的命令查看本地可用的代码签名身份:
security find-identity -v -p codesigning
3. 批量处理脚本(可选)
如果要给多个宿主应用批量处理,可以写个简单的Shell脚本,自动根据宿主Bundle ID生成Extension的ID并完成修改、签名:
#!/bin/bash # 用法:./update-extension.sh 宿主BundleID Extension路径 后缀(可选,默认是.extension) HOST_BUNDLE_ID="$1" EXTENSION_PATH="$2" EXT_SUFFIX="${3:-extension}" EXTENSION_BUNDLE_ID="${HOST_BUNDLE_ID}.${EXT_SUFFIX}" # 修改Bundle ID /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier ${EXTENSION_BUNDLE_ID}" "${EXTENSION_PATH}/Contents/Info.plist" # 重新签名 codesign -f -s "你的开发者证书名称" "${EXTENSION_PATH}"
因为你用Delphi开发主应用,打包时可以调用这个脚本,把当前主应用的Bundle ID传进去,就能自动生成匹配的Extension包,再嵌入到主应用的对应目录即可。
内容的提问来源于stack exchange,提问作者zeus
相关产品推荐
相关产品推荐

