Xcode 11とSwift 5にアップグレードし、メソッド拡張機能がフレームワークを介して利用可能になると、問題が発生しました。より具体的には、次のような構造のプロジェクトで:
-> Main Project
-> Framework created from sources in 'Main Project'
-> Subproject using the above Framework (Sources packaged in the framework are not visible to the sub-project)
すべてが正常にコンパイルおよび実行されますが、サブプロジェクトでデバッグセッションを実行するerror: ambiguous use of
場合、lldbコマンドラインから呼び出されると、「フレームワーク」のすべての拡張機能が返されます。これはアイデアを与えるためのコードサンプルです:
macOsコマンドラインプロジェクトを作成し、新しいターゲット 'MagicFramework'をSpells.swiftファイルに追加します(ファイルがMain&MagicFrameworkに表示されることを確認してください)
import Foundation
extension String {
public func castSpell() -> String {
return "✨ " + self
}
}
次に、サブプロジェクト「ウィザード」を作成し、wizard.swiftファイルで(ウィザードのみに表示):
import Foundation
import MagicFramework
public class Tadaa {
public func magic(spell:String) -> String {
return spell.castSpell()
}
}
ウィザードのmain.swiftファイルに、以下を追加します。
import Foundation
let aa = Tadaa().magic(spell: "this is magic")
print(aa)
次の構造が必要です。
-> Main project
----> MagicFramework
----> Wizard subproject
次に、ブレークポイントをオンにspell.castSpell()
して「ウィザード」サブをビルドして実行しTadaa
ます。lldbプロンプトで、次のように入力します。
(lldb)po spell.castSpell()
error: <EXPR>:3:1: error: ambiguous use of 'castSpell()'
spell.castSpell()
なぜ??この問題はXcode 10では発生しませんでした。