2012-10-11 22 views
5

Tôi đang tạo một tập lệnh tự động sửa đổi dự án iOS bằng ruby. Sau khi thêm một số tệp, tôi cần sửa đổi tệp project.pbxproj để lưu các thay đổi trong dự án.Ruby sửa đổi project.pbxproj

Tôi đã tìm thấy một phương pháp để phân tích tập tin pbxproj để json:

json = JSON.parse(`plutil -convert json -o - "#{filename}"`) 

Nhưng sau khi sửa đổi json, tôi muốn trở lại quá trình này để lưu các thay đổi trong định dạng pbxproj. Có ai biết cách nào để làm điều đó không?

Trả lời

1

Có vẻ như không có cách nào để chuyển đổi trực tiếp JSON trở lại định dạng tệp pbxproj, nhưng Xcode sẽ đọc dữ liệu được định dạng xml1 dưới dạng tệp dự án hợp lệ.

Lấy cảm hứng từ câu trả lời được chấp nhận cho Library to read/write pbxproj/xcodeproj files?, tôi quyết định thử chạy Xcode bằng JSON được chuyển đổi của dự án. Xcode đã cho tôi một lỗi nói rằng dự án không hợp lệ. Khi tôi chuyển đổi JSON sang XML bằng cách sử dụng plutil, Xcode đã đọc nó một cách tốt đẹp. Khi tôi quan sát các nội dung tập tin, tôi thấy rằng nó ở lại trong XML khi Xcode tải nó, nhưng thời điểm tôi thay đổi bất kỳ giá trị trong Xcode, nó viết lại các tập tin bằng cách sử dụng định dạng pbxproj. Nó dường như sắp xếp thứ tự các khung công tác và thư viện, nhưng điều đó có thể là do pbxproj ban đầu mà tôi xử lý được tạo ra bởi Unity3D.

Đây là một công thức nấu ăn thô cho làm thế nào để tự động chuyển đổi, thao tác, và sau đó sử dụng các tập tin pbxproj:

#!/bin/sh 
plutil -convert json -r -o project.json -- project.pbxproj 
ruby my_script.rb <project.json> project-modified.json 
plutil -convert xml1 -o project-modified.xml -- project-modified.json 
cp project-modified.xml project.pbxproj 

Tôi không biết nếu có một cách dễ dàng-automatible có Xcode mang sửa đổi tập tin trở lại định dạng ban đầu của nó, nhưng nó sẽ là tốt để gọi xcodebuild hoặc xcrun trong khi tệp ở định dạng XML.

+0

Tôi cũng phát hiện ra rằng 'plutil' là cầu kỳ về thứ tự của' -convert' và '-o'. Nó sẽ ném một lỗi nếu bạn đặt '-o' trước. – amacleod

Các vấn đề liên quan