Вопрос по xcode, iphone, ios – Сделайте так, чтобы приложение для iPhone работало на iPad в соответствии с требованиями Apple

11

Мое приложение было в AppStore уже пару месяцев и всегда работало только на iPhone. Я недавно отправил обновление, которое было отклонено, потому что приложение не работает на iPad. Точная причина была отклонена:

Reasons for Rejection: 2.10: iPhone apps must also run on iPad without modification, at iPhone resolution, and at 2X iPhone 3GS resolution

Что мне нужно сделать в Xcode, чтобы мое приложение работало на iPad в маленькой коробке со значком 2X?

Любые советы инструкции будут в огромной степени оценены ...

EDIT Это мой info.plist. Это мое первое приложение, и я думаю, что изначально я решил настроить его на "универсальный" выбран. Есть ли легкий путь назад, чтобы исправить это сейчас?

PLIST contents...

Вы пробовали запустить его на симуляторе iPad? У вас есть @ 2x изображения? Jamie

Ваш Ответ

5   ответов
1

Я решил ту же проблему, используя этот сценарий.

Вы должны проверить нормальные изображения и изображения сетчатки в вашей папке ресурсов.

Вы также можете получить эту ошибку при отладкеCould not load the "image.png" image referenced from a nib in the bundle with identifier.

Обычное приложение для iPhone должно работать на iPad в режиме (1x и 2x) без изменений. Вы можете проверить это с помощью SDK Simulator.

В Руководстве по обзору App Store в Центре Apple для разработчиков iOS содержится длинный список, в котором перечислены многие вещи, которые Apple проверяет, когда вы отправляете приложение. Прочитайте это внимательно.

10

Начните с выяснения того, почему ваше приложение не работает на iPad. Большинство приложений, разработанных для iPhone, будут нормально работать на iPad (в режиме совместимости) без изменений; если это не так, вы должны что-то предпринять, чтобы предотвратить это. Вы полагаетесь на какую-то аппаратную функцию? Делаете необоснованные предположения об устройстве, на котором вы работаете? Как происходит сбой вашего приложения при запуске на iPad?

Как только вы выяснили, почему это не работает, вы будете гораздо ближе, чем сейчас, к решению проблемы.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Sean
Error: User Rate Limit Exceeded Sean
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Sean
4

У меня была та же проблема, я смог запустить свое приложение на iPad после внесения следующих изменений.

  1. in the project settings made the Devices to iPhone(it was universal before)
  2. in the .plist removed the main story board file base name related to ipad.
Error: User Rate Limit Exceeded
7

Чтобы приложение работало на iPad в режиме совместимости с iPhone, вам нужно создать приложение только для iPhone.

Удалите все ссылки на iPad из списка приложений (nib-база, xib и раскадровка) и из Target Build Settings Targeted Device Family.

Error: User Rate Limit Exceeded
0

У меня была такая же проблема при использовании Cocos2d 2.0

Моя проблема заключалась в том, что проект развивался в течение нескольких лет и содержал некоторые рудиментарные файлы, такие как RootViewController, UIViewController, MyRootViewController и т. Д.

Они работали в то время, но, несомненно, подняли флаг с сегодняшним комитетом по рассмотрению, потому что я получил "Все приложения iPhone должны работать на iPad" уведомление об отказе. После громкого крика и, наконец, принятия поражения, я подумал, что политика делает довольно сложным создание только приложения для iPhone. Дайте мне знать, если я ошибаюсь по этому поводу.

Несмотря на то, что я был (и все еще) обеспокоен этим, я подумал, что, возможно, теперь я мог бы по крайней мере очистить проект с помощью более элегантного решения, которое решает основную проблему: поворот устройства + поворот контента. Я закончил тем, что использовал что-то из более недавнего проекта, который работал и казался более элегантным и действительно работающим: просто добавьте MyNavigationController в начало моего AppDelegate.

Я добавил код ниже. Я уверен, что это может быть улучшено. Пожалуйста, прокомментируйте, если вы можете улучшить его.

В результате я смог удалить старые файлы RootViewController и MyRootViewController, так что теперь его проще поддерживать. Я никогда не понимал их цели очень хорошо в любом случае. Скатертью дорога!

Вот мое решение для отображения и сопоставления ориентации устройства + ориентации содержимого:

в AppDelegate.h мне пришлось объявить, что я делаю:

// начало файла

@interface MyNavigationController: UINavigationController @конец

// внутри интерфейса AppDelegate.h

MyNavigationController * navController_;

// нижняя часть файла перед @end

@property (только для чтения) MyNavigationController * navController;

Вот код, который работает в верхней части моего AppDelegate.m

@implementation MyNavigationController

// The available orientations should be defined in the Info.plist file.
// And in iOS 6+ only, you can override it in the Root View controller in the "supportedInterfaceOrientations" method.
// Only valid for iOS 6+. NOT VALID for iOS 4 / 5.

