2009-09-21 24 views

Trả lời

28

Cú pháp bề mặt của dự án Xcode là "kiểu cũ kiểu". Bạn có thể dễ dàng chuyển đổi nó thành một XML plist bằng lệnh

plutil -convert xml1 -o - myproj.xcodeproj/project.pbxproj 

Lưu ý đây không phải là "XML thực" nhưng cấu trúc plist Mac OS X được thể hiện bằng cú pháp XML; nó bao gồm gần như hoàn toàn các từ điển và mảng từ khóa-giá trị khóa. Xcode sẽ đọc biểu diễn XML nhưng chuyển đổi nó trở lại thành "plist kiểu cũ" khi dự án được mở.

Cấu trúc và mối quan hệ của các mục trong plist theo cấu trúc của dự án. Các UUID được sử dụng để tham chiếu chéo các mục giữa dự án và các mục tiêu của nó, và giữa dự án và các tệp người dùng trong trình bao bọc dự án.

Khóa 'isa' xác định từng loại đối tượng. PBXProject chứa các đối tượng PBXFileReference, PBXGroup, PBXNativeTarget và PBXBuildConfiguration.

Các mục tiêu có các đối tượng PBXBuildPhase có chứa tham chiếu chéo tới tham chiếu tệp; BuildConfigurationLists lưu trữ cài đặt xây dựng cho các mục tiêu và các cài đặt đích khác như loại và tên mục tiêu.

BuildConfigurationLists cross-reference buildConfigurations, từ đó chứa từ điển của buildSettings.

Tôi khuyên bạn nên xem văn bản theo kiểu cũ theo kiểu cũ, vì nó dễ đọc hơn nhiều và thực sự có nhận xét nội tuyến để cho bạn biết điều gì là gì. Sau đó, bạn có thể sử dụng các công cụ XML để chỉnh sửa hoặc viết các tệp dự án theo ý thích của bạn.

+0

Cảm ơn phản hồi này. Đây là một điều tốt đẹp để dẫn dắt tôi bắt đầu. Tôi chắc chắn sẽ cho bạn biết làm thế nào nó đi. –

+2

có thể hoàn nguyên này không? xml quay lại pbxproj? – thndrkiss

+0

@thndrkiss Xcode sẽ vui vẻ đọc bất kỳ định dạng danh sách nào (xml, Jason, v.v.) và sẽ hoàn nguyên về chế độ lưu gốc. Nếu sử dụng ObjC/Swift có lẽ không cần phải chuyển đổi sang XML vì bạn có thể đọc tệp trực tiếp vào một NSDictionary. –

21

tôi đã kết thúc việc tạo ra một, và nó được lưu trữ trên github đây:

https://github.com/jasperblues/XcodeEditor

Cho phép tiêu đề, tác phẩm danh sách, thêm các tập tin nguồn , đặt tệp nguồn làm thành viên của mục tiêu, thêm hình ảnh, tạo nhóm, v.v.).

Nó hoạt động bằng cách thao tác nội dung của tệp project.pbxproj. Được sử dụng trong:

  • Ít đau đớn: Thử nghiệm chức năng tự động cho ứng dụng di động. (Edit: bây giờ là một phần của công cụ Xamarin).
  • Trình trợ giúp cấp: Khung RAD để phát triển trò chơi 2D trên iOS & Android.
  • TextMate
  • Apportable
+0

+1 Rất tuyệt! Tôi sẽ phải kiểm tra nó ra! –

3

Hãy thử điều này một: https://github.com/sap-production/XcodeProjectJavaAPI

Nó có thể đọc và viết bất kỳ tập tin Danh sách tài sản và chứa một mô hình ngữ nghĩa để đọc và thao tác tập tin dự án Xcode. Mô hình ngữ nghĩa đang ở giai đoạn đầu nhưng có thể dễ dàng mở rộng.

Nó cũng được sử dụng nhiều trong plugin Xcode Maven của SAP, sẽ được phát hành trong tháng này.

2

Có một gói Python tuyệt vời để thực hiện việc này. Các tài liệu không phải là tuyệt vời, nhưng mã nguồn là khá tổ chức và bạn có thể tìm thấy những gì bạn cần.

https://github.com/kronenthaler/mod-pbxproj

-1

Đối với PHP (dễ dàng chuyển đến bất cứ ngôn ngữ bạn cần), chỉ ghi rất cơ bản:

function modifyPlistXCodeProject($file_path,$app_name,$bundle_identifier,$latest_version,$bundle_version) 
{ 
    $data = file_get_contents($file_path); 
    $changes = Array(); 
    $changes['PRODUCT_BUNDLE_IDENTIFIER'] = $bundle_identifier; 
    foreach ($changes as $key => $value){ 
     $data = oldStylePlistReplace($data,$key,$value); 
    } 
    file_put_contents($file_path, $data); 
} 

function oldStylePlistReplace($data,$key,$value){ 
    $e = explode($key,$data); 
    for ($i=1;$i<count($e);$i++){ 
     $row_i = $e[$i]; 
     $nextline_pos = stripos($row_i,"\n"); 
     $text_i = '= '.$value.';'.substr($row_i, $nextline_pos); 
     $e[$i] = $text_i; 
     //var_dump(substr($text_i,0,100));exit(); 
    } 
    return implode($key,$e); 
} 
Các vấn đề liên quan