假设您的 URL 方案是“myName”,那么您的 info.plist 文件中应该有一个条目,例如:
<array>
<string>myName</string>
</array>
您可以使用 sed 将 myName 更改为 newName,如下所示:
sed -i '' 's/<string>myName/<string>newName/' 'info.plist'
<string> 很重要,因为您可能不想用newName 替换其他myName 字符串,因此它会缩小范围。
根据 OP 评论更新:
我不确定您的 info.plist 文件是什么样的,但这是一个通用解决方案。如果CFBundleURLTypes 不存在,您可以创建一个template 文件,将您喜欢的内容添加到info.plist。例如:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>myName</string>
</array>
<key>CFBundleURLName</key>
<string>com.xxx.myName</string>
</dict>
</array>
所以现在您有一个名为template 的文件,其中包含之前的代码。要使其仅插入到第一个<dict> 的位置,请将info.plist 文件中的第一个<dict> 更改为<myDict>。然后,您可以检查您的模式是否存在,如果不存在,则插入template,然后将myName 替换为newName,如下所示:
if ! grep -q "<string>myName</string>" "info.plist"; then
sed -i '' "/<myDict>/ r template" info.plist
else
sed -i '' 's/<myDict>/<dict>/' 'info.plist'
fi
sed -i '' 's/<string>myName/<string>newName/' 'info.plist'
为了更简洁,您可以将之前的代码放入 bash 文件 insertURL.bash,然后运行该文件。