2012-03-15 13 views
2

私は2つの完全プロジェクトを持っています。 1つはiPhoneで動作し、もう1つはiPadで動作します。私はこれらをユニバーサルアプリにマージしたいと思います。別のiPhoneプロジェクトとiPadプロジェクトをユニバーサルに変換する

私が持っている唯一の解決策は、 '_iPhone'と '_iPad'という接尾辞を持つクラスの名前をappに変更し、コード内のすべての参照を変更することです。その後、AppDelegatesをマージし、起動時に正しいコントローラをロードすることができました。

これは2つの非常に大きなプロジェクトであるため、この方法は非常に時間がかかることになります。誰かがより良い解決策を持っていますか?

+0

一部のユーザーが一度同様の質問をします。http://stackoverflow.com/questions/5280407/is-there-a-global-way-to-merge-an-iphone-and-an-ipad-app-into- a-universal-app。 – LuisEspinoza

答えて

2

私が唯一の解決策は、新しい普遍的なプロジェクトを作成してファイルをそこに置くことです。iPhoneとiPadの間には多くの共有コードがあるため、デバイスの使用状況を確認できますUI_USER_INTERFACE_IDIOM()UIUserInterfaceIdiomPadまたはUIUserInterfaceIdiomPhoneの場合はチェックを行い、名前を変更すると簡単にクラス名を強調表示し、を選択します。Refactor> Renameの名前を変更し、使用した場所ごとにクラス名を変更しますそれ。

+1

リファクタリングのヒントをお寄せいただき、ありがとうございます。 –

2

私が知っている唯一の選択肢はあなたのドラフト化された解決策です。

ただし、実際には2つの別々のAppDelegateを保持することができます。

メイン実装では、デバイスを確認して、iPad-AppDelegateまたはiPhone-AppDelegateを起動できます。多くの場合

int main(int argc, char *argv[]) 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = 0; 

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
     retVal = UIApplicationMain(argc, argv, nil, @"XXXAppDelegate_iPad"); 
    } 
    else 
    { 
     retVal = UIApplicationMain(argc, argv, nil, @"XXXAppDelegate_iPhone");   
    } 
    [pool release]; 
    return retVal; 
} 

しかし、私はこのようなソリューションを再考するアドバイスう - 十分な頻度で、これは矛盾および/またはコードの複製になります。それでも、私はオプションを指摘するべきだと思った。

+0

私はその選択肢を認識していましたが、私はMain.mをつぶすのが好きではありません。アップルの最新のiOSテンプレートでは、AppDelegateですべてを行います。答えをありがとう。 –

関連する問題