2012-03-15 58 views
17

thể trùng lặp:
Programmatically detect if app is being run on device or simulatorLàm thế nào để phát hiện ứng dụng đang chạy trên giả lập hoặc thiết bị

Làm thế nào tôi có thể phát hiện xem ứng dụng của tôi đang chạy trên Simulator hoặc trên thiết bị thông qua mã.

+2

thấy điều này ?? http://stackoverflow.com/questions/5775420/programmatically-detect-if-app-is-being-run-on-device-or-simulator – Vin

+1

trùng lặp với quá nhiều bài đăng: http://stackoverflow.com/questions/ 5122149/iphone-simulator-how-to-detect-khi-ứng dụng-đang-chạy-trên-simulator-so-có thể-thiết lập, http://stackoverflow.com/questions/5775420/programmatically-detect-if-app- đang chạy trên thiết bị hoặc mô phỏng, http://stackoverflow.com/questions/458304/how-can-i-programmatically-determine-if-my-app-is-running-in-the- iphone-simulato – Sarah

+1

@Fulvio xin lỗi nếu nó nghe có vẻ khắc nghiệt. Câu hỏi này đã được hỏi rất nhiều về SO.Không phải chúng tôi phải tìm kiếm bài đăng hiện có, liên quan đến câu hỏi của chúng tôi trước khi đăng? – Vin

Trả lời

66

Hãy nhớ rằng cung cấp cho bạn thông tin về chính thiết bị đó.

[[UIDevice currentDevice] model]

Bạn cũng có thể sử dụng như sau:

TARGET_IPHONE_SIMULATOR cho bạn biết nếu bạn đang ở trong mô phỏng iPhone.

TARGET_OS_IPHONE cho bạn biết rằng bạn đang làm việc trên iPhone thay vì MacOS.

#if TARGET_IPHONE_SIMULATOR 

    NSLog(@"Running in Simulator - no app store or giro"); 

#else 

    NSLog(@"Running on the Device"); 

#endif 

và khi chỉ quan tâm đến các thiết bị

#if !(TARGET_IPHONE_SIMULATOR) 

    NSLog(@"Running on device"); 

#endif 
8

Bạn có thể sử dụng liên tục

#if TARGET_OS_SIMULATOR 
    NSLog(@"This is simulator mode...."); 
#else 
    NSLog(@"This is device mode...."); 
#endif 
1

Các ứng dụng này được biên soạn cùng không thể chạy trên cả Simulator và thiết bị iOS, khi các tập lệnh CPU hoàn toàn khác (x86 so với ARM). (... trừ khi bạn đang xây dựng một số loại nhị phân siêu phổ rất kỳ lạ sử dụng lipo)

Có một số cách để xác định xem ứng dụng đã được biên dịch cho x86 hay chưa. Một là thêm mã thời gian chạy khác nhau tùy thuộc vào một trong nhiều macro tiền xử lý được biên dịch trước. Bạn có thể lấy danh sách các macro tiền xử lý cho một biên dịch x86 bằng cách gõ vào dòng lệnh Terminal:

gcc -arch i386 -dM -E - </dev/null | sắp xếp

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