主にアルカトラズによって展開されるXcodeのプラグインを構築しました。このユーティリティは、GitHubからプラグインのソースを取得し、コンパイルし、正常に実行された場合は適切なディレクトリにインストールします。 Xcodeのバージョン7.3がSwift 2.2でリリースされるまではかなりうまくいっています。Xcodeバージョンに基づく条件付きコンパイル
Swift 2.2では、セレクタを指定する新しい方法が導入されました。私は新しいの上で、私のコードを変換する場合
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ColorSenseRainbow.applicationFinishedLoading(_:)), name: NSApplicationDidFinishLaunchingNotification, object: nil)
:新しい方法はとても似#selectorを使用していますが
NSNotificationCenter.defaultCenter().addObserver(self, selector: "applicationFinishedLoading:", name: NSApplicationDidFinishLaunchingNotification, object: nil)
:以前は、このような関数の名前で文字列を指定します以前のバージョンのXcode(7.2.1以前)を使用している人は、新しい#selectorについて知らないので、自分のプラグインを使用することはできません。これを知っているので、私はそれを非難の警告を取り除くために変換し、ユーザーからのフィードバックを得ました。しかし、Xcodeの次のバージョンがSwift 3に移行する可能性が高いので、この変更を行う必要があります。
私の好ましい方法は、コンパイラにXcodeのバージョンに該当するコードを選択させる方法を見つけることです。この擬似コードのようなもの。私はコンパイルが以下のXcode 7.2.1およびに失敗することを使用している場合
#if (XCode_Version >= 7.3)
// use @selector (ThisClass.functionName)
#else
// use selector: "functionName:"
#endif
私はバージョンを伝えるために使用することができますが、それだけスウィフト2.2で導入されましたSWIFT()関数があることを知っています。これにより、前と同じ場所に@selector関数が残されます。
もう一つの選択肢は、私がやっているリリースを取って、セレクタ "functionName:"メソッドで最後にすることです。古いバージョンのXcodeを手動でダウンロードしてインストールするために、GitHubにあらかじめコンパイルしたものをコピーします。
ありがとうございました。
現在開発中の言語でレガシーサポートを維持することはお勧めできません。これから得ることはほとんどありません。最新のXcode/Swiftバージョンにならない理由はありません。 – Alexander
私は最新のXcode/Swiftを使用していますが、プラグインコードは世界中の何百人もの人がダウンロードしてコンパイルしています。私は開発環境での選択を指示することができず、可能であればサポートしたいと考えています。彼らは1年未満のアプリケーションから離脱しないのに十分な理由があるかもしれません。 Xcode 7.2.1ではバージョン4ではなく、サポートしています。 – CanadianMacFan
Swiftは、言語そのものとして、大きく発展しています。石には何も設定されておらず、多くのことが素早く動いています。ソースコードとABIの不安定さを素早く理解したい人は、次の少しの間、大部分が存在します。無意味なものをサポートする。 – Alexander