-(NSUInteger)supportedInterfaceOrientations {

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

if (orientation == UIDeviceOrientationPortrait) {

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

        // [director_ pushScene: [IPAD scene]];

    } else {

        [[CCDirectorIOS sharedDirector] pushScene:[VerticalDisplayLayer scene]];

        return UIInterfaceOrientationMaskPortrait;

    }


} else if (orientation == UIDeviceOrientationLandscapeLeft) {


    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

       //  [director_ pushScene: [IPAD scene]];

    } else {

        [[CCDirectorIOS sharedDirector] pushScene:[MainMenuScene scene]];

    }



} else if (orientation == UIDeviceOrientationLandscapeRight) {


    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

        // [director_ pushScene: [IPAD scene]];

    } else {

        [[CCDirectorIOS sharedDirector] pushScene:[MainMenuScene scene]];

    }


} else if (orientation == UIDeviceOrientationPortraitUpsideDown) {

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

    } else {

        [[CCDirectorIOS sharedDirector] pushScene:[VerticalDisplayLayer scene]];

        return UIInterfaceOrientationMaskPortraitUpsideDown;

    }

} else {

    //do nothing
}

return UIInterfaceOrientationMaskLandscape;

}

//this is the one for iOS 6
- (BOOL)shouldAutorotate {

//NSLog(@"MyNavigationController - should Rotate ToInterfaceOrientation ...");

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

// iPhone only
if( [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone ) {

    //NSLog(@"MyNavigationController - should Rotate iPhone");

    if (orientation == UIDeviceOrientationPortrait) {

        //NSLog(@"should Rotate iPhone orientation is Portrait");

        [[CCDirectorIOS sharedDirector] pushScene:[VerticalDisplayLayer scene]];

        return UIInterfaceOrientationMaskPortrait;

    }

    if (orientation == UIDeviceOrientationPortraitUpsideDown) {

        //NSLog(@"should Rotate iPhone orientation is PortraitUpsideDown");

        [[CCDirectorIOS sharedDirector] pushScene:[VerticalDisplayLayer scene]];

        return UIInterfaceOrientationMaskPortraitUpsideDown;

    }

    if (orientation == UIDeviceOrientationLandscapeLeft) {

        //NSLog(@"should Rotate iPhone orientation is Landscape Left");

        return UIInterfaceOrientationMaskLandscape;
    }

    if (orientation == UIDeviceOrientationLandscapeRight) {

        //NSLog(@"should Rotate iPhone orientation is Landscape Right");

        return UIInterfaceOrientationMaskLandscape;
    }


    return TRUE;

}

//return UIInterfaceOrientationIsLandscape(interfaceOrientation);

if( [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad ) {

    //NSLog(@"MyNavigationController - should Rotate iPad");

    return TRUE;

}


return TRUE;
}


// Supported orientations. Customize it for your own needs
// Only valid on iOS 4 / 5. NOT VALID for iOS 6.
- (BOOL)shouldAutorotateToInterfaceOrientation:    (UIInterfaceOrientation)interfaceOrientation
{

// iPhone only
if( [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone )


    return TRUE;
//return UIInterfaceOrientationIsLandscape(interfaceOrientation);


if( [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad )

    return TRUE;

// iPad only
// iPhone only
//return UIInterfaceOrientationIsLandscape(interfaceOrientation);

return TRUE;
}

// This is needed for iOS4 and iOS5 in order to ensure
// that the 1st scene has the correct dimensions
// This is not needed on iOS6 and could be added to the application:didFinish...
-(void) directorDidReshapeProjection:(CCDirector*)director
{
if(director.runningScene == nil) {
    // Add the first scene to the stack. The director will draw it immediately into the framebuffer. (Animation is started automatically when the view is displayed.)
    // and add the scene to the stack. The director will run it when it automatically when the view is displayed.
    [director runWithScene: [MainMenuScene scene]];
}
}


-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
// Assuming that the main window has the size of the screen
// BUG: This won't work if the EAGLView is not fullscreen

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGRect rect = CGRectZero;

//NSLog(@"MyNavigationController - Will RotateToInterfaceOrientation ...");

if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)  {

    rect = screenRect;


} else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {

    rect.size = CGSizeMake( screenRect.size.height, screenRect.size.width );

}

CCDirector *director = [CCDirector sharedDirector];
CCGLView *glView = (CCGLView *)[director view];
glView.frame = rect;
}

@end

Вот почему я должен был решить это:

  1. I needed both Landscape and Portrait modes to display different scenes.

Вот несколько скриншотов, которые описывают ситуацию

JR Chemistry Set

most of the app orientation is landscape like this photo shows

other areas were only triggered when you turned the device

2 apps in one!

Похожие вопросы