2010-04-27 24 views
6

Có cách nào để tải tập lệnh c mục tiêu vào thời gian chạy và chạy nó với lớp/phương pháp/đối tượng/chức năng trong ứng dụng iPhone hiện tại không?Giải thích các kịch bản C Mục tiêu C khi chạy trên iPhone?

GHI CHÚ YẾU: Lý do chính tôi muốn làm điều này là để cho phép tôi để nhanh chóng chế tạo thử nghiệm một ứng dụng, và sau đó, sau khi tôi đang thực hiện một giai đoạn tạo mẫu lớn, lấy kịch bản tôi đang viết và biên dịch chúng vào thời gian xây dựng để thay thế. Tôi không bao giờ có kế hoạch vận chuyển một ứng dụng với một thông dịch viên khách quan trong đó.

Lý do tôi hỏi là tôi đang chơi với iPhone wax, một trình thông dịch tiếng lua có thể được nhúng trong ứng dụng iPhone và hoạt động rất độc đáo theo nghĩa là bất kỳ đối tượng/phương pháp/chức năng nào được công khai có sẵn trong mã C Mục tiêu của bạn được tự động bắc cầu và có sẵn trong lua.

Điều này cho phép bạn nhanh chóng thử nghiệm các ứng dụng bằng cách đơn giản làm cho cốt lõi của ứng dụng của bạn là các tệp lua nằm trong thư mục tài liệu người dùng. Chỉ cần tải lại ứng dụng và bạn có thể thử nghiệm các thay đổi đối với các tệp lua của mình mà không cần phải tạo lại ứng dụng trong XCode - một trình tiết kiệm thời gian lớn! Tuy nhiên, với Apple 3.1.3 công cụ SDK gần đây, nó đã cho tôi nghĩ rằng cách tiếp cận an toàn nhất để thực hiện kiểu thử nghiệm nhanh này sẽ là nếu bạn có thể sử dụng Objective C làm mã giải nghĩa ... Bằng cách đó, trường hợp xấu nhất bạn có thể biên dịch nó vào ứng dụng của mình trước khi phát hành. Tôi đã nghe nói rằng nguồn lua có thể được biên dịch thành mã byte, và được liên kết trong lúc xây dựng, nhưng tôi nghĩ rằng điều an toàn tối thượng sẽ là nếu nguồn kịch bản nằm trong mục tiêu c, không phải lua. Bằng cách đó, nguồn của bạn luôn luôn trong mục tiêu c, bất kể.

Điều này khiến tôi băn khoăn (tôi đã tìm kiếm, nhưng không có gì) nếu có bất kỳ ví dụ nào về cách nhúng một Phiên dịch C Mục tiêu trong ứng dụng iPhone? Điều này sẽ cho phép bạn nhanh chóng thử nghiệm ứng dụng của mình trước các lớp hiện tại được tích hợp vào nhị phân của bạn và khi bạn triển khai ứng dụng của mình, thay vì chạy các lớp thông qua trình thông dịch trong ứng dụng, bạn sẽ biên dịch chúng.

Với iPad và OS 4, bàn phím ảo và bluetooth có thể hoạt động với iPhone và iPad ... Điều này sẽ giúp loại mẫu này trở nên hữu ích hơn, ít nhất là cho thời gian dev. Nếu bạn có một thông dịch viên được tích hợp trong ứng dụng của mình và có nó trên iPad của bạn, ví dụ, bạn có thể mã chống lại thông dịch viên khi đang trên đường, mà không có XCode. Và với tôi, cách hữu ích nhất để lấy lại nguồn cho trạng thái "táo đã được phê duyệt" là nếu các tập lệnh là Mục tiêu C.

Trả lời

3

Mục tiêu-C thực sự chỉ là C với thời gian chạy và một số đường cú pháp. Đó là một ngôn ngữ được biên dịch vốn có (tôi không nghĩ rằng có bất kỳ thông dịch viên sẵn sàng sản xuất nào cho C, mặc dù tôi có thể sai).

Xcode đã từng có một tính năng được gọi là ZeroLink để tăng tốc thời gian biên dịch, nhưng đã xóa nó trong Xcode 3 vì nó gây ra quá nhiều lỗi.

+0

điểm tốt ... Tôi đã làm rõ câu hỏi của mình một chút và ý định chính của tôi là sử dụng tính năng này để tạo mẫu nhanh trên iPad trong khi tôi đang di chuyển trên đường, loại XCode di động ... –

+0

điểm vẫn đứng. Đơn giản là không có bất kỳ phiên dịch nào của Objective-C, đừng nói đến những người có thể nhúng được. – shosti

2

