2014-10-05 17 views
13

Tôi đã sử dụng pkgbuild để tạo tệp Danh sách thuộc tính thành phần mặc định. Tệp trông giống như:Chỉnh sửa tệp plist bằng cách sử dụng tập lệnh shell

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-  1.0.dtd"> 
<plist version="1.0"> 
<array> 
    <dict> 
     <key>BundleHasStrictIdentifier</key> 
     <true/> 
     <key>BundleIsRelocatable</key> 
     <true/> 
     <key>BundleIsVersionChecked</key> 
     <true/> 
     <key>BundleOverwriteAction</key> 
     <string>upgrade</string> 
     <key>RootRelativeBundlePath</key> 
     <string>MyApp.app</string> 
    </dict> 
</array> 
</plist> 

Tôi muốn sửa đổi tệp này bằng cách sử dụng tập lệnh shell. Tôi đã thử sử dụng các giá trị mặc định là viết nhưng nó không làm gì cả.

cách để làm điều đó như thế nào? (Ví dụ: Tôi muốn thiết BundleIsRelocatable false)

Trả lời

21

Ngoài ra:

plutil -replace BundleIsRelocatable -bool false plistfilename.plist 
2

Sử dụng PlistBuddy!

Rất đơn giản và thẳng về phía trước. Ví dụ:

/usr/libexec/PlistBuddy ComponentPropertyList.plist 
Command: Set :0:BundleIsRelocatable false 
Command: save 
Saving... 
Command: exit 

Thats nó! Bây giờ BundleIsRelocatable là sai: D

-1

Sử dụng sed:

sed -i '' '/<key>BundleIsRelocatable</{n;s/true/false/;}' file.plist 

Nếu plist không phải là XML, chạy plutil -convert xml1 file.plist đầu tiên.

0

Phản hồi cuối cùng của Phil-CB here phải hữu ích.

2

Sử dụng PlistBuddy, a simple tutorial HERE.

/usr/libexec/PlistBuddy -c "Set :BundleIsRelocatable bool false" plistfilename.plist 

Nó có thể chạy như ONE dòng lệnh để cập nhật khóa/giá trị. Tôi sử dụng nó để cập nhật CFBundleVersion nói chung, có thể được tìm thấy in this post.

0

Đối với chuỗi sử dụng

plutil -replace NameOfProperty -string "yourNewValue" plistFileName.plist 
1

Một hơi muộn, nhưng đối với các bản ghi, bạn chỉ cần chỉ định đường dẫn tuyệt đối VÀ thêm phần mở rộng plist vào tên tập tin. Nếu bạn đang chạy tập lệnh của mình trong cùng một thư mục chứa tệp plist, trường hợp của bạn sẽ được dịch sang:

defaults write $PWD/YourPlistFilename.plist BundleIsRelocatable -bool false 
Các vấn đề liên quan