2011-02-07 28 views
15

Tôi đang đi sâu vào phát triển iOS và tôi đã tạo một ứng dụng toàn cầu biến thành ứng dụng chỉ dành cho iPhone. Khi nó chạy trên iPad, nó chỉ tải một màn hình trắng vì không có mã iPad được viết nào. Những gì tôi muốn là để nó chạy trong chế độ "iPhone" trên iPad, nếu nó bằng cách nào đó kết thúc trên một iPad. Tôi có thuộc tính "Gia đình thiết bị được nhắm mục tiêu" thành "iPhone", vì vậy sẽ ngăn không cho nó hiển thị trong App Store dưới dạng ứng dụng iPad nhưng nếu ai sở hữu cả iPad và iPhone thì ứng dụng có thể được đồng bộ hóa với iPad, tại thời điểm đó nó sẽ chỉ tải màn hình trắng vì nó sẽ cố gắng chạy ứng dụng ở chế độ iPad, mà nó không có bất kỳ mã nào để hỗ trợ. Trong tình huống này, tôi thích nó thực sự chạy trên iPad, nhưng ở chế độ iPhone.Phát triển iOS: Làm cách nào để ngăn iPad chạy một ứng dụng toàn cầu ở chế độ iPad?

Câu hỏi của tôi là ...

  1. Khi một chiếc iPad chạy một ứng dụng phổ quát, như thế nào biết để chạy nó trong chế độ "iPhone" hoặc thực thi mã cụ thể iPad?
  2. Trong ứng dụng toàn cầu, làm cách nào để biết mã nào là iPhone và mã nào là iPad?
  3. Làm cách nào để ngăn iPad cố gắng chạy mã iPad và thay vào đó, hãy chạy mã iPhone?

Tôi xin lỗi nếu tôi nghe có vẻ như noob, nhưng tôi vậy. Cảm ơn rất nhiều vì sự khôn ngoan của bạn!

Trả lời

13
  1. iPad trông vào Info.plist của ứng dụng, cho phím UIDeviceFamily, đó là một mảng. Giá trị '1' cho biết iPhone/iPod Touch, '2' cho biết 'iPad'. Nếu có một '1' nhưng không có '2' thì bạn sẽ có được môi trường iPhone mô phỏng. Giá trị này được ghi vào Info.plist tự động như là kết quả của 'Gia đình thiết bị được nhắm mục tiêu' của bạn. Nếu bạn nghĩ rằng bạn đã thiết lập nó cho iPhone nhưng vẫn nhận được một bản xây dựng iPad, hãy kiểm tra xem bạn đã không chỉ thiết lập nó cho một cấu hình xây dựng. Kiểm tra Info.plist trong gói ứng dụng được sản xuất của bạn nếu bạn muốn thực sự tự tin.
  2. Chỉ có một nhị phân, mà bạn viết để khởi chạy chính xác trên một trong hai thiết bị.
  3. Chỉ cần không nhắm mục tiêu iPad.
+0

cảm ơn, Tommy, đó là vấn đề của tôi. Tôi chỉ có bộ gia đình thiết bị được nhắm mục tiêu cho chế độ gỡ lỗi. – BeachRunnerFred

+1

Đây là một ý tưởng tồi. Bạn không nên thêm khóa UIDeviceFamily trực tiếp theo hướng dẫn của Apple: http://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW11 . Thay vào đó, hãy sử dụng cài đặt bản dựng TARGETED_DEVICE_FAMILY. – Erik

9

Tôi giả định những gì bạn thực sự muốn là xóa khả năng "phổ quát" và chỉ làm cho nó trở thành ứng dụng iPhone.

Trong Xcode, chuyển đến Project => Edit Project Settings => Build.

Tìm kiếm chung hoặc 'Gia đình thiết bị được nhắm mục tiêu'.

Chọn iPhone.

Tạm biệt iPad.

0

Tôi nghĩ rằng có một mục nhập trong tệp info.plist cho từng thiết bị có cửa sổ chính tải. Có lẽ một giải pháp nhanh chóng và bẩn sẽ là đặt cả MainWindow-iPhone và MainWindow-iPad vào cùng một cửa sổ chính -iPhone-.

1
  1. Nếu bạn tạo ứng dụng toàn cầu, ứng dụng sẽ sử dụng mã iPad của bạn. Không thể chạy ứng dụng toàn cầu trong "Chế độ iPhone". Apple sẽ kiểm tra xem bạn có tuân thủ các thông số kỹ thuật thiết kế iPad hay không.

  2. Trong một ứng dụng phổ quát, có hai ứng dụng các đại biểu: AppDelegate_iPhone.h và AppDelegate_iPad.h

  3. Bạn có thể thêm mã iPhone của bạn trong AppDelegate_iPad, nhưng Apple sẽ không hài lòng.

