'Mô-đun không được biên dịch để thử nghiệm' khi sử dụng @testable


146

Tôi đang cố gắng sử dụng @testabletuyên bố mới của Swift 2 để đưa các lớp của mình đến mục tiêu thử nghiệm. Tuy nhiên tôi đang gặp lỗi trình biên dịch này:

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

Intervalslà mô-đun chứa các lớp tôi đang cố gắng phơi bày. Làm thế nào để tôi thoát khỏi lỗi này?

Câu trả lời:


238

Trong mục tiêu chính của bạn, bạn cần đặt Enable Testabilitytùy chọn xây dựng thành Có.

Theo nhận xét của @earnshavian bên dưới, điều này chỉ nên được sử dụng trên các bản dựng gỡ lỗi theo ghi chú phát hành của apple: "Chỉ nên sử dụng cài đặt xây dựng Kiểm tra khả năng kiểm tra trong cấu hình Debug của bạn, vì nó cấm tối ưu hóa phụ thuộc vào việc không xuất các ký hiệu bên trong từ ứng dụng hoặc khung " https://developer.apple.com/l Library / content / releasenotes / DeveloperTools / RN-Code / Ch chương / Intributiontion.html # / // numple_Vf / doc / uid / TP40001051-CH1-SSW


Xin chào, tôi đang gặp lỗi tương tự nhưng không thấy tùy chọn bật khả năng kiểm tra và đang sử dụng xcode 7. Bạn có biết nên làm gì không?
dùng1601259

2
@ user1601259 - Bạn có thể tìm thấy tùy chọn bằng cách chọn dự án cấp cao nhất, đi tới Cài đặt bản dựng và tìm trong tiêu đề Tùy chọn bản dựng.
hgwhittle

@hgwhittle - Khi tôi chọn dự án cấp cao nhất, tất cả những gì tôi thấy trong các tùy chọn xây dựng là "định dạng thông tin gỡ lỗi" và "xác thực sản phẩm xây dựng." Khi tôi chọn mục tiêu trong các tùy chọn xây dựng, tôi thấy "nội dung được nhúng chứa mã swift." Đó là nó. Khi tôi tìm kiếm trong cài đặt bản dựng, tôi không thể tìm thấy nó. Đây có phải là vì xcode 7?
dùng1601259

1
Có thể bạn đã chọn "Cơ bản" trong "Cài đặt bản dựng". Nếu bạn chọn "Tất cả" ở bên trái, bạn sẽ thấy "Kích hoạt khả năng kiểm tra"
Mảng

1
Chính xác thì công cụ này nên hoạt động như thế nào đối với các bản dựng phát hành, nơi các bài kiểm tra sẽ chạy (vì vậy cần @testable) nhưng cần phải gửi đến App Store? Nếu Enable Testabilitychỉ dành cho các bản dựng gỡ lỗi, cách này là gì? Tôi có phải rút mã kiểm tra để phát hành không?
timgcarlson

15

Trong trường hợp của tôi, tôi đã sử dụng một cấu hình xây dựng tùy chỉnh để thử nghiệm (được gọi Test) và cũng cocoapodsnhư một trình quản lý phụ thuộc

Tôi đã phải thêm các dòng sau vào cuối của tôi Podfileđể cho phép kiểm tra

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            if config.name == 'Test'
                config.build_settings['ENABLE_TESTABILITY'] = 'YES'
            end
        end
    end
end

Theo mặc định cocoapodsbộ ENABLE_TESTABILITYđể YESchỉ cho Debugxây dựng



8

Đối với những người bạn chỉ gặp phải điều này khi chạy Xcode Profiler: chuyển cấu hình xây dựng cấu hình trong quản lý lược đồ của bạn sang chế độ có khả năng kiểm tra được kích hoạt - và hầu hết sẽ bị gỡ lỗi:

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


4

Điều này có thể là do mục tiêu chính của bạn Enable Testabilityđược đặt thành NO. Bạn nên đặt nó YEStrong sơ đồ gỡ lỗi (được sử dụng để chạy thử nghiệm của bạn).

Nếu bạn sử dụng Carthage, vấn đề này có thể xảy ra do nhập các khung với @testable, bởi vì chúng được xây dựng với sơ đồ phát hành.

Hầu hết các trường hợp thực hành xấu khi nhập các khung có tiền tố đó, vì vậy bạn có thể tránh nó. Nếu bạn không thể, bạn nên Enable Testabilitytrong sơ đồ phát hành của khung. https://developer.apple.com


2
Làm cách nào để tránh nhập khung bằng cách sử dụng @testable? Thực hành tốt ở đây là gì?
Jonathan Cabrera

3

Tôi bắt đầu gặp lỗi này khi chạy thử nghiệm bằng Bitawn.

Không giống như những người dùng khác nói, đây không phải là trên Targetcơ sở, hoặc mỗi Schemacơ sở, nó trên Configurationcơ sở. Chọn Target-> Build Settingstab -> tìm kiếm testability-> Kích hoạt nó trên Cấu hình mà bạn đang sử dụng .

Xin lưu ý rằng Apple khuyên bạn nên bật tính năng này trên cấu hình mà bạn đang sử dụng để gỡ lỗi, không phải cho AppStore.


0

Giải pháp trên là tốt nếu bạn đang sử dụng pod / Carthage. Nhưng nếu bạn đang sử dụng các khung từ chính iOS ', ví dụ như Danh bạ', bạn cần thêm đường dẫn đến các khung này trong Path Đường dẫn tìm kiếm thư viện 'của mục tiêu dự án chính của bạn. nhập mô tả hình ảnh ở đây


0

Nếu bạn đang cố gắng kiểm tra khung:

Đi đến mục tiêu thử nghiệm -> Giai đoạn xây dựng -> Tạo giai đoạn sao chép tệp mới -> Chọn khung -> Thêm tất cả các khung được sử dụng đệ quy


0

Nếu có cơ hội bạn có

install! 'cocoapods',
         generate_multiple_pod_projects: true,
         incremental_installation: true

Sau đó, đây là cách để làm điều đó.

    # generated_projects only returns results if the we run "pod install --clean-install"
    # or install a pod for the first time

    installer.generated_projects.each do |project|
        project.build_configurations.each do |configuration|
            configuration.build_settings["ENABLE_TESTABILITY"] = "YES" 
        end
    end

-3

Điều này đã không xảy ra trong các dự án của tôi trước Xcode 8, nhưng sau khi tôi nâng cấp lên Xcode 8, nó khiến tôi bối rối.

Các câu trả lời được đăng ở đây không giải quyết được vấn đề của tôi. Đối với tôi, tôi chỉ bỏ các bài kiểm tra này vì nó không cần thiết. Vì vậy, bỏ chọn các nút kiểm tra:

nhập mô tả hình ảnh ở đây Và bây giờ lỗi đã biến mất.


1
Nếu bạn không cần các thử nghiệm, có thể tốt hơn là xóa các mục tiêu thử nghiệm khỏi dự án của bạn thay vì xóa chúng khỏi tất cả các bản dựng.
Jonathan Cabrera
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.