2010-08-06 31 views
54

Sử dụng kết quả macro TARGET_IPHONE_SIMULATOR trong cùng một giá trị không đổi được xác định trong ứng dụng sáng. Ví dụ:Macro mô phỏng iPhone mục tiêu không hoạt động

#ifdef TARGET_IPHONE_SIMULATOR 
NSString * const Mode = @"Simulator"; 
#else 
NSString * const Mode = @"Device"; 
#endif 

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{ 
    ... 
    NSLog(@"Mode: %@", Mode); 
    ... 
} 

Luôn dẫn đến "Chế độ: Trình mô phỏng" đang được ghi nhật ký. Tôi hiện đang chạy XCode 3.2.4 nếu điều đó giúp. Cảm ơn.

+5

thay đổi ifdef thành – Taranfx

+0

TARGET_IPHONE_SIMUATOR có lỗi đánh máy (thiếu 'L') và hiển thị trong bản xem trước tìm kiếm của Google như vậy. – wilsonmichaelpatrick

+0

@wilsonmichaelpatrick cố định –

Trả lời

103

TARGET_OS_SIMULATOR được xác định trên thiết bị (nhưng được xác định là sai). Sửa chữa là:

#include <TargetConditionals.h> // required in Xcode 8+ 

#if TARGET_OS_SIMULATOR 
NSString * const Mode = @"Simulator"; 
#else 
NSString * const Mode = @"Device"; 
#endif 

Không chắc chắn khi điều này đã được thay đổi. Tôi khá chắc chắn rằng nó đã có thể sử dụng 'ifdef' trong quá khứ.

+1

Đây là lỗi thường gặp trong nhiều thư viện, e.h. ở đây: https://github.com/domesticcatsoftware/DCIntrospect/issues/24. Cảm ơn bạn đã chia sẻ giải pháp của mình! – steipete

+3

Cảm ơn chủ đề; Tôi nghĩ rằng tôi đã phát điên, hoặc tệ hơn (quên mất nhiều năm của tôi một sự phát triển C). –

+1

TARGET_IPHONE_SIMULATOR không được dùng nữa trong iOS 9. Sử dụng TARGET_OS_SIMULATOR trong XCode 7 –

3

Tôi sẽ thử triển khai macro nếu nó sẽ được sử dụng trên các lớp khác nhau thông qua ứng dụng.

trong tập tin pch,

#if TARGET_IPHONE_SIMULATOR 
#define isSimulator() YES 
#else 
#define isSimulator() NO 
#endif 

và trong bất kỳ lớp tôi có thể kiểm tra bằng cách gọi isSimulator().

1

Vì một số lý do TARGET_IPHONE_SIMULATOR không hoạt động với tôi trong xcode v6.4. Đoạn dưới đây hoạt động hoàn hảo:

#if (!arch(i386) && !arch(x86_64)) 
    camera   = Camera() 
#else 
    camera   = MockCamera() 
#endif 
12

Đối với tôi một cách rõ ràng bao gồm TargetConditionals.h giúp

#include <TargetConditionals.h> 
+0

Bạn đã lưu ngày của tôi! – jayatubi

+0

Dường như với tôi rằng từ một số phiên bản Xcode cụ thể trên (tôi hiện đang sử dụng 7.3.1) điều này là cần thiết. – appleitung

+0

Có thể xác nhận rằng điều này là bắt buộc trong Xcode 8.2.1 – Sebyddd

5

Hãy thử TARGET_OS_SIMULATOR, như TARGET_IPHONE_SIMULATOR bị phản đối.

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