2017-01-19 14 views
9

Tôi có một số .ipa trong đó có arm64armv 7 lát trong đó. Nếu tôi chạy nó trên một iDevice hỗ trợ cả arm64armv7 thì lát nào sẽ được chọn theo thời gian chạy?Phần nào sẽ được chọn bởi iPhone

Tôi có thể xem ở đâu đó bằng cách in NSLog hoặc một số cách để hiểu rằng thời gian chạy đã chọn lát arm64?

+0

[Đọc tốt] (http://wanderingcoder.net/2010/07/19/ought-arm/). – shallowThought

Trả lời

1

Bạn có thể thử cách này. Bạn sẽ phải thêm các tùy chọn khác của cpu_type_t.

func getCPUType() -> String { 

var size: size_t = 0 
var type: cpu_type_t = 0 
var subtype: cpu_subtype_t = 0 
size = MemoryLayout<cpu_type_t>.size; 
sysctlbyname("hw.cputype", &type, &size, nil, 0); 

size = MemoryLayout<cpu_subtype_t>.size; 
sysctlbyname("hw.cpusubtype", &subtype, &size, nil, 0); 

// values for cputype and cpusubtype defined in mach/machine.h 
var cpu = "" 
if (type == CPU_TYPE_X86) 
{ 
    cpu += "x86" 

} else if (type == CPU_TYPE_VAX) { 
    cpu += "vax" 

} else if (type == CPU_TYPE_ARM) { 
    cpu += "ARM" 
    switch(subtype) 
    { 
    case CPU_SUBTYPE_ARM_V7: 
     cpu += "V7" 
     break; 
     // ... 
    default: break 
    } 
} 

return cpu 
} 

được sửa đổi: Trước tiên hãy thử với "hw.cpufamily"

sysctlbyname("hw.cpufamily", &type, &size, nil, 0); 
+1

Điều này sẽ luôn hoạt động? Tôi nghĩ rằng phương pháp này có thể xác định những gì CPU là nhưng không nhất thiết những gì mô hình dữ liệu hoạt động cho một chương trình đang chạy trên một CPU có thể làm một trong hai. Và đó dường như là một phần của những gì OP đang yêu cầu. –

1

Nếu ứng dụng của bạn được tải xuống thông qua App Store với mã byte được bật, sau đó kết nối iTunes sẽ cho phép thiết bị iOS tải xuống tệp nhị phân thích hợp theo kiến ​​trúc thiết bị của bạn.

nếu bạn đang triển khai thông qua Xcode kiểm tra tùy chọn này: enter image description here nó sẽ chỉ biên dịch theo kiến ​​trúc thiết bị iOS của bạn.

nếu bạn có tùy chọn đó NO sau đó bạn có thể kiểm tra mà nhị phân kiến ​​trúc đang chạy:

if(sizeof(int*) == 4) 
    NSLog(@"32 bit arch"); 
else if(sizeof(int*) == 8) 
    NSLog(@"64 bit arch"); 
0

Làm thế nào về cách sử dụng mã này để tìm hiểu?

#if TARGET_OS_SIMULATOR 


#else 
if(sizeof(void *) == 4) 
{ 
    NSLog(@" This is a 32 bit architecture so most probably this armv7 "); 
} 
else if (sizeof(void *) == 8) 
{ 
    NSLog(@" This is a 64 bit architecture so most probably this is arm64 "); 
} 
else 
{ 
    NSLog(@" Unrecognized architecture "); 
} 
#endif 
1

Theo Apple:

  1. "Trình biên dịch xác định __LP64__ vĩ mô khi biên soạn cho thời gian chạy 64-bit", và
  2. "Kích thước của con trỏ tăng từ 4 byte 8 byte "(khi chuyển từ ILP32 sang LP64).

Nếu bạn quan tâm trong việc xác định kiến ​​trúc tại thời gian biên dịch, về cơ bản các mã sau đi lên (từ googling):

#if __LP64__ 
// Being compiled for LP64 (64-bit arm64) 
#else 
// Being compiled for ILP32 (32-bit armv7) 
#endif 

Khi bạn đang yêu cầu cho một bài kiểm tra thời gian chạy tuy nhiên, sử dụng kỹ thuật xác định kích thước của con trỏ (như được xác nhận trên trang hướng dẫn của Apple mà tôi đã liên kết ở trên) là một cách để thực hiện điều này. Mã do Manish hoặc Hashmat đề xuất sẽ hiển thị như thế nào.

1

tôi thấy câu hỏi này trước đó, mà tôi tin là có liên quan nếu bạn nhìn vào các ý kiến ​​về vấn đề:

Xcode 6.3 builds all swift files twice

Trong trường hợp của câu hỏi được liên kết, mặc dù đã lỗi thời, câu trả lời là cả hai. Mỗi tập tin sẽ được xây dựng hai lần, và điều này có thể được thay đổi bằng tay trong các thiết lập xây dựng (Chỉ xây dựng kiến ​​trúc hoạt động).

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