7

すべてを追跡せずにコードを追加しすぎたマラソンコーディングセッションの後、iOS 5.0および5.1固有の列挙型、呼び出し、フレームワークを備えたアプリができましたが、アプリでiOSを4.3に戻したいと考えています。 。

XcodeをiOS4.3用にコンパイルしているかのようにコンパイルするように設定する簡単な方法があることを望んでいました。そうすれば、コンディショニングする必要がある、または代わりにコード化する必要があるすべての問題のあるコードでエラーが発生します。 iOS。

私はコンパイラオプションを使用することでそれを得るだろうと思いました:

-D__IPHONE_OS_VERSION_MAX_ALLOWED=__IPHONE_4_3

しかし、それは私のコードではなく、システムヘッダーファイルでエラーを生成することになります。

ほとんどの列挙型とフレームワークの可用性がヘッダーファイルに含まれていることを考えると、必要なことを実行する簡単な方法があると考えなければなりません。

古いSDKで古いXcodeをダウンロードすることに頼らずに、誰かがそのようなことをなんとかやったことがありますか?そこで、Lion(私が実行しているもの)では正しく機能しないXcodeの問題に遭遇する可能性があります。

更新:LionにXcode3.2.6をインストールできないようです。コンパイラオプションを使用する方法を見つけたり、Xcodeに古いSDKを使用させたりしない限り、SnowLeopardMacを見つける必要があります...

これが@mattjgallowayの答えが私のためにしたことのサンプルです:

ルミンアプリグループ

/Users/mz/Dev/Working/Lumin/Lumin/MyUIScreen.m

  • 「明るさ」は非推奨になりました:TOO NEW!
  • 「明るさ」は非推奨になりました:TOO NEW!
  • 「明るさ」は非推奨になりました:TOO NEW!
  • 「明るさ」は非推奨になりました:TOO NEW!

/Users/mz/Dev/Working/Lumin/Lumin/LuminViewController+Share.m

  • 'TWTweetComposeViewController'は非推奨になりました:TOO NEW!
  • 'TWTweetComposeViewController'は非推奨になりました:TOO NEW!
  • 'TWTweetComposeViewController'は非推奨になりました:TOO NEW!

/Users/mz/Dev/Working/Lumin/Lumin/LuminViewController.m

  • 'scrollView'は非推奨になりました:TOO NEW!
  • 'connectionWithMediaType:'は非推奨になりました:TOO NEW!
  • 'connectionWithMediaType:'は非推奨になりました:TOO NEW!
  • 「AVCaptureDeviceSubjectAreaDidChangeNotification」は非推奨になりました:TOO NEW!
  • 'setSubjectAreaChangeMonitoringEnabled:'は非推奨になりました:TOO NEW!

非常に素晴らしい。

プロジェクトの.pchファイルに以下を配置し、すべてのプロジェクトでこれを実行することを計画しています。

#if DEBUG
#define __IPHONE_OS_VERSION_SOFT_MAX_REQUIRED __IPHONE_OS_VERSION_MIN_REQUIRED
#import "MJGAvailability.h"
#endif

どのプロジェクトでも、ターゲットにしている最も初期のiOSに基づいてSDKの問題を自動的に監視しています。心配しなければならないSDKの変更がまだあるかもしれませんが、少なくとも、古いiOSリリースでは利用できないほとんどのフレームワークの追加については知っています。

4

2 に答える 2

4

MJGAvailability.h GitHubで私のここを見てください。基本的には、#define新しいAPIが非推奨のように見えるように適切なプリプロセッサを定義しているため、コンパイラの警告が表示されます。ファイルの先頭にいくつかのドキュメントがありますが、基本的にはPCHファイルでこれを行うだけです。

#define __IPHONE_OS_VERSION_SOFT_MAX_REQUIRED __IPHONE_4_3
#import "MJGAvailability.h"

iOS4.3までサポートしたい場合に。

それは確かに100%絶対確実というわけではありませんが、あなたが求めていることを行うのに非常に役立つと思います。

そのAPIを使用しても問題がないことがわかっているために警告を抑制したい場合(respondsToSelectorたとえば、APIを囲んでいる場合)、次のようにすることができます。

UINavigationBar *navBar = self.navigationController.navigationBar;
if ([navBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
    [navBar setBackgroundImage:[UIImage imageNamed:@"navbar_bg.png"] forBarMetrics:UIBarMetricsDefault];
#pragma clang diagnostic pop
}
于 2012-04-17T21:33:05.883 に答える
1

ごめん; その答えを初めて完全に吹き飛ばしました。これをもう一度試してみましょう...

  • Deployment Targetは、使用するOSの最低バージョンを設定します。
  • SDKは、使用するOSの最高バージョンを設定します

Deployment TargetとSDKの間で、APIを条件付きでチェックする必要があります。詳細については、SDK互換性ガイドを参照してください。

おそらく、代わりに古いSDKを使用したいだけです。

古いSDKを新しいバージョンで使用する最も簡単な方法は、.sdkディレクトリのコピーを保存し、アップグレード時に新しいバージョンにコピーすることです。

ただし、古いものをダウンロードすることもできます。Appleはそれを隠すだけです。AppleDevelopersのダウンロードから始めます。必要なXcodeのコピーを見つけます。SnowLeopard用のXcode4.1をダウンロードします。iOSSDK4.3が含まれています。Xcode 4.3と並行してインストールできますが、必ずしもインストールする必要はありません。ディスクをマウントします。ターミナルを開きます(その方が簡単です)。/ Volumes / Xcode/Packagesに移動します。そこにすべてのSDKがあります。

あなたはそれを直接インストールすることを試みることができます、そしてそれはあなたのために働くかもしれないし、そうでないかもしれません。.pkgを解凍して、必要なファイルを取得することもできます。私は通常、Unarchiverと呼ばれるプログラムを使用します。それはほとんど何でも開梱することができます。これにより、「Payload」というファイルを含むディレクトリが作成されます。それをダブルクリックすると、展開されます(拡張子が含まれていないのはtar.gzだけです)。これにより、Platformsディレクトリが作成されます。これをXcodeのコピーのPlatformsディレクトリにコピーすると、ゴールデンになります。

とはいえ、システムがかなりうまく機能するようになったら、通常、最新のデプロイメントターゲットを使用してコンパイルするように切り替えます。古いSDKを持っていない他の人とのコラボレーションが容易になります。また、Appleは、古いSDKとのリンクが原因で拒否する場合と拒否しない場合があります。彼らは過去にそれをしました。私はそこでの現在の状況を知りません(しばらくの間それが出てこなかった)。しかし、私は最新のものに対して構築されたものを提出することをお勧めする傾向があります。

于 2012-04-17T21:39:39.350 に答える