Vâng, có một vài điểm đáng giá để đưa lên:

  1. Tại sao giải thích đang Objective-C khi bạn có thể biên dịch nó? Tôi hiểu ý tưởng "tạo mẫu nhanh", nhưng một phần lý do để làm điều đó, ví dụ, Lua, là bởi vì Lua là một ngôn ngữ terser nhiều hơn Objective-C. Tôi không biết nếu diễn giải Objective-C sẽ có nhiều tiền thưởng không.
  2. Nếu bạn muốn có các plugin hoặc mô-đun có thể tải động trong ứng dụng của mình, bạn luôn có thể biên dịch chúng thành một gói riêng biệt và tải chúng, sử dụng NSBundle hoặc một cơ chế tương tự.
  3. Tất cả những gì đã nói, tôi không biết bất kỳ phiên dịch nào của Objective-C. Bạn có thể sẽ phải viết của riêng bạn. Tôi không chắc liệu nó có vi phạm nguyên tắc của Apple hay không: nó vẫn là mã Objective-C, nhưng tôi nghĩ rằng họ cũng có các quy tắc chống lại mã giải thích. (Tôi cho rằng họ không bao giờ hình dung một kịch bản giả thuyết, trong đó Objective-C được giải thích, mặc dù.)
+0

Tôi đã làm rõ câu hỏi của mình một chút, vì mục đích chính của tôi là nhanh chóng thử nghiệm các ứng dụng và không triển khai ứng dụng này trong một ứng dụng cho appstore, nhưng nếu không, sẽ được thực hiện! –

+0

và để làm rõ thêm, tôi muốn sử dụng điều này trên iPad, nơi không có XCode, cho phép tôi thực hiện công việc phát triển trên đường, mà không cần XCode. –

+0

Giải thích ngôn ngữ phiên dịch Từ wikipedia "Một ngôn ngữ thông dịch là một ngôn ngữ lập trình mà hầu hết các triển khai của nó thực hiện các lệnh trực tiếp, mà không biên dịch chương trình thành các chỉ dẫn bằng ngôn ngữ máy trước đó. hoặc nhiều hơn các chương trình con đã được biên dịch thành mã máy. Các thuật ngữ diễn giải ngôn ngữ và ngôn ngữ được biên dịch không được xác định rõ bởi vì, về mặt lý thuyết, bất kỳ ngôn ngữ lập trình nào cũng có thể được diễn giải hoặc biên dịch. – Nickolas

3

Nó không phải chính xác không thể được, nhưng nó sẽ không đủ dễ dàng để được giá trị nó. Mục tiêu-C không phải là ngôn ngữ thông dịch. Đây không phải là không thể vượt qua - giải thích so với biên soạn chỉ là một sự lựa chọn thực hiện trong hầu hết các trường hợp. Ví dụ, Ruby được coi là một ngôn ngữ kịch bản được hiểu là truyền thống, nhưng MacRuby biên dịch nó thành mã giống như Objective-C tạo ra. Vì vậy, nó sẽ có thể viết một thông dịch viên cho mục tiêu-C, nhưng không ai đã làm điều này. Bạn sẽ phải tự viết nó.

Ngoài ra, các quy tắc cấm thông dịch viên ngoài trình thông dịch Javascript của Apple. Cho đến nay điều này chưa được thực thi trên bất kỳ ai, nhưng nếu bạn đang cố gắng trở thành một mũi tên rất thẳng, thì mã giải thích cũng không may.

+0

cảm ơn nhận xét ... Tôi đã làm rõ câu hỏi của mình một chút, vì mục đích chính của tôi là ứng dụng thử nghiệm nhanh chóng - trong đó, với bàn phím ảo fullsize của iPad, sẽ rất tuyệt vời! Nó giống như bạn đã có một XCode di động với bạn (của các loại). –

0

Hãy xem tài liệu cho objc_msgSend() và các phần khác của Objective-C Runtime Reference. Về cơ bản bạn có thể phân tích cú pháp văn bản và gửi nó đến thời gian chạy.

+2

Trong khi tạo một trình thông dịch Objective-C chắc chắn sẽ đòi hỏi việc gửi tin nhắn đến các đối tượng, điều đó sẽ không nghi ngờ gì là phần tầm thường nhất của nhiệm vụ. – Chuck

+0

cảm ơn cho nhận xét ... tôi đã chơi xung quanh với thời gian chạy c mục tiêu một chút, và đó là một trong những điều khiến tôi nghĩ rằng có thể làm được điều này! –

1

Ch là một thông dịch viên thương mại C/C++. Nó được thực hiện bởi một công ty được gọi là SoftIntegration.

+0

có hoạt động với Mục tiêu C không? Mục tiêu C không phải là C hoặc C++ –

1

Không trên IPhone, nhưng trên Simulator, bạn có thể làm điều này với
động Mã tiêm Tool
http://dyci.github.com/

Ngoài ra còn có một công cụ khác, mà làm việc một cách hơi khác, nhưng cho phép cùng một chức năng
http://injectionforxcode.com/

1

Bạn nên có một cái nhìn tại cycript. Bạn có thể móc vào các ứng dụng, thay thế các phương thức khi đang di chuyển, thay đổi các biến, tên-bạn-nó. Đó là một ngôn ngữ lai giữa Objective-C và JavaScript. Bạn cần phải jailbreak iDevice của mình để cài đặt.

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