2016-11-19 33 views
8

Tôi đang tìm cách triển khai kiến ​​trúc trình cắm thêm trong Swift.Kiến trúc trình cắm thêm Swift

Trường hợp sử dụng

Đơn, fx. một CLI, có một thư mục từ nơi nó được thực hiện nơi các trình cắm thêm có thể được đặt và sẽ được nạp khi ứng dụng khởi động.

Yêu cầu

  • Có thể định nghĩa một giao thức hoặc một tập hợp các giao thức plug-ins phải hoặc có thể tuân theo.
  • Swift thuần túy.
  • Nhìn vào giao thức của một trình cắm thêm đã cho.
  • Được tải động khi ứng dụng khởi động.
  • Giao tiếp với mẫu đại biểu.
  • Nhà phát triển trình cắm thêm có thể nhập giao thức, triển khai, biên dịch và đặt nhị phân trong thư mục trình cắm.

Những gì tôi đã cố gắng

Tôi đã sử dụng Process để bắt đầu một thực thi mà tôi cũng có thể thêm đối số. Nhưng điều đó không thỏa mãn các yêu cầu của tôi.

Tôi đã xem qua số post về cách thực hiện, nhưng yêu cầu phải sử dụng NSBundle và Objective-C để điều đó cũng không tốt.

Tôi không thực sự chắc chắn cách thực hiện việc này. Bất kỳ trợ giúp hoặc con trỏ nào đi đúng hướng sẽ được đánh giá cao.

+0

Bạn có dự định thực hiện công việc này trên Linux không? Còn App Store thì sao? – Kametrixom

+0

@Kametrixom Linux là một mục tiêu. App Store không phải là một yêu cầu. –

+0

Xin chào. Bạn có thể đạt được kiến ​​trúc plug-in này trong Swift không? Đây là những gì tôi cần phải làm việc ngay bây giờ. Bất kỳ lời đề nghị bạn có cho tôi? – Subi

Trả lời

1

Swift hiện không có ABI ổn định để bạn không thể dựa vào giao diện gốc. (Điều này dự kiến ​​sẽ được giải quyết bởi Swift 4.)

Tôi có thể nghĩ đến hai tùy chọn, nhưng cả hai đều dựa vào việc xác định một số loại giao thức truyền thông giữa máy chủ và trình cắm thêm. Bạn cũng sẽ phải thực hiện các yêu cầu của bạn (sự quan tâm đến các tính năng, vv) nếu bạn không thể sử dụng Objective-C.

  1. Hạ xuống C ABI. Đối với mọi chức năng bạn cần, hãy triển khai nó trên phía được gọi trong Swift với chú thích @convention(c) và khai báo nó ở phía người gọi trong tiêu đề cho liên kết bên ngoài. Bạn sẽ không thể triển khai hàm hai lần, vì vậy bạn nên xác định API dựa trên cuộc gọi lại mà trình cắm thêm tự đăng ký.

  2. Xác định giao thức truyền thông (ví dụ: dựa trên socket) và ghi các tệp nguồn Swift được nhập vào mọi trình cắm. Làm cho các trình cắm thêm có thể chạy được, khi được khởi chạy bởi ứng dụng máy chủ, bắt đầu truyền thông.

Cá nhân tôi thích phương án 2 vì nó không đòi hỏi hòa với linkers và như vậy và bạn sẽ có được thêm tiền thưởng của việc xác định loại Swift và chức năng để sử dụng các plug-in của. Ngoài ra, vì trình cắm là một đứa trẻ được chia đôi, nó có thể gặp sự cố mà không ảnh hưởng đến máy chủ.