今日、Scripting Bridge グルー ファイル (Mail.app 用) を更新していたところ、sdp(1) のマニュアル ページに次のように書かれていることに気付きました。
対応する実装ファイルを作成する必要はありません。Scripting Bridge は実行時にクラスの実装を作成します。
それはクールに聞こえますが、生成されたクラスの実装がなければ(予想どおり):
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_MailApplication", referenced from:
objc-class-ref in DMBugReportWindowController.o
"_OBJC_CLASS_$_MailAttachment", referenced from:
objc-class-ref in DMBugReportWindowController.o
[... more of the same ...]
ld: symbol(s) not found for architecture x86_64`
正当な問題を簡単に覆い隠す可能性があるため、未定義のシンボルをすべて抑制したくないので、以下を使用しました ( ld(1) man ページ-U
に従って):
symbol_name が定義されていなくても問題ないことを指定しました。-two_levelnamespace を使用すると、結果のシンボルは dynamic_lookup とマークされます。これは、dyld がロードされたすべてのイメージを検索することを意味します。
(-Xlinker -U -Xlinker _OBJC_CLASS_$_MailApplication
これらのフラグを使用して ld に到達する必要がありました。それ以外の場合、clang はそれらの引数を保持します。)
起動時にダイナミック リンク エラーが発生するため、これらを作成するのは明らかdynamic_lookup
に間違っています。
dyld: Symbol not found: _OBJC_CLASS_$_MailApplication
Referenced from: /Users/jonathon/Library/Developer/Xcode/...
Expected in: flat namespace
in /Users/jonathon/Library/Developer/Xcode/...
-force_flat_namespace -undefined suppress
これは、(上記のように、使用したくない)を使用した場合にも発生します。Scripting Bridge プログラミング ガイドは、私が正しく作業していることを暗示しているようですが (「コードの準備」セクション)、この問題については触れていません。