+0

Cảm ơn, Manni. Câu trả lời của mọi người cho câu hỏi số 1 là chỉ cần thay đổi thuộc tính Family Device Device thành iPhone và tất cả mọi thứ sẽ ổn. Suy nghĩ của bạn? – BeachRunnerFred

+0

Nếu bạn thay đổi "Gia đình thiết bị được nhắm mục tiêu" thành iPhone thì bạn có ứng dụng chỉ dành cho iPhone thay vì ứng dụng toàn cầu. Nếu bạn khởi chạy một ứng dụng chỉ dành cho iPhone trên iPad, nó sẽ được hiển thị trong "Chế độ iPhone". Hmmm, tôi không chắc chắn nếu điều này giúp bạn ... Làm thế nào là câu hỏi chính xác của bạn một lần nữa? Bạn có muốn một ứng dụng toàn cầu hoặc một ứng dụng chỉ dành cho iPhone không? Hay bạn muốn ứng dụng chỉ dành cho iPhone của bạn được hiển thị khác trên iPad? :-) – Manni

+0

Tuyệt vời, đã trả lời câu hỏi của tôi, cảm ơn bạn! – BeachRunnerFred

2

Khi iPad chạy ứng dụng toàn cầu, làm cách nào để chạy ứng dụng trong "Chế độ iPhone" hoặc thực thi mã dành riêng cho iPad?

iPad tìm kiếm Targeted Device Family, nếu iPad không có mặt, thì nó biết nó phải chạy ứng dụng ở chế độ iPhone.

Trong ứng dụng toàn cầu, làm cách nào để biết mã nào là iPhone và mã nào là iPad?

Khi bạn viết mã cho ứng dụng, bạn phải chỉ định thiết bị bạn đang nhắm mục tiêu nếu có những thứ cụ thể bạn cần thực hiện trên mỗi thiết bị. (xem ví dụ về mã bên dưới)

Làm cách nào để ngăn iPad cố gắng chạy mã iPad và thay vào đó, hãy chạy mã iPhone?

Không hỗ trợ iPad trong Targeted Device Family. Thứ hai, trong mã của bạn, không chỉ định rằng mã cụ thể cần có một thiết bị cụ thể, ví dụ:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
{ 
    /* run something specific for the iPad */ 
} 
else 
{ 
    /* run something specific for the iPhone */ 
} 
0

Một cách khác để làm điều đó (với mã) là:

Trong appdelegate App của bạn (nếu App của bạn đã được tạo dưới dạng Ứng dụng toàn cầu), bạn có thể tìm thấy mã sau:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
     //iPad... 

    } else { 
     //iPhone and iPod Touch... 

    } 

    return YES; 
} 

Ở đó bạn có thể tùy chỉnh chế độ xem cần hiển thị.

1

Bạn KHÔNG nên thêm thông tin này vào tệp Info.plist của mình. Thay vào đó, hãy thêm nó vào cài đặt bản dựng của bạn trên mỗi số suggestion của Apple. Cụ thể, hãy sử dụng cài đặt bản dựng TARGETED_DEVICE_FAMILY.

Nếu bạn đang sử dụng bảng phân cảnh, bạn cũng muốn xóa khóa UIMainStoryboardFile ~ ipad khỏi Info.plist của bạn vì nó sẽ được sử dụng bất kể cài đặt TARGETED_DEVICE_FAMILY của bạn là bao nhiêu.

Chúc may mắn!

0

Kể từ Xcode 5, bạn có thể chọn thiết bị mục tiêu phát triển của bạn từ các dự án:

Từ phần thiết bị trong vòng Development Info, bây giờ bạn có thể chọn:

1-iPhone 2- iPad 3 Phổ

enter image description here

0

tôi nghĩ rằng cái gì là sai với cấu hình của bạn, bởi vì nếu bạn nhắm mục tiêu mã cho iPhone chỉ Thiết bị, ứng dụng sẽ chạy trên iPad với màn hình được thiết kế cho iPhone (do đó, giảm, với khả năng x2).

  • đề nghị từ AppStore (iPhone/iPad/cả hai) phụ thuộc vào sở thích của người dùng
  • bạn có thể thử nghiệm nó với Simulator (và chọn iPad là thiết bị)
  • mã là như nhau cho iPad/iPhone! ... trừ khi bạn sử dụng [[UIDevice currentDevice] userInterfaceIdiom] được đề cập ở trên ...
Các vấn đề liên quan