12

私のアプリは数か月前から AppStore にあり、常に iPhone でしか動作しませんでした。最近、アプリが iPad で動作しないために拒否されたアップデートを送信しました。拒否された正確な理由は次のとおりです。

却下の理由: 2.10: iPhone アプリは、変更を加えることなく、iPhone の解像度と iPhone 3GS の 2 倍の解像度で、iPad でも実行する必要があります。

2X アイコンの付いた小さなボックス内の iPad でアプリを実行するには、Xcode で何をする必要がありますか?

ヒントの指示は大歓迎です...

編集 これは私のinfo.plistです。これは私の最初のアプリで、最初は「ユニバーサル」を選択してセットアップすることを選択したと思います。これを今すぐ修正する簡単な方法はありますか?

PLIST の内容...

4

6 に答える 6

10

アプリが iPad でまだ動作しない理由を理解することから始めます。iPhone 用に開発されたほとんどのアプリは、修正しなくても iPad (互換モード) で正常に動作します。そうでない場合は、それを防ぐために何かをしているに違いありません。ハードウェア機能に依存していますか? 実行しているデバイスについて根拠のない仮定をしていますか? アプリを iPad で実行すると、どのように失敗しますか?

うまくいかない理由がわかれば、問題の解決に今よりもはるかに近づくことができます。

于 2012-05-10T05:07:16.080 に答える
7

アプリを iPhone 互換モードの iPad で実行するには、iPhone 専用のアプリをビルドする必要があります。

アプリの plist (nib ベース、xib、およびストーリーボード) からすべての iPad 参照を削除し、ターゲット ビルド設定のターゲット デバイス ファミリから削除します。

于 2012-05-10T17:45:23.123 に答える
4

I had the same issue, I was able to run my app on the ipad after making the following changes.

  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.
于 2012-08-24T10:06:31.543 に答える
1

このシナリオを使用して同じ問題を解決しました。

リソースフォルダーで通常の画像と網膜画像を確認する必要があります。

デバッグ中にこのエラーが発生することもありますCould not load the "image.png" image referenced from a nib in the bundle with identifier

通常の iPhone アプリは、変更を加えずに iPad で両方 (1x と 2x) のモードで実行する必要があります。これは、SDK シミュレーターで確認できます。

Apple の iOS Developer Portal Center の App Store レビュー ガイドラインには、アプリを提出する際に Apple がレビューする多くの項目がリストされた長いリストがあります。注意深く読んでください。

于 2012-11-28T07:13:54.817 に答える
0

Cocos2d 2.0を使用して同じ問題が発生しました

私の問題は、プロジェクトが数年にわたって進化し、RootViewController、UIViewController、MyRootViewController などのいくつかの痕跡のファイルを引き継いでいたことでした。

彼らは当時働いていましたが、「すべての iPhone アプリは iPad で動作する必要がある」という却下通知を受け取ったため、今日の審査委員会に明らかにフラグを立てていました。大声で叫び、最終的に敗北を受け入れた後、ポリシーがアプリをiPhone専用にするのはかなり難しいと思いました。これについて間違っている場合はお知らせください。

私はそれについて動揺していましたが(そして今でも)、デバイスのローテーション + コンテンツのローテーションという基本的な問題を処理するより洗練されたソリューションを使用して、少なくともプロジェクトをクリーンアップできると考えました。私は、作業中のよりエレガントで実際に機能しているように見えた、より最近のプロジェクトから何かを使用することになりました: MyNavigationController を AppDelegate の先頭に追加するだけです。

以下のコードを追加しました。改善できると確信しています。強化できる方はコメントください。

その結果、古い RootViewController および MyRootViewController ファイルを削除できたので、保守が容易になりました。とにかく、私は彼らの目的をよく理解していませんでした。いい厄介払い!

デバイスの向きとコンテンツの向きを表示して一致させるための私のソリューションは次のとおりです。

AppDelegate.h で、何をしていたかを宣言する必要がありました。

//ファイルの先頭

@interface MyNavigationController : UINavigationController @end

//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. さまざまなシーンを表示するには、横向きモードと縦向きモードの両方が必要でした。

状況を説明するいくつかのスクリーンショットを次に示します

JRケミストリーセット

アプリの向きのほとんどは、この写真が示すように横向きです

他の領域は、デバイスを回転させたときにのみトリガーされました

2つのアプリを1つに!

于 2015-07-09T00:47:35.257 に答える
0

私の問題と解決策が何であったかを説明しようと思います..

ほとんどが縦向きのiPhone唯一のアプリがありますが、1つまたは2つがすべてにUIViewControllers含まれている必要があるため、UIInterfaceOrientationsすべてを有効にする必要がありUIInterfaceOrientationsますplist

iPad横向きに回転してテーブルの上に横たわっている上でアプリを起動すると(そうUIDeviceOrientationFaceUpです)、アプリ全体が横向きに表示され、UIが完全に台無しになりました。

plistまたは起動画面でiPad関連のコード/設定への参照はまったくありませんでした(起動画面に.xcassetsを使用しています)。

AppDelegate.mステータスバーの向きを設定してアプリを縦向きモードにするコードを1行追加することで修正しました。

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO];

    //Further setup
}
于 2015-06-24T10:00:12.723 に答える