Sự khác biệt giữa Binaries nhúng và Khung liên kết là gì


87

Khi sử dụng khung công tác bên ngoài, Xcode hiện có một phần Hội nghị được nhúng cũng như phần Khung công tác được liên kết .

nhập mô tả hình ảnh ở đây

Khi bạn tải xuống một khung bên ngoài và Finder-> kéo nó vào Xcode, nó sẽ đặt khung đó vào phần Thư viện và Khung được Liên kết .

Khi bạn xây dựng một thư viện với Carthage, nó khuyên bạn nên kéo vào phần Embedded Binaries .

Cả hai dường như đang hoạt động về mặt liên kết, vì API trở nên khả dụng theo cả hai cách, hơn nữa khi thêm một khung vào phần Nhúng Binaries là nó cũng tự động được thêm vào phần Thư viện và Khung được Liên kết .

Vì vậy, ai đúng? Carthage hay phần còn lại của Internet? và tại sao có 2 tùy chọn để đưa các tài nguyên bên ngoài vào các dự án Xcode?


Và nó có hoạt động khi bạn test trên máy không?
trojanfoe

@trojanfoe có nó.
Maxim Veksler

Điều đó không có ý nghĩa gì, trừ khi đó là 1) trong phần nhị phân được nhúng hoặc 2) có bước xây dựng để sao chép khung vào gói ứng dụng trong quá trình xây dựng.
trojanfoe

2
Carthage khuyến nghị chỉ nên kéo vào "Nhúng Binaries" cho các ứng dụng OSX. Đối với iOS, họ chỉ đề xuất "Khung và Thư viện được Liên kết".
Damum

Câu trả lời:


72
  1. Liên kết- Chúng ta phải liên kết một khuôn khổ nếu chúng ta sử dụng bất kỳ API nào được xác định trong đó.

  2. Nhúng - Quy trình này sẽ đảm bảo khung được bổ sung sẽ được nhúng trong Gói ứng dụng và có khả năng giúp chia sẻ mã giữa ứng dụng và bất kỳ gói tiện ích nào. Chúng tôi chỉ nhúng các khuôn khổ của bên thứ ba chứ không phải các khuôn khổ do iOS cung cấp vì chúng có sẵn trong thiết bị. Nếu chúng tôi đang nhúng, điều đó có nghĩa là, chúng tôi cũng sẽ cần liên kết với chúng để Xcode có thể biên dịch và tạo bản dựng. Khi ứng dụng chạy trong thiết bị, thì khung nhúng sẽ được tải vào bộ nhớ khi cần.


1
Ý bạn là gì với phần "khi cần thiết"? Điều đó có nghĩa là khung nhúng được tải khi cần thiết trong thời gian chạy? Ngoài ra, bạn nghĩ khi nào thì liên kết sẽ xảy ra cho một khuôn khổ động?
bartosss

Có trường hợp nào chúng ta cần embednó và không phải linknó? Và ngược lại? Và tại sao?
allenlinli

Tôi nghĩ bạn chỉ cần liên kết các khung công tác có API mà bạn sử dụng trực tiếp trong mã, các phần phụ thuộc bắc cầu không được tham chiếu trong mã ứng dụng chỉ nên được nhúng nếu tôi đúng.
Werner Altewischer

15

Nếu bạn nhúng nhị phân, nó sẽ được đưa vào sản phẩm của bạn. Nếu bạn chỉ liên kết một thư viện hoặc khuôn khổ mà không nhúng nó, nó sẽ không phải là một phần của sản phẩm của bạn.

Tuy nhiên, trong iOS8, tất cả các framework của bên thứ 3 cần được "nhúng". Ngay cả một khuôn khổ được chia sẻ giữa các chương trình khác nhau cũng cần phải được "nhúng" vào từng chương trình đó. Trong trường hợp nó được cài đặt trên thiết bị ở một vị trí được chia sẻ, bất kỳ quá trình cài đặt nào khác sử dụng cùng một mã "nhúng" từ vị trí được chia sẻ đều có thể sử dụng lại cài đặt hiện có đó. Điều này dành riêng cho iOS8, không thể xảy ra trước iOS8 và bên ngoài thế giới iOS, câu trả lời này sẽ không chính xác.


2
"Nhúng tệp nhị phân sẽ giúp người dùng cài đặt sản phẩm của bạn dễ dàng hơn trong trường hợp họ chưa có cài đặt hoạt động của nội dung đó trên máy của họ" nghe giống như OSX, không phải iOS ... nếu họ không có thư viện đã cài đặt (tức là nó không chuẩn) thì ứng dụng sẽ không tải.
trojanfoe

nó sẽ không chỉ không tải, @trojanfoe, nó sẽ bị từ chối và bạn không thể cài đặt nó ở nơi đầu tiên (trừ khi bạn là nhà phát triển hoặc sử dụng một tài khoản doanh nghiệp ...)
dogsgod

Có thể sử dụng khung liên kết động kể từ iOS 8
Basti

Khi người dùng cài đặt ứng dụng của bạn và nếu ứng dụng đó bao gồm một khung được liên kết động, thì khung đó có thể được tìm kiếm tự động. Tuy nhiên, đây là một điểm bổ sung có thể bị lỗi trong quá trình cài đặt của người dùng, gây ra lỗi chỉnh sửa liên kết khiến ứng dụng bị chấm dứt. Vì vậy, tôi không thấy lý do gì tại sao câu trả lời chỉ nên áp dụng cho OS X chứ không phải cho iOS. Vui lòng nói rõ hơn nếu bạn thấy cần cải thiện về câu trả lời của tôi. Hoặc ủng hộ câu trả lời đó để biến một nhà phát triển đồng nghiệp trở thành thành viên SO đầy đủ, nếu bạn cho rằng câu trả lời đã chính xác;)
Basti

Đó là khía cạnh tùy chọn cho câu trả lời của bạn mà tôi phản đối. Nếu khung là của bên thứ ba thì nó phải là một phần của gói ứng dụng. Giai đoạn = Stage. Điều này cũng đúng với các ứng dụng OSX (chắc chắn đối với các ứng dụng được phân phối qua Mac App Store).
trojanfoe

0

Linkingthêm về Linkerđiều đó hoạt động tại thời gian biên dịch hoặc thời gian tải / chạy. Linker sao chép a Libraryvào một tệp nhị phân đích. Vì Frameworklà tự trị, Linkertrong trường hợp này, có trách nhiệm tìm và liên kết đường dẫn Dynamic Frameworkbên trong bộ tải hệ thống hoặc tìm và liên kết bên trong một gói .

Embeddinglà một quá trình sao chép nhị phân vào nhị phân đích. Kết quả là nó sẽ nằm bên trong.

Đọc thêm tại đây


-3

Theo hiểu biết của tôi, nhị phân nhúng chỉ bao gồm khung động có sẵn trên iOS 8 trở lên, nếu không, bạn chỉ có thể liên kết khung làm việc tĩnh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.