2011-01-22 27 views
7

Tôi sẽ sớm bắt đầu dự án iOS cỡ trung bình, một ứng dụng tập trung vào tài liệu.Phát triển Objective-C trên nền tảng iOS/Mac OS X?

Sau đó, phần mềm có thể được chuyển sang Mac OS X. Tất nhiên, toàn bộ giao diện người dùng sẽ cần phải thay đổi; đó không phải là những gì tôi yêu cầu.

Có thể viết logic lõi theo cách sao cho đa nền tảng (chỉ dành cho Mac/iOS) hoặc dễ dàng chuyển hơn không? Có ai đã làm điều này trước đây, hoặc là cách thông thường để chỉ viết mã khác nhau cho cả hai nền tảng?

Tôi biết ơn vì bất kỳ mẹo nào liên quan đến điều này, có thể là về Mã, Khung, Kiểm soát phiên bản - bất cứ điều gì. Tôi ghét phải nhận ra rằng tôi đã vẽ bản thân mình vào một góc chỉ sau khi thực tế, vì vậy tôi muốn bắt đầu cũng như có thể.

+0

Xem bài đăng này: http://stackoverflow.com/questions/1939/how-to-articles-for-iphone-development-objective-c –

+4

@Dave Everitt Bạn có thực sự * đọc * câu hỏi - điều đó hoàn toàn không -đề tài. –

Trả lời

9

Bước đầu tiên là tuân thủ mẫu MVC. Lượt xem thường cần viết lại giữa iOS và OS X như bạn nói, nhưng lớp mô hình và một số phần của bộ điều khiển có thể được sử dụng lại.

Nền tảng (NSArray v.v) và Dữ liệu cốt lõi được chia sẻ giữa iOS và OS X, vì vậy sẽ không có vấn đề gì khi viết mã Objective-C chung quản lý lớp mô hình, chẳng hạn như lưu dữ liệu vào đĩa chúng từ mạng, v.v.

Một điểm quan trọng là chống lại sự thôi thúc viết đoạn mã dài, chủ yếu giao dịch với lớp mô hình trực tiếp trong bộ điều khiển xem của bạn. Đoạn mã dài đó có thể được tóm tắt thành một phương thức hoạt động trên chính lớp mô hình; sau đó bạn có thể sử dụng lại mã đó trong ứng dụng OS X sau đó.

Ví dụ: giả sử tôi tạo bộ điều khiển chế độ xem quản lý tài liệu được hiển thị. Sau đó, trong một phương thức hành động được xác định trong bộ điều khiển xem tương ứng với một thao tác chỉnh sửa, tôi có thể viết mã trực tiếp delving vào chi tiết của lớp mô hình và thực hiện thao tác chỉnh sửa. Sau đó, tôi sẽ cần phải thực hiện một thay đổi khá lớn cho mã nguồn khi bộ điều khiển xem được chuyển đến một bộ điều khiển cửa sổ (hoặc NSDocument phân lớp). Thay vào đó, tôi sẽ thực hiện một phương thức cho hoạt động chỉnh sửa cụ thể bên trong đối tượng tài liệu, để tôi có thể gọi phương thức đó từ trình điều khiển xem trong ứng dụng iOS và từ trình điều khiển cửa sổ trong ứng dụng OS X.

+0

Xin chào, bạn có thể chia sẻ một số liên kết hoặc có thể lấy mẫu mã về chủ đề không?) –

2

bạn chỉ có thể viết bằng C, sau đó cổng nó để ios, OSX, java, android, ...

+1

Tôi đã thực hiện chính xác điều đó với phần mô hình (của MVC) của một trong các ứng dụng của tôi. Plain C chạy bên trong trình bao bọc giao diện người dùng trên Mac Classic, OS X, iOS, bên trong NDK dưới Android, PalmOS, PDK trên webOS, dòng lệnh trên linux, v.v. – hotpaw2

3

Bất kỳ Logic tinh khiết và "mô hình" lớp học cấp độ bạn tạo sẽ, trong chính, làm việc trên cả hai iOS và Mac OS X, miễn là bạn dính vào các lớp Cocoa, và SQLite/Core Data, vv các phương thức chung cho cả hai hệ thống. Điều đó nói rằng, hệ thống tệp iOS có nhiều hộp cát, không phải là một hạn chế đối với OS X và đó là điều bạn cũng sẽ cần phải giải quyết trong một ứng dụng "trung tâm tài liệu". Tuy nhiên, khi bạn nêu rõ các lớp cấp độ giao diện hoàn toàn khác nhau trên cả hai hệ thống, với iOS sử dụng các lớp UIKit khác nhau so với các lớp NS khác nhau trên OS X. Như vậy, bạn sẽ không thể chia sẻ nhiều ở cấp độ đó.

Trong điều khoản chia sẻ mã giữa hai dự án, bạn có thể tạo dự án "chung" của các đối tượng cấp thấp hơn, v.v., thêm và đây làm tham chiếu trong các dự án iOS và Mac OS X, mặc dù điều này có thể kết thúc lên chứng minh hơi đau đớn nếu mọi thứ phân tán (mà tôi nghi ngờ họ có thể). Không phân biệt, có một bài đăng trên blog tốt về chủ đề này được gọi là "Easy, Modular Code Sharing Across iPhone Apps: Static Libraries and Cross-Project Reference s" của Clint Harris đáng để đọc, mặc dù nó tập trung chủ yếu vào phía iOS của mọi thứ.

2

Tôi không biết nhiều về điều này, những người khác có thể biết nhiều hơn, nhưng nếu bạn muốn chuyển dự án từ iOS qua máy Mac thì có thể UMEKit có thể giúp bạn ...

+0

Liên kết thú vị, cảm ơn. Nhưng khái niệm có vẻ sai với tôi: Các hạn chế giao diện và các yêu cầu (và khả năng hữu dụng) cũng như các trường hợp sử dụng cho các thiết bị iOS Touch rất khác so với các máy tính để bàn, điều này dường như chỉ thực sự hợp lý cho các tiện ích nhỏ. EDIT: UMEKit thực hiện vấn đề lớn nhất với hầu hết các phần mềm đa nền tảng: Bỏ qua giao diện người dùng gốc của nền tảng. OK cho các công cụ rất nhỏ, nhưng có hại hơn. – fzwo

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